00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __VIPL
00009 #define __VIPL
00010
00017 #include "gm.h"
00018
00019
00020
00021
00022
00023
00024
00025
00027 #define IN
00028
00029 #define OUT
00030
00032 #define VIP_FALSE (0)
00033
00034 #define VIP_TRUE (1)
00035
00037 #define VIP_INFINITE (~(VIP_ULONG) 0)
00038
00044 #define VIP_SMI_AUTODISCOVERY ((VIP_ULONG) 1)
00045
00046 #define VIP_DESCRIPTOR_ALIGNMENT 64
00047
00048
00049
00051 #define VIP_SERVICE_UNRELIABLE 0x01
00052
00053 #define VIP_SERVICE_RELIABLE_DELIVERY 0x02
00054
00055 #define VIP_SERVICE_RELIABLE_RECEPTION 0x04
00056
00057
00058
00060 #define VIP_CONTROL_OP_SENDRECV 0x0000
00061
00062 #define VIP_CONTROL_OP_RDMAWRITE 0x0001
00063
00064 #define VIP_CONTROL_OP_RDMAREAD 0x0002
00065
00066 #define VIP_CONTROL_OP_RESERVED 0x0003
00067
00068 #define VIP_CONTROL_OP_MASK 0x0003
00069
00070 #define VIP_CONTROL_IMMEDIATE 0x0004
00071
00072 #define VIP_CONTROL_QFENCE 0x0008
00073
00074 #define VIP_CONTROL_RESERVED 0xFFF0
00075
00076
00077
00079 #define VIP_STATUS_DONE 0x00000001
00080
00081 #define VIP_STATUS_FORMAT_ERROR 0x00000002
00082
00083 #define VIP_STATUS_PROTECTION_ERROR 0x00000004
00084
00085 #define VIP_STATUS_LENGTH_ERROR 0x00000008
00086
00087 #define VIP_STATUS_PARTIAL_ERROR 0x00000010
00088
00089 #define VIP_STATUS_DESC_FLUSHED_ERROR 0x00000020
00090
00091 #define VIP_STATUS_TRANSPORT_ERROR 0x00000040
00092
00093 #define VIP_STATUS_RDMA_PROT_ERROR 0x00000080
00094
00095 #define VIP_STATUS_REMOTE_DESC_ERROR 0x00000100
00096
00097 #define VIP_STATUS_ERROR_MASK 0x000001FE
00098
00099 #define VIP_STATUS_OP_SEND 0x00000000
00100
00101 #define VIP_STATUS_OP_RECEIVE 0x00010000
00102
00103 #define VIP_STATUS_OP_RDMA_WRITE 0x00020000
00104
00105 #define VIP_STATUS_OP_REMOTE_RDMA_WRITE 0x00030000
00106
00107 #define VIP_STATUS_OP_RDMA_READ 0x00040000
00108
00109 #define VIP_STATUS_OP_MASK 0x00070000
00110
00111 #define VIP_STATUS_IMMEDIATE 0x00080000
00112
00113 #define VIP_STATUS_RESERVED 0xFFF0FE00
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00126 typedef void *VIP_PVOID;
00128 typedef int VIP_BOOLEAN;
00130 typedef char VIP_CHAR;
00132 typedef unsigned char VIP_UCHAR;
00134 typedef unsigned short VIP_USHORT;
00136 typedef unsigned long VIP_ULONG;
00137
00138
00140 typedef gm_u8_t VIP_UINT8;
00142 typedef gm_u16_t VIP_UINT16;
00144 typedef gm_u32_t VIP_UINT32;
00146 typedef gm_u64_t VIP_UINT64;
00147
00148
00149
00151 typedef VIP_PVOID VIP_NIC_HANDLE;
00153 typedef VIP_PVOID VIP_VI_HANDLE;
00155 typedef VIP_PVOID VIP_PROTECTION_HANDLE;
00157 typedef VIP_PVOID VIP_CONN_HANDLE;
00159 typedef VIP_PVOID VIP_CQ_HANDLE;
00160
00161
00162
00166 typedef VIP_UINT32 VIP_MEM_HANDLE;
00168 typedef VIP_PVOID VIP_QOS;
00169
00170
00172 typedef struct VIP_NET_ADDRESS
00173 {
00175 VIP_UINT16 HostAddressLen;
00177 VIP_UINT16 DiscriminatorLen;
00179 VIP_UINT8 HostAddress[1];
00180 }
00181 VIP_NET_ADDRESS;
00182
00183
00185 typedef VIP_USHORT VIP_RELIABILITY_LEVEL;
00186
00188 typedef struct VIP_NIC_ATTRIBUTES
00189 {
00191 VIP_CHAR Name[64];
00193 VIP_ULONG HardwareVersion;
00195 VIP_ULONG ProviderVersion;
00197 VIP_UINT16 NicAddressLen;
00199 const VIP_UINT8 *LocalNicAddress;
00201 VIP_BOOLEAN ThreadSafe;
00206 VIP_UINT16 MaxDiscriminatorLen;
00208 VIP_ULONG MaxRegisterBytes;
00210 VIP_ULONG MaxRegisterRegions;
00212 VIP_ULONG MaxRegisterBlockBytes;
00214 VIP_ULONG MaxVI;
00216 VIP_ULONG MaxDescriptorsPerQueue;
00219 VIP_ULONG MaxSegmentsPerDesc;
00221 VIP_ULONG MaxCQ;
00224 VIP_ULONG MaxCQEntries;
00226 VIP_ULONG MaxTransferSize;
00228 VIP_ULONG NativeMTU;
00230 VIP_ULONG MaxPtags;
00232 VIP_RELIABILITY_LEVEL ReliabilityLevelSupport;
00234 VIP_RELIABILITY_LEVEL RDMAReadSupport;
00235 }
00236 VIP_NIC_ATTRIBUTES;
00237
00238
00240 typedef union VIP_PVOID64
00241 {
00243 VIP_UINT64 AddressBits;
00245 VIP_PVOID Address;
00246 }
00247 VIP_PVOID64;
00248
00249
00251 typedef struct VIP_CONTROL_SEGMENT
00252 {
00254 VIP_PVOID64 Next;
00256 VIP_MEM_HANDLE NextHandle;
00258 VIP_UINT16 SegCount;
00260 VIP_UINT16 Control;
00262 VIP_UINT32 Reserved;
00264 VIP_UINT32 ImmediateData;
00266 VIP_UINT32 Length;
00268 VIP_UINT32 Status;
00269 }
00270 VIP_CONTROL_SEGMENT;
00271
00272
00274 typedef struct VIP_ADDRESS_SEGMENT
00275 {
00277 VIP_PVOID64 Data;
00279 VIP_MEM_HANDLE Handle;
00281 VIP_UINT32 Reserved;
00282 }
00283 VIP_ADDRESS_SEGMENT;
00284
00285
00287 typedef struct VIP_DATA_SEGMENT
00288 {
00290 VIP_PVOID64 Data;
00292 VIP_MEM_HANDLE Handle;
00294 VIP_UINT32 Length;
00295 }
00296 VIP_DATA_SEGMENT;
00297
00298
00300 typedef union VIP_DESCRIPTOR_SEGMENT
00301 {
00303 VIP_ADDRESS_SEGMENT Remote;
00305 VIP_DATA_SEGMENT Local;
00306 }
00307 VIP_DESCRIPTOR_SEGMENT;
00308
00309
00311 typedef struct VIP_DESCRIPTOR
00312 {
00314 VIP_CONTROL_SEGMENT CS;
00316 VIP_DESCRIPTOR_SEGMENT DS[2];
00317 }
00318 VIP_DESCRIPTOR;
00319
00320
00322 typedef enum VIP_VI_STATE
00323 {
00325 VIP_STATE_IDLE,
00327 VIP_STATE_CONNECTED,
00329 VIP_STATE_CONNECT_PENDING,
00331 VIP_STATE_ERROR
00332 }
00333 VIP_VI_STATE;
00334
00335
00337 typedef struct VIP_VI_ATTRIBUTES
00338 {
00340 VIP_RELIABILITY_LEVEL ReliabilityLevel;
00342 VIP_ULONG MaxTransferSize;
00344 VIP_QOS QoS;
00346 VIP_PROTECTION_HANDLE Ptag;
00349 VIP_BOOLEAN EnableRdmaWrite;
00352 VIP_BOOLEAN EnableRdmaRead;
00353 }
00354 VIP_VI_ATTRIBUTES;
00355
00356
00358 typedef struct VIP_MEM_ATTRIBUTES
00359 {
00361 VIP_PROTECTION_HANDLE Ptag;
00364 VIP_BOOLEAN EnableRdmaWrite;
00367 VIP_BOOLEAN EnableRdmaRead;
00368 }
00369 VIP_MEM_ATTRIBUTES;
00370
00371
00373 typedef struct
00374 {
00376 VIP_ULONG NumberOfHops;
00379 VIP_NET_ADDRESS **ADAddrArray;
00381 VIP_ULONG NumAdAddrs;
00382 }
00383 VIP_AUTODISCOVERY_LIST;
00384
00385
00387 typedef enum VIP_ERROR_CODE
00388 {
00393 VIP_ERROR_POST_DESC,
00396 VIP_ERROR_CONN_LOST,
00398 VIP_ERROR_RECVQ_EMPTY,
00401 VIP_ERROR_VI_OVERRUN,
00403 VIP_ERROR_RDMAW_PROT,
00406 VIP_ERROR_RDMAW_DATA,
00408 VIP_ERROR_RDMAW_ABORT,
00410 VIP_ERROR_RDMAR_PROT,
00413 VIP_ERROR_COMP_PROT,
00415 VIP_ERROR_RDMA_TRANSPORT,
00417 VIP_ERROR_CATASTROPHIC
00418 }
00419 VIP_ERROR_CODE;
00420
00421
00423 typedef enum VIP_RESOURCE_CODE
00424 {
00425 VIP_RESOURCE_NIC,
00426 VIP_RESOURCE_VI,
00427 VIP_RESOURCE_CQ,
00428 VIP_RESOURCE_DESCRIPTOR
00429 }
00430 VIP_RESOURCE_CODE;
00431
00432
00434 typedef struct VIP_ERROR_DESCRIPTOR
00435 {
00437 VIP_NIC_HANDLE NicHandle;
00439 VIP_VI_HANDLE ViHandle;
00441 VIP_CQ_HANDLE CQHandle;
00443 VIP_DESCRIPTOR *DescriptorPtr;
00445 VIP_ULONG OpCode;
00448 VIP_RESOURCE_CODE ResourceCode;
00450 VIP_ERROR_CODE ErrorCode;
00451 }
00452 VIP_ERROR_DESCRIPTOR;
00453
00454
00455
00457 enum VIP_RETURN
00458 {
00460 VIP_SUCCESS,
00462 VIP_NOT_DONE,
00464 VIP_INVALID_PARAMETER,
00466 VIP_ERROR_RESOURCE,
00468 VIP_TIMEOUT,
00470 VIP_REJECT,
00472 VIP_INVALID_RELIABILITY_LEVEL,
00475 VIP_INVALID_MTU,
00478 VIP_INVALID_QOS,
00480 VIP_INVALID_PTAG,
00483 VIP_INVALID_RDMAREAD,
00486 VIP_DESCRIPTOR_ERROR,
00488 VIP_INVALID_STATE,
00491 VIP_ERROR_NAMESERVICE,
00493 VIP_NO_MATCH,
00496 VIP_NOT_REACHABLE
00497 };
00498
00500 typedef enum VIP_RETURN VIP_RETURN;
00501
00502
00503
00504
00505
00506
00507
00508
00509 #ifndef WIN32
00510
00511 # define VIP_ENTRY_POINT
00512 #else
00513 # ifdef VIP_BUILD_DLL
00514
00515 # define VIP_ENTRY_POINT __declspec (dllexport)
00516 # else
00517
00518 # define VIP_ENTRY_POINT __declspec (dllimport)
00519 # endif
00520 #endif
00521
00523 VIP_ENTRY_POINT extern VIP_RETURN
00524 VipOpenNic (IN const VIP_CHAR * DeviceName,
00525 OUT VIP_NIC_HANDLE * NicHandle);
00526
00528 VIP_ENTRY_POINT extern VIP_RETURN
00529 VipCloseNic (IN VIP_NIC_HANDLE NicHandle);
00530
00532 VIP_ENTRY_POINT extern VIP_RETURN
00533 VipCreateVi (IN VIP_NIC_HANDLE NicHandle,
00534 IN VIP_VI_ATTRIBUTES * ViAttribs,
00535 IN VIP_CQ_HANDLE SendCQHandle,
00536 IN VIP_CQ_HANDLE RecvCQHandle,
00537 OUT VIP_VI_HANDLE * ViHandle);
00538
00540 VIP_ENTRY_POINT extern VIP_RETURN
00541 VipDestroyVi (IN VIP_VI_HANDLE ViHandle);
00542
00545 VIP_ENTRY_POINT extern VIP_RETURN
00546 VipConnectWait (IN VIP_NIC_HANDLE NicHandle,
00547 IN VIP_NET_ADDRESS * LocalAddr,
00548 IN VIP_ULONG Timeout,
00549 OUT VIP_NET_ADDRESS * RemoteAddr,
00550 OUT VIP_VI_ATTRIBUTES * RemoteViAttribs,
00551 OUT VIP_CONN_HANDLE * ConnHandle);
00552
00555 VIP_ENTRY_POINT extern VIP_RETURN
00556 VipConnectAccept (IN VIP_CONN_HANDLE ConnHandle,
00557 IN VIP_VI_HANDLE ViHandle);
00558
00560 VIP_ENTRY_POINT extern VIP_RETURN
00561 VipConnectReject (IN VIP_CONN_HANDLE ConnHandle);
00562
00565 VIP_ENTRY_POINT extern VIP_RETURN
00566 VipConnectRequest (IN VIP_VI_HANDLE ViHandle,
00567 IN VIP_NET_ADDRESS * LocalAddr,
00568 IN VIP_NET_ADDRESS * RemoteAddr,
00569 IN VIP_ULONG Timeout,
00570 OUT VIP_VI_ATTRIBUTES * RemoteViAttribs);
00571
00573 VIP_ENTRY_POINT extern VIP_RETURN
00574 VipDisconnect (IN VIP_VI_HANDLE ViHandle);
00575
00577 VIP_ENTRY_POINT extern VIP_RETURN
00578 VipCreatePtag (IN VIP_NIC_HANDLE NicHandle,
00579 OUT VIP_PROTECTION_HANDLE * Ptag);
00580
00582 VIP_ENTRY_POINT extern VIP_RETURN
00583 VipDestroyPtag (IN VIP_NIC_HANDLE NicHandle,
00584 IN VIP_PROTECTION_HANDLE Ptag);
00585
00588 VIP_ENTRY_POINT extern VIP_RETURN
00589 VipRegisterMem (IN VIP_NIC_HANDLE NicHandle,
00590 IN VIP_PVOID VirtualAddress,
00591 IN VIP_ULONG Length,
00592 IN VIP_MEM_ATTRIBUTES * MemAttribs,
00593 OUT VIP_MEM_HANDLE * MemoryHandle);
00594
00597 VIP_ENTRY_POINT extern VIP_RETURN
00598 VipDeregisterMem (IN VIP_NIC_HANDLE NicHandle,
00599 IN VIP_PVOID VirtualAddress,
00600 IN VIP_MEM_HANDLE MemoryHandle);
00601
00604 VIP_ENTRY_POINT extern VIP_RETURN
00605 VipPostSend (IN VIP_VI_HANDLE ViHandle,
00606 IN VIP_DESCRIPTOR * DescriptorPtr,
00607 IN VIP_MEM_HANDLE MemoryHandle);
00608
00611 VIP_ENTRY_POINT extern VIP_RETURN
00612 VipSendDone (IN VIP_VI_HANDLE ViHandle,
00613 OUT VIP_DESCRIPTOR ** DescriptorPtr);
00614
00617 VIP_ENTRY_POINT extern VIP_RETURN
00618 VipSendWait (IN VIP_VI_HANDLE ViHandle,
00619 IN VIP_ULONG Timeout,
00620 OUT VIP_DESCRIPTOR ** DescriptorPtr);
00621
00624 VIP_ENTRY_POINT extern VIP_RETURN
00625 VipPostRecv (IN VIP_VI_HANDLE ViHandle,
00626 IN VIP_DESCRIPTOR * DescriptorPtr,
00627 IN VIP_MEM_HANDLE MemoryHandle);
00628
00631 VIP_ENTRY_POINT extern VIP_RETURN
00632 VipRecvDone (IN VIP_VI_HANDLE ViHandle,
00633 OUT VIP_DESCRIPTOR ** DescriptorPtr);
00634
00637 VIP_ENTRY_POINT extern VIP_RETURN
00638 VipRecvWait (IN VIP_VI_HANDLE ViHandle,
00639 IN VIP_ULONG Timeout,
00640 OUT VIP_DESCRIPTOR ** DescriptorPtr);
00641
00644 VIP_ENTRY_POINT extern VIP_RETURN
00645 VipCQDone (IN VIP_CQ_HANDLE CQHandle,
00646 OUT VIP_VI_HANDLE * ViHandle,
00647 OUT VIP_BOOLEAN * RecvQueue);
00648
00651 VIP_ENTRY_POINT extern VIP_RETURN
00652 VipCQWait (IN VIP_CQ_HANDLE CQHandle,
00653 IN VIP_ULONG Timeout,
00654 OUT VIP_VI_HANDLE * ViHandle,
00655 OUT VIP_BOOLEAN * RecvQueue);
00656
00659 VIP_ENTRY_POINT extern VIP_RETURN
00660 VipSendNotify (IN VIP_VI_HANDLE ViHandle,
00661 IN VIP_PVOID Context,
00662 IN void (*Handler) (IN VIP_PVOID Context,
00663 IN VIP_NIC_HANDLE NicHandle,
00664 IN VIP_VI_HANDLE ViHandle,
00665 IN VIP_DESCRIPTOR * DescriptorPtr));
00666
00669 VIP_ENTRY_POINT extern VIP_RETURN
00670 VipRecvNotify (IN VIP_VI_HANDLE ViHandle,
00671 IN VIP_PVOID Context,
00672 IN void (*Handler) (IN VIP_PVOID Context,
00673 IN VIP_NIC_HANDLE NicHandle,
00674 IN VIP_VI_HANDLE ViHandle,
00675 IN VIP_DESCRIPTOR * DescriptorPtr));
00676
00679 VIP_ENTRY_POINT extern VIP_RETURN
00680 VipCQNotify (IN VIP_CQ_HANDLE CQHandle,
00681 IN VIP_PVOID Context,
00682 IN void (*Handler) (IN VIP_PVOID Context,
00683 IN VIP_NIC_HANDLE NicHandle,
00684 IN VIP_VI_HANDLE ViHandle,
00685 IN VIP_BOOLEAN RecvQueue));
00686
00688 VIP_ENTRY_POINT extern VIP_RETURN
00689 VipCreateCQ (IN VIP_NIC_HANDLE NicHandle,
00690 IN VIP_ULONG EntryCount, OUT VIP_CQ_HANDLE * CQHandle);
00691
00693 VIP_ENTRY_POINT extern VIP_RETURN
00694 VipDestroyCQ (IN VIP_CQ_HANDLE CQHandle);
00695
00697 VIP_ENTRY_POINT extern VIP_RETURN
00698 VipResizeCQ (IN VIP_CQ_HANDLE CQHandle, IN VIP_ULONG EntryCount);
00699
00701 VIP_ENTRY_POINT extern VIP_RETURN
00702 VipQueryNic (IN VIP_NIC_HANDLE NicHandle,
00703 OUT VIP_NIC_ATTRIBUTES * NicAttribs);
00704
00706 VIP_ENTRY_POINT extern VIP_RETURN
00707 VipSetViAttributes (IN VIP_VI_HANDLE ViHandle,
00708 IN VIP_VI_ATTRIBUTES * ViAttribs);
00709
00711 VIP_ENTRY_POINT extern VIP_RETURN
00712 VipQueryVi (IN VIP_VI_HANDLE ViHandle,
00713 OUT VIP_VI_STATE * State,
00714 OUT VIP_VI_ATTRIBUTES * ViAttribs,
00715 OUT VIP_BOOLEAN * ViSendQEmpty,
00716 OUT VIP_BOOLEAN * ViRecvQEmpty);
00717
00719 VIP_ENTRY_POINT extern VIP_RETURN
00720 VipSetMemAttributes (IN VIP_NIC_HANDLE NicHandle,
00721 IN VIP_PVOID Address,
00722 IN VIP_MEM_HANDLE MemHandle,
00723 IN VIP_MEM_ATTRIBUTES * MemAttribs);
00724
00726 VIP_ENTRY_POINT extern VIP_RETURN
00727 VipQueryMem (IN VIP_NIC_HANDLE NicHandle,
00728 IN VIP_PVOID Address,
00729 IN VIP_MEM_HANDLE MemHandle,
00730 OUT VIP_MEM_ATTRIBUTES * MemAttribs);
00731
00734 VIP_ENTRY_POINT extern VIP_RETURN
00735 VipQuerySystemManagementInfo (IN VIP_NIC_HANDLE NicHandle,
00736 IN VIP_ULONG InfoType,
00737 OUT VIP_PVOID SysManInfo);
00738
00741 VIP_ENTRY_POINT extern VIP_RETURN
00742 VipErrorCallback (IN VIP_NIC_HANDLE NicHandle,
00743 IN VIP_PVOID Context,
00744 IN void (*Handler) (IN VIP_PVOID Context,
00745 IN VIP_ERROR_DESCRIPTOR * ErrorDesc));
00746
00747
00748
00749
00750
00751
00755 VIP_ENTRY_POINT extern VIP_RETURN
00756 VipConnectPeerRequest (IN VIP_VI_HANDLE ViHandle,
00757 IN VIP_NET_ADDRESS * LocalAddr,
00758 IN VIP_NET_ADDRESS * RemoteAddr,
00759 IN VIP_ULONG Timeout);
00760
00763 VIP_ENTRY_POINT extern VIP_RETURN
00764 VipConnectPeerDone (IN VIP_VI_HANDLE ViHandle,
00765 OUT VIP_VI_ATTRIBUTES * RemoteViAttribs);
00766
00769 VIP_ENTRY_POINT extern VIP_RETURN
00770 VipConnectPeerWait (IN VIP_VI_HANDLE ViHandle,
00771 OUT VIP_VI_ATTRIBUTES * RemoteViAttribs);
00772
00773
00774
00775
00776
00777
00779 VIP_ENTRY_POINT extern VIP_RETURN
00780 VipNSInit (IN VIP_NIC_HANDLE NicHandle,
00781 IN VIP_PVOID NSInitInfo);
00782
00785 VIP_ENTRY_POINT extern VIP_RETURN
00786 VipNSGetHostByName (IN VIP_NIC_HANDLE NicHandle,
00787 IN VIP_CHAR * Name,
00788 OUT VIP_NET_ADDRESS * Address,
00789 IN VIP_ULONG NameIndex);
00790
00793 VIP_ENTRY_POINT extern VIP_RETURN
00794 VipNSGetHostByAddr (IN VIP_NIC_HANDLE NicHandle,
00795 IN VIP_NET_ADDRESS * Address,
00796 OUT VIP_CHAR * Name,
00797 IN OUT VIP_ULONG * NameLen);
00798
00800 VIP_ENTRY_POINT extern VIP_RETURN
00801 VipNSShutdown (IN VIP_NIC_HANDLE NicHandle);
00802
00803
00804 #endif