| 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
|