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.
29 #define SO_MAX_RDMA_SIZE 0x700D
30 #define SO_RDMA_THRESHOLD_SIZE 0x700E
34 #define MEM_READWRITE 3
36 #define WSAID_REGISTERMEMORY \
37 {0xC0B422F5, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
39 #define WSAID_DEREGISTERMEMORY \
40 {0xC0B422F6, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
42 #define WSAID_REGISTERRDMAMEMORY \
43 {0xC0B422F7, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
45 #define WSAID_DEREGISTERRDMAMEMORY \
46 {0xC0B422F8, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
48 #define WSAID_RDMAWRITE \
49 {0xC0B422F9, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
51 #define WSAID_RDMAREAD \
52 {0xC0B422FA, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
54 #if(_WIN32_WINNT >= 0x0501)
55 #define WSAID_MEMORYREGISTRATIONCACHECALLBACK \
56 {0xE5DA4AF8, 0xD824, 0x48CD, {0xA7, 0x99, 0x63, 0x37, 0xA9, 0x8E, 0xD2, 0xAF}}
59 typedef struct _WSPUPCALLTABLEEX
{
60 LPWPUCLOSEEVENT lpWPUCloseEvent
;
61 LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle
;
62 LPWPUCREATEEVENT lpWPUCreateEvent
;
63 LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle
;
64 LPWPUFDISSET lpWPUFDIsSet
;
65 LPWPUGETPROVIDERPATH lpWPUGetProviderPath
;
66 LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle
;
67 LPWPUPOSTMESSAGE lpWPUPostMessage
;
68 LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback
;
69 LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext
;
70 LPWPUQUEUEAPC lpWPUQueueApc
;
71 LPWPURESETEVENT lpWPUResetEvent
;
72 LPWPUSETEVENT lpWPUSetEvent
;
73 LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread
;
74 LPWPUCLOSETHREAD lpWPUCloseThread
;
75 LPWPUCOMPLETEOVERLAPPEDREQUEST lpWPUCompleteOverlappedRequest
;
76 } WSPUPCALLTABLEEX
, FAR
*LPWSPUPCALLTABLEEX
;
78 typedef struct _WSABUFEX
{
82 } WSABUFEX
, FAR
* LPWSABUFEX
;
85 (WSPAPI
*LPWSPSTARTUPEX
)(
86 IN WORD wVersionRequested
,
87 OUT LPWSPDATA lpWSPData
,
88 IN LPWSAPROTOCOL_INFOW lpProtocolInfo
,
89 IN LPWSPUPCALLTABLEEX lpUpcallTable
,
90 OUT LPWSPPROC_TABLE lpProcTable
);
93 (WSPAPI
*LPFN_WSPREGISTERMEMORY
)(
96 IN DWORD dwBufferLength
,
101 (WSPAPI
*LPFN_WSPDEREGISTERMEMORY
)(
107 (WSPAPI
*LPFN_WSPREGISTERRDMAMEMORY
)(
110 IN DWORD dwBufferLength
,
112 OUT LPVOID lpRdmaBufferDescriptor
,
113 IN OUT LPDWORD lpdwDescriptorLength
,
117 (WSPAPI
*LPFN_WSPDEREGISTERRDMAMEMORY
)(
119 IN LPVOID lpRdmaBufferDescriptor
,
120 IN DWORD dwDescriptorLength
,
124 (WSPAPI
*LPFN_WSPRDMAWRITE
)(
126 IN LPWSABUFEX lpBuffers
,
127 IN DWORD dwBufferCount
,
128 IN LPVOID lpTargetBufferDescriptor
,
129 IN DWORD dwTargetDescriptorLength
,
130 IN DWORD dwTargetBufferOffset
,
131 OUT LPDWORD lpdwNumberOfBytesWritten
,
133 IN LPWSAOVERLAPPED lpOverlapped OPTIONAL
,
134 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL
,
135 IN LPWSATHREADID lpThreadId
,
139 (WSPAPI
*LPFN_WSPRDMAREAD
)(
141 IN LPWSABUFEX lpBuffers
,
142 IN DWORD dwBufferCount
,
143 IN LPVOID lpTargetBufferDescriptor
,
144 IN DWORD dwTargetDescriptorLength
,
145 IN DWORD dwTargetBufferOffset
,
146 OUT LPDWORD lpdwNumberOfBytesRead
,
148 IN LPWSAOVERLAPPED lpOverlapped OPTIONAL
,
149 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL
,
150 IN LPWSATHREADID lpThreadId
,
153 #if(_WIN32_WINNT >= 0x0501)
155 (WSPAPI
*LPFN_WSPMEMORYREGISTRATIONCACHECALLBACK
)(
164 IN WORD wVersionRequested
,
165 OUT LPWSPDATA lpWSPData
,
166 IN LPWSAPROTOCOL_INFOW lpProtocolInfo
,
167 IN LPWSPUPCALLTABLEEX lpUpcallTable
,
168 OUT LPWSPPROC_TABLE lpProcTable
);
175 IN DWORD dwBufferLength
,
188 WSPRegisterRdmaMemory(
191 IN DWORD dwBufferLength
,
193 OUT LPVOID lpRdmaBufferDescriptor
,
194 IN OUT LPDWORD lpdwDescriptorLength
,
199 WSPDeregisterRdmaMemory(
201 IN LPVOID lpRdmaBufferDescriptor
,
202 IN DWORD dwDescriptorLength
,
209 IN LPWSABUFEX lpBuffers
,
210 IN DWORD dwBufferCount
,
211 IN LPVOID lpTargetBufferDescriptor
,
212 IN DWORD dwTargetDescriptorLength
,
213 IN DWORD dwTargetBufferOffset
,
214 OUT LPDWORD lpdwNumberOfBytesWritten
,
216 IN LPWSAOVERLAPPED lpOverlapped OPTIONAL
,
217 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL
,
218 IN LPWSATHREADID lpThreadId
,
225 IN LPWSABUFEX lpBuffers
,
226 IN DWORD dwBufferCount
,
227 IN LPVOID lpTargetBufferDescriptor
,
228 IN DWORD dwTargetDescriptorLength
,
229 IN DWORD dwTargetBufferOffset
,
230 OUT LPDWORD lpdwNumberOfBytesRead
,
232 IN LPWSAOVERLAPPED lpOverlapped OPTIONAL
,
233 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL
,
234 IN LPWSATHREADID lpThreadId
,
237 #if(_WIN32_WINNT >= 0x0501)
240 WSPMemoryRegistrationCacheCallback(