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.
31 #define SO_MAX_RDMA_SIZE 0x700D
32 #define SO_RDMA_THRESHOLD_SIZE 0x700E
36 #define MEM_READWRITE 3
38 #define WSAID_REGISTERMEMORY \
39 {0xC0B422F5, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
41 #define WSAID_DEREGISTERMEMORY \
42 {0xC0B422F6, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
44 #define WSAID_REGISTERRDMAMEMORY \
45 {0xC0B422F7, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
47 #define WSAID_DEREGISTERRDMAMEMORY \
48 {0xC0B422F8, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
50 #define WSAID_RDMAWRITE \
51 {0xC0B422F9, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
53 #define WSAID_RDMAREAD \
54 {0xC0B422FA, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
56 #if(_WIN32_WINNT >= 0x0501)
57 #define WSAID_MEMORYREGISTRATIONCACHECALLBACK \
58 {0xE5DA4AF8, 0xD824, 0x48CD, {0xA7, 0x99, 0x63, 0x37, 0xA9, 0x8E, 0xD2, 0xAF}}
61 typedef struct _WSPUPCALLTABLEEX
{
62 LPWPUCLOSEEVENT lpWPUCloseEvent
;
63 LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle
;
64 LPWPUCREATEEVENT lpWPUCreateEvent
;
65 LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle
;
66 LPWPUFDISSET lpWPUFDIsSet
;
67 LPWPUGETPROVIDERPATH lpWPUGetProviderPath
;
68 LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle
;
69 LPWPUPOSTMESSAGE lpWPUPostMessage
;
70 LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback
;
71 LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext
;
72 LPWPUQUEUEAPC lpWPUQueueApc
;
73 LPWPURESETEVENT lpWPUResetEvent
;
74 LPWPUSETEVENT lpWPUSetEvent
;
75 LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread
;
76 LPWPUCLOSETHREAD lpWPUCloseThread
;
77 LPWPUCOMPLETEOVERLAPPEDREQUEST lpWPUCompleteOverlappedRequest
;
78 } WSPUPCALLTABLEEX
, FAR
*LPWSPUPCALLTABLEEX
;
80 typedef struct _WSABUFEX
{
84 } WSABUFEX
, FAR
* LPWSABUFEX
;
87 (WSPAPI
*LPWSPSTARTUPEX
)(
88 IN WORD wVersionRequested
,
89 OUT LPWSPDATA lpWSPData
,
90 IN LPWSAPROTOCOL_INFOW lpProtocolInfo
,
91 IN LPWSPUPCALLTABLEEX lpUpcallTable
,
92 OUT LPWSPPROC_TABLE lpProcTable
);
95 (WSPAPI
*LPFN_WSPREGISTERMEMORY
)(
98 IN DWORD dwBufferLength
,
103 (WSPAPI
*LPFN_WSPDEREGISTERMEMORY
)(
109 (WSPAPI
*LPFN_WSPREGISTERRDMAMEMORY
)(
112 IN DWORD dwBufferLength
,
114 OUT LPVOID lpRdmaBufferDescriptor
,
115 IN OUT LPDWORD lpdwDescriptorLength
,
119 (WSPAPI
*LPFN_WSPDEREGISTERRDMAMEMORY
)(
121 IN LPVOID lpRdmaBufferDescriptor
,
122 IN DWORD dwDescriptorLength
,
126 (WSPAPI
*LPFN_WSPRDMAWRITE
)(
128 IN LPWSABUFEX lpBuffers
,
129 IN DWORD dwBufferCount
,
130 IN LPVOID lpTargetBufferDescriptor
,
131 IN DWORD dwTargetDescriptorLength
,
132 IN DWORD dwTargetBufferOffset
,
133 OUT LPDWORD lpdwNumberOfBytesWritten
,
135 IN LPWSAOVERLAPPED lpOverlapped OPTIONAL
,
136 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL
,
137 IN LPWSATHREADID lpThreadId
,
141 (WSPAPI
*LPFN_WSPRDMAREAD
)(
143 IN LPWSABUFEX lpBuffers
,
144 IN DWORD dwBufferCount
,
145 IN LPVOID lpTargetBufferDescriptor
,
146 IN DWORD dwTargetDescriptorLength
,
147 IN DWORD dwTargetBufferOffset
,
148 OUT LPDWORD lpdwNumberOfBytesRead
,
150 IN LPWSAOVERLAPPED lpOverlapped OPTIONAL
,
151 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL
,
152 IN LPWSATHREADID lpThreadId
,
155 #if(_WIN32_WINNT >= 0x0501)
157 (WSPAPI
*LPFN_WSPMEMORYREGISTRATIONCACHECALLBACK
)(
166 IN WORD wVersionRequested
,
167 OUT LPWSPDATA lpWSPData
,
168 IN LPWSAPROTOCOL_INFOW lpProtocolInfo
,
169 IN LPWSPUPCALLTABLEEX lpUpcallTable
,
170 OUT LPWSPPROC_TABLE lpProcTable
);
177 IN DWORD dwBufferLength
,
190 WSPRegisterRdmaMemory(
193 IN DWORD dwBufferLength
,
195 OUT LPVOID lpRdmaBufferDescriptor
,
196 IN OUT LPDWORD lpdwDescriptorLength
,
201 WSPDeregisterRdmaMemory(
203 IN LPVOID lpRdmaBufferDescriptor
,
204 IN DWORD dwDescriptorLength
,
211 IN LPWSABUFEX lpBuffers
,
212 IN DWORD dwBufferCount
,
213 IN LPVOID lpTargetBufferDescriptor
,
214 IN DWORD dwTargetDescriptorLength
,
215 IN DWORD dwTargetBufferOffset
,
216 OUT LPDWORD lpdwNumberOfBytesWritten
,
218 IN LPWSAOVERLAPPED lpOverlapped OPTIONAL
,
219 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL
,
220 IN LPWSATHREADID lpThreadId
,
227 IN LPWSABUFEX lpBuffers
,
228 IN DWORD dwBufferCount
,
229 IN LPVOID lpTargetBufferDescriptor
,
230 IN DWORD dwTargetDescriptorLength
,
231 IN DWORD dwTargetBufferOffset
,
232 OUT LPDWORD lpdwNumberOfBytesRead
,
234 IN LPWSAOVERLAPPED lpOverlapped OPTIONAL
,
235 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine OPTIONAL
,
236 IN LPWSATHREADID lpThreadId
,
239 #if(_WIN32_WINNT >= 0x0501)
242 WSPMemoryRegistrationCacheCallback(