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.
33 #define SO_MAX_RDMA_SIZE 0x700D
34 #define SO_RDMA_THRESHOLD_SIZE 0x700E
38 #define MEM_READWRITE 3
40 #define WSAID_REGISTERMEMORY \
41 {0xC0B422F5, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
43 #define WSAID_DEREGISTERMEMORY \
44 {0xC0B422F6, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
46 #define WSAID_REGISTERRDMAMEMORY \
47 {0xC0B422F7, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
49 #define WSAID_DEREGISTERRDMAMEMORY \
50 {0xC0B422F8, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
52 #define WSAID_RDMAWRITE \
53 {0xC0B422F9, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
55 #define WSAID_RDMAREAD \
56 {0xC0B422FA, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
58 #if(_WIN32_WINNT >= 0x0501)
59 #define WSAID_MEMORYREGISTRATIONCACHECALLBACK \
60 {0xE5DA4AF8, 0xD824, 0x48CD, {0xA7, 0x99, 0x63, 0x37, 0xA9, 0x8E, 0xD2, 0xAF}}
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
;
82 typedef struct _WSABUFEX
{
86 } WSABUFEX
, FAR
* LPWSABUFEX
;
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
);
97 (WSPAPI
*LPFN_WSPREGISTERMEMORY
)(
100 IN DWORD dwBufferLength
,
105 (WSPAPI
*LPFN_WSPDEREGISTERMEMORY
)(
111 (WSPAPI
*LPFN_WSPREGISTERRDMAMEMORY
)(
114 IN DWORD dwBufferLength
,
116 OUT LPVOID lpRdmaBufferDescriptor
,
117 IN OUT LPDWORD lpdwDescriptorLength
,
121 (WSPAPI
*LPFN_WSPDEREGISTERRDMAMEMORY
)(
123 IN LPVOID lpRdmaBufferDescriptor
,
124 IN DWORD dwDescriptorLength
,
128 (WSPAPI
*LPFN_WSPRDMAWRITE
)(
130 IN LPWSABUFEX lpBuffers
,
131 IN DWORD dwBufferCount
,
132 IN LPVOID lpTargetBufferDescriptor
,
133 IN DWORD dwTargetDescriptorLength
,
134 IN DWORD dwTargetBufferOffset
,
135 OUT LPDWORD lpdwNumberOfBytesWritten
,
137 IN LPWSAOVERLAPPED lpOverlapped OPTIONAL
,
138 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL
,
139 IN LPWSATHREADID lpThreadId
,
143 (WSPAPI
*LPFN_WSPRDMAREAD
)(
145 IN LPWSABUFEX lpBuffers
,
146 IN DWORD dwBufferCount
,
147 IN LPVOID lpTargetBufferDescriptor
,
148 IN DWORD dwTargetDescriptorLength
,
149 IN DWORD dwTargetBufferOffset
,
150 OUT LPDWORD lpdwNumberOfBytesRead
,
152 IN LPWSAOVERLAPPED lpOverlapped OPTIONAL
,
153 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL
,
154 IN LPWSATHREADID lpThreadId
,
157 #if(_WIN32_WINNT >= 0x0501)
159 (WSPAPI
*LPFN_WSPMEMORYREGISTRATIONCACHECALLBACK
)(
168 IN WORD wVersionRequested
,
169 OUT LPWSPDATA lpWSPData
,
170 IN LPWSAPROTOCOL_INFOW lpProtocolInfo
,
171 IN LPWSPUPCALLTABLEEX lpUpcallTable
,
172 OUT LPWSPPROC_TABLE lpProcTable
);
179 IN DWORD dwBufferLength
,
192 WSPRegisterRdmaMemory(
195 IN DWORD dwBufferLength
,
197 OUT LPVOID lpRdmaBufferDescriptor
,
198 IN OUT LPDWORD lpdwDescriptorLength
,
203 WSPDeregisterRdmaMemory(
205 IN LPVOID lpRdmaBufferDescriptor
,
206 IN DWORD dwDescriptorLength
,
213 IN LPWSABUFEX lpBuffers
,
214 IN DWORD dwBufferCount
,
215 IN LPVOID lpTargetBufferDescriptor
,
216 IN DWORD dwTargetDescriptorLength
,
217 IN DWORD dwTargetBufferOffset
,
218 OUT LPDWORD lpdwNumberOfBytesWritten
,
220 IN LPWSAOVERLAPPED lpOverlapped OPTIONAL
,
221 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL
,
222 IN LPWSATHREADID lpThreadId
,
229 IN LPWSABUFEX lpBuffers
,
230 IN DWORD dwBufferCount
,
231 IN LPVOID lpTargetBufferDescriptor
,
232 IN DWORD dwTargetDescriptorLength
,
233 IN DWORD dwTargetBufferOffset
,
234 OUT LPDWORD lpdwNumberOfBytesRead
,
236 IN LPWSAOVERLAPPED lpOverlapped OPTIONAL
,
237 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL
,
238 IN LPWSATHREADID lpThreadId
,
241 #if(_WIN32_WINNT >= 0x0501)
244 WSPMemoryRegistrationCacheCallback(