From patchwork Thu Apr 28 23:05:45 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Hefty, Sean" X-Patchwork-Id: 740051 X-Patchwork-Delegate: alexne@voltaire.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p3SN5q21007337 for ; Thu, 28 Apr 2011 23:05:53 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756565Ab1D1XFv (ORCPT ); Thu, 28 Apr 2011 19:05:51 -0400 Received: from mga03.intel.com ([143.182.124.21]:54555 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751924Ab1D1XFv convert rfc822-to-8bit (ORCPT ); Thu, 28 Apr 2011 19:05:51 -0400 Received: from azsmga001.ch.intel.com ([10.2.17.19]) by azsmga101.ch.intel.com with ESMTP; 28 Apr 2011 16:05:50 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.64,283,1301900400"; d="scan'208";a="427445296" Received: from orsmsx603.amr.corp.intel.com ([10.22.226.49]) by azsmga001.ch.intel.com with ESMTP; 28 Apr 2011 16:05:50 -0700 Received: from orsmsx501.amr.corp.intel.com ([10.22.226.209]) by orsmsx603.amr.corp.intel.com ([10.22.226.49]) with mapi; Thu, 28 Apr 2011 16:05:46 -0700 From: "Hefty, Sean" To: Alex Netes , linux-rdma Date: Thu, 28 Apr 2011 16:05:45 -0700 Subject: [PATCH 7/7] libibumad: Define data type to indicate values are in big-endian Thread-Topic: [PATCH 7/7] libibumad: Define data type to indicate values are in big-endian Thread-Index: AcwF+M0qi/mtDk0pRCG0y7roL32yRg== Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: en-US MIME-Version: 1.0 Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Thu, 28 Apr 2011 23:05:54 +0000 (UTC) The ib management interfaces require that the user specify certain values in network-byte order. To clarify which values should be in big endian format, introduce a new data type at the libibumad level. Signed-off-by: Sean Hefty --- include/infiniband/umad.h | 17 +++++++++++------ include/infiniband/umad_sa.h | 13 ++++++++----- include/infiniband/umad_sm.h | 16 ++++++++-------- include/infiniband/umad_types.h | 23 ++++++++++++----------- 4 files changed, 39 insertions(+), 30 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/include/infiniband/umad.h b/include/infiniband/umad.h index 6c337c0..b1046e4 100644 --- a/include/infiniband/umad.h +++ b/include/infiniband/umad.h @@ -47,21 +47,26 @@ #endif /* __cplusplus */ BEGIN_C_DECLS + +typedef uint16_t be16_t; +typedef uint32_t be32_t; +typedef uint64_t be64_t; + #define UMAD_MAX_DEVICES 32 #define UMAD_ANY_PORT 0 typedef struct ib_mad_addr { - uint32_t qpn; - uint32_t qkey; - uint16_t lid; + be32_t qpn; + be32_t qkey; + be16_t lid; uint8_t sl; uint8_t path_bits; uint8_t grh_present; uint8_t gid_index; uint8_t hop_limit; uint8_t traffic_class; - uint8_t gid[16]; - uint32_t flow_label; - uint16_t pkey_index; + uint8_t gid[16]; /* network-byte order */ + be32_t flow_label; + be16_t pkey_index; uint8_t reserved[6]; } ib_mad_addr_t; diff --git a/include/infiniband/umad_sa.h b/include/infiniband/umad_sa.h index f3e161e..92248de 100755 --- a/include/infiniband/umad_sa.h +++ b/include/infiniband/umad_sa.h @@ -87,14 +87,17 @@ enum { UMAD_LEN_SA_DATA = 200 }; +/* + * sm_key is not aligned on an 8-byte boundary, so is defined as a byte array + */ struct umad_sa_packet { struct umad_hdr mad_hdr; struct umad_rmpp_hdr rmpp_hdr; - uint8_t sm_key[8]; - uint16_t attr_offset; - uint16_t reserved; - uint64_t comp_mask; - uint8_t data[UMAD_LEN_SA_DATA]; + uint8_t sm_key[8]; /* network-byte order */ + be16_t attr_offset; + be16_t reserved; + be64_t comp_mask; + uint8_t data[UMAD_LEN_SA_DATA]; /* network-byte order */ }; END_C_DECLS diff --git a/include/infiniband/umad_sm.h b/include/infiniband/umad_sm.h index 62c75da..10348d4 100755 --- a/include/infiniband/umad_sm.h +++ b/include/infiniband/umad_sm.h @@ -82,16 +82,16 @@ struct umad_smp { uint8_t mgmt_class; uint8_t class_version; uint8_t method; - uint16_t status; + be16_t status; uint8_t hop_ptr; uint8_t hop_cnt; - uint64_t tid; - uint16_t attr_id; - uint16_t resv; - uint32_t attr_mod; - uint64_t mkey; - uint16_t dr_slid; - uint16_t dr_dlid; + be64_t tid; + be16_t attr_id; + be16_t resv; + be32_t attr_mod; + be64_t mkey; + be16_t dr_slid; + be16_t dr_dlid; uint8_t reserved[28]; uint8_t data[UMAD_LEN_SMP_DATA]; uint8_t initial_path[UMAD_SMP_MAX_HOPS]; diff --git a/include/infiniband/umad_types.h b/include/infiniband/umad_types.h index 54b7e72..bf93add 100755 --- a/include/infiniband/umad_types.h +++ b/include/infiniband/umad_types.h @@ -38,6 +38,7 @@ #define _UMAD_TYPES_H #include +#include #ifdef __cplusplus # define BEGIN_C_DECLS extern "C" { @@ -149,11 +150,11 @@ struct umad_hdr { uint8_t class_version; uint8_t method; uint16_t status; - uint16_t class_specific; - uint64_t tid; - uint16_t attr_id; - uint16_t resv; - uint32_t attr_mod; + be16_t class_specific; + be64_t tid; + be16_t attr_id; + be16_t resv; + be32_t attr_mod; }; struct umad_rmpp_hdr { @@ -161,27 +162,27 @@ struct umad_rmpp_hdr { uint8_t rmpp_type; uint8_t rmpp_rtime_flags; uint8_t rmpp_status; - uint32_t seg_num; - uint32_t paylen_newwin; + be32_t seg_num; + be32_t paylen_newwin; }; struct umad_packet { struct umad_hdr mad_hdr; - uint8_t data[UMAD_LEN_DATA]; + uint8_t data[UMAD_LEN_DATA]; /* network-byte order */ }; struct umad_rmpp_packet { struct umad_hdr mad_hdr; struct umad_rmpp_hdr rmpp_hdr; - uint8_t data[UMAD_LEN_RMPP_DATA]; + uint8_t data[UMAD_LEN_RMPP_DATA]; /* network-byte order */ }; struct umad_vendor_packet { struct umad_hdr mad_hdr; struct umad_rmpp_hdr rmpp_hdr; uint8_t reserved; - uint8_t oui[3]; - uint8_t data[UMAD_LEN_VENDOR_DATA]; + uint8_t oui[3]; /* network-byte order */ + uint8_t data[UMAD_LEN_VENDOR_DATA]; /* network-byte order */ }; enum {