ds.h (79ba6757277ea7228480bee4c56c0f028f806b91) | ds.h (a58357862e71919555ea96cd272e535593a8b3da) |
---|---|
1/* 2 * ds.h -- 16-bit PCMCIA core support 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License version 2 as 6 * published by the Free Software Foundation. 7 * 8 * The initial developer of the original code is David A. Hinds 9 * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds 10 * are Copyright (C) 1999 David A. Hinds. All Rights Reserved. 11 * 12 * (C) 1999 David A. Hinds | 1/* 2 * ds.h -- 16-bit PCMCIA core support 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License version 2 as 6 * published by the Free Software Foundation. 7 * 8 * The initial developer of the original code is David A. Hinds 9 * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds 10 * are Copyright (C) 1999 David A. Hinds. All Rights Reserved. 11 * 12 * (C) 1999 David A. Hinds |
13 * (C) 2003 - 2004 Dominik Brodowski | 13 * (C) 2003 - 2008 Dominik Brodowski |
14 */ 15 16#ifndef _LINUX_DS_H 17#define _LINUX_DS_H 18 19#ifdef __KERNEL__ 20#include <linux/mod_devicetable.h> 21#endif 22 23#include <pcmcia/cs_types.h> 24#include <pcmcia/device_id.h> 25 | 14 */ 15 16#ifndef _LINUX_DS_H 17#define _LINUX_DS_H 18 19#ifdef __KERNEL__ 20#include <linux/mod_devicetable.h> 21#endif 22 23#include <pcmcia/cs_types.h> 24#include <pcmcia/device_id.h> 25 |
26typedef struct tuple_parse_t { 27 tuple_t tuple; 28 cisdata_t data[255]; 29 cisparse_t parse; 30} tuple_parse_t; 31 32typedef struct win_info_t { 33 window_handle_t handle; 34 win_req_t window; 35 memreq_t map; 36} win_info_t; 37 38typedef struct bind_info_t { 39 dev_info_t dev_info; 40 u_char function; 41 struct pcmcia_device *instance; 42 char name[DEV_NAME_LEN]; 43 u_short major, minor; 44 void *next; 45} bind_info_t; 46 47typedef struct mtd_info_t { 48 dev_info_t dev_info; 49 u_int Attributes; 50 u_int CardOffset; 51} mtd_info_t; 52 53typedef struct region_info_t { 54 u_int Attributes; 55 u_int CardOffset; 56 u_int RegionSize; 57 u_int AccessSpeed; 58 u_int BlockSize; 59 u_int PartMultiple; 60 u_char JedecMfr, JedecInfo; 61 memory_handle_t next; 62} region_info_t; 63#define REGION_TYPE 0x0001 64#define REGION_TYPE_CM 0x0000 65#define REGION_TYPE_AM 0x0001 66#define REGION_PREFETCH 0x0008 67#define REGION_CACHEABLE 0x0010 68#define REGION_BAR_MASK 0xe000 69#define REGION_BAR_SHIFT 13 70 71/* For ReplaceCIS */ 72typedef struct cisdump_t { 73 u_int Length; 74 cisdata_t Data[CISTPL_MAX_CIS_SIZE]; 75} cisdump_t; 76 77/* for GetConfigurationInfo */ 78typedef struct config_info_t { 79 u_char Function; 80 u_int Attributes; 81 u_int Vcc, Vpp1, Vpp2; 82 u_int IntType; 83 u_int ConfigBase; 84 u_char Status, Pin, Copy, Option, ExtStatus; 85 u_int Present; 86 u_int CardValues; 87 u_int AssignedIRQ; 88 u_int IRQAttributes; 89 ioaddr_t BasePort1; 90 ioaddr_t NumPorts1; 91 u_int Attributes1; 92 ioaddr_t BasePort2; 93 ioaddr_t NumPorts2; 94 u_int Attributes2; 95 u_int IOAddrLines; 96} config_info_t; 97 98typedef union ds_ioctl_arg_t { 99 adjust_t adjust; 100 config_info_t config; 101 tuple_t tuple; 102 tuple_parse_t tuple_parse; 103 client_req_t client_req; 104 cs_status_t status; 105 conf_reg_t conf_reg; 106 cisinfo_t cisinfo; 107 region_info_t region; 108 bind_info_t bind_info; 109 mtd_info_t mtd_info; 110 win_info_t win_info; 111 cisdump_t cisdump; 112} ds_ioctl_arg_t; 113 114#define DS_ADJUST_RESOURCE_INFO _IOWR('d', 2, adjust_t) 115#define DS_GET_CONFIGURATION_INFO _IOWR('d', 3, config_info_t) 116#define DS_GET_FIRST_TUPLE _IOWR('d', 4, tuple_t) 117#define DS_GET_NEXT_TUPLE _IOWR('d', 5, tuple_t) 118#define DS_GET_TUPLE_DATA _IOWR('d', 6, tuple_parse_t) 119#define DS_PARSE_TUPLE _IOWR('d', 7, tuple_parse_t) 120#define DS_RESET_CARD _IO ('d', 8) 121#define DS_GET_STATUS _IOWR('d', 9, cs_status_t) 122#define DS_ACCESS_CONFIGURATION_REGISTER _IOWR('d', 10, conf_reg_t) 123#define DS_VALIDATE_CIS _IOR ('d', 11, cisinfo_t) 124#define DS_SUSPEND_CARD _IO ('d', 12) 125#define DS_RESUME_CARD _IO ('d', 13) 126#define DS_EJECT_CARD _IO ('d', 14) 127#define DS_INSERT_CARD _IO ('d', 15) 128#define DS_GET_FIRST_REGION _IOWR('d', 16, region_info_t) 129#define DS_GET_NEXT_REGION _IOWR('d', 17, region_info_t) 130#define DS_REPLACE_CIS _IOWR('d', 18, cisdump_t) 131#define DS_GET_FIRST_WINDOW _IOR ('d', 19, win_info_t) 132#define DS_GET_NEXT_WINDOW _IOWR('d', 20, win_info_t) 133#define DS_GET_MEM_PAGE _IOWR('d', 21, win_info_t) 134 135#define DS_BIND_REQUEST _IOWR('d', 60, bind_info_t) 136#define DS_GET_DEVICE_INFO _IOWR('d', 61, bind_info_t) 137#define DS_GET_NEXT_DEVICE _IOWR('d', 62, bind_info_t) 138#define DS_UNBIND_REQUEST _IOW ('d', 63, bind_info_t) 139#define DS_BIND_MTD _IOWR('d', 64, mtd_info_t) 140 141/* used in userspace only */ 142#define CS_IN_USE 0x1e 143 | |
144#ifdef __KERNEL__ 145#include <linux/device.h> 146#include <pcmcia/ss.h> 147 | 26#ifdef __KERNEL__ 27#include <linux/device.h> 28#include <pcmcia/ss.h> 29 |
148typedef struct dev_node_t { 149 char dev_name[DEV_NAME_LEN]; 150 u_short major, minor; 151 struct dev_node_t *next; 152} dev_node_t; 153 154 | 30/* 31 * PCMCIA device drivers (16-bit cards only; 32-bit cards require CardBus 32 * a.k.a. PCI drivers 33 */ |
155struct pcmcia_socket; | 34struct pcmcia_socket; |
35struct pcmcia_device; |
|
156struct config_t; 157 | 36struct config_t; 37 |
38/* dynamic device IDs for PCMCIA device drivers. See 39 * Documentation/pcmcia/driver.txt for details. 40*/ |
|
158struct pcmcia_dynids { 159 spinlock_t lock; 160 struct list_head list; 161}; 162 163struct pcmcia_driver { 164 int (*probe) (struct pcmcia_device *dev); 165 void (*remove) (struct pcmcia_device *dev); --- 6 unchanged lines hidden (view full) --- 172 struct device_driver drv; 173 struct pcmcia_dynids dynids; 174}; 175 176/* driver registration */ 177int pcmcia_register_driver(struct pcmcia_driver *driver); 178void pcmcia_unregister_driver(struct pcmcia_driver *driver); 179 | 41struct pcmcia_dynids { 42 spinlock_t lock; 43 struct list_head list; 44}; 45 46struct pcmcia_driver { 47 int (*probe) (struct pcmcia_device *dev); 48 void (*remove) (struct pcmcia_device *dev); --- 6 unchanged lines hidden (view full) --- 55 struct device_driver drv; 56 struct pcmcia_dynids dynids; 57}; 58 59/* driver registration */ 60int pcmcia_register_driver(struct pcmcia_driver *driver); 61void pcmcia_unregister_driver(struct pcmcia_driver *driver); 62 |
63/* Some drivers use dev_node_t to store char or block device information. 64 * Don't use this in new drivers, though. 65 */ 66typedef struct dev_node_t { 67 char dev_name[DEV_NAME_LEN]; 68 u_short major, minor; 69 struct dev_node_t *next; 70} dev_node_t; |
|
180 181struct pcmcia_device { 182 /* the socket and the device_no [for multifunction devices] 183 uniquely define a pcmcia_device */ 184 struct pcmcia_socket *socket; 185 186 char *devname; 187 --- 53 unchanged lines hidden (view full) --- 241 242 /* data private to drivers */ 243 void *priv; 244}; 245 246#define to_pcmcia_dev(n) container_of(n, struct pcmcia_device, dev) 247#define to_pcmcia_drv(n) container_of(n, struct pcmcia_driver, drv) 248 | 71 72struct pcmcia_device { 73 /* the socket and the device_no [for multifunction devices] 74 uniquely define a pcmcia_device */ 75 struct pcmcia_socket *socket; 76 77 char *devname; 78 --- 53 unchanged lines hidden (view full) --- 132 133 /* data private to drivers */ 134 void *priv; 135}; 136 137#define to_pcmcia_dev(n) container_of(n, struct pcmcia_device, dev) 138#define to_pcmcia_drv(n) container_of(n, struct pcmcia_driver, drv) 139 |
140/* deprecated -- don't use! */ |
|
249#define handle_to_dev(handle) (handle->dev) 250 | 141#define handle_to_dev(handle) (handle->dev) 142 |
251/* error reporting */ | |
252 | 143 |
144/* (deprecated) error reporting by PCMCIA devices. Use dev_printk() 145 * or dev_dbg() directly in the driver, without referring to pcmcia_error_func() 146 * and/or pcmcia_error_ret() for those functions will go away soon. 147 */ 148 |
|
253const char *pcmcia_error_func(int func); 254const char *pcmcia_error_ret(int ret); 255 256#define cs_error(p_dev, func, ret) \ 257 { \ 258 dev_printk(KERN_NOTICE, &p_dev->dev, \ 259 "%s : %s\n", \ 260 pcmcia_error_func(func), \ 261 pcmcia_error_ret(ret)); \ 262 } 263 264 265#endif /* __KERNEL__ */ | 149const char *pcmcia_error_func(int func); 150const char *pcmcia_error_ret(int ret); 151 152#define cs_error(p_dev, func, ret) \ 153 { \ 154 dev_printk(KERN_NOTICE, &p_dev->dev, \ 155 "%s : %s\n", \ 156 pcmcia_error_func(func), \ 157 pcmcia_error_ret(ret)); \ 158 } 159 160 161#endif /* __KERNEL__ */ |
162 163 164 165/* Below, there are only definitions which are used by 166 * - the PCMCIA ioctl 167 * - deprecated PCMCIA userspace tools only 168 * 169 * here be dragons ... here be dragons ... here be dragons ... here be drag 170 */ 171 172#if defined(CONFIG_PCMCIA_IOCTL) || !defined(__KERNEL__) 173 174/* for AdjustResourceInfo */ 175typedef struct adjust_t { 176 u_int Action; 177 u_int Resource; 178 u_int Attributes; 179 union { 180 struct memory { 181 u_long Base; 182 u_long Size; 183 } memory; 184 struct io { 185 ioaddr_t BasePort; 186 ioaddr_t NumPorts; 187 u_int IOAddrLines; 188 } io; 189 struct irq { 190 u_int IRQ; 191 } irq; 192 } resource; 193} adjust_t; 194 195/* Action field */ 196#define REMOVE_MANAGED_RESOURCE 1 197#define ADD_MANAGED_RESOURCE 2 198#define GET_FIRST_MANAGED_RESOURCE 3 199#define GET_NEXT_MANAGED_RESOURCE 4 200/* Resource field */ 201#define RES_MEMORY_RANGE 1 202#define RES_IO_RANGE 2 203#define RES_IRQ 3 204/* Attribute field */ 205#define RES_IRQ_TYPE 0x03 206#define RES_IRQ_TYPE_EXCLUSIVE 0 207#define RES_IRQ_TYPE_TIME 1 208#define RES_IRQ_TYPE_DYNAMIC 2 209#define RES_IRQ_CSC 0x04 210#define RES_SHARED 0x08 211#define RES_RESERVED 0x10 212#define RES_ALLOCATED 0x20 213#define RES_REMOVED 0x40 214 215 216typedef struct tuple_parse_t { 217 tuple_t tuple; 218 cisdata_t data[255]; 219 cisparse_t parse; 220} tuple_parse_t; 221 222typedef struct win_info_t { 223 window_handle_t handle; 224 win_req_t window; 225 memreq_t map; 226} win_info_t; 227 228typedef struct bind_info_t { 229 dev_info_t dev_info; 230 u_char function; 231 struct pcmcia_device *instance; 232 char name[DEV_NAME_LEN]; 233 u_short major, minor; 234 void *next; 235} bind_info_t; 236 237typedef struct mtd_info_t { 238 dev_info_t dev_info; 239 u_int Attributes; 240 u_int CardOffset; 241} mtd_info_t; 242 243typedef struct region_info_t { 244 u_int Attributes; 245 u_int CardOffset; 246 u_int RegionSize; 247 u_int AccessSpeed; 248 u_int BlockSize; 249 u_int PartMultiple; 250 u_char JedecMfr, JedecInfo; 251 memory_handle_t next; 252} region_info_t; 253 254#define REGION_TYPE 0x0001 255#define REGION_TYPE_CM 0x0000 256#define REGION_TYPE_AM 0x0001 257#define REGION_PREFETCH 0x0008 258#define REGION_CACHEABLE 0x0010 259#define REGION_BAR_MASK 0xe000 260#define REGION_BAR_SHIFT 13 261 262/* For ReplaceCIS */ 263typedef struct cisdump_t { 264 u_int Length; 265 cisdata_t Data[CISTPL_MAX_CIS_SIZE]; 266} cisdump_t; 267 268/* for GetConfigurationInfo */ 269typedef struct config_info_t { 270 u_char Function; 271 u_int Attributes; 272 u_int Vcc, Vpp1, Vpp2; 273 u_int IntType; 274 u_int ConfigBase; 275 u_char Status, Pin, Copy, Option, ExtStatus; 276 u_int Present; 277 u_int CardValues; 278 u_int AssignedIRQ; 279 u_int IRQAttributes; 280 ioaddr_t BasePort1; 281 ioaddr_t NumPorts1; 282 u_int Attributes1; 283 ioaddr_t BasePort2; 284 ioaddr_t NumPorts2; 285 u_int Attributes2; 286 u_int IOAddrLines; 287} config_info_t; 288 289typedef union ds_ioctl_arg_t { 290 adjust_t adjust; 291 config_info_t config; 292 tuple_t tuple; 293 tuple_parse_t tuple_parse; 294 client_req_t client_req; 295 cs_status_t status; 296 conf_reg_t conf_reg; 297 cisinfo_t cisinfo; 298 region_info_t region; 299 bind_info_t bind_info; 300 mtd_info_t mtd_info; 301 win_info_t win_info; 302 cisdump_t cisdump; 303} ds_ioctl_arg_t; 304 305#define DS_ADJUST_RESOURCE_INFO _IOWR('d', 2, adjust_t) 306#define DS_GET_CONFIGURATION_INFO _IOWR('d', 3, config_info_t) 307#define DS_GET_FIRST_TUPLE _IOWR('d', 4, tuple_t) 308#define DS_GET_NEXT_TUPLE _IOWR('d', 5, tuple_t) 309#define DS_GET_TUPLE_DATA _IOWR('d', 6, tuple_parse_t) 310#define DS_PARSE_TUPLE _IOWR('d', 7, tuple_parse_t) 311#define DS_RESET_CARD _IO ('d', 8) 312#define DS_GET_STATUS _IOWR('d', 9, cs_status_t) 313#define DS_ACCESS_CONFIGURATION_REGISTER _IOWR('d', 10, conf_reg_t) 314#define DS_VALIDATE_CIS _IOR ('d', 11, cisinfo_t) 315#define DS_SUSPEND_CARD _IO ('d', 12) 316#define DS_RESUME_CARD _IO ('d', 13) 317#define DS_EJECT_CARD _IO ('d', 14) 318#define DS_INSERT_CARD _IO ('d', 15) 319#define DS_GET_FIRST_REGION _IOWR('d', 16, region_info_t) 320#define DS_GET_NEXT_REGION _IOWR('d', 17, region_info_t) 321#define DS_REPLACE_CIS _IOWR('d', 18, cisdump_t) 322#define DS_GET_FIRST_WINDOW _IOR ('d', 19, win_info_t) 323#define DS_GET_NEXT_WINDOW _IOWR('d', 20, win_info_t) 324#define DS_GET_MEM_PAGE _IOWR('d', 21, win_info_t) 325 326#define DS_BIND_REQUEST _IOWR('d', 60, bind_info_t) 327#define DS_GET_DEVICE_INFO _IOWR('d', 61, bind_info_t) 328#define DS_GET_NEXT_DEVICE _IOWR('d', 62, bind_info_t) 329#define DS_UNBIND_REQUEST _IOW ('d', 63, bind_info_t) 330#define DS_BIND_MTD _IOWR('d', 64, mtd_info_t) 331 332 333/* used in userspace only */ 334#define CS_IN_USE 0x1e 335 336 337#endif /* !defined(__KERNEL__) || defined(CONFIG_PCMCIA_IOCTL) */ 338 |
|
266#endif /* _LINUX_DS_H */ | 339#endif /* _LINUX_DS_H */ |