|
|
1.1 ! root 1: /* ! 2: * cs.h 1.74 2001/10/04 03:15:22 ! 3: * ! 4: * The contents of this file are subject to the Mozilla Public License ! 5: * Version 1.1 (the "License"); you may not use this file except in ! 6: * compliance with the License. You may obtain a copy of the License ! 7: * at http://www.mozilla.org/MPL/ ! 8: * ! 9: * Software distributed under the License is distributed on an "AS IS" ! 10: * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See ! 11: * the License for the specific language governing rights and ! 12: * limitations under the License. ! 13: * ! 14: * The initial developer of the original code is David A. Hinds ! 15: * <[email protected]>. Portions created by David A. Hinds ! 16: * are Copyright (C) 1999 David A. Hinds. All Rights Reserved. ! 17: * ! 18: * Alternatively, the contents of this file may be used under the ! 19: * terms of the GNU General Public License version 2 (the "GPL"), in ! 20: * which case the provisions of the GPL are applicable instead of the ! 21: * above. If you wish to allow the use of your version of this file ! 22: * only under the terms of the GPL and not to allow others to use ! 23: * your version of this file under the MPL, indicate your decision by ! 24: * deleting the provisions above and replace them with the notice and ! 25: * other provisions required by the GPL. If you do not delete the ! 26: * provisions above, a recipient may use your version of this file ! 27: * under either the MPL or the GPL. ! 28: */ ! 29: ! 30: #ifndef _LINUX_CS_H ! 31: #define _LINUX_CS_H ! 32: ! 33: /* For AccessConfigurationRegister */ ! 34: typedef struct conf_reg_t { ! 35: u_char Function; ! 36: u_int Action; ! 37: off_t Offset; ! 38: u_int Value; ! 39: } conf_reg_t; ! 40: ! 41: /* Actions */ ! 42: #define CS_READ 1 ! 43: #define CS_WRITE 2 ! 44: ! 45: /* for AdjustResourceInfo */ ! 46: typedef struct adjust_t { ! 47: u_int Action; ! 48: u_int Resource; ! 49: u_int Attributes; ! 50: union { ! 51: struct memory { ! 52: u_long Base; ! 53: u_long Size; ! 54: } memory; ! 55: struct io { ! 56: ioaddr_t BasePort; ! 57: ioaddr_t NumPorts; ! 58: u_int IOAddrLines; ! 59: } io; ! 60: struct irq { ! 61: u_int IRQ; ! 62: } irq; ! 63: } resource; ! 64: } adjust_t; ! 65: ! 66: /* Action field */ ! 67: #define REMOVE_MANAGED_RESOURCE 1 ! 68: #define ADD_MANAGED_RESOURCE 2 ! 69: #define GET_FIRST_MANAGED_RESOURCE 3 ! 70: #define GET_NEXT_MANAGED_RESOURCE 4 ! 71: /* Resource field */ ! 72: #define RES_MEMORY_RANGE 1 ! 73: #define RES_IO_RANGE 2 ! 74: #define RES_IRQ 3 ! 75: /* Attribute field */ ! 76: #define RES_IRQ_TYPE 0x03 ! 77: #define RES_IRQ_TYPE_EXCLUSIVE 0 ! 78: #define RES_IRQ_TYPE_TIME 1 ! 79: #define RES_IRQ_TYPE_DYNAMIC 2 ! 80: #define RES_IRQ_CSC 0x04 ! 81: #define RES_SHARED 0x08 ! 82: #define RES_RESERVED 0x10 ! 83: #define RES_ALLOCATED 0x20 ! 84: #define RES_REMOVED 0x40 ! 85: ! 86: typedef struct servinfo_t { ! 87: char Signature[2]; ! 88: u_int Count; ! 89: u_int Revision; ! 90: u_int CSLevel; ! 91: char *VendorString; ! 92: } servinfo_t; ! 93: ! 94: typedef struct event_callback_args_t { ! 95: client_handle_t client_handle; ! 96: void *info; ! 97: void *mtdrequest; ! 98: void *buffer; ! 99: void *misc; ! 100: void *client_data; ! 101: struct bus_operations *bus; ! 102: } event_callback_args_t; ! 103: ! 104: /* for GetConfigurationInfo */ ! 105: typedef struct config_info_t { ! 106: u_char Function; ! 107: u_int Attributes; ! 108: u_int Vcc, Vpp1, Vpp2; ! 109: u_int IntType; ! 110: u_int ConfigBase; ! 111: u_char Status, Pin, Copy, Option, ExtStatus; ! 112: u_int Present; ! 113: u_int CardValues; ! 114: u_int AssignedIRQ; ! 115: u_int IRQAttributes; ! 116: ioaddr_t BasePort1; ! 117: ioaddr_t NumPorts1; ! 118: u_int Attributes1; ! 119: ioaddr_t BasePort2; ! 120: ioaddr_t NumPorts2; ! 121: u_int Attributes2; ! 122: u_int IOAddrLines; ! 123: } config_info_t; ! 124: ! 125: /* For CardValues field */ ! 126: #define CV_OPTION_VALUE 0x01 ! 127: #define CV_STATUS_VALUE 0x02 ! 128: #define CV_PIN_REPLACEMENT 0x04 ! 129: #define CV_COPY_VALUE 0x08 ! 130: #define CV_EXT_STATUS 0x10 ! 131: ! 132: /* For GetFirst/NextClient */ ! 133: typedef struct client_req_t { ! 134: socket_t Socket; ! 135: u_int Attributes; ! 136: } client_req_t; ! 137: ! 138: #define CLIENT_THIS_SOCKET 0x01 ! 139: ! 140: /* For RegisterClient */ ! 141: typedef struct client_reg_t { ! 142: dev_info_t *dev_info; ! 143: u_int Attributes; ! 144: u_int EventMask; ! 145: int (*event_handler)(event_t event, int priority, ! 146: event_callback_args_t *); ! 147: event_callback_args_t event_callback_args; ! 148: u_int Version; ! 149: } client_reg_t; ! 150: ! 151: /* ModifyConfiguration */ ! 152: typedef struct modconf_t { ! 153: u_int Attributes; ! 154: u_int Vcc, Vpp1, Vpp2; ! 155: } modconf_t; ! 156: ! 157: /* Attributes for ModifyConfiguration */ ! 158: #define CONF_IRQ_CHANGE_VALID 0x100 ! 159: #define CONF_VCC_CHANGE_VALID 0x200 ! 160: #define CONF_VPP1_CHANGE_VALID 0x400 ! 161: #define CONF_VPP2_CHANGE_VALID 0x800 ! 162: ! 163: /* For RequestConfiguration */ ! 164: typedef struct config_req_t { ! 165: u_int Attributes; ! 166: u_int Vcc, Vpp1, Vpp2; ! 167: u_int IntType; ! 168: u_int ConfigBase; ! 169: u_char Status, Pin, Copy, ExtStatus; ! 170: u_char ConfigIndex; ! 171: u_int Present; ! 172: } config_req_t; ! 173: ! 174: /* Attributes for RequestConfiguration */ ! 175: #define CONF_ENABLE_IRQ 0x01 ! 176: #define CONF_ENABLE_DMA 0x02 ! 177: #define CONF_ENABLE_SPKR 0x04 ! 178: #define CONF_VALID_CLIENT 0x100 ! 179: ! 180: /* IntType field */ ! 181: #define INT_MEMORY 0x01 ! 182: #define INT_MEMORY_AND_IO 0x02 ! 183: #define INT_CARDBUS 0x04 ! 184: #define INT_ZOOMED_VIDEO 0x08 ! 185: ! 186: /* For RequestIO and ReleaseIO */ ! 187: typedef struct io_req_t { ! 188: ioaddr_t BasePort1; ! 189: ioaddr_t NumPorts1; ! 190: u_int Attributes1; ! 191: ioaddr_t BasePort2; ! 192: ioaddr_t NumPorts2; ! 193: u_int Attributes2; ! 194: u_int IOAddrLines; ! 195: } io_req_t; ! 196: ! 197: /* Attributes for RequestIO and ReleaseIO */ ! 198: #define IO_SHARED 0x01 ! 199: #define IO_FIRST_SHARED 0x02 ! 200: #define IO_FORCE_ALIAS_ACCESS 0x04 ! 201: #define IO_DATA_PATH_WIDTH 0x18 ! 202: #define IO_DATA_PATH_WIDTH_8 0x00 ! 203: #define IO_DATA_PATH_WIDTH_16 0x08 ! 204: #define IO_DATA_PATH_WIDTH_AUTO 0x10 ! 205: ! 206: /* For RequestIRQ and ReleaseIRQ */ ! 207: typedef struct irq_req_t { ! 208: u_int Attributes; ! 209: u_int AssignedIRQ; ! 210: u_int IRQInfo1, IRQInfo2; ! 211: void *Handler; ! 212: void *Instance; ! 213: } irq_req_t; ! 214: ! 215: /* Attributes for RequestIRQ and ReleaseIRQ */ ! 216: #define IRQ_TYPE 0x03 ! 217: #define IRQ_TYPE_EXCLUSIVE 0x00 ! 218: #define IRQ_TYPE_TIME 0x01 ! 219: #define IRQ_TYPE_DYNAMIC_SHARING 0x02 ! 220: #define IRQ_FORCED_PULSE 0x04 ! 221: #define IRQ_FIRST_SHARED 0x08 ! 222: #define IRQ_HANDLE_PRESENT 0x10 ! 223: #define IRQ_PULSE_ALLOCATED 0x100 ! 224: ! 225: /* Bits in IRQInfo1 field */ ! 226: #define IRQ_MASK 0x0f ! 227: #define IRQ_NMI_ID 0x01 ! 228: #define IRQ_IOCK_ID 0x02 ! 229: #define IRQ_BERR_ID 0x04 ! 230: #define IRQ_VEND_ID 0x08 ! 231: #define IRQ_INFO2_VALID 0x10 ! 232: #define IRQ_LEVEL_ID 0x20 ! 233: #define IRQ_PULSE_ID 0x40 ! 234: #define IRQ_SHARE_ID 0x80 ! 235: ! 236: typedef struct eventmask_t { ! 237: u_int Attributes; ! 238: u_int EventMask; ! 239: } eventmask_t; ! 240: ! 241: #define CONF_EVENT_MASK_VALID 0x01 ! 242: ! 243: /* Configuration registers present */ ! 244: #define PRESENT_OPTION 0x001 ! 245: #define PRESENT_STATUS 0x002 ! 246: #define PRESENT_PIN_REPLACE 0x004 ! 247: #define PRESENT_COPY 0x008 ! 248: #define PRESENT_EXT_STATUS 0x010 ! 249: #define PRESENT_IOBASE_0 0x020 ! 250: #define PRESENT_IOBASE_1 0x040 ! 251: #define PRESENT_IOBASE_2 0x080 ! 252: #define PRESENT_IOBASE_3 0x100 ! 253: #define PRESENT_IOSIZE 0x200 ! 254: ! 255: /* For GetMemPage, MapMemPage */ ! 256: typedef struct memreq_t { ! 257: u_int CardOffset; ! 258: page_t Page; ! 259: } memreq_t; ! 260: ! 261: /* For ModifyWindow */ ! 262: typedef struct modwin_t { ! 263: u_int Attributes; ! 264: u_int AccessSpeed; ! 265: } modwin_t; ! 266: ! 267: /* For RequestWindow */ ! 268: typedef struct win_req_t { ! 269: u_int Attributes; ! 270: u_long Base; ! 271: u_int Size; ! 272: u_int AccessSpeed; ! 273: } win_req_t; ! 274: ! 275: /* Attributes for RequestWindow */ ! 276: #define WIN_ADDR_SPACE 0x0001 ! 277: #define WIN_ADDR_SPACE_MEM 0x0000 ! 278: #define WIN_ADDR_SPACE_IO 0x0001 ! 279: #define WIN_MEMORY_TYPE 0x0002 ! 280: #define WIN_MEMORY_TYPE_CM 0x0000 ! 281: #define WIN_MEMORY_TYPE_AM 0x0002 ! 282: #define WIN_ENABLE 0x0004 ! 283: #define WIN_DATA_WIDTH 0x0018 ! 284: #define WIN_DATA_WIDTH_8 0x0000 ! 285: #define WIN_DATA_WIDTH_16 0x0008 ! 286: #define WIN_DATA_WIDTH_32 0x0010 ! 287: #define WIN_PAGED 0x0020 ! 288: #define WIN_SHARED 0x0040 ! 289: #define WIN_FIRST_SHARED 0x0080 ! 290: #define WIN_USE_WAIT 0x0100 ! 291: #define WIN_STRICT_ALIGN 0x0200 ! 292: #define WIN_MAP_BELOW_1MB 0x0400 ! 293: #define WIN_PREFETCH 0x0800 ! 294: #define WIN_CACHEABLE 0x1000 ! 295: #define WIN_BAR_MASK 0xe000 ! 296: #define WIN_BAR_SHIFT 13 ! 297: ! 298: /* Attributes for RegisterClient */ ! 299: #define INFO_MASTER_CLIENT 0x01 ! 300: #define INFO_IO_CLIENT 0x02 ! 301: #define INFO_MTD_CLIENT 0x04 ! 302: #define INFO_MEM_CLIENT 0x08 ! 303: #define MAX_NUM_CLIENTS 3 ! 304: ! 305: #define INFO_CARD_SHARE 0x10 ! 306: #define INFO_CARD_EXCL 0x20 ! 307: ! 308: typedef struct cs_status_t { ! 309: u_char Function; ! 310: event_t CardState; ! 311: event_t SocketState; ! 312: } cs_status_t; ! 313: ! 314: typedef struct error_info_t { ! 315: int func; ! 316: int retcode; ! 317: } error_info_t; ! 318: ! 319: /* Special stuff for binding drivers to sockets */ ! 320: typedef struct bind_req_t { ! 321: socket_t Socket; ! 322: u_char Function; ! 323: dev_info_t *dev_info; ! 324: } bind_req_t; ! 325: ! 326: /* Flag to bind to all functions */ ! 327: #define BIND_FN_ALL 0xff ! 328: ! 329: typedef struct mtd_bind_t { ! 330: socket_t Socket; ! 331: u_int Attributes; ! 332: u_int CardOffset; ! 333: dev_info_t *dev_info; ! 334: } mtd_bind_t; ! 335: ! 336: /* Events */ ! 337: #define CS_EVENT_PRI_LOW 0 ! 338: #define CS_EVENT_PRI_HIGH 1 ! 339: ! 340: #define CS_EVENT_WRITE_PROTECT 0x000001 ! 341: #define CS_EVENT_CARD_LOCK 0x000002 ! 342: #define CS_EVENT_CARD_INSERTION 0x000004 ! 343: #define CS_EVENT_CARD_REMOVAL 0x000008 ! 344: #define CS_EVENT_BATTERY_DEAD 0x000010 ! 345: #define CS_EVENT_BATTERY_LOW 0x000020 ! 346: #define CS_EVENT_READY_CHANGE 0x000040 ! 347: #define CS_EVENT_CARD_DETECT 0x000080 ! 348: #define CS_EVENT_RESET_REQUEST 0x000100 ! 349: #define CS_EVENT_RESET_PHYSICAL 0x000200 ! 350: #define CS_EVENT_CARD_RESET 0x000400 ! 351: #define CS_EVENT_REGISTRATION_COMPLETE 0x000800 ! 352: #define CS_EVENT_RESET_COMPLETE 0x001000 ! 353: #define CS_EVENT_PM_SUSPEND 0x002000 ! 354: #define CS_EVENT_PM_RESUME 0x004000 ! 355: #define CS_EVENT_INSERTION_REQUEST 0x008000 ! 356: #define CS_EVENT_EJECTION_REQUEST 0x010000 ! 357: #define CS_EVENT_MTD_REQUEST 0x020000 ! 358: #define CS_EVENT_ERASE_COMPLETE 0x040000 ! 359: #define CS_EVENT_REQUEST_ATTENTION 0x080000 ! 360: #define CS_EVENT_CB_DETECT 0x100000 ! 361: #define CS_EVENT_3VCARD 0x200000 ! 362: #define CS_EVENT_XVCARD 0x400000 ! 363: ! 364: /* Return codes */ ! 365: #define CS_SUCCESS 0x00 ! 366: #define CS_BAD_ADAPTER 0x01 ! 367: #define CS_BAD_ATTRIBUTE 0x02 ! 368: #define CS_BAD_BASE 0x03 ! 369: #define CS_BAD_EDC 0x04 ! 370: #define CS_BAD_IRQ 0x06 ! 371: #define CS_BAD_OFFSET 0x07 ! 372: #define CS_BAD_PAGE 0x08 ! 373: #define CS_READ_FAILURE 0x09 ! 374: #define CS_BAD_SIZE 0x0a ! 375: #define CS_BAD_SOCKET 0x0b ! 376: #define CS_BAD_TYPE 0x0d ! 377: #define CS_BAD_VCC 0x0e ! 378: #define CS_BAD_VPP 0x0f ! 379: #define CS_BAD_WINDOW 0x11 ! 380: #define CS_WRITE_FAILURE 0x12 ! 381: #define CS_NO_CARD 0x14 ! 382: #define CS_UNSUPPORTED_FUNCTION 0x15 ! 383: #define CS_UNSUPPORTED_MODE 0x16 ! 384: #define CS_BAD_SPEED 0x17 ! 385: #define CS_BUSY 0x18 ! 386: #define CS_GENERAL_FAILURE 0x19 ! 387: #define CS_WRITE_PROTECTED 0x1a ! 388: #define CS_BAD_ARG_LENGTH 0x1b ! 389: #define CS_BAD_ARGS 0x1c ! 390: #define CS_CONFIGURATION_LOCKED 0x1d ! 391: #define CS_IN_USE 0x1e ! 392: #define CS_NO_MORE_ITEMS 0x1f ! 393: #define CS_OUT_OF_RESOURCE 0x20 ! 394: #define CS_BAD_HANDLE 0x21 ! 395: ! 396: #define CS_BAD_TUPLE 0x40 ! 397: ! 398: #ifdef __KERNEL__ ! 399: ! 400: /* ! 401: * Calls to set up low-level "Socket Services" drivers ! 402: */ ! 403: ! 404: typedef int (*ss_entry_t)(u_int sock, u_int cmd, void *arg); ! 405: extern int register_ss_entry(int nsock, ss_entry_t entry); ! 406: extern void unregister_ss_entry(ss_entry_t entry); ! 407: ! 408: /* ! 409: * The main Card Services entry point ! 410: */ ! 411: ! 412: enum service { ! 413: AccessConfigurationRegister, AddSocketServices, ! 414: AdjustResourceInfo, CheckEraseQueue, CloseMemory, CopyMemory, ! 415: DeregisterClient, DeregisterEraseQueue, GetCardServicesInfo, ! 416: GetClientInfo, GetConfigurationInfo, GetEventMask, ! 417: GetFirstClient, GetFirstPartion, GetFirstRegion, GetFirstTuple, ! 418: GetNextClient, GetNextPartition, GetNextRegion, GetNextTuple, ! 419: GetStatus, GetTupleData, MapLogSocket, MapLogWindow, MapMemPage, ! 420: MapPhySocket, MapPhyWindow, ModifyConfiguration, ModifyWindow, ! 421: OpenMemory, ParseTuple, ReadMemory, RegisterClient, ! 422: RegisterEraseQueue, RegisterMTD, RegisterTimer, ! 423: ReleaseConfiguration, ReleaseExclusive, ReleaseIO, ReleaseIRQ, ! 424: ReleaseSocketMask, ReleaseWindow, ReplaceSocketServices, ! 425: RequestConfiguration, RequestExclusive, RequestIO, RequestIRQ, ! 426: RequestSocketMask, RequestWindow, ResetCard, ReturnSSEntry, ! 427: SetEventMask, SetRegion, ValidateCIS, VendorSpecific, ! 428: WriteMemory, BindDevice, BindMTD, ReportError, ! 429: SuspendCard, ResumeCard, EjectCard, InsertCard, ReplaceCIS, ! 430: GetFirstWindow, GetNextWindow, GetMemPage ! 431: }; ! 432: ! 433: #ifdef IN_CARD_SERVICES ! 434: extern int CardServices(int func, void *a1, void *a2, void *a3); ! 435: #else ! 436: extern int CardServices(int func, ...); ! 437: #endif ! 438: ! 439: #endif /* __KERNEL__ */ ! 440: ! 441: #endif /* _LINUX_CS_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.