1 /* 2 * Copyright (c) 2006 - 2009 Mellanox Technology Inc. All rights reserved. 3 * 4 * This software is available to you under a choice of one of two 5 * licenses. You may choose to be licensed under the terms of the GNU 6 * General Public License (GPL) Version 2, available from the file 7 * COPYING in the main directory of this source tree, or the 8 * OpenIB.org BSD license below: 9 * 10 * Redistribution and use in source and binary forms, with or 11 * without modification, are permitted provided that the following 12 * conditions are met: 13 * 14 * - Redistributions of source code must retain the above 15 * copyright notice, this list of conditions and the following 16 * disclaimer. 17 * 18 * - Redistributions in binary form must reproduce the above 19 * copyright notice, this list of conditions and the following 20 * disclaimer in the documentation and/or other materials 21 * provided with the distribution. 22 * 23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30 * SOFTWARE. 31 * 32 */ 33 34 #ifndef IB_DM_MAD_H 35 #define IB_DM_MAD_H 36 37 #include <linux/types.h> 38 39 #include <rdma/ib_mad.h> 40 41 enum { 42 /* 43 * See also section 13.4.7 Status Field, table 115 MAD Common Status 44 * Field Bit Values and also section 16.3.1.1 Status Field in the 45 * InfiniBand Architecture Specification. 46 */ 47 DM_MAD_STATUS_UNSUP_METHOD = 0x0008, 48 DM_MAD_STATUS_UNSUP_METHOD_ATTR = 0x000c, 49 DM_MAD_STATUS_INVALID_FIELD = 0x001c, 50 DM_MAD_STATUS_NO_IOC = 0x0100, 51 52 /* 53 * See also the Device Management chapter, section 16.3.3 Attributes, 54 * table 279 Device Management Attributes in the InfiniBand 55 * Architecture Specification. 56 */ 57 DM_ATTR_CLASS_PORT_INFO = 0x01, 58 DM_ATTR_IOU_INFO = 0x10, 59 DM_ATTR_IOC_PROFILE = 0x11, 60 DM_ATTR_SVC_ENTRIES = 0x12 61 }; 62 63 struct ib_dm_hdr { 64 u8 reserved[28]; 65 }; 66 67 /* 68 * Structure of management datagram sent by the SRP target implementation. 69 * Contains a management datagram header, reliable multi-packet transaction 70 * protocol (RMPP) header and ib_dm_hdr. Notes: 71 * - The SRP target implementation does not use RMPP or ib_dm_hdr when sending 72 * management datagrams. 73 * - The header size must be exactly 64 bytes (IB_MGMT_DEVICE_HDR), since this 74 * is the header size that is passed to ib_create_send_mad() in ib_srpt.c. 75 * - The maximum supported size for a management datagram when not using RMPP 76 * is 256 bytes -- 64 bytes header and 192 (IB_MGMT_DEVICE_DATA) bytes data. 77 */ 78 struct ib_dm_mad { 79 struct ib_mad_hdr mad_hdr; 80 struct ib_rmpp_hdr rmpp_hdr; 81 struct ib_dm_hdr dm_hdr; 82 u8 data[IB_MGMT_DEVICE_DATA]; 83 }; 84 85 /* 86 * IOUnitInfo as defined in section 16.3.3.3 IOUnitInfo of the InfiniBand 87 * Architecture Specification. 88 */ 89 struct ib_dm_iou_info { 90 __be16 change_id; 91 u8 max_controllers; 92 u8 op_rom; 93 u8 controller_list[128]; 94 }; 95 96 /* 97 * IOControllerprofile as defined in section 16.3.3.4 IOControllerProfile of 98 * the InfiniBand Architecture Specification. 99 */ 100 struct ib_dm_ioc_profile { 101 __be64 guid; 102 __be32 vendor_id; 103 __be32 device_id; 104 __be16 device_version; 105 __be16 reserved1; 106 __be32 subsys_vendor_id; 107 __be32 subsys_device_id; 108 __be16 io_class; 109 __be16 io_subclass; 110 __be16 protocol; 111 __be16 protocol_version; 112 __be16 service_conn; 113 __be16 initiators_supported; 114 __be16 send_queue_depth; 115 u8 reserved2; 116 u8 rdma_read_depth; 117 __be32 send_size; 118 __be32 rdma_size; 119 u8 op_cap_mask; 120 u8 svc_cap_mask; 121 u8 num_svc_entries; 122 u8 reserved3[9]; 123 u8 id_string[64]; 124 }; 125 126 struct ib_dm_svc_entry { 127 u8 name[40]; 128 __be64 id; 129 }; 130 131 /* 132 * See also section 16.3.3.5 ServiceEntries in the InfiniBand Architecture 133 * Specification. See also section B.7, table B.8 in the T10 SRP r16a document. 134 */ 135 struct ib_dm_svc_entries { 136 struct ib_dm_svc_entry service_entries[4]; 137 }; 138 139 #endif 140