Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v2.6.14-rc2 413 lines 12 kB view raw
1/* 2 * cs.h 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 */ 14 15#ifndef _LINUX_CS_H 16#define _LINUX_CS_H 17 18/* For AccessConfigurationRegister */ 19typedef struct conf_reg_t { 20 u_char Function; 21 u_int Action; 22 off_t Offset; 23 u_int Value; 24} conf_reg_t; 25 26/* Actions */ 27#define CS_READ 1 28#define CS_WRITE 2 29 30/* for AdjustResourceInfo */ 31typedef struct adjust_t { 32 u_int Action; 33 u_int Resource; 34 u_int Attributes; 35 union { 36 struct memory { 37 u_long Base; 38 u_long Size; 39 } memory; 40 struct io { 41 ioaddr_t BasePort; 42 ioaddr_t NumPorts; 43 u_int IOAddrLines; 44 } io; 45 struct irq { 46 u_int IRQ; 47 } irq; 48 } resource; 49} adjust_t; 50 51/* Action field */ 52#define REMOVE_MANAGED_RESOURCE 1 53#define ADD_MANAGED_RESOURCE 2 54#define GET_FIRST_MANAGED_RESOURCE 3 55#define GET_NEXT_MANAGED_RESOURCE 4 56/* Resource field */ 57#define RES_MEMORY_RANGE 1 58#define RES_IO_RANGE 2 59#define RES_IRQ 3 60/* Attribute field */ 61#define RES_IRQ_TYPE 0x03 62#define RES_IRQ_TYPE_EXCLUSIVE 0 63#define RES_IRQ_TYPE_TIME 1 64#define RES_IRQ_TYPE_DYNAMIC 2 65#define RES_IRQ_CSC 0x04 66#define RES_SHARED 0x08 67#define RES_RESERVED 0x10 68#define RES_ALLOCATED 0x20 69#define RES_REMOVED 0x40 70 71typedef struct event_callback_args_t { 72 struct pcmcia_device *client_handle; 73 void *client_data; 74} event_callback_args_t; 75 76/* for GetConfigurationInfo */ 77typedef struct config_info_t { 78 u_char Function; 79 u_int Attributes; 80 u_int Vcc, Vpp1, Vpp2; 81 u_int IntType; 82 u_int ConfigBase; 83 u_char Status, Pin, Copy, Option, ExtStatus; 84 u_int Present; 85 u_int CardValues; 86 u_int AssignedIRQ; 87 u_int IRQAttributes; 88 ioaddr_t BasePort1; 89 ioaddr_t NumPorts1; 90 u_int Attributes1; 91 ioaddr_t BasePort2; 92 ioaddr_t NumPorts2; 93 u_int Attributes2; 94 u_int IOAddrLines; 95} config_info_t; 96 97/* For CardValues field */ 98#define CV_OPTION_VALUE 0x01 99#define CV_STATUS_VALUE 0x02 100#define CV_PIN_REPLACEMENT 0x04 101#define CV_COPY_VALUE 0x08 102#define CV_EXT_STATUS 0x10 103 104/* For GetFirst/NextClient */ 105typedef struct client_req_t { 106 socket_t Socket; 107 u_int Attributes; 108} client_req_t; 109 110#define CLIENT_THIS_SOCKET 0x01 111 112/* For RegisterClient */ 113typedef struct client_reg_t { 114 dev_info_t *dev_info; 115 u_int Attributes; /* UNUSED */ 116 u_int EventMask; 117 int (*event_handler)(event_t event, int priority, 118 event_callback_args_t *); 119 event_callback_args_t event_callback_args; 120 u_int Version; 121} client_reg_t; 122 123/* ModifyConfiguration */ 124typedef struct modconf_t { 125 u_int Attributes; 126 u_int Vcc, Vpp1, Vpp2; 127} modconf_t; 128 129/* Attributes for ModifyConfiguration */ 130#define CONF_IRQ_CHANGE_VALID 0x100 131#define CONF_VCC_CHANGE_VALID 0x200 132#define CONF_VPP1_CHANGE_VALID 0x400 133#define CONF_VPP2_CHANGE_VALID 0x800 134 135/* For RequestConfiguration */ 136typedef struct config_req_t { 137 u_int Attributes; 138 u_int Vcc, Vpp1, Vpp2; 139 u_int IntType; 140 u_int ConfigBase; 141 u_char Status, Pin, Copy, ExtStatus; 142 u_char ConfigIndex; 143 u_int Present; 144} config_req_t; 145 146/* Attributes for RequestConfiguration */ 147#define CONF_ENABLE_IRQ 0x01 148#define CONF_ENABLE_DMA 0x02 149#define CONF_ENABLE_SPKR 0x04 150#define CONF_VALID_CLIENT 0x100 151 152/* IntType field */ 153#define INT_MEMORY 0x01 154#define INT_MEMORY_AND_IO 0x02 155#define INT_CARDBUS 0x04 156#define INT_ZOOMED_VIDEO 0x08 157 158/* For RequestIO and ReleaseIO */ 159typedef struct io_req_t { 160 ioaddr_t BasePort1; 161 ioaddr_t NumPorts1; 162 u_int Attributes1; 163 ioaddr_t BasePort2; 164 ioaddr_t NumPorts2; 165 u_int Attributes2; 166 u_int IOAddrLines; 167} io_req_t; 168 169/* Attributes for RequestIO and ReleaseIO */ 170#define IO_SHARED 0x01 171#define IO_FIRST_SHARED 0x02 172#define IO_FORCE_ALIAS_ACCESS 0x04 173#define IO_DATA_PATH_WIDTH 0x18 174#define IO_DATA_PATH_WIDTH_8 0x00 175#define IO_DATA_PATH_WIDTH_16 0x08 176#define IO_DATA_PATH_WIDTH_AUTO 0x10 177 178/* For RequestIRQ and ReleaseIRQ */ 179typedef struct irq_req_t { 180 u_int Attributes; 181 u_int AssignedIRQ; 182 u_int IRQInfo1, IRQInfo2; /* IRQInfo2 is ignored */ 183 void *Handler; 184 void *Instance; 185} irq_req_t; 186 187/* Attributes for RequestIRQ and ReleaseIRQ */ 188#define IRQ_TYPE 0x03 189#define IRQ_TYPE_EXCLUSIVE 0x00 190#define IRQ_TYPE_TIME 0x01 191#define IRQ_TYPE_DYNAMIC_SHARING 0x02 192#define IRQ_FORCED_PULSE 0x04 193#define IRQ_FIRST_SHARED 0x08 194#define IRQ_HANDLE_PRESENT 0x10 195#define IRQ_PULSE_ALLOCATED 0x100 196 197/* Bits in IRQInfo1 field */ 198#define IRQ_MASK 0x0f 199#define IRQ_NMI_ID 0x01 200#define IRQ_IOCK_ID 0x02 201#define IRQ_BERR_ID 0x04 202#define IRQ_VEND_ID 0x08 203#define IRQ_INFO2_VALID 0x10 204#define IRQ_LEVEL_ID 0x20 205#define IRQ_PULSE_ID 0x40 206#define IRQ_SHARE_ID 0x80 207 208typedef struct eventmask_t { 209 u_int Attributes; 210 u_int EventMask; 211} eventmask_t; 212 213#define CONF_EVENT_MASK_VALID 0x01 214 215/* Configuration registers present */ 216#define PRESENT_OPTION 0x001 217#define PRESENT_STATUS 0x002 218#define PRESENT_PIN_REPLACE 0x004 219#define PRESENT_COPY 0x008 220#define PRESENT_EXT_STATUS 0x010 221#define PRESENT_IOBASE_0 0x020 222#define PRESENT_IOBASE_1 0x040 223#define PRESENT_IOBASE_2 0x080 224#define PRESENT_IOBASE_3 0x100 225#define PRESENT_IOSIZE 0x200 226 227/* For GetMemPage, MapMemPage */ 228typedef struct memreq_t { 229 u_int CardOffset; 230 page_t Page; 231} memreq_t; 232 233/* For ModifyWindow */ 234typedef struct modwin_t { 235 u_int Attributes; 236 u_int AccessSpeed; 237} modwin_t; 238 239/* For RequestWindow */ 240typedef struct win_req_t { 241 u_int Attributes; 242 u_long Base; 243 u_int Size; 244 u_int AccessSpeed; 245} win_req_t; 246 247/* Attributes for RequestWindow */ 248#define WIN_ADDR_SPACE 0x0001 249#define WIN_ADDR_SPACE_MEM 0x0000 250#define WIN_ADDR_SPACE_IO 0x0001 251#define WIN_MEMORY_TYPE 0x0002 252#define WIN_MEMORY_TYPE_CM 0x0000 253#define WIN_MEMORY_TYPE_AM 0x0002 254#define WIN_ENABLE 0x0004 255#define WIN_DATA_WIDTH 0x0018 256#define WIN_DATA_WIDTH_8 0x0000 257#define WIN_DATA_WIDTH_16 0x0008 258#define WIN_DATA_WIDTH_32 0x0010 259#define WIN_PAGED 0x0020 260#define WIN_SHARED 0x0040 261#define WIN_FIRST_SHARED 0x0080 262#define WIN_USE_WAIT 0x0100 263#define WIN_STRICT_ALIGN 0x0200 264#define WIN_MAP_BELOW_1MB 0x0400 265#define WIN_PREFETCH 0x0800 266#define WIN_CACHEABLE 0x1000 267#define WIN_BAR_MASK 0xe000 268#define WIN_BAR_SHIFT 13 269 270/* Attributes for RegisterClient -- UNUSED -- */ 271#define INFO_MASTER_CLIENT 0x01 272#define INFO_IO_CLIENT 0x02 273#define INFO_MTD_CLIENT 0x04 274#define INFO_MEM_CLIENT 0x08 275#define MAX_NUM_CLIENTS 3 276 277#define INFO_CARD_SHARE 0x10 278#define INFO_CARD_EXCL 0x20 279 280typedef struct cs_status_t { 281 u_char Function; 282 event_t CardState; 283 event_t SocketState; 284} cs_status_t; 285 286typedef struct error_info_t { 287 int func; 288 int retcode; 289} error_info_t; 290 291/* Flag to bind to all functions */ 292#define BIND_FN_ALL 0xff 293 294/* Events */ 295#define CS_EVENT_PRI_LOW 0 296#define CS_EVENT_PRI_HIGH 1 297 298#define CS_EVENT_WRITE_PROTECT 0x000001 299#define CS_EVENT_CARD_LOCK 0x000002 300#define CS_EVENT_CARD_INSERTION 0x000004 301#define CS_EVENT_CARD_REMOVAL 0x000008 302#define CS_EVENT_BATTERY_DEAD 0x000010 303#define CS_EVENT_BATTERY_LOW 0x000020 304#define CS_EVENT_READY_CHANGE 0x000040 305#define CS_EVENT_CARD_DETECT 0x000080 306#define CS_EVENT_RESET_REQUEST 0x000100 307#define CS_EVENT_RESET_PHYSICAL 0x000200 308#define CS_EVENT_CARD_RESET 0x000400 309#define CS_EVENT_REGISTRATION_COMPLETE 0x000800 310#define CS_EVENT_PM_SUSPEND 0x002000 311#define CS_EVENT_PM_RESUME 0x004000 312#define CS_EVENT_INSERTION_REQUEST 0x008000 313#define CS_EVENT_EJECTION_REQUEST 0x010000 314#define CS_EVENT_MTD_REQUEST 0x020000 315#define CS_EVENT_ERASE_COMPLETE 0x040000 316#define CS_EVENT_REQUEST_ATTENTION 0x080000 317#define CS_EVENT_CB_DETECT 0x100000 318#define CS_EVENT_3VCARD 0x200000 319#define CS_EVENT_XVCARD 0x400000 320 321/* Return codes */ 322#define CS_SUCCESS 0x00 323#define CS_BAD_ADAPTER 0x01 324#define CS_BAD_ATTRIBUTE 0x02 325#define CS_BAD_BASE 0x03 326#define CS_BAD_EDC 0x04 327#define CS_BAD_IRQ 0x06 328#define CS_BAD_OFFSET 0x07 329#define CS_BAD_PAGE 0x08 330#define CS_READ_FAILURE 0x09 331#define CS_BAD_SIZE 0x0a 332#define CS_BAD_SOCKET 0x0b 333#define CS_BAD_TYPE 0x0d 334#define CS_BAD_VCC 0x0e 335#define CS_BAD_VPP 0x0f 336#define CS_BAD_WINDOW 0x11 337#define CS_WRITE_FAILURE 0x12 338#define CS_NO_CARD 0x14 339#define CS_UNSUPPORTED_FUNCTION 0x15 340#define CS_UNSUPPORTED_MODE 0x16 341#define CS_BAD_SPEED 0x17 342#define CS_BUSY 0x18 343#define CS_GENERAL_FAILURE 0x19 344#define CS_WRITE_PROTECTED 0x1a 345#define CS_BAD_ARG_LENGTH 0x1b 346#define CS_BAD_ARGS 0x1c 347#define CS_CONFIGURATION_LOCKED 0x1d 348#define CS_IN_USE 0x1e 349#define CS_NO_MORE_ITEMS 0x1f 350#define CS_OUT_OF_RESOURCE 0x20 351#define CS_BAD_HANDLE 0x21 352 353#define CS_BAD_TUPLE 0x40 354 355#ifdef __KERNEL__ 356 357/* 358 * The main Card Services entry point 359 */ 360 361enum service { 362 AccessConfigurationRegister, AddSocketServices, 363 AdjustResourceInfo, CheckEraseQueue, CloseMemory, CopyMemory, 364 DeregisterClient, DeregisterEraseQueue, GetCardServicesInfo, 365 GetClientInfo, GetConfigurationInfo, GetEventMask, 366 GetFirstClient, GetFirstPartion, GetFirstRegion, GetFirstTuple, 367 GetNextClient, GetNextPartition, GetNextRegion, GetNextTuple, 368 GetStatus, GetTupleData, MapLogSocket, MapLogWindow, MapMemPage, 369 MapPhySocket, MapPhyWindow, ModifyConfiguration, ModifyWindow, 370 OpenMemory, ParseTuple, ReadMemory, RegisterClient, 371 RegisterEraseQueue, RegisterMTD, RegisterTimer, 372 ReleaseConfiguration, ReleaseExclusive, ReleaseIO, ReleaseIRQ, 373 ReleaseSocketMask, ReleaseWindow, ReplaceSocketServices, 374 RequestConfiguration, RequestExclusive, RequestIO, RequestIRQ, 375 RequestSocketMask, RequestWindow, ResetCard, ReturnSSEntry, 376 SetEventMask, SetRegion, ValidateCIS, VendorSpecific, 377 WriteMemory, BindDevice, BindMTD, ReportError, 378 SuspendCard, ResumeCard, EjectCard, InsertCard, ReplaceCIS, 379 GetFirstWindow, GetNextWindow, GetMemPage 380}; 381 382struct pcmcia_socket; 383 384int pcmcia_access_configuration_register(struct pcmcia_device *p_dev, conf_reg_t *reg); 385int pcmcia_deregister_client(struct pcmcia_device *p_dev); 386int pcmcia_get_configuration_info(struct pcmcia_device *p_dev, config_info_t *config); 387int pcmcia_get_first_window(window_handle_t *win, win_req_t *req); 388int pcmcia_get_next_window(window_handle_t *win, win_req_t *req); 389int pcmcia_get_status(struct pcmcia_device *p_dev, cs_status_t *status); 390int pcmcia_get_mem_page(window_handle_t win, memreq_t *req); 391int pcmcia_map_mem_page(window_handle_t win, memreq_t *req); 392int pcmcia_modify_configuration(struct pcmcia_device *p_dev, modconf_t *mod); 393int pcmcia_register_client(client_handle_t *handle, client_reg_t *req); 394int pcmcia_release_configuration(struct pcmcia_device *p_dev); 395int pcmcia_release_io(struct pcmcia_device *p_dev, io_req_t *req); 396int pcmcia_release_irq(struct pcmcia_device *p_dev, irq_req_t *req); 397int pcmcia_release_window(window_handle_t win); 398int pcmcia_request_configuration(struct pcmcia_device *p_dev, config_req_t *req); 399int pcmcia_request_io(struct pcmcia_device *p_dev, io_req_t *req); 400int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req); 401int pcmcia_request_window(struct pcmcia_device **p_dev, win_req_t *req, window_handle_t *wh); 402int pcmcia_reset_card(struct pcmcia_device *p_dev, client_req_t *req); 403int pcmcia_suspend_card(struct pcmcia_socket *skt); 404int pcmcia_resume_card(struct pcmcia_socket *skt); 405int pcmcia_eject_card(struct pcmcia_socket *skt); 406int pcmcia_insert_card(struct pcmcia_socket *skt); 407 408struct pcmcia_socket * pcmcia_get_socket(struct pcmcia_socket *skt); 409void pcmcia_put_socket(struct pcmcia_socket *skt); 410 411#endif /* __KERNEL__ */ 412 413#endif /* _LINUX_CS_H */