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