4 * WinSock Direct (SAN) support
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
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.
32 #define SO_MAX_RDMA_SIZE 0x700D
33 #define SO_RDMA_THRESHOLD_SIZE 0x700E
37 #define MEM_READWRITE 3
39 #define WSAID_REGISTERMEMORY \
40 {0xC0B422F5, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
42 #define WSAID_DEREGISTERMEMORY \
43 {0xC0B422F6, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
45 #define WSAID_REGISTERRDMAMEMORY \
46 {0xC0B422F7, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
48 #define WSAID_DEREGISTERRDMAMEMORY \
49 {0xC0B422F8, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
51 #define WSAID_RDMAWRITE \
52 {0xC0B422F9, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
54 #define WSAID_RDMAREAD \
55 {0xC0B422FA, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
57 #if(_WIN32_WINNT >= 0x0501)
58 #define WSAID_MEMORYREGISTRATIONCACHECALLBACK \
59 {0xE5DA4AF8, 0xD824, 0x48CD, {0xA7, 0x99, 0x63, 0x37, 0xA9, 0x8E, 0xD2, 0xAF}}
62 typedef struct _WSPUPCALLTABLEEX
{
63 LPWPUCLOSEEVENT lpWPUCloseEvent
;
64 LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle
;
65 LPWPUCREATEEVENT lpWPUCreateEvent
;
66 LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle
;
67 LPWPUFDISSET lpWPUFDIsSet
;
68 LPWPUGETPROVIDERPATH lpWPUGetProviderPath
;
69 LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle
;
70 LPWPUPOSTMESSAGE lpWPUPostMessage
;
71 LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback
;
72 LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext
;
73 LPWPUQUEUEAPC lpWPUQueueApc
;
74 LPWPURESETEVENT lpWPUResetEvent
;
75 LPWPUSETEVENT lpWPUSetEvent
;
76 LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread
;
77 LPWPUCLOSETHREAD lpWPUCloseThread
;
78 LPWPUCOMPLETEOVERLAPPEDREQUEST lpWPUCompleteOverlappedRequest
;
79 } WSPUPCALLTABLEEX
, FAR
*LPWSPUPCALLTABLEEX
;
81 typedef struct _WSABUFEX
{
83 _Field_size_bytes_(len
) char FAR
*buf
;
85 } WSABUFEX
, FAR
* LPWSABUFEX
;
90 (WSPAPI
*LPWSPSTARTUPEX
)(
91 _In_ WORD wVersionRequested
,
92 _Out_ LPWSPDATA lpWSPData
,
93 _In_ LPWSAPROTOCOL_INFOW lpProtocolInfo
,
94 _In_ LPWSPUPCALLTABLEEX lpUpcallTable
,
95 _Out_ LPWSPPROC_TABLE lpProcTable
);
100 (WSPAPI
*LPFN_WSPREGISTERMEMORY
)(
102 _In_reads_bytes_(dwBufferLength
) PVOID lpBuffer
,
103 _In_ DWORD dwBufferLength
,
105 _Out_ LPINT lpErrno
);
108 (WSPAPI
*LPFN_WSPDEREGISTERMEMORY
)(
111 _Out_ LPINT lpErrno
);
114 _Must_inspect_result_
116 (WSPAPI
*LPFN_WSPREGISTERRDMAMEMORY
)(
118 _In_reads_bytes_(dwBufferLength
) PVOID lpBuffer
,
119 _In_ DWORD dwBufferLength
,
121 _Out_writes_bytes_(*lpdwDescriptorLength
) LPVOID lpRdmaBufferDescriptor
,
122 _Inout_ LPDWORD lpdwDescriptorLength
,
123 _Out_ LPINT lpErrno
);
126 (WSPAPI
*LPFN_WSPDEREGISTERRDMAMEMORY
)(
128 _In_reads_bytes_(dwDescriptorLength
) LPVOID lpRdmaBufferDescriptor
,
129 _In_ DWORD dwDescriptorLength
,
130 _Out_ LPINT lpErrno
);
133 (WSPAPI
*LPFN_WSPRDMAWRITE
)(
135 _In_reads_(dwBufferCount
) LPWSABUFEX lpBuffers
,
136 _In_ DWORD dwBufferCount
,
137 _In_reads_bytes_(dwTargetDescriptorLength
) LPVOID lpTargetBufferDescriptor
,
138 _In_ DWORD dwTargetDescriptorLength
,
139 _In_ DWORD dwTargetBufferOffset
,
140 _Out_ LPDWORD lpdwNumberOfBytesWritten
,
142 _In_opt_ LPWSAOVERLAPPED lpOverlapped
,
143 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
,
144 _In_ LPWSATHREADID lpThreadId
,
145 _Out_ LPINT lpErrno
);
148 (WSPAPI
*LPFN_WSPRDMAREAD
)(
150 _In_reads_(dwBufferCount
) LPWSABUFEX lpBuffers
,
151 _In_ DWORD dwBufferCount
,
152 _In_reads_bytes_(dwTargetDescriptorLength
) LPVOID lpTargetBufferDescriptor
,
153 _In_ DWORD dwTargetDescriptorLength
,
154 _In_ DWORD dwTargetBufferOffset
,
155 _Out_ LPDWORD lpdwNumberOfBytesRead
,
157 _In_opt_ LPWSAOVERLAPPED lpOverlapped
,
158 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
,
159 _In_ LPWSATHREADID lpThreadId
,
160 _Out_ LPINT lpErrno
);
162 #if(_WIN32_WINNT >= 0x0501)
164 _Must_inspect_result_
166 (WSPAPI
*LPFN_WSPMEMORYREGISTRATIONCACHECALLBACK
)(
167 _In_reads_bytes_(Size
) PVOID lpvAddress
,
169 _Out_ LPINT lpErrno
);
172 _Must_inspect_result_
176 _In_ WORD wVersionRequested
,
177 _Out_ LPWSPDATA lpWSPData
,
178 _In_ LPWSAPROTOCOL_INFOW lpProtocolInfo
,
179 _In_ LPWSPUPCALLTABLEEX lpUpcallTable
,
180 _Out_ LPWSPPROC_TABLE lpProcTable
);
182 _Must_inspect_result_
187 _In_reads_bytes_(dwBufferLength
) PVOID lpBuffer
,
188 _In_ DWORD dwBufferLength
,
190 _Out_ LPINT lpErrno
);
197 _Out_ LPINT lpErrno
);
199 _Must_inspect_result_
202 WSPRegisterRdmaMemory(
204 _In_reads_bytes_(dwBufferLength
) PVOID lpBuffer
,
205 _In_ DWORD dwBufferLength
,
207 _Out_writes_bytes_(*lpdwDescriptorLength
) LPVOID lpRdmaBufferDescriptor
,
208 _Inout_ LPDWORD lpdwDescriptorLength
,
209 _Out_ LPINT lpErrno
);
213 WSPDeregisterRdmaMemory(
215 _In_reads_bytes_(dwDescriptorLength
) LPVOID lpRdmaBufferDescriptor
,
216 _In_ DWORD dwDescriptorLength
,
217 _Out_ LPINT lpErrno
);
223 _In_reads_(dwBufferCount
) LPWSABUFEX lpBuffers
,
224 _In_ DWORD dwBufferCount
,
225 _In_reads_bytes_(dwTargetDescriptorLength
) LPVOID lpTargetBufferDescriptor
,
226 _In_ DWORD dwTargetDescriptorLength
,
227 _In_ DWORD dwTargetBufferOffset
,
228 _Out_ LPDWORD lpdwNumberOfBytesWritten
,
230 _In_opt_ LPWSAOVERLAPPED lpOverlapped
,
231 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
,
232 _In_ LPWSATHREADID lpThreadId
,
233 _Out_ LPINT lpErrno
);
239 _In_reads_(dwBufferCount
) LPWSABUFEX lpBuffers
,
240 _In_ DWORD dwBufferCount
,
241 _In_reads_bytes_(dwTargetDescriptorLength
) LPVOID lpTargetBufferDescriptor
,
242 _In_ DWORD dwTargetDescriptorLength
,
243 _In_ DWORD dwTargetBufferOffset
,
244 _Out_ LPDWORD lpdwNumberOfBytesRead
,
246 _In_opt_ LPWSAOVERLAPPED lpOverlapped
,
247 _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
,
248 _In_ LPWSATHREADID lpThreadId
,
249 _Out_ LPINT lpErrno
);
251 #if(_WIN32_WINNT >= 0x0501)
252 _Must_inspect_result_
255 WSPMemoryRegistrationCacheCallback(
256 _In_reads_bytes_(Size
) PVOID lpvAddress
,
258 _Out_ LPINT lpErrno
);
265 #endif /* _WS2SAN_H_ */