From patchwork Mon Jan 28 21:38:55 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Hefty, Sean" X-Patchwork-Id: 2058361 X-Patchwork-Delegate: hal@mellanox.com Return-Path: X-Original-To: patchwork-linux-rdma@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id 1FF06E0175 for ; Mon, 28 Jan 2013 21:39:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754267Ab3A1VjO (ORCPT ); Mon, 28 Jan 2013 16:39:14 -0500 Received: from mga02.intel.com ([134.134.136.20]:53859 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754500Ab3A1VjM (ORCPT ); Mon, 28 Jan 2013 16:39:12 -0500 Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga101.jf.intel.com with ESMTP; 28 Jan 2013 13:39:11 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.84,554,1355126400"; d="scan'208";a="277656215" Received: from cst-linux.jf.intel.com ([10.23.221.68]) by orsmga002.jf.intel.com with ESMTP; 28 Jan 2013 13:39:10 -0800 From: sean.hefty@intel.com To: linux-rdma@vger.kernel.org, alexne@mellanox.com Cc: Sean Hefty Subject: [PATCH 7/7] libibumad: Define data type to indicate values are in big-endian Date: Mon, 28 Jan 2013 13:38:55 -0800 Message-Id: <1359409135-559-7-git-send-email-sean.hefty@intel.com> X-Mailer: git-send-email 1.7.3 In-Reply-To: <1359409135-559-1-git-send-email-sean.hefty@intel.com> References: <1359409135-559-1-git-send-email-sean.hefty@intel.com> Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org From: Sean Hefty 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(-) diff --git a/include/infiniband/umad.h b/include/infiniband/umad.h index 08fff71..b3f00e7 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 {