Merging r37048, r37051, r37052, r37055 from the-real-msvc branch
[reactos.git] / reactos / include / ddk / ntddpcm.h
1 /*
2 * ntddpcm.h
3 *
4 * PCMCIA IOCTL interface
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 */
22
23 #ifndef __NTDDPCM_H
24 #define __NTDDPCM_H
25
26 #if __GNUC__ >=3
27 #pragma GCC system_header
28 #endif
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
34 #define IOCTL_PCMCIA_BASE FILE_DEVICE_CONTROLLER
35
36 #define DD_PCMCIA_DEVICE_NAME "\\\\.\\Pcmcia"
37 #define DD_PCMCIA_DEVICE_NAME_U L"\\\\.\\Pcmcia"
38
39 #define IOCTL_GET_TUPLE_DATA \
40 CTL_CODE(IOCTL_PCMCIA_BASE, 3000, METHOD_BUFFERED, FILE_ANY_ACCESS)
41
42 #define IOCTL_SOCKET_INFORMATION \
43 CTL_CODE(IOCTL_PCMCIA_BASE, 3004, METHOD_BUFFERED, FILE_ANY_ACCESS)
44
45 #define DEVICE_IDENTIFIER_LENGTH 64
46 #define DRIVER_NAME_LENGTH 32
47 #define MANUFACTURER_NAME_LENGTH 64
48
49 #define PcmciaInvalidControllerType 0xffffffff
50
51 typedef struct _TUPLE_REQUEST {
52 USHORT Socket;
53 } TUPLE_REQUEST, *PTUPLE_REQUEST;
54
55 typedef enum _PCMCIA_CONTROLLER_CLASS {
56 PcmciaInvalidControllerClass = -1,
57 PcmciaIntelCompatible,
58 PcmciaCardBusCompatible,
59 PcmciaElcController,
60 PcmciaDatabook,
61 PcmciaPciPcmciaBridge,
62 PcmciaCirrusLogic,
63 PcmciaTI,
64 PcmciaTopic,
65 PcmciaRicoh,
66 PcmciaDatabookCB,
67 PcmciaOpti,
68 PcmciaTrid,
69 PcmciaO2Micro,
70 PcmciaNEC,
71 PcmciaNEC_98
72 } PCMCIA_CONTROLLER_CLASS, *PPCMCIA_CONTROLLER_CLASS;
73
74 typedef struct _PCMCIA_SOCKET_INFORMATION {
75 USHORT Socket;
76 USHORT TupleCrc;
77 UCHAR Manufacturer[MANUFACTURER_NAME_LENGTH];
78 UCHAR Identifier[DEVICE_IDENTIFIER_LENGTH];
79 UCHAR DriverName[DRIVER_NAME_LENGTH];
80 UCHAR DeviceFunctionId;
81 UCHAR Reserved;
82 UCHAR CardInSocket;
83 UCHAR CardEnabled;
84 ULONG ControllerType;
85 } PCMCIA_SOCKET_INFORMATION, *PPCMCIA_SOCKET_INFORMATION;
86
87 #define PcmciaClassFromControllerType(type) ((PCMCIA_CONTROLLER_CLASS)((type) & 0xff))
88 #define PcmciaModelFromControllerType(type) (((type) >> 8) & 0x3ffff)
89 #define PcmciaRevisionFromControllerType(type) ((type) >> 26)
90
91
92 DEFINE_GUID(GUID_PCMCIA_INTERFACE_STANDARD, \
93 0xbed5dadfL, 0x38fb, 0x11d1, 0x94, 0x62, 0x00, 0xc0, 0x4f, 0xb9, 0x60, 0xee);
94
95 typedef ULONG MEMORY_SPACE;
96
97 typedef ULONG STDCALL
98 (*PPCMCIA_READ_WRITE_CONFIG)(
99 IN PVOID Context,
100 IN ULONG WhichSpace,
101 IN PUCHAR Buffer,
102 IN ULONG Offset,
103 IN ULONG Length);
104
105 #define PCCARD_PCI_CONFIGURATION_SPACE 0
106 #define PCCARD_ATTRIBUTE_MEMORY 1
107 #define PCCARD_COMMON_MEMORY 2
108 #define PCCARD_ATTRIBUTE_MEMORY_INDIRECT 3
109 #define PCCARD_COMMON_MEMORY_INDIRECT 4
110
111 typedef struct _PCMCIA_BUS_INTERFACE_STANDARD {
112 USHORT Size;
113 USHORT Version;
114 PVOID Context;
115 PINTERFACE_REFERENCE InterfaceReference;
116 PINTERFACE_DEREFERENCE InterfaceDereference;
117 PPCMCIA_READ_WRITE_CONFIG ReadConfig;
118 PPCMCIA_READ_WRITE_CONFIG WriteConfig;
119 } PCMCIA_BUS_INTERFACE_STANDARD, *PPCMCIA_BUS_INTERFACE_STANDARD;
120
121 #define PCMCIA_MEMORY_8BIT_ACCESS 0
122 #define PCMCIA_MEMORY_16BIT_ACCESS 1
123
124 typedef BOOLEAN STDCALL
125 (*PPCMCIA_MODIFY_MEMORY_WINDOW)(
126 IN PVOID Context,
127 IN ULONGLONG HostBase,
128 IN ULONGLONG CardBase,
129 IN BOOLEAN Enable,
130 IN ULONG WindowSize OPTIONAL,
131 IN UCHAR AccessSpeed OPTIONAL,
132 IN UCHAR BusWidth OPTIONAL,
133 IN BOOLEAN IsAttributeMemory OPTIONAL);
134
135 #define PCMCIA_VPP_0V 0
136 #define PCMCIA_VPP_12V 1
137 #define PCMCIA_VPP_IS_VCC 2
138
139 typedef BOOLEAN STDCALL
140 (*PPCMCIA_SET_VPP)(
141 IN PVOID Context,
142 IN UCHAR VppLevel);
143
144 typedef BOOLEAN STDCALL
145 (*PPCMCIA_IS_WRITE_PROTECTED)(
146 IN PVOID Context);
147
148 typedef struct _PCMCIA_INTERFACE_STANDARD {
149 USHORT Size;
150 USHORT Version;
151 PINTERFACE_REFERENCE InterfaceReference;
152 PINTERFACE_DEREFERENCE InterfaceDereference;
153 PVOID Context;
154 PPCMCIA_MODIFY_MEMORY_WINDOW ModifyMemoryWindow;
155 PPCMCIA_SET_VPP SetVpp;
156 PPCMCIA_IS_WRITE_PROTECTED IsWriteProtected;
157 } PCMCIA_INTERFACE_STANDARD, *PPCMCIA_INTERFACE_STANDARD;
158
159 #ifdef __cplusplus
160 }
161 #endif
162
163 #endif /* __NTDDPCM_H */