The real, definitive, Visual C++ support branch. Accept no substitutes
[reactos.git] / include / ddk / ws2san.h
1 /*
2 * ws2san.h
3 *
4 * WinSock Direct (SAN) support
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 __WS2SAN_H
24 #define __WS2SAN_H
25
26 #if __GNUC__ >=3
27 #pragma GCC system_header
28 #endif
29
30 #include <winsock2.h>
31
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35
36 #define WSPAPI STDCALL
37
38 /* FIXME: Unknown definitions */
39 typedef PVOID LPWSPDATA;
40 typedef PDWORD LPWSATHREADID;
41 typedef PVOID LPWSPPROC_TABLE;
42 typedef struct _WSPUPCALLTABLEEX WSPUPCALLTABLEEX;
43 typedef WSPUPCALLTABLEEX *LPWSPUPCALLTABLEEX;
44
45 #define SO_MAX_RDMA_SIZE 0x700D
46 #define SO_RDMA_THRESHOLD_SIZE 0x700E
47
48 #define WSAID_REGISTERMEMORY \
49 {0xC0B422F5, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
50
51 #define WSAID_DEREGISTERMEMORY \
52 {0xC0B422F6, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
53
54 #define WSAID_REGISTERRDMAMEMORY \
55 {0xC0B422F7, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
56
57 #define WSAID_DEREGISTERRDMAMEMORY \
58 {0xC0B422F8, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
59
60 #define WSAID_RDMAWRITE \
61 {0xC0B422F9, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
62
63 #define WSAID_RDMAREAD \
64 {0xC0B422FA, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
65
66 #define WSAID_MEMORYREGISTRATIONCACHECALLBACK \
67 {0xE5DA4AF8, 0xD824, 0x48CD, {0xA7, 0x99, 0x63, 0x37, 0xA9, 0x8E, 0xD2, 0xAF}}
68
69 typedef struct _WSABUFEX {
70 u_long len;
71 char FAR *buf;
72 HANDLE handle;
73 } WSABUFEX, FAR * LPWSABUFEX;
74
75 #if 0
76 typedef struct _WSPUPCALLTABLEEX {
77 LPWPUCLOSEEVENT lpWPUCloseEvent;
78 LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle;
79 LPWPUCREATEEVENT lpWPUCreateEvent;
80 LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle;
81 LPWPUFDISSET lpWPUFDIsSet;
82 LPWPUGETPROVIDERPATH lpWPUGetProviderPath;
83 LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle;
84 LPWPUPOSTMESSAGE lpWPUPostMessage;
85 LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback;
86 LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext;
87 LPWPUQUEUEAPC lpWPUQueueApc;
88 LPWPURESETEVENT lpWPUResetEvent;
89 LPWPUSETEVENT lpWPUSetEvent;
90 LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread;
91 LPWPUCLOSETHREAD lpWPUCloseThread;
92 LPWPUCOMPLETEOVERLAPPEDREQUEST lpWPUCompleteOverlappedRequest;
93 } WSPUPCALLTABLEEX, FAR * LPWSPUPCALLTABLEEX;
94 #endif
95
96 int WSPAPI
97 WSPStartupEx(
98 IN WORD wVersionRequested,
99 OUT LPWSPDATA lpWSPData,
100 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
101 IN LPWSPUPCALLTABLEEX lpUpcallTable,
102 OUT LPWSPPROC_TABLE lpProcTable);
103
104 typedef int WSPAPI
105 (*LPWSPSTARTUPEX)(
106 IN WORD wVersionRequested,
107 OUT LPWSPDATA lpWSPData,
108 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
109 IN LPWSPUPCALLTABLEEX lpUpcallTable,
110 OUT LPWSPPROC_TABLE lpProcTable);
111
112 #define MEM_READ 1
113 #define MEM_WRITE 2
114 #define MEM_READWRITE 3
115
116 int WSPAPI
117 WSPDeregisterMemory(
118 IN SOCKET s,
119 IN HANDLE Handle,
120 OUT LPINT lpErrno);
121
122 typedef int WSPAPI
123 (*LPFN_WSPDEREGISTERMEMORY)(
124 IN SOCKET s,
125 IN HANDLE Handle,
126 OUT LPINT lpErrno);
127
128 int WSPAPI
129 WSPDeregisterRdmaMemory(
130 IN SOCKET s,
131 IN LPVOID lpRdmaBufferDescriptor,
132 IN DWORD dwDescriptorLength,
133 OUT LPINT lpErrno);
134
135 typedef int WSPAPI
136 (*LPFN_WSPDEREGISTERRDMAMEMORY)(
137 IN SOCKET s,
138 IN LPVOID lpRdmaBufferDescriptor,
139 IN DWORD dwDescriptorLength,
140 OUT LPINT lpErrno);
141
142 int WSPAPI
143 WSPMemoryRegistrationCacheCallback(
144 IN PVOID lpvAddress,
145 IN SIZE_T Size,
146 OUT LPINT lpErrno);
147
148 typedef int WSPAPI
149 (*LPFN_WSPMEMORYREGISTRATIONCACHECALLBACK)(
150 IN PVOID lpvAddress,
151 IN SIZE_T Size,
152 OUT LPINT lpErrno);
153
154 int WSPAPI
155 WSPRdmaRead(
156 IN SOCKET s,
157 IN LPWSABUFEX lpBuffers,
158 IN DWORD dwBufferCount,
159 IN LPVOID lpTargetBufferDescriptor,
160 IN DWORD dwTargetDescriptorLength,
161 IN DWORD dwTargetBufferOffset,
162 OUT LPDWORD lpdwNumberOfBytesRead,
163 IN DWORD dwFlags,
164 IN LPWSAOVERLAPPED lpOverlapped,
165 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
166 IN LPWSATHREADID lpThreadId,
167 OUT LPINT lpErrno);
168
169 typedef int WSPAPI
170 (*LPFN_WSPRDMAREAD)(
171 IN SOCKET s,
172 IN LPWSABUFEX lpBuffers,
173 IN DWORD dwBufferCount,
174 IN LPVOID lpTargetBufferDescriptor,
175 IN DWORD dwTargetDescriptorLength,
176 IN DWORD dwTargetBufferOffset,
177 OUT LPDWORD lpdwNumberOfBytesRead,
178 IN DWORD dwFlags,
179 IN LPWSAOVERLAPPED lpOverlapped,
180 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
181 IN LPWSATHREADID lpThreadId,
182 OUT LPINT lpErrno);
183
184 int WSPAPI
185 WSPRdmaWrite(
186 IN SOCKET s,
187 IN LPWSABUFEX lpBuffers,
188 IN DWORD dwBufferCount,
189 IN LPVOID lpTargetBufferDescriptor,
190 IN DWORD dwTargetDescriptorLength,
191 IN DWORD dwTargetBufferOffset,
192 OUT LPDWORD lpdwNumberOfBytesWritten,
193 IN DWORD dwFlags,
194 IN LPWSAOVERLAPPED lpOverlapped,
195 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
196 IN LPWSATHREADID lpThreadId,
197 OUT LPINT lpErrno);
198
199 typedef int WSPAPI
200 (*LPFN_WSPRDMAWRITE)(
201 IN SOCKET s,
202 IN LPWSABUFEX lpBuffers,
203 IN DWORD dwBufferCount,
204 IN LPVOID lpTargetBufferDescriptor,
205 IN DWORD dwTargetDescriptorLength,
206 IN DWORD dwTargetBufferOffset,
207 OUT LPDWORD lpdwNumberOfBytesWritten,
208 IN DWORD dwFlags,
209 IN LPWSAOVERLAPPED lpOverlapped,
210 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
211 IN LPWSATHREADID lpThreadId,
212 OUT LPINT lpErrno);
213
214 HANDLE WSPAPI
215 WSPRegisterMemory(
216 IN SOCKET s,
217 IN PVOID lpBuffer,
218 IN DWORD dwBufferLength,
219 IN DWORD dwFlags,
220 OUT LPINT lpErrno);
221
222 int WSPAPI
223 WSPRegisterRdmaMemory(
224 IN SOCKET s,
225 IN PVOID lpBuffer,
226 IN DWORD dwBufferLength,
227 IN DWORD dwFlags,
228 OUT LPVOID lpRdmaBufferDescriptor,
229 IN OUT LPDWORD lpdwDescriptorLength,
230 OUT LPINT lpErrno);
231
232 typedef int WSPAPI
233 (*LPFN_WSPREGISTERRDMAMEMORY)(
234 IN SOCKET s,
235 IN PVOID lpBuffer,
236 IN DWORD dwBufferLength,
237 IN DWORD dwFlags,
238 OUT LPVOID lpRdmaBufferDescriptor,
239 IN OUT LPDWORD lpdwDescriptorLength,
240 OUT LPINT lpErrno);
241
242 #ifdef __cplusplus
243 }
244 #endif
245
246 #endif /* __WS2SAN_H */