Naveen Neel / shedskin
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ws2san.h Source File

ws2san.h

00001 /*
00002  * ws2san.h
00003  *
00004  * WinSock Direct (SAN) support
00005  *
00006  * This file is part of the w32api package.
00007  *
00008  * Contributors:
00009  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
00010  *
00011  * THIS SOFTWARE IS NOT COPYRIGHTED
00012  *
00013  * This source code is offered for use in the public domain. You may
00014  * use, modify or distribute it freely.
00015  *
00016  * This code is distributed in the hope that it will be useful but
00017  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
00018  * DISCLAIMED. This includes but is not limited to warranties of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00020  *
00021  */
00022 
00023 #ifndef __WS2SAN_H
00024 #define __WS2SAN_H
00025 
00026 #if __GNUC__ >=3
00027 #pragma GCC system_header
00028 #endif
00029 
00030 #ifdef __cplusplus
00031 extern "C" {
00032 #endif
00033 
00034 #include <winsock2.h>
00035 #include "ntddk.h"
00036 
00037 
00038 #define WSPAPI STDCALL
00039 
00040 /* FIXME: Unknown definitions */
00041 typedef PVOID LPWSPDATA;
00042 typedef PDWORD LPWSATHREADID;
00043 typedef PVOID LPWSPPROC_TABLE;
00044 typedef struct _WSPUPCALLTABLEEX WSPUPCALLTABLEEX;
00045 typedef WSPUPCALLTABLEEX *LPWSPUPCALLTABLEEX;
00046 
00047 #define SO_MAX_RDMA_SIZE                  0x700D
00048 #define SO_RDMA_THRESHOLD_SIZE            0x700E
00049 
00050 #define WSAID_REGISTERMEMORY \
00051   {0xC0B422F5, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
00052 
00053 #define WSAID_DEREGISTERMEMORY \
00054   {0xC0B422F6, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
00055 
00056 #define WSAID_REGISTERRDMAMEMORY \
00057   {0xC0B422F7, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
00058 
00059 #define WSAID_DEREGISTERRDMAMEMORY \
00060   {0xC0B422F8, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
00061 
00062 #define WSAID_RDMAWRITE \
00063   {0xC0B422F9, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
00064 
00065 #define WSAID_RDMAREAD \
00066   {0xC0B422FA, 0xF58C, 0x11d1, {0xAD, 0x6C, 0x00, 0xC0, 0x4F, 0xA3, 0x4A, 0x2D}}
00067 
00068 #define WSAID_MEMORYREGISTRATIONCACHECALLBACK \
00069   {0xE5DA4AF8, 0xD824, 0x48CD, {0xA7, 0x99, 0x63, 0x37, 0xA9, 0x8E, 0xD2, 0xAF}}
00070 
00071 typedef struct _WSABUFEX {
00072   u_long  len; 
00073   char FAR  *buf; 
00074   HANDLE  handle; 
00075 } WSABUFEX, FAR * LPWSABUFEX;
00076 
00077 #if 0
00078 typedef struct _WSPUPCALLTABLEEX {
00079   LPWPUCLOSEEVENT  lpWPUCloseEvent;
00080   LPWPUCLOSESOCKETHANDLE  lpWPUCloseSocketHandle;
00081   LPWPUCREATEEVENT  lpWPUCreateEvent;
00082   LPWPUCREATESOCKETHANDLE  lpWPUCreateSocketHandle;
00083   LPWPUFDISSET  lpWPUFDIsSet;
00084   LPWPUGETPROVIDERPATH  lpWPUGetProviderPath;
00085   LPWPUMODIFYIFSHANDLE  lpWPUModifyIFSHandle;
00086   LPWPUPOSTMESSAGE  lpWPUPostMessage;
00087   LPWPUQUERYBLOCKINGCALLBACK  lpWPUQueryBlockingCallback;
00088   LPWPUQUERYSOCKETHANDLECONTEXT  lpWPUQuerySocketHandleContext;
00089   LPWPUQUEUEAPC  lpWPUQueueApc;
00090   LPWPURESETEVENT  lpWPUResetEvent;
00091   LPWPUSETEVENT  lpWPUSetEvent;
00092   LPWPUOPENCURRENTTHREAD  lpWPUOpenCurrentThread;
00093   LPWPUCLOSETHREAD  lpWPUCloseThread;
00094   LPWPUCOMPLETEOVERLAPPEDREQUEST lpWPUCompleteOverlappedRequest;
00095 } WSPUPCALLTABLEEX, FAR * LPWSPUPCALLTABLEEX;
00096 #endif
00097 
00098 int WSPAPI
00099 WSPStartupEx(
00100   /*IN*/ WORD  wVersionRequested,
00101   /*OUT*/ LPWSPDATA  lpWSPData,
00102   /*IN*/ LPWSAPROTOCOL_INFOW  lpProtocolInfo,
00103   /*IN*/ LPWSPUPCALLTABLEEX  lpUpcallTable,
00104   /*OUT*/ LPWSPPROC_TABLE  lpProcTable);
00105 
00106 typedef int WSPAPI
00107 (*LPWSPSTARTUPEX)(
00108   /*IN*/ WORD  wVersionRequested,
00109   /*OUT*/ LPWSPDATA  lpWSPData,
00110   /*IN*/ LPWSAPROTOCOL_INFOW  lpProtocolInfo,
00111   /*IN*/ LPWSPUPCALLTABLEEX  lpUpcallTable,
00112   /*OUT*/ LPWSPPROC_TABLE  lpProcTable);
00113 
00114 #define MEM_READ                          1
00115 #define MEM_WRITE                         2
00116 #define MEM_READWRITE                     3
00117 
00118 int WSPAPI
00119 WSPDeregisterMemory(
00120   /*IN*/ SOCKET  s,
00121   /*IN*/ HANDLE  Handle,
00122   /*OUT*/ LPINT  lpErrno);
00123 
00124 typedef int WSPAPI
00125 (*LPFN_WSPDEREGISTERMEMORY)(
00126   /*IN*/ SOCKET  s,
00127   /*IN*/ HANDLE  Handle,
00128   /*OUT*/ LPINT  lpErrno);
00129 
00130 int WSPAPI
00131 WSPDeregisterRdmaMemory(
00132   /*IN*/ SOCKET  s,
00133   /*IN*/ LPVOID  lpRdmaBufferDescriptor,
00134   /*IN*/ DWORD  dwDescriptorLength,
00135   /*OUT*/ LPINT  lpErrno);
00136 
00137 typedef int WSPAPI
00138 (*LPFN_WSPDEREGISTERRDMAMEMORY)(
00139   /*IN*/ SOCKET  s,
00140   /*IN*/ LPVOID  lpRdmaBufferDescriptor,
00141   /*IN*/ DWORD  dwDescriptorLength,
00142   /*OUT*/ LPINT  lpErrno);
00143 
00144 int WSPAPI
00145 WSPMemoryRegistrationCacheCallback(
00146   /*IN*/ PVOID  lpvAddress,
00147   /*IN*/ SIZE_T  Size,
00148   /*OUT*/ LPINT  lpErrno);
00149 
00150 typedef int WSPAPI
00151 (*LPFN_WSPMEMORYREGISTRATIONCACHECALLBACK)(
00152   /*IN*/ PVOID  lpvAddress,
00153   /*IN*/ SIZE_T  Size,
00154   /*OUT*/ LPINT  lpErrno);
00155 
00156 int WSPAPI
00157 WSPRdmaRead(
00158   /*IN*/ SOCKET  s,
00159   /*IN*/ LPWSABUFEX  lpBuffers,
00160   /*IN*/ DWORD  dwBufferCount,
00161   /*IN*/ LPVOID  lpTargetBufferDescriptor,
00162   /*IN*/ DWORD  dwTargetDescriptorLength,
00163   /*IN*/ DWORD  dwTargetBufferOffset,
00164   /*OUT*/ LPDWORD  lpdwNumberOfBytesRead,
00165   /*IN*/ DWORD  dwFlags,
00166   /*IN*/ LPWSAOVERLAPPED  lpOverlapped,
00167   /*IN*/ LPWSAOVERLAPPED_COMPLETION_ROUTINE  lpCompletionRoutine,
00168   /*IN*/ LPWSATHREADID  lpThreadId,
00169   /*OUT*/ LPINT  lpErrno);
00170 
00171 typedef int WSPAPI
00172 (*LPFN_WSPRDMAREAD)(
00173   /*IN*/ SOCKET  s,
00174   /*IN*/ LPWSABUFEX  lpBuffers,
00175   /*IN*/ DWORD  dwBufferCount,
00176   /*IN*/ LPVOID  lpTargetBufferDescriptor,
00177   /*IN*/ DWORD  dwTargetDescriptorLength,
00178   /*IN*/ DWORD  dwTargetBufferOffset,
00179   /*OUT*/ LPDWORD  lpdwNumberOfBytesRead,
00180   /*IN*/ DWORD  dwFlags,
00181   /*IN*/ LPWSAOVERLAPPED  lpOverlapped,
00182   /*IN*/ LPWSAOVERLAPPED_COMPLETION_ROUTINE  lpCompletionRoutine,
00183   /*IN*/ LPWSATHREADID  lpThreadId,
00184   /*OUT*/ LPINT  lpErrno);
00185 
00186 int WSPAPI
00187 WSPRdmaWrite(
00188   /*IN*/ SOCKET  s,
00189   /*IN*/ LPWSABUFEX  lpBuffers,
00190   /*IN*/ DWORD  dwBufferCount,
00191   /*IN*/ LPVOID  lpTargetBufferDescriptor,
00192   /*IN*/ DWORD  dwTargetDescriptorLength,
00193   /*IN*/ DWORD  dwTargetBufferOffset,
00194   /*OUT*/ LPDWORD  lpdwNumberOfBytesWritten,
00195   /*IN*/ DWORD  dwFlags,
00196   /*IN*/ LPWSAOVERLAPPED  lpOverlapped,
00197   /*IN*/ LPWSAOVERLAPPED_COMPLETION_ROUTINE  lpCompletionRoutine,
00198   /*IN*/ LPWSATHREADID  lpThreadId,
00199   /*OUT*/ LPINT  lpErrno);
00200 
00201 typedef int WSPAPI
00202 (*LPFN_WSPRDMAWRITE)(
00203   /*IN*/ SOCKET  s,
00204   /*IN*/ LPWSABUFEX  lpBuffers,
00205   /*IN*/ DWORD  dwBufferCount,
00206   /*IN*/ LPVOID  lpTargetBufferDescriptor,
00207   /*IN*/ DWORD  dwTargetDescriptorLength,
00208   /*IN*/ DWORD  dwTargetBufferOffset,
00209   /*OUT*/ LPDWORD  lpdwNumberOfBytesWritten,
00210   /*IN*/ DWORD  dwFlags,
00211   /*IN*/ LPWSAOVERLAPPED  lpOverlapped,
00212   /*IN*/ LPWSAOVERLAPPED_COMPLETION_ROUTINE  lpCompletionRoutine,
00213   /*IN*/ LPWSATHREADID  lpThreadId,
00214   /*OUT*/ LPINT  lpErrno);
00215 
00216 HANDLE WSPAPI
00217 WSPRegisterMemory(
00218   /*IN*/ SOCKET  s,
00219   /*IN*/ PVOID  lpBuffer,
00220   /*IN*/ DWORD  dwBufferLength,
00221   /*IN*/ DWORD  dwFlags,
00222   /*OUT*/ LPINT  lpErrno);
00223 
00224 int WSPAPI
00225 WSPRegisterRdmaMemory(
00226   /*IN*/ SOCKET  s,
00227   /*IN*/ PVOID  lpBuffer,
00228   /*IN*/ DWORD  dwBufferLength,
00229   /*IN*/ DWORD  dwFlags,
00230   /*OUT*/ LPVOID  lpRdmaBufferDescriptor,
00231   /*IN OUT*/ LPDWORD  lpdwDescriptorLength,
00232   /*OUT*/ LPINT  lpErrno);
00233 
00234 typedef int WSPAPI
00235 (*LPFN_WSPREGISTERRDMAMEMORY)(
00236   /*IN*/ SOCKET  s,
00237   /*IN*/ PVOID  lpBuffer,
00238   /*IN*/ DWORD  dwBufferLength,
00239   /*IN*/ DWORD  dwFlags,
00240   /*OUT*/ LPVOID  lpRdmaBufferDescriptor,
00241   /*IN OUT*/ LPDWORD  lpdwDescriptorLength,
00242   /*OUT*/ LPINT  lpErrno);
00243 
00244 #ifdef __cplusplus
00245 }
00246 #endif
00247 
00248 #endif /* __WS2SAN_H */