[IPoIB] Add support for address translation
[mirror/winof/.git] / ulp / ipoib / kernel / ipoib_driver.h
1 /*\r
2  * Copyright (c) 2005 SilverStorm Technologies.  All rights reserved.\r
3  *\r
4  * This software is available to you under the OpenIB.org BSD license\r
5  * below:\r
6  *\r
7  *     Redistribution and use in source and binary forms, with or\r
8  *     without modification, are permitted provided that the following\r
9  *     conditions are met:\r
10  *\r
11  *      - Redistributions of source code must retain the above\r
12  *        copyright notice, this list of conditions and the following\r
13  *        disclaimer.\r
14  *\r
15  *      - Redistributions in binary form must reproduce the above\r
16  *        copyright notice, this list of conditions and the following\r
17  *        disclaimer in the documentation and/or other materials\r
18  *        provided with the distribution.\r
19  *\r
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
21  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
22  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
23  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
24  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
25  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
26  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
27  * SOFTWARE.\r
28  *\r
29  * $Id$\r
30  */\r
31 \r
32 \r
33 #ifndef _IPOIB_DRIVER_H_\r
34 #define _IPOIB_DRIVER_H_\r
35 \r
36 \r
37 #include "ipoib_adapter.h"\r
38 #include <complib/cl_spinlock.h>\r
39 #include <complib/cl_qlist.h>\r
40 #include <complib/cl_debug.h>\r
41 \r
42 \r
43 /*\r
44  * Definitions\r
45  */\r
46 #define MAX_BUNDLE_ID_LENGTH    32\r
47 \r
48 \r
49 #define IB_MTU                  2048\r
50 /*\r
51  * Header length as defined by IPoIB spec:\r
52  * http://www.ietf.org/internet-drafts/draft-ietf-ipoib-ip-over-infiniband-04.txt\r
53  */\r
54 #define PAYLOAD_MTU             (IB_MTU - sizeof(ipoib_hdr_t))\r
55 /*\r
56  * Only the protocol type is sent as part of the UD payload\r
57  * since the rest of the Ethernet header is encapsulated in the\r
58  * various IB headers.  We report out buffer space as if we\r
59  * transmit the ethernet headers.\r
60  */\r
61 #define XFER_BLOCK_SIZE         (sizeof(eth_hdr_t) + PAYLOAD_MTU)\r
62 \r
63 \r
64 typedef struct _ipoib_globals\r
65 {\r
66         KSPIN_LOCK              lock;\r
67         cl_qlist_t              adapter_list;\r
68         cl_qlist_t              bundle_list;\r
69 \r
70         atomic32_t              laa_idx;\r
71 \r
72         NDIS_HANDLE             h_ndis_wrapper;\r
73         NDIS_HANDLE             h_ibat_dev;\r
74         volatile LONG   ibat_ref;\r
75 \r
76 }       ipoib_globals_t;\r
77 /*\r
78 * FIELDS\r
79 *       lock\r
80 *               Spinlock to protect list access.\r
81 *\r
82 *       adapter_list\r
83 *               List of all adapter instances.  Used for address translation support.\r
84 *\r
85 *       bundle_list\r
86 *               List of all adapter bundles.\r
87 *\r
88 *       laa_idx\r
89 *               Global counter for generating LAA MACs\r
90 *\r
91 *       h_ibat_dev\r
92 *               Device handle returned by NdisMRegisterDevice.\r
93 *********/\r
94 \r
95 extern ipoib_globals_t  g_ipoib;\r
96 \r
97 \r
98 typedef struct _ipoib_bundle\r
99 {\r
100         cl_list_item_t  list_item;\r
101         char                    bundle_id[MAX_BUNDLE_ID_LENGTH];\r
102         cl_qlist_t              adapter_list;\r
103 \r
104 }       ipoib_bundle_t;\r
105 /*\r
106 * FIELDS\r
107 *       list_item\r
108 *               List item for storing the bundle in a quick list.\r
109 *\r
110 *       bundle_id\r
111 *               Bundle identifier.\r
112 *\r
113 *       adapter_list\r
114 *               List of adapters in the bundle.  The adapter at the head is the\r
115 *               primary adapter of the bundle.\r
116 *********/\r
117 \r
118 \r
119 \r
120 void\r
121 ipoib_resume_oids(\r
122         IN                              ipoib_adapter_t* const          p_adapter );\r
123 \r
124 #endif  /* _IPOIB_DRIVER_H_ */\r