windows-nt/Source/XPSP1/NT/public/ddk/inc/ws2san.h
2020-09-26 16:20:57 +08:00

288 lines
6.8 KiB
C

/*++
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
ws2san.h
Abstract:
This module contains the Microsoft-specific extensions to the Windows
Sockets SPI for WinSock Direct (SAN) support.
Revision History:
--*/
#ifndef _WS2SAN_H_
#define _WS2SAN_H_
#ifdef __cplusplus
extern "C" {
#endif
/*
* Option for getting maximum RDMA transfer size supported by provider
*/
#define SO_MAX_RDMA_SIZE 0x700D
/*
* Option for getting minimum RDMA transfer size feasible (performance-wise)
* for the provider
*/
#define SO_RDMA_THRESHOLD_SIZE 0x700E
/*
* The upcall table. This structure is passed by value to the service
* provider's WSPStartup() entrypoint.
*/
typedef struct _WSPUPCALLTABLEEX {
LPWPUCLOSEEVENT lpWPUCloseEvent;
LPWPUCLOSESOCKETHANDLE lpWPUCloseSocketHandle;
LPWPUCREATEEVENT lpWPUCreateEvent;
LPWPUCREATESOCKETHANDLE lpWPUCreateSocketHandle;
LPWPUFDISSET lpWPUFDIsSet;
LPWPUGETPROVIDERPATH lpWPUGetProviderPath;
LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle;
LPWPUPOSTMESSAGE lpWPUPostMessage;
LPWPUQUERYBLOCKINGCALLBACK lpWPUQueryBlockingCallback;
LPWPUQUERYSOCKETHANDLECONTEXT lpWPUQuerySocketHandleContext;
LPWPUQUEUEAPC lpWPUQueueApc;
LPWPURESETEVENT lpWPUResetEvent;
LPWPUSETEVENT lpWPUSetEvent;
LPWPUOPENCURRENTTHREAD lpWPUOpenCurrentThread;
LPWPUCLOSETHREAD lpWPUCloseThread;
LPWPUCOMPLETEOVERLAPPEDREQUEST lpWPUCompleteOverlappedRequest;
} WSPUPCALLTABLEEX, FAR * LPWSPUPCALLTABLEEX;
/*
* An extended WSABUF, that includes a registration handle
*/
typedef struct _WSABUFEX {
u_long len; /* the length of the buffer */
char FAR * buf; /* the pointer to the buffer */
HANDLE handle; /* The handle returned by WSPRegisterMemory */
} WSABUFEX, FAR * LPWSABUFEX;
/*
* WinSock 2 SPI socket function prototypes
*/
int
WSPAPI
WSPStartupEx(
IN WORD wVersionRequested,
OUT LPWSPDATA lpWSPData,
IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
IN LPWSPUPCALLTABLEEX lpUpcallTable,
OUT LPWSPPROC_TABLE lpProcTable
);
typedef
int
(WSPAPI * LPWSPSTARTUPEX)(
WORD wVersionRequested,
LPWSPDATA lpWSPData,
LPWSAPROTOCOL_INFOW lpProtocolInfo,
LPWSPUPCALLTABLEEX lpUpcallTable,
LPWSPPROC_TABLE lpProcTable
);
#define WSAID_REGISTERMEMORY \
{0xC0B422F5,0xF58C,0x11d1,{0xAD,0x6C,0x00,0xC0,0x4F,0xA3,0x4A,0x2D}}
#define WSAID_DEREGISTERMEMORY \
{0xC0B422F6,0xF58C,0x11d1,{0xAD,0x6C,0x00,0xC0,0x4F,0xA3,0x4A,0x2D}}
#define WSAID_REGISTERRDMAMEMORY \
{0xC0B422F7,0xF58C,0x11d1,{0xAD,0x6C,0x00,0xC0,0x4F,0xA3,0x4A,0x2D}}
#define WSAID_DEREGISTERRDMAMEMORY \
{0xC0B422F8,0xF58C,0x11d1,{0xAD,0x6C,0x00,0xC0,0x4F,0xA3,0x4A,0x2D}}
#define WSAID_RDMAWRITE \
{0xC0B422F9,0xF58C,0x11d1,{0xAD,0x6C,0x00,0xC0,0x4F,0xA3,0x4A,0x2D}}
#define WSAID_RDMAREAD \
{0xC0B422FA,0xF58C,0x11d1,{0xAD,0x6C,0x00,0xC0,0x4F,0xA3,0x4A,0x2D}}
#define WSAID_MEMORYREGISTRATIONCACHECALLBACK \
{0xE5DA4AF8,0xD824,0x48CD,{0xA7,0x99,0x63,0x37,0xA9,0x8E,0xD2,0xAF}}
#define MEM_READ 1
#define MEM_WRITE 2
#define MEM_READWRITE 3
HANDLE WSPAPI
WSPRegisterMemory(
IN SOCKET s,
IN PVOID lpBuffer,
IN DWORD dwBufferLength,
IN DWORD dwFlags,
OUT LPINT lpErrno
);
int WSPAPI
WSPDeregisterMemory(
IN SOCKET s,
IN HANDLE handle,
OUT LPINT lpErrno
);
int WSPAPI
WSPRegisterRdmaMemory(
IN SOCKET s,
IN PVOID lpBuffer,
IN DWORD dwBufferLength,
IN DWORD dwFlags,
OUT LPVOID lpRdmaBufferDescriptor,
IN OUT LPDWORD lpdwDescriptorLength,
OUT LPINT lpErrno
);
int WSPAPI
WSPDeregisterRdmaMemory(
IN SOCKET s,
IN LPVOID lpRdmaBufferDescriptor,
IN DWORD dwDescriptorLength,
OUT LPINT lpErrno
);
int WSPAPI
WSPRdmaWrite(
IN SOCKET s,
IN LPWSABUFEX lpBuffers,
IN DWORD dwBufferCount,
IN LPVOID lpTargetBufferDescriptor,
IN DWORD dwTargetDescriptorLength,
IN DWORD dwTargetBufferOffset,
OUT LPDWORD lpdwNumberOfBytesWritten,
IN DWORD dwFlags,
IN LPWSAOVERLAPPED lpOverlapped,
IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
IN LPWSATHREADID lpThreadId,
OUT LPINT lpErrno
);
int WSPAPI
WSPRdmaRead(
IN SOCKET s,
IN LPWSABUFEX lpBuffers,
IN DWORD dwBufferCount,
IN LPVOID lpTargetBufferDescriptor,
IN DWORD dwTargetDescriptorLength,
IN DWORD dwTargetBufferOffset,
OUT LPDWORD lpdwNumberOfBytesRead,
IN DWORD dwFlags,
IN LPWSAOVERLAPPED lpOverlapped,
IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
IN LPWSATHREADID lpThreadId,
OUT LPINT lpErrno
);
int WSPAPI
WSPMemoryRegistrationCacheCallback(
IN LPVOID lpvAddress,
IN SIZE_T Size,
OUT LPINT lpErrno
);
/*
* "QueryInterface" versions of the above APIs.
*/
typedef
HANDLE
(WSPAPI * LPFN_WSPREGISTERMEMORY)(
IN SOCKET s,
IN PVOID lpBuffer,
IN DWORD dwBufferLength,
IN DWORD dwFlags,
OUT LPINT lpErrno
);
typedef
int
(WSPAPI * LPFN_WSPDEREGISTERMEMORY)(
IN SOCKET s,
IN HANDLE handle,
OUT LPINT lpErrno
);
typedef
BOOL
(WSPAPI * LPFN_WSPREGISTERRDMAMEMORY)(
IN SOCKET s,
IN PVOID lpBuffer,
IN DWORD dwBufferLength,
IN DWORD dwFlags,
OUT LPVOID lpRdmaBufferDescriptor,
IN OUT LPDWORD lpdwDescriptorLength,
OUT LPINT lpErrno
);
typedef
int
(WSPAPI * LPFN_WSPDEREGISTERRDMAMEMORY)(
IN SOCKET s,
IN LPVOID lpRdmaBufferDescriptor,
IN DWORD dwDescriptorLength,
OUT LPINT lpErrno
);
typedef
int
(WSPAPI * LPFN_WSPRDMAWRITE)(
IN SOCKET s,
IN LPWSABUFEX lpBuffers,
IN DWORD dwBufferCount,
IN LPVOID lpTargetBufferDescriptor,
IN DWORD dwTargetDescriptorLength,
IN DWORD dwTargetBufferOffset,
OUT LPDWORD lpdwNumberOfBytesWritten,
IN DWORD dwFlags,
IN LPWSAOVERLAPPED lpOverlapped,
IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
IN LPWSATHREADID lpThreadId,
OUT LPINT lpErrno
);
typedef
int
(WSPAPI * LPFN_WSPRDMAREAD)(
IN SOCKET s,
IN LPWSABUFEX lpBuffers,
IN DWORD dwBufferCount,
IN LPVOID lpTargetBufferDescriptor,
IN DWORD dwTargetDescriptorLength,
IN DWORD dwTargetBufferOffset,
OUT LPDWORD lpdwNumberOfBytesRead,
IN DWORD dwFlags,
IN LPWSAOVERLAPPED lpOverlapped,
IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
IN LPWSATHREADID lpThreadId,
OUT LPINT lpErrno
);
typedef
int
(WSPAPI * LPFN_WSPMEMORYREGISTRATIONCACHECALLBACK)(
IN LPVOID lpvAddress,
IN SIZE_T Size,
OUT LPINT lpErrno
);
#ifdef __cplusplus
}
#endif
#endif // _WS2SAN_H_