3 * @copy 2012 MinGW.org project
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
12 * The above copyright notice and this permission notice (including the next
13 * paragraph) shall be included in all copies or substantial portions of the
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
24 /* Created by Casper S. Hornstrup <chorns@users.sourceforge.net> */
27 #pragma GCC system_header
31 * PCMCIA IOCTL interface
40 #define IOCTL_PCMCIA_BASE FILE_DEVICE_CONTROLLER
42 #define DD_PCMCIA_DEVICE_NAME "\\\\.\\Pcmcia"
43 #define DD_PCMCIA_DEVICE_NAME_U L"\\\\.\\Pcmcia"
45 #define IOCTL_GET_TUPLE_DATA \
46 CTL_CODE(IOCTL_PCMCIA_BASE, 3000, METHOD_BUFFERED, FILE_ANY_ACCESS)
48 #define IOCTL_SOCKET_INFORMATION \
49 CTL_CODE(IOCTL_PCMCIA_BASE, 3004, METHOD_BUFFERED, FILE_ANY_ACCESS)
51 #define DEVICE_IDENTIFIER_LENGTH 64
52 #define DRIVER_NAME_LENGTH 32
53 #define MANUFACTURER_NAME_LENGTH 64
55 #define PcmciaInvalidControllerType 0xffffffff
57 typedef struct _TUPLE_REQUEST {
59 } TUPLE_REQUEST, *PTUPLE_REQUEST;
61 typedef enum _PCMCIA_CONTROLLER_CLASS {
62 PcmciaInvalidControllerClass = -1,
63 PcmciaIntelCompatible,
64 PcmciaCardBusCompatible,
67 PcmciaPciPcmciaBridge,
78 } PCMCIA_CONTROLLER_CLASS, *PPCMCIA_CONTROLLER_CLASS;
80 typedef struct _PCMCIA_SOCKET_INFORMATION {
83 UCHAR Manufacturer[MANUFACTURER_NAME_LENGTH];
84 UCHAR Identifier[DEVICE_IDENTIFIER_LENGTH];
85 UCHAR DriverName[DRIVER_NAME_LENGTH];
86 UCHAR DeviceFunctionId;
91 } PCMCIA_SOCKET_INFORMATION, *PPCMCIA_SOCKET_INFORMATION;
93 #define PcmciaClassFromControllerType(type) ((PCMCIA_CONTROLLER_CLASS)((type) & 0xff))
94 #define PcmciaModelFromControllerType(type) (((type) >> 8) & 0x3ffff)
95 #define PcmciaRevisionFromControllerType(type) ((type) >> 26)
98 DEFINE_GUID(GUID_PCMCIA_INTERFACE_STANDARD, \
99 0xbed5dadfL, 0x38fb, 0x11d1, 0x94, 0x62, 0x00, 0xc0, 0x4f, 0xb9, 0x60, 0xee);
101 typedef ULONG MEMORY_SPACE;
103 typedef ULONG STDCALL
104 (*PPCMCIA_READ_WRITE_CONFIG)(
105 /*IN*/ PVOID Context,
106 /*IN*/ ULONG WhichSpace,
107 /*IN*/ PUCHAR Buffer,
109 /*IN*/ ULONG Length);
111 #define PCCARD_PCI_CONFIGURATION_SPACE 0
112 #define PCCARD_ATTRIBUTE_MEMORY 1
113 #define PCCARD_COMMON_MEMORY 2
114 #define PCCARD_ATTRIBUTE_MEMORY_INDIRECT 3
115 #define PCCARD_COMMON_MEMORY_INDIRECT 4
117 typedef struct _PCMCIA_BUS_INTERFACE_STANDARD {
121 PINTERFACE_REFERENCE InterfaceReference;
122 PINTERFACE_DEREFERENCE InterfaceDereference;
123 PPCMCIA_READ_WRITE_CONFIG ReadConfig;
124 PPCMCIA_READ_WRITE_CONFIG WriteConfig;
125 } PCMCIA_BUS_INTERFACE_STANDARD, *PPCMCIA_BUS_INTERFACE_STANDARD;
127 #define PCMCIA_MEMORY_8BIT_ACCESS 0
128 #define PCMCIA_MEMORY_16BIT_ACCESS 1
130 typedef BOOLEAN STDCALL
131 (*PPCMCIA_MODIFY_MEMORY_WINDOW)(
132 /*IN*/ PVOID Context,
133 /*IN*/ ULONGLONG HostBase,
134 /*IN*/ ULONGLONG CardBase,
135 /*IN*/ BOOLEAN Enable,
136 /*IN*/ ULONG WindowSize /*OPTIONAL*/,
137 /*IN*/ UCHAR AccessSpeed /*OPTIONAL*/,
138 /*IN*/ UCHAR BusWidth /*OPTIONAL*/,
139 /*IN*/ BOOLEAN IsAttributeMemory /*OPTIONAL*/);
141 #define PCMCIA_VPP_0V 0
142 #define PCMCIA_VPP_12V 1
143 #define PCMCIA_VPP_IS_VCC 2
145 typedef BOOLEAN STDCALL
147 /*IN*/ PVOID Context,
148 /*IN*/ UCHAR VppLevel);
150 typedef BOOLEAN STDCALL
151 (*PPCMCIA_IS_WRITE_PROTECTED)(
152 /*IN*/ PVOID Context);
154 typedef struct _PCMCIA_INTERFACE_STANDARD {
157 PINTERFACE_REFERENCE InterfaceReference;
158 PINTERFACE_DEREFERENCE InterfaceDereference;
160 PPCMCIA_MODIFY_MEMORY_WINDOW ModifyMemoryWindow;
161 PPCMCIA_SET_VPP SetVpp;
162 PPCMCIA_IS_WRITE_PROTECTED IsWriteProtected;
163 } PCMCIA_INTERFACE_STANDARD, *PPCMCIA_INTERFACE_STANDARD;
169 #endif /* __NTDDPCM_H */