net: ieee802154: Add support for big endian

Structures attribute need to be ordered according to endianness.

Change-Id: Ib3053728cbc49e54631057c779aba0f16aace283
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This commit is contained in:
Tomasz Bursztyka 2016-11-21 16:16:26 +01:00 committed by Jukka Rissanen
parent 5ad60c8ee6
commit 562f9c1c2e

View file

@ -86,6 +86,7 @@ enum ieee802154_version {
*/
struct ieee802154_fcf_seq {
struct {
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
uint16_t frame_type :3;
uint16_t security_enabled :1;
uint16_t frame_pending :1;
@ -97,6 +98,19 @@ struct ieee802154_fcf_seq {
uint16_t dst_addr_mode :2;
uint16_t frame_version :2;
uint16_t src_addr_mode :2;
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
uint16_t reserved :1;
uint16_t pan_id_comp :1;
uint16_t ar :1;
uint16_t frame_pending :1;
uint16_t security_enabled :1;
uint16_t frame_type :3;
uint16_t src_addr_mode :2;
uint16_t frame_version :2;
uint16_t dst_addr_mode :2;
uint16_t ie_list :1;
uint16_t seq_num_suppr :1;
#endif
} fc __packed;
uint8_t sequence;
@ -138,34 +152,62 @@ struct ieee802154_mfr {
};
struct ieee802154_gts_dir {
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
uint8_t mask : 7;
uint8_t reserved : 1;
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
uint8_t reserved : 1;
uint8_t mask : 7;
#endif
} __packed;
struct ieee802154_gts {
uint16_t short_address;
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
uint8_t starting_slot : 4;
uint8_t length : 4;
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
uint8_t length : 4;
uint8_t starting_slot : 4;
#endif
} __packed;
struct ieee802154_gts_spec {
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
/* Descriptor Count */
uint8_t desc_count : 3;
uint8_t reserved : 4;
/* GTS Permit */
uint8_t permit : 1;
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
/* GTS Permit */
uint8_t permit : 1;
uint8_t reserved : 4;
/* Descriptor Count */
uint8_t desc_count : 3;
#endif
} __packed;
struct ieee802154_pas_spec {
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
/* Number of Short Addresses Pending */
uint8_t nb_sap : 3;
uint8_t reserved_1 : 1;
/* Number of Extended Addresses Pending */
uint8_t nb_eap : 3;
uint8_t reserved_2 : 1;
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
uint8_t reserved_1 : 1;
/* Number of Extended Addresses Pending */
uint8_t nb_eap : 3;
uint8_t reserved_2 : 1;
/* Number of Short Addresses Pending */
uint8_t nb_sap : 3;
#endif
} __packed;
struct ieee802154_beacon_sf {
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
/* Beacon Order*/
uint16_t bc_order : 4;
/* Superframe Order*/
@ -179,6 +221,21 @@ struct ieee802154_beacon_sf {
uint16_t coordinator : 1;
/* Association Permit */
uint16_t association : 1;
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
/* Superframe Order*/
uint16_t sf_order : 4;
/* Beacon Order*/
uint16_t bc_order : 4;
/* Association Permit */
uint16_t association : 1;
/* PAN Coordinator */
uint16_t coordinator : 1;
uint16_t reserved : 1;
/* Battery Life Extension */
uint16_t ble : 1;
/* Final CAP Slot */
uint16_t cap_slot : 4;
#endif
} __packed;
struct ieee802154_beacon {
@ -191,6 +248,7 @@ struct ieee802154_beacon {
/* See Section 5.3.1 */
struct ieee802154_cmd_assoc_req {
struct {
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
uint8_t reserved_1 : 1;
uint8_t dev_type : 1;
uint8_t power_src : 1;
@ -198,6 +256,15 @@ struct ieee802154_cmd_assoc_req {
uint8_t reserved_2 : 2;
uint8_t sec_capability : 1;
uint8_t alloc_addr : 1;
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
uint8_t alloc_addr : 1;
uint8_t sec_capability : 1;
uint8_t reserved_2 : 2;
uint8_t rx_on : 1;
uint8_t power_src : 1;
uint8_t dev_type : 1;
uint8_t reserved_1 : 1;
#endif
} ci;
} __packed;
@ -240,10 +307,17 @@ struct ieee802154_cmd_coord_realign {
/* See Section 5.3.9 */
struct ieee802154_gts_request {
struct {
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
uint8_t length : 4;
uint8_t direction : 1;
uint8_t type : 1;
uint8_t reserved : 2;
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
uint8_t reserved : 2;
uint8_t type : 1;
uint8_t direction : 1;
uint8_t length : 4;
#endif
} gts;
} __packed;