11da177e4SLinus Torvalds /* 21da177e4SLinus Torvalds * ds.h -- 16-bit PCMCIA core support 31da177e4SLinus Torvalds * 41da177e4SLinus Torvalds * This program is free software; you can redistribute it and/or modify 51da177e4SLinus Torvalds * it under the terms of the GNU General Public License version 2 as 61da177e4SLinus Torvalds * published by the Free Software Foundation. 71da177e4SLinus Torvalds * 81da177e4SLinus Torvalds * The initial developer of the original code is David A. Hinds 91da177e4SLinus Torvalds * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds 101da177e4SLinus Torvalds * are Copyright (C) 1999 David A. Hinds. All Rights Reserved. 111da177e4SLinus Torvalds * 121da177e4SLinus Torvalds * (C) 1999 David A. Hinds 13a5835786SDominik Brodowski * (C) 2003 - 2008 Dominik Brodowski 141da177e4SLinus Torvalds */ 151da177e4SLinus Torvalds 161da177e4SLinus Torvalds #ifndef _LINUX_DS_H 171da177e4SLinus Torvalds #define _LINUX_DS_H 181da177e4SLinus Torvalds 198e2f3b70SDominik Brodowski #ifdef __KERNEL__ 208e2f3b70SDominik Brodowski #include <linux/mod_devicetable.h> 218e2f3b70SDominik Brodowski #endif 228e2f3b70SDominik Brodowski 231da177e4SLinus Torvalds #include <pcmcia/cs_types.h> 241ad275e3SDominik Brodowski #include <pcmcia/device_id.h> 251da177e4SLinus Torvalds 26a5835786SDominik Brodowski #ifdef __KERNEL__ 27a5835786SDominik Brodowski #include <linux/device.h> 28a5835786SDominik Brodowski #include <pcmcia/ss.h> 29a5835786SDominik Brodowski 30a5835786SDominik Brodowski /* 31a5835786SDominik Brodowski * PCMCIA device drivers (16-bit cards only; 32-bit cards require CardBus 32a5835786SDominik Brodowski * a.k.a. PCI drivers 33a5835786SDominik Brodowski */ 34a5835786SDominik Brodowski struct pcmcia_socket; 35a5835786SDominik Brodowski struct pcmcia_device; 36a5835786SDominik Brodowski struct config_t; 37a5835786SDominik Brodowski 38a5835786SDominik Brodowski /* dynamic device IDs for PCMCIA device drivers. See 39a5835786SDominik Brodowski * Documentation/pcmcia/driver.txt for details. 40a5835786SDominik Brodowski */ 41a5835786SDominik Brodowski struct pcmcia_dynids { 42a5835786SDominik Brodowski spinlock_t lock; 43a5835786SDominik Brodowski struct list_head list; 44a5835786SDominik Brodowski }; 45a5835786SDominik Brodowski 46a5835786SDominik Brodowski struct pcmcia_driver { 47a5835786SDominik Brodowski int (*probe) (struct pcmcia_device *dev); 48a5835786SDominik Brodowski void (*remove) (struct pcmcia_device *dev); 49a5835786SDominik Brodowski 50a5835786SDominik Brodowski int (*suspend) (struct pcmcia_device *dev); 51a5835786SDominik Brodowski int (*resume) (struct pcmcia_device *dev); 52a5835786SDominik Brodowski 53a5835786SDominik Brodowski struct module *owner; 54a5835786SDominik Brodowski struct pcmcia_device_id *id_table; 55a5835786SDominik Brodowski struct device_driver drv; 56a5835786SDominik Brodowski struct pcmcia_dynids dynids; 57a5835786SDominik Brodowski }; 58a5835786SDominik Brodowski 59a5835786SDominik Brodowski /* driver registration */ 60a5835786SDominik Brodowski int pcmcia_register_driver(struct pcmcia_driver *driver); 61a5835786SDominik Brodowski void pcmcia_unregister_driver(struct pcmcia_driver *driver); 62a5835786SDominik Brodowski 63a5835786SDominik Brodowski /* Some drivers use dev_node_t to store char or block device information. 64a5835786SDominik Brodowski * Don't use this in new drivers, though. 65a5835786SDominik Brodowski */ 66a5835786SDominik Brodowski typedef struct dev_node_t { 67a5835786SDominik Brodowski char dev_name[DEV_NAME_LEN]; 68a5835786SDominik Brodowski u_short major, minor; 69a5835786SDominik Brodowski struct dev_node_t *next; 70a5835786SDominik Brodowski } dev_node_t; 71a5835786SDominik Brodowski 72a5835786SDominik Brodowski struct pcmcia_device { 73a5835786SDominik Brodowski /* the socket and the device_no [for multifunction devices] 74a5835786SDominik Brodowski uniquely define a pcmcia_device */ 75a5835786SDominik Brodowski struct pcmcia_socket *socket; 76a5835786SDominik Brodowski 77a5835786SDominik Brodowski char *devname; 78a5835786SDominik Brodowski 79a5835786SDominik Brodowski u8 device_no; 80a5835786SDominik Brodowski 81a5835786SDominik Brodowski /* the hardware "function" device; certain subdevices can 82a5835786SDominik Brodowski * share one hardware "function" device. */ 83a5835786SDominik Brodowski u8 func; 84a5835786SDominik Brodowski struct config_t* function_config; 85a5835786SDominik Brodowski 86a5835786SDominik Brodowski struct list_head socket_device_list; 87a5835786SDominik Brodowski 88a5835786SDominik Brodowski /* deprecated, will be cleaned up soon */ 89a5835786SDominik Brodowski dev_node_t *dev_node; 90a5835786SDominik Brodowski u_int open; 91a5835786SDominik Brodowski io_req_t io; 92a5835786SDominik Brodowski irq_req_t irq; 93a5835786SDominik Brodowski config_req_t conf; 94a5835786SDominik Brodowski window_handle_t win; 95a5835786SDominik Brodowski 96a5835786SDominik Brodowski /* Is the device suspended, or in the process of 97a5835786SDominik Brodowski * being removed? */ 98a5835786SDominik Brodowski u16 suspended:1; 99a5835786SDominik Brodowski u16 _removed:1; 100a5835786SDominik Brodowski 101a5835786SDominik Brodowski /* Flags whether io, irq, win configurations were 102a5835786SDominik Brodowski * requested, and whether the configuration is "locked" */ 103a5835786SDominik Brodowski u16 _irq:1; 104a5835786SDominik Brodowski u16 _io:1; 105a5835786SDominik Brodowski u16 _win:4; 106a5835786SDominik Brodowski u16 _locked:1; 107a5835786SDominik Brodowski 108a5835786SDominik Brodowski /* Flag whether a "fuzzy" func_id based match is 109a5835786SDominik Brodowski * allowed. */ 110a5835786SDominik Brodowski u16 allow_func_id_match:1; 111a5835786SDominik Brodowski 112a5835786SDominik Brodowski /* information about this device */ 113a5835786SDominik Brodowski u16 has_manf_id:1; 114a5835786SDominik Brodowski u16 has_card_id:1; 115a5835786SDominik Brodowski u16 has_func_id:1; 116a5835786SDominik Brodowski 117a5835786SDominik Brodowski u16 reserved:3; 118a5835786SDominik Brodowski 119a5835786SDominik Brodowski u8 func_id; 120a5835786SDominik Brodowski u16 manf_id; 121a5835786SDominik Brodowski u16 card_id; 122a5835786SDominik Brodowski 123a5835786SDominik Brodowski char * prod_id[4]; 124a5835786SDominik Brodowski 125a5835786SDominik Brodowski u64 dma_mask; 126a5835786SDominik Brodowski struct device dev; 127a5835786SDominik Brodowski 128a5835786SDominik Brodowski #ifdef CONFIG_PCMCIA_IOCTL 129a5835786SDominik Brodowski /* device driver wanted by cardmgr */ 130a5835786SDominik Brodowski struct pcmcia_driver * cardmgr; 131a5835786SDominik Brodowski #endif 132a5835786SDominik Brodowski 133a5835786SDominik Brodowski /* data private to drivers */ 134a5835786SDominik Brodowski void *priv; 135a5835786SDominik Brodowski }; 136a5835786SDominik Brodowski 137a5835786SDominik Brodowski #define to_pcmcia_dev(n) container_of(n, struct pcmcia_device, dev) 138a5835786SDominik Brodowski #define to_pcmcia_drv(n) container_of(n, struct pcmcia_driver, drv) 139a5835786SDominik Brodowski 140a5835786SDominik Brodowski /* deprecated -- don't use! */ 141a5835786SDominik Brodowski #define handle_to_dev(handle) (handle->dev) 142a5835786SDominik Brodowski 143a5835786SDominik Brodowski 144a5835786SDominik Brodowski /* (deprecated) error reporting by PCMCIA devices. Use dev_printk() 145a5835786SDominik Brodowski * or dev_dbg() directly in the driver, without referring to pcmcia_error_func() 146a5835786SDominik Brodowski * and/or pcmcia_error_ret() for those functions will go away soon. 147a5835786SDominik Brodowski */ 148994917f8SDominik Brodowski enum service { 149994917f8SDominik Brodowski AccessConfigurationRegister, AddSocketServices, 150994917f8SDominik Brodowski AdjustResourceInfo, CheckEraseQueue, CloseMemory, CopyMemory, 151994917f8SDominik Brodowski DeregisterClient, DeregisterEraseQueue, GetCardServicesInfo, 152994917f8SDominik Brodowski GetClientInfo, GetConfigurationInfo, GetEventMask, 153994917f8SDominik Brodowski GetFirstClient, GetFirstPartion, GetFirstRegion, GetFirstTuple, 154994917f8SDominik Brodowski GetNextClient, GetNextPartition, GetNextRegion, GetNextTuple, 155994917f8SDominik Brodowski GetStatus, GetTupleData, MapLogSocket, MapLogWindow, MapMemPage, 156994917f8SDominik Brodowski MapPhySocket, MapPhyWindow, ModifyConfiguration, ModifyWindow, 157994917f8SDominik Brodowski OpenMemory, ParseTuple, ReadMemory, RegisterClient, 158994917f8SDominik Brodowski RegisterEraseQueue, RegisterMTD, RegisterTimer, 159994917f8SDominik Brodowski ReleaseConfiguration, ReleaseExclusive, ReleaseIO, ReleaseIRQ, 160994917f8SDominik Brodowski ReleaseSocketMask, ReleaseWindow, ReplaceSocketServices, 161994917f8SDominik Brodowski RequestConfiguration, RequestExclusive, RequestIO, RequestIRQ, 162994917f8SDominik Brodowski RequestSocketMask, RequestWindow, ResetCard, ReturnSSEntry, 163994917f8SDominik Brodowski SetEventMask, SetRegion, ValidateCIS, VendorSpecific, 164994917f8SDominik Brodowski WriteMemory, BindDevice, BindMTD, ReportError, 165994917f8SDominik Brodowski SuspendCard, ResumeCard, EjectCard, InsertCard, ReplaceCIS, 166994917f8SDominik Brodowski GetFirstWindow, GetNextWindow, GetMemPage 167994917f8SDominik Brodowski }; 168a5835786SDominik Brodowski const char *pcmcia_error_func(int func); 169a5835786SDominik Brodowski const char *pcmcia_error_ret(int ret); 170a5835786SDominik Brodowski 171a5835786SDominik Brodowski #define cs_error(p_dev, func, ret) \ 172a5835786SDominik Brodowski { \ 173a5835786SDominik Brodowski dev_printk(KERN_NOTICE, &p_dev->dev, \ 174a5835786SDominik Brodowski "%s : %s\n", \ 175a5835786SDominik Brodowski pcmcia_error_func(func), \ 176a5835786SDominik Brodowski pcmcia_error_ret(ret)); \ 177a5835786SDominik Brodowski } 178a5835786SDominik Brodowski 179*272433e0SDominik Brodowski /* CIS access. 180*272433e0SDominik Brodowski * Use the pcmcia_* versions in PCMCIA drivers 181*272433e0SDominik Brodowski */ 182*272433e0SDominik Brodowski int pcmcia_parse_tuple(tuple_t *tuple, cisparse_t *parse); 183*272433e0SDominik Brodowski 184*272433e0SDominik Brodowski int pccard_get_first_tuple(struct pcmcia_socket *s, unsigned int function, 185*272433e0SDominik Brodowski tuple_t *tuple); 186*272433e0SDominik Brodowski #define pcmcia_get_first_tuple(p_dev, tuple) \ 187*272433e0SDominik Brodowski pccard_get_first_tuple(p_dev->socket, p_dev->func, tuple) 188*272433e0SDominik Brodowski 189*272433e0SDominik Brodowski int pccard_get_next_tuple(struct pcmcia_socket *s, unsigned int function, 190*272433e0SDominik Brodowski tuple_t *tuple); 191*272433e0SDominik Brodowski #define pcmcia_get_next_tuple(p_dev, tuple) \ 192*272433e0SDominik Brodowski pccard_get_next_tuple(p_dev->socket, p_dev->func, tuple) 193*272433e0SDominik Brodowski 194*272433e0SDominik Brodowski int pccard_get_tuple_data(struct pcmcia_socket *s, tuple_t *tuple); 195*272433e0SDominik Brodowski #define pcmcia_get_tuple_data(p_dev, tuple) \ 196*272433e0SDominik Brodowski pccard_get_tuple_data(p_dev->socket, tuple) 197*272433e0SDominik Brodowski 198*272433e0SDominik Brodowski 199*272433e0SDominik Brodowski /* loop CIS entries for valid configuration */ 200*272433e0SDominik Brodowski int pcmcia_loop_config(struct pcmcia_device *p_dev, 201*272433e0SDominik Brodowski int (*conf_check) (struct pcmcia_device *p_dev, 202*272433e0SDominik Brodowski cistpl_cftable_entry_t *cf, 203*272433e0SDominik Brodowski cistpl_cftable_entry_t *dflt, 204*272433e0SDominik Brodowski unsigned int vcc, 205*272433e0SDominik Brodowski void *priv_data), 206*272433e0SDominik Brodowski void *priv_data); 207a5835786SDominik Brodowski 208994917f8SDominik Brodowski /* is the device still there? */ 209994917f8SDominik Brodowski struct pcmcia_device *pcmcia_dev_present(struct pcmcia_device *p_dev); 210994917f8SDominik Brodowski 211994917f8SDominik Brodowski /* low-level interface reset */ 212994917f8SDominik Brodowski int pcmcia_reset_card(struct pcmcia_socket *skt); 213994917f8SDominik Brodowski 214994917f8SDominik Brodowski /* CIS config */ 215994917f8SDominik Brodowski int pcmcia_access_configuration_register(struct pcmcia_device *p_dev, 216994917f8SDominik Brodowski conf_reg_t *reg); 217994917f8SDominik Brodowski 218994917f8SDominik Brodowski /* device configuration */ 219994917f8SDominik Brodowski int pcmcia_request_io(struct pcmcia_device *p_dev, io_req_t *req); 220994917f8SDominik Brodowski int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req); 221994917f8SDominik Brodowski int pcmcia_request_configuration(struct pcmcia_device *p_dev, 222994917f8SDominik Brodowski config_req_t *req); 223994917f8SDominik Brodowski 224994917f8SDominik Brodowski int pcmcia_request_window(struct pcmcia_device **p_dev, win_req_t *req, 225994917f8SDominik Brodowski window_handle_t *wh); 226994917f8SDominik Brodowski int pcmcia_release_window(window_handle_t win); 227994917f8SDominik Brodowski 228994917f8SDominik Brodowski int pcmcia_get_mem_page(window_handle_t win, memreq_t *req); 229994917f8SDominik Brodowski int pcmcia_map_mem_page(window_handle_t win, memreq_t *req); 230994917f8SDominik Brodowski 231994917f8SDominik Brodowski int pcmcia_modify_configuration(struct pcmcia_device *p_dev, modconf_t *mod); 232994917f8SDominik Brodowski void pcmcia_disable_device(struct pcmcia_device *p_dev); 233994917f8SDominik Brodowski 234a5835786SDominik Brodowski #endif /* __KERNEL__ */ 235a5835786SDominik Brodowski 236a5835786SDominik Brodowski 237a5835786SDominik Brodowski 238a5835786SDominik Brodowski /* Below, there are only definitions which are used by 239a5835786SDominik Brodowski * - the PCMCIA ioctl 240a5835786SDominik Brodowski * - deprecated PCMCIA userspace tools only 241a5835786SDominik Brodowski * 242a5835786SDominik Brodowski * here be dragons ... here be dragons ... here be dragons ... here be drag 243a5835786SDominik Brodowski */ 244a5835786SDominik Brodowski 245a5835786SDominik Brodowski #if defined(CONFIG_PCMCIA_IOCTL) || !defined(__KERNEL__) 246a5835786SDominik Brodowski 247d39bd564SDominik Brodowski #if defined(__arm__) || defined(__mips__) || defined(__avr32__) || \ 248d39bd564SDominik Brodowski defined(__bfin__) 249d39bd564SDominik Brodowski /* This (ioaddr_t) is exposed to userspace & hence cannot be changed. */ 250d39bd564SDominik Brodowski typedef u_int ioaddr_t; 251d39bd564SDominik Brodowski #else 252d39bd564SDominik Brodowski typedef u_short ioaddr_t; 253d39bd564SDominik Brodowski #endif 254d39bd564SDominik Brodowski 255a5835786SDominik Brodowski /* for AdjustResourceInfo */ 256a5835786SDominik Brodowski typedef struct adjust_t { 257a5835786SDominik Brodowski u_int Action; 258a5835786SDominik Brodowski u_int Resource; 259a5835786SDominik Brodowski u_int Attributes; 260a5835786SDominik Brodowski union { 261a5835786SDominik Brodowski struct memory { 262a5835786SDominik Brodowski u_long Base; 263a5835786SDominik Brodowski u_long Size; 264a5835786SDominik Brodowski } memory; 265a5835786SDominik Brodowski struct io { 266a5835786SDominik Brodowski ioaddr_t BasePort; 267a5835786SDominik Brodowski ioaddr_t NumPorts; 268a5835786SDominik Brodowski u_int IOAddrLines; 269a5835786SDominik Brodowski } io; 270a5835786SDominik Brodowski struct irq { 271a5835786SDominik Brodowski u_int IRQ; 272a5835786SDominik Brodowski } irq; 273a5835786SDominik Brodowski } resource; 274a5835786SDominik Brodowski } adjust_t; 275a5835786SDominik Brodowski 276a5835786SDominik Brodowski /* Action field */ 277a5835786SDominik Brodowski #define REMOVE_MANAGED_RESOURCE 1 278a5835786SDominik Brodowski #define ADD_MANAGED_RESOURCE 2 279a5835786SDominik Brodowski #define GET_FIRST_MANAGED_RESOURCE 3 280a5835786SDominik Brodowski #define GET_NEXT_MANAGED_RESOURCE 4 281a5835786SDominik Brodowski /* Resource field */ 282a5835786SDominik Brodowski #define RES_MEMORY_RANGE 1 283a5835786SDominik Brodowski #define RES_IO_RANGE 2 284a5835786SDominik Brodowski #define RES_IRQ 3 285a5835786SDominik Brodowski /* Attribute field */ 286a5835786SDominik Brodowski #define RES_IRQ_TYPE 0x03 287a5835786SDominik Brodowski #define RES_IRQ_TYPE_EXCLUSIVE 0 288a5835786SDominik Brodowski #define RES_IRQ_TYPE_TIME 1 289a5835786SDominik Brodowski #define RES_IRQ_TYPE_DYNAMIC 2 290a5835786SDominik Brodowski #define RES_IRQ_CSC 0x04 291a5835786SDominik Brodowski #define RES_SHARED 0x08 292a5835786SDominik Brodowski #define RES_RESERVED 0x10 293a5835786SDominik Brodowski #define RES_ALLOCATED 0x20 294a5835786SDominik Brodowski #define RES_REMOVED 0x40 295a5835786SDominik Brodowski 296a5835786SDominik Brodowski 2971da177e4SLinus Torvalds typedef struct tuple_parse_t { 2981da177e4SLinus Torvalds tuple_t tuple; 2991da177e4SLinus Torvalds cisdata_t data[255]; 3001da177e4SLinus Torvalds cisparse_t parse; 3011da177e4SLinus Torvalds } tuple_parse_t; 3021da177e4SLinus Torvalds 3031da177e4SLinus Torvalds typedef struct win_info_t { 3041da177e4SLinus Torvalds window_handle_t handle; 3051da177e4SLinus Torvalds win_req_t window; 3061da177e4SLinus Torvalds memreq_t map; 3071da177e4SLinus Torvalds } win_info_t; 3081da177e4SLinus Torvalds 3091da177e4SLinus Torvalds typedef struct bind_info_t { 3101da177e4SLinus Torvalds dev_info_t dev_info; 3111da177e4SLinus Torvalds u_char function; 312fd238232SDominik Brodowski struct pcmcia_device *instance; 3131da177e4SLinus Torvalds char name[DEV_NAME_LEN]; 3141da177e4SLinus Torvalds u_short major, minor; 3151da177e4SLinus Torvalds void *next; 3161da177e4SLinus Torvalds } bind_info_t; 3171da177e4SLinus Torvalds 3181da177e4SLinus Torvalds typedef struct mtd_info_t { 3191da177e4SLinus Torvalds dev_info_t dev_info; 3201da177e4SLinus Torvalds u_int Attributes; 3211da177e4SLinus Torvalds u_int CardOffset; 3221da177e4SLinus Torvalds } mtd_info_t; 3231da177e4SLinus Torvalds 324ae49ec92SMagnus Damm typedef struct region_info_t { 325ae49ec92SMagnus Damm u_int Attributes; 326ae49ec92SMagnus Damm u_int CardOffset; 327ae49ec92SMagnus Damm u_int RegionSize; 328ae49ec92SMagnus Damm u_int AccessSpeed; 329ae49ec92SMagnus Damm u_int BlockSize; 330ae49ec92SMagnus Damm u_int PartMultiple; 331ae49ec92SMagnus Damm u_char JedecMfr, JedecInfo; 332ae49ec92SMagnus Damm memory_handle_t next; 333ae49ec92SMagnus Damm } region_info_t; 334a5835786SDominik Brodowski 335ae49ec92SMagnus Damm #define REGION_TYPE 0x0001 336ae49ec92SMagnus Damm #define REGION_TYPE_CM 0x0000 337ae49ec92SMagnus Damm #define REGION_TYPE_AM 0x0001 338ae49ec92SMagnus Damm #define REGION_PREFETCH 0x0008 339ae49ec92SMagnus Damm #define REGION_CACHEABLE 0x0010 340ae49ec92SMagnus Damm #define REGION_BAR_MASK 0xe000 341ae49ec92SMagnus Damm #define REGION_BAR_SHIFT 13 342ae49ec92SMagnus Damm 34353efec95SDominik Brodowski /* For ReplaceCIS */ 34453efec95SDominik Brodowski typedef struct cisdump_t { 34553efec95SDominik Brodowski u_int Length; 34653efec95SDominik Brodowski cisdata_t Data[CISTPL_MAX_CIS_SIZE]; 34753efec95SDominik Brodowski } cisdump_t; 34853efec95SDominik Brodowski 3491a53088cSDominik Brodowski /* for GetConfigurationInfo */ 3501a53088cSDominik Brodowski typedef struct config_info_t { 3511a53088cSDominik Brodowski u_char Function; 3521a53088cSDominik Brodowski u_int Attributes; 3531a53088cSDominik Brodowski u_int Vcc, Vpp1, Vpp2; 3541a53088cSDominik Brodowski u_int IntType; 3551a53088cSDominik Brodowski u_int ConfigBase; 3561a53088cSDominik Brodowski u_char Status, Pin, Copy, Option, ExtStatus; 3571a53088cSDominik Brodowski u_int Present; 3581a53088cSDominik Brodowski u_int CardValues; 3591a53088cSDominik Brodowski u_int AssignedIRQ; 3601a53088cSDominik Brodowski u_int IRQAttributes; 3611a53088cSDominik Brodowski ioaddr_t BasePort1; 3621a53088cSDominik Brodowski ioaddr_t NumPorts1; 3631a53088cSDominik Brodowski u_int Attributes1; 3641a53088cSDominik Brodowski ioaddr_t BasePort2; 3651a53088cSDominik Brodowski ioaddr_t NumPorts2; 3661a53088cSDominik Brodowski u_int Attributes2; 3671a53088cSDominik Brodowski u_int IOAddrLines; 3681a53088cSDominik Brodowski } config_info_t; 3691a53088cSDominik Brodowski 3701da177e4SLinus Torvalds typedef union ds_ioctl_arg_t { 3711da177e4SLinus Torvalds adjust_t adjust; 3721da177e4SLinus Torvalds config_info_t config; 3731da177e4SLinus Torvalds tuple_t tuple; 3741da177e4SLinus Torvalds tuple_parse_t tuple_parse; 3751da177e4SLinus Torvalds client_req_t client_req; 3761da177e4SLinus Torvalds cs_status_t status; 3771da177e4SLinus Torvalds conf_reg_t conf_reg; 3781da177e4SLinus Torvalds cisinfo_t cisinfo; 3791da177e4SLinus Torvalds region_info_t region; 3801da177e4SLinus Torvalds bind_info_t bind_info; 3811da177e4SLinus Torvalds mtd_info_t mtd_info; 3821da177e4SLinus Torvalds win_info_t win_info; 3831da177e4SLinus Torvalds cisdump_t cisdump; 3841da177e4SLinus Torvalds } ds_ioctl_arg_t; 3851da177e4SLinus Torvalds 3861da177e4SLinus Torvalds #define DS_ADJUST_RESOURCE_INFO _IOWR('d', 2, adjust_t) 3871da177e4SLinus Torvalds #define DS_GET_CONFIGURATION_INFO _IOWR('d', 3, config_info_t) 3881da177e4SLinus Torvalds #define DS_GET_FIRST_TUPLE _IOWR('d', 4, tuple_t) 3891da177e4SLinus Torvalds #define DS_GET_NEXT_TUPLE _IOWR('d', 5, tuple_t) 3901da177e4SLinus Torvalds #define DS_GET_TUPLE_DATA _IOWR('d', 6, tuple_parse_t) 3911da177e4SLinus Torvalds #define DS_PARSE_TUPLE _IOWR('d', 7, tuple_parse_t) 3921da177e4SLinus Torvalds #define DS_RESET_CARD _IO ('d', 8) 3931da177e4SLinus Torvalds #define DS_GET_STATUS _IOWR('d', 9, cs_status_t) 3941da177e4SLinus Torvalds #define DS_ACCESS_CONFIGURATION_REGISTER _IOWR('d', 10, conf_reg_t) 3951da177e4SLinus Torvalds #define DS_VALIDATE_CIS _IOR ('d', 11, cisinfo_t) 3961da177e4SLinus Torvalds #define DS_SUSPEND_CARD _IO ('d', 12) 3971da177e4SLinus Torvalds #define DS_RESUME_CARD _IO ('d', 13) 3981da177e4SLinus Torvalds #define DS_EJECT_CARD _IO ('d', 14) 3991da177e4SLinus Torvalds #define DS_INSERT_CARD _IO ('d', 15) 4001da177e4SLinus Torvalds #define DS_GET_FIRST_REGION _IOWR('d', 16, region_info_t) 4011da177e4SLinus Torvalds #define DS_GET_NEXT_REGION _IOWR('d', 17, region_info_t) 4021da177e4SLinus Torvalds #define DS_REPLACE_CIS _IOWR('d', 18, cisdump_t) 4031da177e4SLinus Torvalds #define DS_GET_FIRST_WINDOW _IOR ('d', 19, win_info_t) 4041da177e4SLinus Torvalds #define DS_GET_NEXT_WINDOW _IOWR('d', 20, win_info_t) 4051da177e4SLinus Torvalds #define DS_GET_MEM_PAGE _IOWR('d', 21, win_info_t) 4061da177e4SLinus Torvalds 4071da177e4SLinus Torvalds #define DS_BIND_REQUEST _IOWR('d', 60, bind_info_t) 4081da177e4SLinus Torvalds #define DS_GET_DEVICE_INFO _IOWR('d', 61, bind_info_t) 4091da177e4SLinus Torvalds #define DS_GET_NEXT_DEVICE _IOWR('d', 62, bind_info_t) 4101da177e4SLinus Torvalds #define DS_UNBIND_REQUEST _IOW ('d', 63, bind_info_t) 4111da177e4SLinus Torvalds #define DS_BIND_MTD _IOWR('d', 64, mtd_info_t) 4121da177e4SLinus Torvalds 413a5835786SDominik Brodowski 4149c8b7965SDominik Brodowski /* used in userspace only */ 4159c8b7965SDominik Brodowski #define CS_IN_USE 0x1e 4169c8b7965SDominik Brodowski 417994917f8SDominik Brodowski #define INFO_MASTER_CLIENT 0x01 418994917f8SDominik Brodowski #define INFO_IO_CLIENT 0x02 419994917f8SDominik Brodowski #define INFO_MTD_CLIENT 0x04 420994917f8SDominik Brodowski #define INFO_MEM_CLIENT 0x08 421994917f8SDominik Brodowski #define MAX_NUM_CLIENTS 3 422994917f8SDominik Brodowski 423994917f8SDominik Brodowski #define INFO_CARD_SHARE 0x10 424994917f8SDominik Brodowski #define INFO_CARD_EXCL 0x20 425994917f8SDominik Brodowski 4261da177e4SLinus Torvalds 427a5835786SDominik Brodowski #endif /* !defined(__KERNEL__) || defined(CONFIG_PCMCIA_IOCTL) */ 4281da177e4SLinus Torvalds 4291da177e4SLinus Torvalds #endif /* _LINUX_DS_H */ 430