[ofw] [RFC] [PATCH 3/12] winverbs: define IOCTL interface
Fab Tillier
ftillier at windows.microsoft.com
Sat Mar 15 00:31:38 PDT 2008
I haven't had a chance to look at these in depth, but the first thing that jumped out at me is you want to make sure you have unique values for your IOCTLs from IBAL, so that both IBAL and your WV kernel driver can be in the same device stack and be able to distinguish one another's IOCTLs (looking at the code it seems that IBAL doesn't start its function codes at above 0x800, which it should).
-Fab
-----Original Message-----
From: ofw-bounces at lists.openfabrics.org [mailto:ofw-bounces at lists.openfabrics.org] On Behalf Of Sean Hefty
Sent: Friday, March 14, 2008 10:59 PM
To: Hefty, Sean; ofw at lists.openfabrics.org
Subject: [ofw] [RFC] [PATCH 3/12] winverbs: define IOCTL interface
WinVerb IOCTL interface.
This file will be shared by userspace and the kernel. All data structures
are defined to produce the same layout for 32-bit and 64-bit mode
with proper data alignment, without the need for packing or compile
added padding.
Signed-off-by: Sean Hefty <sean.hefty at intel.com>
---
Index: core/winverbs/wv_ioctl.h
===================================================================
--- core/winverbs/wv_ioctl.h (revision 0)
+++ core/winverbs/wv_ioctl.h (revision 0)
@@ -0,0 +1,404 @@
+/*
+ * Copyright (c) 2008 Intel Corporation. All rights reserved.
+ *
+ * This software is available to you under the OpenIB.org BSD license
+ * below:
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AWV
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#pragma once
+
+#ifndef _WV_IOCTL_H_
+#define _WV_IOCTL_H_
+
+#include <winioctl.h>
+
+#define WV_IOCTL(f) CTL_CODE(FILE_DEVICE_INFINIBAND, f, METHOD_BUFFERED,\
+ FILE_READ_DATA | FILE_WRITE_DATA)
+
+// IOCTL
+// input parameter / output parameter
+#define WV_IOCTL_GUID_QUERY WV_IOCTL(0x801)
+// none / WV_IO_GUID_LIST
+
+#define WV_IOCTL_LIBRARY_QUERY WV_IOCTL(0x802)
+// UINT64 Guid / LibraryName[32]
+
+#define WV_IOCTL_DEVICE_OPEN WV_IOCTL(0x803)
+// WV_IO_ID / WV_IO_ID
+
+#define WV_IOCTL_DEVICE_CLOSE WV_IOCTL(0x804)
+// UINT64 Id / none
+
+#define WV_IOCTL_DEVICE_QUERY WV_IOCTL(0x805)
+// UINT64 Id / WV_IO_DEVICE_ATTRIBUTES
+
+#define WV_IOCTL_DEVICE_PORT_QUERY WV_IOCTL(0x806)
+// WV_IO_DEVICE_PORT_QUERY / WV_IO_PORT_ATTRIBUTES == WV_PORT_ATTRIBUTES
+
+#define WV_IOCTL_DEVICE_GID_QUERY WV_IOCTL(0x807)
+// WV_IO_DEVICE_PORT_QUERY / WV_IO_GID[] == WV_GID[]
+
+#define WV_IOCTL_DEVICE_PKEY_QUERY WV_IOCTL(0x808)
+// WV_IO_DEVICE_PORT_QUERY / UINT16 Pkey[]
+
+#define WV_IOCTL_DEVICE_NOTIFY WV_IOCTL(0x809)
+// UINT64 Id / WV_IO_EVENT
+
+#define WV_IOCTL_PD_ALLOCATE WV_IOCTL(0x80A)
+// WV_IO_ID / WV_IO_ID
+
+#define WV_IOCTL_PD_DEALLOCATE WV_IOCTL(0x80B)
+// UINT64 Id / none
+
+#define WV_IOCTL_MEMORY_REGISTER WV_IOCTL(0x80C)
+// WV_IO_MEMORY_REGISTER / WV_IO_MEMORY_KEYS
+
+#define WV_IOCTL_MEMORY_DEREGISTER WV_IOCTL(0x80D)
+// WV_IO_MEMORY_DEREGISTER / ci_umv_buf_t
+
+#define WV_IOCTL_MW_ALLOCATE WV_IOCTL(0x80E)
+// WV_IO_ID / WV_IO_ID
+
+#define WV_IOCTL_MW_DEALLOCATE WV_IOCTL(0x80F)
+// UINT64 Id / none
+
+#define WV_IOCTL_AH_CREATE WV_IOCTL(0x810)
+// WV_IO_AH_CREATE / WV_IO_ID
+
+#define WV_IOCTL_AH_DESTROY WV_IOCTL(0x811)
+// UINT64 Id / none
+
+#define WV_IOCTL_CQ_CREATE WV_IOCTL(0x812)
+// WV_IO_ID / WV_IO_ID
+
+#define WV_IOCTL_CQ_RESIZE WV_IOCTL(0x813)
+// WV_IO_ID / WV_IO_ID
+
+#define WV_IOCTL_CQ_NOTIFY WV_IOCTL(0x814)
+// WV_IO_ID / none
+
+#define WV_IOCTL_CQ_BATCH_NOTIFY WV_IOCTL(0x815)
+// WV_IO_ID / none
+
+#define WV_IOCTL_CQ_DESTROY WV_IOCTL(0x816)
+// UINT64 Id / none
+
+#define WV_IOCTL_SRQ_CREATE WV_IOCTL(0x817)
+// WV_IO_SRQ_ATTRIBUTES / WV_IO_ID
+
+#define WV_IOCTL_SRQ_QUERY WV_IOCTL(0x818)
+// WV_IO_ID / WV_IO_SRQ_ATTRIBUTES
+
+#define WV_IOCTL_SRQ_MODIFY WV_IOCTL(0x819)
+// WV_IO_SRQ_ATTRIBUTES / UINT32 VerbInfo
+
+#define WV_IOCTL_SRQ_NOTIFY WV_IOCTL(0x81A)
+// UINT64 Id / none
+
+#define WV_IOCTL_SRQ_DESTROY WV_IOCTL(0x81B)
+// UINT64 Id / none
+
+#define WV_IOCTL_QP_CREATE WV_IOCTL(0x81C)
+// WV_IO_QP_CREATE / WV_IO_ID
+
+#define WV_IOCTL_QP_QUERY WV_IOCTL(0x81D)
+// WV_IO_ID / WV_IO_QP_ATTRIBUTES
+
+#define WV_IOCTL_QP_MODIFY WV_IOCTL(0x81E)
+// WV_IO_QP_ATTRIBUTES / none
+
+#define WV_IOCTL_QP_DESTROY WV_IOCTL(0x81F)
+// UINT64 Id / none
+
+// TODO
+#define WV_IOCTL_ADDRESS_QUERY WV_IOCTL(0x820)
+#define WV_IOCTL_EP_CREATE WV_IOCTL(0x821)
+#define WV_IOCTL_EP_BIND WV_IOCTL(0x822)
+#define WV_IOCTL_EP_REJECT WV_IOCTL(0x823)
+#define WV_IOCTL_EP_CONNECT WV_IOCTL(0x824)
+#define WV_IOCTL_EP_ACCEPT WV_IOCTL(0x825)
+#define WV_IOCTL_EP_DISCONNECT WV_IOCTL(0x826)
+#define WV_IOCTL_EP_DISCONNECT_NOTIFY WV_IOCTL(0x827)
+#define WV_IOCTL_EP_QUERY WV_IOCTL(0x828)
+#define WV_IOCTL_EP_LOOKUP WV_IOCTL(0x829)
+#define WV_IOCTL_EP_MULTICAST_JOIN WV_IOCTL(0x82A)
+#define WV_IOCTL_EP_MULTICAST_LEAVE WV_IOCTL(0x82B)
+#define WV_IOCTL_EP_DESTROY WV_IOCTL(0x82C)
+#define WV_IOCTL_LISTEN WV_IOCTL(0x82D)
+#define WV_IOCTL_LISTEN_GET_REQUEST WV_IOCTL(0x82E)
+#define WV_IOCTL_LISTEN_DESTROY WV_IOCTL(0x82F)
+
+#define WV_IOCTL_MIN 0x800
+#define WV_IOCTL_MAX 0x830
+
+// Device specific data follows input / output structures.
+typedef struct _WV_IO_ID
+{
+ UINT64 Id;
+ UINT32 VerbInfo;
+ UINT32 Data;
+
+} WV_IO_ID;
+
+typedef struct _WV_IO_GUID_LIST
+{
+ UINT64 Count;
+ UINT64 Guid[1];
+
+} WV_IO_GUID_LIST;
+
+#define WV_IO_ATOMIC_NONE 0
+#define WV_IO_ATOMIC_HCA 1
+#define WV_IO_ATOMIC_NODE 2
+
+typedef struct _WV_IO_DEVICE_ATTRIBUTES
+{
+ UINT8 FwVersion[64];
+ UINT64 NodeGuid;
+ UINT64 SystemImageGuid;
+ UINT32 VendorId;
+ UINT32 VendorPartId;
+ UINT32 HwVersion;
+ UINT32 CapabilityFlags;
+ UINT32 AtomicCapability;
+ UINT32 PageSizeCapabilityFlags;
+ UINT32 MaxMrSize;
+ UINT32 MaxQp;
+ UINT32 MaxQpWr;
+ UINT32 MaxSge;
+ UINT32 MaxCq;
+ UINT32 MaxCqEntries;
+ UINT32 MaxMr;
+ UINT32 MaxPd;
+ UINT32 MaxQpResponderResources;
+ UINT32 MaxResponderResources;
+ UINT32 MaxQpInitiatorDepth;
+ UINT32 MaxInlineSend;
+ UINT32 MaxMw;
+ UINT32 MaxMulticast;
+ UINT32 MaxQpAttach;
+ UINT32 MaxMulticastQp;
+ UINT32 MaxAh;
+ UINT32 MaxFmr;
+ UINT32 MaxMapPerFmr;
+ UINT32 MaxSrq;
+ UINT32 MaxSrqWr;
+ UINT32 MaxSrqSge;
+ UINT32 MaxPkeys;
+ UINT8 LocalAckDelay;
+ UINT8 PhysPortCount;
+ UINT8 Reserved[2];
+
+} WV_IO_DEVICE_ATTRIBUTES;
+
+typedef struct _WV_IO_DEVICE_PORT_QUERY
+{
+ UINT64 Id;
+ UINT8 PortNumber;
+ UINT8 Reserved[7];
+
+} WV_IO_DEVICE_PORT_QUERY;
+
+#define WV_IO_PORT_NOP 0
+#define WV_IO_PORT_DOWN 1
+#define WV_IO_PORT_INIT 2
+#define WV_IO_PORT_ARMED 3
+#define WV_IO_PORT_ACTIVE 4
+#define WV_IO_PORT_ACTIVEDEFER 5
+
+typedef struct _WV_IO_PORT_ATTRIBUTES
+{
+ UINT32 PortCabilityFlags;
+ UINT32 State;
+ UINT32 MaxMtu;
+ UINT32 ActiveMtu;
+ UINT32 GidTableLength;
+ UINT32 MaxMessageSize;
+ UINT32 BadPkeyCounter;
+ UINT32 QkeyViolationCounter;
+ UINT16 PkeyTableLength;
+ UINT16 Lid;
+ UINT16 SmLid;
+ UINT8 Lmc;
+ UINT8 MaxVls;
+ UINT8 SmSl;
+ UINT8 SubneTimeout;
+ UINT8 InitTypeReply;
+ UINT8 ActiveWidth;
+ UINT8 ActiveSpeed;
+ UINT8 PhysicalState;
+ UINT8 Reserved[2];
+
+} WV_IO_PORT_ATTRIBUTES;
+
+typedef struct _WV_IO_GID
+{
+ UINT8 Gid[16];
+
+} WV_IO_GID;
+
+typedef struct _WV_IO_EVENT
+{
+ UINT32 Status;
+ UINT32 Type;
+ UINT8 PortNumber;
+ UINT8 Reserved[3];
+
+} WV_IO_EVENT;
+
+typedef struct _WV_IO_MEMORY_REGISTER
+{
+ WV_IO_ID Id;
+ UINT64 Address;
+ UINT64 BufferLength;
+ UINT32 AccessFlags;
+ UINT32 Reserved;
+
+} WV_IO_MEMORY_REGISTER;
+
+typedef struct _WV_IO_MEMORY_KEYS
+{
+ UINT32 VerbInfo;
+ UINT32 Lkey;
+ UINT32 Rkey;
+
+} WV_IO_MEMORY_KEYS;
+
+typedef struct _WV_IN_MEMORY_DEREGISTER
+{
+ UINT32 VerbInfo;
+ UINT32 Lkey;
+
+} WV_IN_MEMORY_DEREGISTER;
+
+typedef struct _WV_IO_AV
+{
+ UINT32 VersionClassFlow;
+ UINT16 Reserved1;
+ UINT8 Reserved2;
+ UINT8 HopLimit;
+ UINT8 SGid[16];
+ UINT8 DGid[16];
+
+ UINT16 GrhValid;
+ UINT16 DLid; // Network byte order
+ UINT8 ServiceLevel;
+ UINT8 SourcePathBits;
+ UINT8 StaticRate;
+ UINT8 PortNumber;
+
+} WV_IO_AV;
+
+typedef struct _WV_IO_AH_CREATE
+{
+ WV_IO_ID Id;
+ WV_IO_AV AddressVector;
+
+} WV_IO_AH_CREATE;
+
+typedef struct _WV_IO_SRQ_ATTRIBUTES
+{
+ WV_IO_ID Id;
+ UINT32 MaxWr;
+ UINT32 MaxSge;
+ UINT32 SrqLimit;
+ UINT32 Reserved;
+
+} WV_IO_SRQ_ATTRIBUTES;
+
+typedef struct _WV_IO_QP_CREATE
+{
+ WV_IO_ID Id;
+ UINT64 SendCqId;
+ UINT64 ReceiveCqId;
+ UINT64 SrqId;
+
+ UINT32 SendDepth;
+ UINT32 SendSge;
+ UINT32 ReceiveDepth;
+ UINT32 ReceiveSge;
+ UINT32 MaxInlineSend;
+ UINT32 InitiatorDepth;
+ UINT32 ResponderResources;
+
+ UINT8 QpType;
+ UINT8 SignalSends;
+ UINT8 Reserved[2];
+
+} WV_IO_QP_CREATE;
+
+typedef struct _WV_IO_QP_ATTRIBUTES
+{
+ WV_IO_ID Id;
+ UINT32 SendDepth;
+ UINT32 SendSge;
+ UINT32 ReceiveDepth;
+ UINT32 ReceiveSge;
+ UINT32 MaxInlineSend;
+ UINT32 InitiatorDepth;
+ UINT32 ResponderResources;
+
+ UINT32 Options;
+ UINT8 QpType;
+ UINT8 CurrentQpState;
+ UINT8 QpState;
+ UINT8 ApmState;
+ UINT32 Qpn; // Network byte order
+ UINT32 DestinationQpn; // Network byte order
+ UINT32 Qkey; // Network byte order
+ UINT32 SendPsn; // Network byte order
+ UINT32 ReceivePsn; // Network byte order
+
+ WV_IO_AV PrimaryAddressVector;
+ WV_IO_AV AlternateAddressVector;
+ UINT32 AccessFlags;
+ UINT16 SignalSends;
+ UINT16 PkeyIndex;
+
+ UINT8 PathMtu;
+ UINT8 LocalAckTimeout;
+ UINT8 SequenceErrorRetryCount;
+ UINT8 RnrRetryCount;
+ UINT8 Reserved[4];
+
+} WV_IO_QP_ATTRIBUTES;
+
+// TODO:
+//WV_IO_ADDRESS_QUERY
+//WV_IO_EP_CREATE
+//WV_IO_EP_BIND
+//WV_IO_EP_REJECT
+//WV_IO_EP_CONNECT
+//WV_IO_EP_ACCEPT
+//WV_IO_EP_DISCONNECT
+//WV_IO_EP_DISCONNECT_NOTIFY
+//WV_IO_EP_QUERY
+//WV_IO_EP_LOOKUP
+//WV_IO_EP_MULTICAST_JOIN
+//WV_IO_EP_MULTICAST_LEAVE
+//WV_IO_LISTEN
+//WV_IO_LISTEN_GET_REQUEST
+
+#endif // _WV_IOCTL_H_
\ No newline at end of file
_______________________________________________
ofw mailing list
ofw at lists.openfabrics.org
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw
More information about the ofw
mailing list