[DAPL2] sync with WinOF 2.1 branch
[mirror/winof/.git] / inc / iba / ib_at_ioctl.h
1 /*\r
2  * Copyright (c) 2005 Mellanox Technologies.  All rights reserved.\r
3  * Copyright (c) 2005 SilverStorm Technologies.  All rights reserved.\r
4  * Portions Copyright (c) 2008 Microsoft Corporation.  All rights reserved.\r
5  *\r
6  * This software is available to you under the OpenIB.org BSD license\r
7  * below:\r
8  *\r
9  *     Redistribution and use in source and binary forms, with or\r
10  *     without modification, are permitted provided that the following\r
11  *     conditions are met:\r
12  *\r
13  *      - Redistributions of source code must retain the above\r
14  *        copyright notice, this list of conditions and the following\r
15  *        disclaimer.\r
16  *\r
17  *      - Redistributions in binary form must reproduce the above\r
18  *        copyright notice, this list of conditions and the following\r
19  *        disclaimer in the documentation and/or other materials\r
20  *        provided with the distribution.\r
21  *\r
22  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
23  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
24  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
25  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
26  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
27  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
28  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
29  * SOFTWARE.\r
30  *\r
31  * $Id$\r
32  */\r
33 \r
34 /* This file is shared between user- and kernel-mode */\r
35 \r
36 \r
37 #ifndef _IB_AT_IOCTL_H_\r
38 #define _IB_AT_IOCTL_H_\r
39 \r
40 #include <iba/ib_types.h>\r
41 \r
42 \r
43 #define IBAT_IOCTL_VERSION              5\r
44 \r
45 #define IBAT_MAC_LEN                    6\r
46 \r
47 \r
48 #define IOCTL_IBAT( n )         \\r
49         CTL_CODE( FILE_DEVICE_UNKNOWN, (0x800 + n), \\r
50                 METHOD_BUFFERED, FILE_ANY_ACCESS )\r
51 \r
52 /** This IRP is used to return all available CAs ports number\r
53  * and port guid */\r
54 #define IOCTL_IBAT_PORTS        IOCTL_IBAT( 1 )\r
55 \r
56 typedef struct _IBAT_PORT_RECORD\r
57 {\r
58         UINT64                          CaGuid;\r
59         UINT64                          PortGuid;\r
60         UINT16                          PKey;\r
61         UINT8                           PortNum;\r
62 \r
63 } IBAT_PORT_RECORD;\r
64 \r
65 typedef struct _IOCTL_IBAT_PORTS_IN\r
66 {\r
67         ULONG                           Version;\r
68 \r
69 } IOCTL_IBAT_PORTS_IN;\r
70 \r
71 typedef struct _IOCTL_IBAT_PORTS_OUT\r
72 {\r
73         /** Total size, of the output buffer needed if the\r
74          * suplied buffer wasn't enough */\r
75         ULONG                           Size;\r
76         LONG                            NumPorts;\r
77         IBAT_PORT_RECORD        Ports[1];\r
78 \r
79 } IOCTL_IBAT_PORTS_OUT;\r
80 \r
81 \r
82 /** This IRP is used to return all the ip addresses that\r
83  * are assigned to a port */\r
84 #define IOCTL_IBAT_IP_ADDRESSES         IOCTL_IBAT( 2 )\r
85 \r
86 typedef struct _IOCTL_IBAT_IP_ADDRESSES_IN\r
87 {\r
88         ULONG                           Version;\r
89         /** The guid of the port that we are querying for.  May be\r
90          * zero if querying for IP addresses of all ports. */\r
91         UINT64                          PortGuid;\r
92 \r
93 } IOCTL_IBAT_IP_ADDRESSES_IN;\r
94 \r
95 typedef struct _IP_ADDRESS\r
96 {\r
97         /** Might only be 4 or 6 */\r
98         CHAR                            IpVersion;\r
99         /** Sized to support both IPv4 and IPv6 */\r
100         UCHAR                           Address[16];\r
101 \r
102 } IP_ADDRESS;\r
103 \r
104 typedef struct _IOCTL_IBAT_IP_ADDRESSES_OUT\r
105 {\r
106         /** Total size of the output buffer needed if the\r
107          * suplied buffer wasn't enough */\r
108         ULONG                           Size;\r
109         LONG                            AddressCount;\r
110         IP_ADDRESS                      Address[1];\r
111 \r
112 } IOCTL_IBAT_IP_ADDRESSES_OUT;\r
113 \r
114 \r
115 /** This IRP is used to convert a remote MAC addresses to a remote GID */\r
116 #define IOCTL_IBAT_MAC_TO_GID IOCTL_IBAT( 3 )\r
117 \r
118 typedef struct _IOCTL_IBAT_MAC_TO_GID_IN\r
119 {\r
120         ULONG                           Version;\r
121         UINT64                          PortGuid;\r
122         UCHAR                           DestMac[IBAT_MAC_LEN];\r
123 \r
124 } IOCTL_IBAT_MAC_TO_GID_IN;\r
125 \r
126 typedef struct _IOCTL_IBAT_MAC_TO_GID_OUT\r
127 {\r
128         ib_gid_t                        DestGid;\r
129 \r
130 } IOCTL_IBAT_MAC_TO_GID_OUT;\r
131 \r
132 /** This IRP is used to get port record, corresponding to its (loca) IP address */\r
133 #define IOCTL_IBAT_IP_TO_PORT           IOCTL_IBAT( 4 )\r
134 \r
135 typedef struct _IOCTL_IBAT_IP_TO_PORT_IN\r
136 {\r
137         ULONG                           Version;\r
138         IP_ADDRESS                      Address;\r
139 \r
140 } IOCTL_IBAT_IP_TO_PORT_IN;\r
141 \r
142 typedef struct _IOCTL_IBAT_IP_TO_PORT_OUT\r
143 {\r
144         IBAT_PORT_RECORD        Port;\r
145 \r
146 } IOCTL_IBAT_IP_TO_PORT_OUT;\r
147 \r
148 \r
149 /** This IRP is used to convert a remote MAC addresses to a remote GID */\r
150 #define IOCTL_IBAT_MAC_TO_PATH IOCTL_IBAT( 5 )\r
151 \r
152 typedef struct _IOCTL_IBAT_MAC_TO_PATH_IN\r
153 {\r
154         ULONG                           Version;\r
155         UINT64                          PortGuid;\r
156         UCHAR                           DestMac[IBAT_MAC_LEN];\r
157 \r
158 } IOCTL_IBAT_MAC_TO_PATH_IN;\r
159 \r
160 typedef struct _IOCTL_IBAT_MAC_TO_PATH_OUT\r
161 {\r
162         ib_path_rec_t           Path;\r
163 \r
164 } IOCTL_IBAT_MAC_TO_PATH_OUT;\r
165 \r
166 \r
167 #define IBAT_DEV_NAME   L"\\Device\\ibat"\r
168 #define IBAT_DOS_DEV_NAME L"\\DosDevices\\Global\\ibat"\r
169 #define IBAT_WIN32_NAME L"\\\\.\\ibat"\r
170 \r
171 #endif  /* _IB_AT_IOCTL_H_ */\r