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