home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / rdma / ib_sa.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  13.5 KB  |  375 lines

  1. /*
  2.  * Copyright (c) 2004 Topspin Communications.  All rights reserved.
  3.  * Copyright (c) 2005 Voltaire, Inc.  All rights reserved.
  4.  *
  5.  * This software is available to you under a choice of one of two
  6.  * licenses.  You may choose to be licensed under the terms of the GNU
  7.  * General Public License (GPL) Version 2, available from the file
  8.  * COPYING in the main directory of this source tree, or the
  9.  * OpenIB.org BSD license below:
  10.  *
  11.  *     Redistribution and use in source and binary forms, with or
  12.  *     without modification, are permitted provided that the following
  13.  *     conditions are met:
  14.  *
  15.  *      - Redistributions of source code must retain the above
  16.  *        copyright notice, this list of conditions and the following
  17.  *        disclaimer.
  18.  *
  19.  *      - Redistributions in binary form must reproduce the above
  20.  *        copyright notice, this list of conditions and the following
  21.  *        disclaimer in the documentation and/or other materials
  22.  *        provided with the distribution.
  23.  *
  24.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  25.  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  26.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  27.  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  28.  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  29.  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  30.  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  31.  * SOFTWARE.
  32.  *
  33.  * $Id: ib_sa.h 2811 2005-07-06 18:11:43Z halr $
  34.  */
  35.  
  36. #ifndef IB_SA_H
  37. #define IB_SA_H
  38.  
  39. #include <linux/compiler.h>
  40.  
  41. #include <rdma/ib_verbs.h>
  42. #include <rdma/ib_mad.h>
  43.  
  44. enum {
  45.     IB_SA_CLASS_VERSION        = 2,    /* IB spec version 1.1/1.2 */
  46.  
  47.     IB_SA_METHOD_GET_TABLE        = 0x12,
  48.     IB_SA_METHOD_GET_TABLE_RESP    = 0x92,
  49.     IB_SA_METHOD_DELETE        = 0x15,
  50.     IB_SA_METHOD_DELETE_RESP    = 0x95,
  51.     IB_SA_METHOD_GET_MULTI        = 0x14,
  52.     IB_SA_METHOD_GET_MULTI_RESP    = 0x94,
  53.     IB_SA_METHOD_GET_TRACE_TBL    = 0x13
  54. };
  55.  
  56. enum {
  57.     IB_SA_ATTR_CLASS_PORTINFO    = 0x01,
  58.     IB_SA_ATTR_NOTICE         = 0x02,
  59.     IB_SA_ATTR_INFORM_INFO         = 0x03,
  60.     IB_SA_ATTR_NODE_REC         = 0x11,
  61.     IB_SA_ATTR_PORT_INFO_REC     = 0x12,
  62.     IB_SA_ATTR_SL2VL_REC         = 0x13,
  63.     IB_SA_ATTR_SWITCH_REC         = 0x14,
  64.     IB_SA_ATTR_LINEAR_FDB_REC    = 0x15,
  65.     IB_SA_ATTR_RANDOM_FDB_REC    = 0x16,
  66.     IB_SA_ATTR_MCAST_FDB_REC     = 0x17,
  67.     IB_SA_ATTR_SM_INFO_REC         = 0x18,
  68.     IB_SA_ATTR_LINK_REC         = 0x20,
  69.     IB_SA_ATTR_GUID_INFO_REC     = 0x30,
  70.     IB_SA_ATTR_SERVICE_REC         = 0x31,
  71.     IB_SA_ATTR_PARTITION_REC     = 0x33,
  72.     IB_SA_ATTR_PATH_REC         = 0x35,
  73.     IB_SA_ATTR_VL_ARB_REC         = 0x36,
  74.     IB_SA_ATTR_MC_MEMBER_REC     = 0x38,
  75.     IB_SA_ATTR_TRACE_REC         = 0x39,
  76.     IB_SA_ATTR_MULTI_PATH_REC    = 0x3a,
  77.     IB_SA_ATTR_SERVICE_ASSOC_REC = 0x3b,
  78.     IB_SA_ATTR_INFORM_INFO_REC   = 0xf3
  79. };
  80.  
  81. enum ib_sa_selector {
  82.     IB_SA_GTE  = 0,
  83.     IB_SA_LTE  = 1,
  84.     IB_SA_EQ   = 2,
  85.     /*
  86.      * The meaning of "best" depends on the attribute: for
  87.      * example, for MTU best will return the largest available
  88.      * MTU, while for packet life time, best will return the
  89.      * smallest available life time.
  90.      */
  91.     IB_SA_BEST = 3
  92. };
  93.  
  94. /*
  95.  * Structures for SA records are named "struct ib_sa_xxx_rec."  No
  96.  * attempt is made to pack structures to match the physical layout of
  97.  * SA records in SA MADs; all packing and unpacking is handled by the
  98.  * SA query code.
  99.  *
  100.  * For a record with structure ib_sa_xxx_rec, the naming convention
  101.  * for the component mask value for field yyy is IB_SA_XXX_REC_YYY (we
  102.  * never use different abbreviations or otherwise change the spelling
  103.  * of xxx/yyy between ib_sa_xxx_rec.yyy and IB_SA_XXX_REC_YYY).
  104.  *
  105.  * Reserved rows are indicated with comments to help maintainability.
  106.  */
  107.  
  108. /* reserved:                                 0 */
  109. /* reserved:                                 1 */
  110. #define IB_SA_PATH_REC_DGID                IB_SA_COMP_MASK( 2)
  111. #define IB_SA_PATH_REC_SGID                IB_SA_COMP_MASK( 3)
  112. #define IB_SA_PATH_REC_DLID                IB_SA_COMP_MASK( 4)
  113. #define IB_SA_PATH_REC_SLID                IB_SA_COMP_MASK( 5)
  114. #define IB_SA_PATH_REC_RAW_TRAFFIC            IB_SA_COMP_MASK( 6)
  115. /* reserved:                                 7 */
  116. #define IB_SA_PATH_REC_FLOW_LABEL               IB_SA_COMP_MASK( 8)
  117. #define IB_SA_PATH_REC_HOP_LIMIT            IB_SA_COMP_MASK( 9)
  118. #define IB_SA_PATH_REC_TRAFFIC_CLASS            IB_SA_COMP_MASK(10)
  119. #define IB_SA_PATH_REC_REVERSIBLE            IB_SA_COMP_MASK(11)
  120. #define IB_SA_PATH_REC_NUMB_PATH            IB_SA_COMP_MASK(12)
  121. #define IB_SA_PATH_REC_PKEY                IB_SA_COMP_MASK(13)
  122. /* reserved:                                14 */
  123. #define IB_SA_PATH_REC_SL                IB_SA_COMP_MASK(15)
  124. #define IB_SA_PATH_REC_MTU_SELECTOR            IB_SA_COMP_MASK(16)
  125. #define IB_SA_PATH_REC_MTU                IB_SA_COMP_MASK(17)
  126. #define IB_SA_PATH_REC_RATE_SELECTOR            IB_SA_COMP_MASK(18)
  127. #define IB_SA_PATH_REC_RATE                IB_SA_COMP_MASK(19)
  128. #define IB_SA_PATH_REC_PACKET_LIFE_TIME_SELECTOR    IB_SA_COMP_MASK(20)
  129. #define IB_SA_PATH_REC_PACKET_LIFE_TIME            IB_SA_COMP_MASK(21)
  130. #define IB_SA_PATH_REC_PREFERENCE            IB_SA_COMP_MASK(22)
  131.  
  132. struct ib_sa_path_rec {
  133.     /* reserved */
  134.     /* reserved */
  135.     union ib_gid dgid;
  136.     union ib_gid sgid;
  137.     __be16       dlid;
  138.     __be16       slid;
  139.     int          raw_traffic;
  140.     /* reserved */
  141.     __be32       flow_label;
  142.     u8           hop_limit;
  143.     u8           traffic_class;
  144.     int          reversible;
  145.     u8           numb_path;
  146.     __be16       pkey;
  147.     /* reserved */
  148.     u8           sl;
  149.     u8           mtu_selector;
  150.     u8           mtu;
  151.     u8           rate_selector;
  152.     u8           rate;
  153.     u8           packet_life_time_selector;
  154.     u8           packet_life_time;
  155.     u8           preference;
  156. };
  157.  
  158. #define IB_SA_MCMEMBER_REC_MGID                IB_SA_COMP_MASK( 0)
  159. #define IB_SA_MCMEMBER_REC_PORT_GID            IB_SA_COMP_MASK( 1)
  160. #define IB_SA_MCMEMBER_REC_QKEY                IB_SA_COMP_MASK( 2)
  161. #define IB_SA_MCMEMBER_REC_MLID                IB_SA_COMP_MASK( 3)
  162. #define IB_SA_MCMEMBER_REC_MTU_SELECTOR            IB_SA_COMP_MASK( 4)
  163. #define IB_SA_MCMEMBER_REC_MTU                IB_SA_COMP_MASK( 5)
  164. #define IB_SA_MCMEMBER_REC_TRAFFIC_CLASS        IB_SA_COMP_MASK( 6)
  165. #define IB_SA_MCMEMBER_REC_PKEY                IB_SA_COMP_MASK( 7)
  166. #define IB_SA_MCMEMBER_REC_RATE_SELECTOR        IB_SA_COMP_MASK( 8)
  167. #define IB_SA_MCMEMBER_REC_RATE                IB_SA_COMP_MASK( 9)
  168. #define IB_SA_MCMEMBER_REC_PACKET_LIFE_TIME_SELECTOR    IB_SA_COMP_MASK(10)
  169. #define IB_SA_MCMEMBER_REC_PACKET_LIFE_TIME        IB_SA_COMP_MASK(11)
  170. #define IB_SA_MCMEMBER_REC_SL                IB_SA_COMP_MASK(12)
  171. #define IB_SA_MCMEMBER_REC_FLOW_LABEL            IB_SA_COMP_MASK(13)
  172. #define IB_SA_MCMEMBER_REC_HOP_LIMIT            IB_SA_COMP_MASK(14)
  173. #define IB_SA_MCMEMBER_REC_SCOPE            IB_SA_COMP_MASK(15)
  174. #define IB_SA_MCMEMBER_REC_JOIN_STATE            IB_SA_COMP_MASK(16)
  175. #define IB_SA_MCMEMBER_REC_PROXY_JOIN            IB_SA_COMP_MASK(17)
  176.  
  177. struct ib_sa_mcmember_rec {
  178.     union ib_gid mgid;
  179.     union ib_gid port_gid;
  180.     __be32       qkey;
  181.     __be16       mlid;
  182.     u8           mtu_selector;
  183.     u8           mtu;
  184.     u8           traffic_class;
  185.     __be16       pkey;
  186.     u8          rate_selector;
  187.     u8          rate;
  188.     u8          packet_life_time_selector;
  189.     u8          packet_life_time;
  190.     u8           sl;
  191.     __be32       flow_label;
  192.     u8           hop_limit;
  193.     u8           scope;
  194.     u8           join_state;
  195.     int          proxy_join;
  196. };
  197.  
  198. /* Service Record Component Mask Sec 15.2.5.14 Ver 1.1    */
  199. #define IB_SA_SERVICE_REC_SERVICE_ID            IB_SA_COMP_MASK( 0)
  200. #define IB_SA_SERVICE_REC_SERVICE_GID            IB_SA_COMP_MASK( 1)
  201. #define IB_SA_SERVICE_REC_SERVICE_PKEY            IB_SA_COMP_MASK( 2)
  202. /* reserved:                                 3 */
  203. #define IB_SA_SERVICE_REC_SERVICE_LEASE            IB_SA_COMP_MASK( 4)
  204. #define IB_SA_SERVICE_REC_SERVICE_KEY            IB_SA_COMP_MASK( 5)
  205. #define IB_SA_SERVICE_REC_SERVICE_NAME            IB_SA_COMP_MASK( 6)
  206. #define IB_SA_SERVICE_REC_SERVICE_DATA8_0        IB_SA_COMP_MASK( 7)
  207. #define IB_SA_SERVICE_REC_SERVICE_DATA8_1        IB_SA_COMP_MASK( 8)
  208. #define IB_SA_SERVICE_REC_SERVICE_DATA8_2        IB_SA_COMP_MASK( 9)
  209. #define IB_SA_SERVICE_REC_SERVICE_DATA8_3        IB_SA_COMP_MASK(10)
  210. #define IB_SA_SERVICE_REC_SERVICE_DATA8_4        IB_SA_COMP_MASK(11)
  211. #define IB_SA_SERVICE_REC_SERVICE_DATA8_5        IB_SA_COMP_MASK(12)
  212. #define IB_SA_SERVICE_REC_SERVICE_DATA8_6        IB_SA_COMP_MASK(13)
  213. #define IB_SA_SERVICE_REC_SERVICE_DATA8_7        IB_SA_COMP_MASK(14)
  214. #define IB_SA_SERVICE_REC_SERVICE_DATA8_8        IB_SA_COMP_MASK(15)
  215. #define IB_SA_SERVICE_REC_SERVICE_DATA8_9        IB_SA_COMP_MASK(16)
  216. #define IB_SA_SERVICE_REC_SERVICE_DATA8_10        IB_SA_COMP_MASK(17)
  217. #define IB_SA_SERVICE_REC_SERVICE_DATA8_11        IB_SA_COMP_MASK(18)
  218. #define IB_SA_SERVICE_REC_SERVICE_DATA8_12        IB_SA_COMP_MASK(19)
  219. #define IB_SA_SERVICE_REC_SERVICE_DATA8_13        IB_SA_COMP_MASK(20)
  220. #define IB_SA_SERVICE_REC_SERVICE_DATA8_14        IB_SA_COMP_MASK(21)
  221. #define IB_SA_SERVICE_REC_SERVICE_DATA8_15        IB_SA_COMP_MASK(22)
  222. #define IB_SA_SERVICE_REC_SERVICE_DATA16_0        IB_SA_COMP_MASK(23)
  223. #define IB_SA_SERVICE_REC_SERVICE_DATA16_1        IB_SA_COMP_MASK(24)
  224. #define IB_SA_SERVICE_REC_SERVICE_DATA16_2        IB_SA_COMP_MASK(25)
  225. #define IB_SA_SERVICE_REC_SERVICE_DATA16_3        IB_SA_COMP_MASK(26)
  226. #define IB_SA_SERVICE_REC_SERVICE_DATA16_4        IB_SA_COMP_MASK(27)
  227. #define IB_SA_SERVICE_REC_SERVICE_DATA16_5        IB_SA_COMP_MASK(28)
  228. #define IB_SA_SERVICE_REC_SERVICE_DATA16_6        IB_SA_COMP_MASK(29)
  229. #define IB_SA_SERVICE_REC_SERVICE_DATA16_7        IB_SA_COMP_MASK(30)
  230. #define IB_SA_SERVICE_REC_SERVICE_DATA32_0        IB_SA_COMP_MASK(31)
  231. #define IB_SA_SERVICE_REC_SERVICE_DATA32_1        IB_SA_COMP_MASK(32)
  232. #define IB_SA_SERVICE_REC_SERVICE_DATA32_2        IB_SA_COMP_MASK(33)
  233. #define IB_SA_SERVICE_REC_SERVICE_DATA32_3        IB_SA_COMP_MASK(34)
  234. #define IB_SA_SERVICE_REC_SERVICE_DATA64_0        IB_SA_COMP_MASK(35)
  235. #define IB_SA_SERVICE_REC_SERVICE_DATA64_1        IB_SA_COMP_MASK(36)
  236.  
  237. #define IB_DEFAULT_SERVICE_LEASE     0xFFFFFFFF
  238.  
  239. struct ib_sa_service_rec {
  240.     u64        id;
  241.     union ib_gid    gid;
  242.     __be16         pkey;
  243.     /* reserved */
  244.     u32        lease;
  245.     u8        key[16];
  246.     u8        name[64];
  247.     u8        data8[16];
  248.     u16        data16[8];
  249.     u32        data32[4];
  250.     u64        data64[2];
  251. };
  252.  
  253. struct ib_sa_query;
  254.  
  255. void ib_sa_cancel_query(int id, struct ib_sa_query *query);
  256.  
  257. int ib_sa_path_rec_get(struct ib_device *device, u8 port_num,
  258.                struct ib_sa_path_rec *rec,
  259.                ib_sa_comp_mask comp_mask,
  260.                int timeout_ms, gfp_t gfp_mask,
  261.                void (*callback)(int status,
  262.                     struct ib_sa_path_rec *resp,
  263.                     void *context),
  264.                void *context,
  265.                struct ib_sa_query **query);
  266.  
  267. int ib_sa_mcmember_rec_query(struct ib_device *device, u8 port_num,
  268.                  u8 method,
  269.                  struct ib_sa_mcmember_rec *rec,
  270.                  ib_sa_comp_mask comp_mask,
  271.                  int timeout_ms, gfp_t gfp_mask,
  272.                  void (*callback)(int status,
  273.                           struct ib_sa_mcmember_rec *resp,
  274.                           void *context),
  275.                  void *context,
  276.                  struct ib_sa_query **query);
  277.  
  278. int ib_sa_service_rec_query(struct ib_device *device, u8 port_num,
  279.              u8 method,
  280.              struct ib_sa_service_rec *rec,
  281.              ib_sa_comp_mask comp_mask,
  282.              int timeout_ms, gfp_t gfp_mask,
  283.              void (*callback)(int status,
  284.                       struct ib_sa_service_rec *resp,
  285.                       void *context),
  286.              void *context,
  287.              struct ib_sa_query **sa_query);
  288.  
  289. /**
  290.  * ib_sa_mcmember_rec_set - Start an MCMember set query
  291.  * @device:device to send query on
  292.  * @port_num: port number to send query on
  293.  * @rec:MCMember Record to send in query
  294.  * @comp_mask:component mask to send in query
  295.  * @timeout_ms:time to wait for response
  296.  * @gfp_mask:GFP mask to use for internal allocations
  297.  * @callback:function called when query completes, times out or is
  298.  * canceled
  299.  * @context:opaque user context passed to callback
  300.  * @sa_query:query context, used to cancel query
  301.  *
  302.  * Send an MCMember Set query to the SA (eg to join a multicast
  303.  * group).  The callback function will be called when the query
  304.  * completes (or fails); status is 0 for a successful response, -EINTR
  305.  * if the query is canceled, -ETIMEDOUT is the query timed out, or
  306.  * -EIO if an error occurred sending the query.  The resp parameter of
  307.  * the callback is only valid if status is 0.
  308.  *
  309.  * If the return value of ib_sa_mcmember_rec_set() is negative, it is
  310.  * an error code.  Otherwise it is a query ID that can be used to
  311.  * cancel the query.
  312.  */
  313. static inline int
  314. ib_sa_mcmember_rec_set(struct ib_device *device, u8 port_num,
  315.                struct ib_sa_mcmember_rec *rec,
  316.                ib_sa_comp_mask comp_mask,
  317.                int timeout_ms, gfp_t gfp_mask,
  318.                void (*callback)(int status,
  319.                     struct ib_sa_mcmember_rec *resp,
  320.                     void *context),
  321.                void *context,
  322.                struct ib_sa_query **query)
  323. {
  324.     return ib_sa_mcmember_rec_query(device, port_num,
  325.                     IB_MGMT_METHOD_SET,
  326.                     rec, comp_mask,
  327.                     timeout_ms, gfp_mask, callback,
  328.                     context, query);
  329. }
  330.  
  331. /**
  332.  * ib_sa_mcmember_rec_delete - Start an MCMember delete query
  333.  * @device:device to send query on
  334.  * @port_num: port number to send query on
  335.  * @rec:MCMember Record to send in query
  336.  * @comp_mask:component mask to send in query
  337.  * @timeout_ms:time to wait for response
  338.  * @gfp_mask:GFP mask to use for internal allocations
  339.  * @callback:function called when query completes, times out or is
  340.  * canceled
  341.  * @context:opaque user context passed to callback
  342.  * @sa_query:query context, used to cancel query
  343.  *
  344.  * Send an MCMember Delete query to the SA (eg to leave a multicast
  345.  * group).  The callback function will be called when the query
  346.  * completes (or fails); status is 0 for a successful response, -EINTR
  347.  * if the query is canceled, -ETIMEDOUT is the query timed out, or
  348.  * -EIO if an error occurred sending the query.  The resp parameter of
  349.  * the callback is only valid if status is 0.
  350.  *
  351.  * If the return value of ib_sa_mcmember_rec_delete() is negative, it
  352.  * is an error code.  Otherwise it is a query ID that can be used to
  353.  * cancel the query.
  354.  */
  355. static inline int
  356. ib_sa_mcmember_rec_delete(struct ib_device *device, u8 port_num,
  357.               struct ib_sa_mcmember_rec *rec,
  358.               ib_sa_comp_mask comp_mask,
  359.               int timeout_ms, gfp_t gfp_mask,
  360.               void (*callback)(int status,
  361.                        struct ib_sa_mcmember_rec *resp,
  362.                        void *context),
  363.               void *context,
  364.               struct ib_sa_query **query)
  365. {
  366.     return ib_sa_mcmember_rec_query(device, port_num,
  367.                     IB_SA_METHOD_DELETE,
  368.                     rec, comp_mask,
  369.                     timeout_ms, gfp_mask, callback,
  370.                     context, query);
  371. }
  372.  
  373.  
  374. #endif /* IB_SA_H */
  375.