[PATCH 06/11] staging: wfx: fix endianness of hif API

From: Jerome Pouiller
Date: Mon Apr 06 2020 - 07:18:47 EST


From: JÃrÃme Pouiller <jerome.pouiller@xxxxxxxxxx>

The chip expects little endian in all structs it sends/receives. This
patch fixes the hif API to reflect this fact. Sparse should now report
meaningful errors.

Signed-off-by: JÃrÃme Pouiller <jerome.pouiller@xxxxxxxxxx>
---
drivers/staging/wfx/hif_api_cmd.h | 120 ++++++++++++-------------
drivers/staging/wfx/hif_api_general.h | 56 ++++++------
drivers/staging/wfx/hif_api_mib.h | 124 +++++++++++++-------------
3 files changed, 150 insertions(+), 150 deletions(-)

diff --git a/drivers/staging/wfx/hif_api_cmd.h b/drivers/staging/wfx/hif_api_cmd.h
index 321f4fb27b35..82a9f4ae4555 100644
--- a/drivers/staging/wfx/hif_api_cmd.h
+++ b/drivers/staging/wfx/hif_api_cmd.h
@@ -94,25 +94,25 @@ struct hif_req_reset {
} __packed;

struct hif_req_read_mib {
- u16 mib_id;
- u16 reserved;
+ __le16 mib_id;
+ __le16 reserved;
} __packed;

struct hif_cnf_read_mib {
- u32 status;
- u16 mib_id;
- u16 length;
+ __le32 status;
+ __le16 mib_id;
+ __le16 length;
u8 mib_data[];
} __packed;

struct hif_req_write_mib {
- u16 mib_id;
- u16 length;
+ __le16 mib_id;
+ __le16 length;
u8 mib_data[];
} __packed;

struct hif_cnf_write_mib {
- u32 status;
+ __le32 status;
} __packed;

struct hif_ie_flags {
@@ -131,12 +131,12 @@ struct hif_ie_tlv {

struct hif_req_update_ie {
struct hif_ie_flags ie_flags;
- u16 num_ies;
+ __le16 num_ies;
struct hif_ie_tlv ie[];
} __packed;

struct hif_cnf_update_ie {
- u32 status;
+ __le32 status;
} __packed;

struct hif_scan_type {
@@ -153,13 +153,13 @@ struct hif_scan_flags {
} __packed;

struct hif_auto_scan_param {
- u16 interval;
+ __le16 interval;
u8 reserved;
s8 rssi_thr;
} __packed;

struct hif_ssid_def {
- u32 ssid_length;
+ __le32 ssid_length;
u8 ssid[HIF_API_SSID_SIZE];
} __packed;

@@ -176,19 +176,19 @@ struct hif_req_start_scan_alt {
u8 probe_delay;
u8 num_of_ssids;
u8 num_of_channels;
- u32 min_channel_time;
- u32 max_channel_time;
- s32 tx_power_level;
+ __le32 min_channel_time;
+ __le32 max_channel_time;
+ __le32 tx_power_level; // signed value
struct hif_ssid_def ssid_def[HIF_API_MAX_NB_SSIDS];
u8 channel_list[];
} __packed;

struct hif_cnf_start_scan {
- u32 status;
+ __le32 status;
} __packed;

struct hif_cnf_stop_scan {
- u32 status;
+ __le32 status;
} __packed;

enum hif_pm_mode_status {
@@ -198,10 +198,10 @@ enum hif_pm_mode_status {
};

struct hif_ind_scan_cmpl {
- u32 status;
+ __le32 status;
u8 pm_mode;
u8 num_channels_completed;
- u16 reserved;
+ __le16 reserved;
} __packed;

enum hif_queue_id {
@@ -254,13 +254,13 @@ struct hif_ht_tx_parameters {
} __packed;

struct hif_req_tx {
- u32 packet_id;
+ __le32 packet_id;
u8 max_tx_rate;
struct hif_queue queue_id;
struct hif_data_flags data_flags;
struct hif_tx_flags tx_flags;
- u32 reserved;
- u32 expire_time;
+ __le32 reserved;
+ __le32 expire_time;
struct hif_ht_tx_parameters ht_tx_parameters;
u8 frame[];
} __packed;
@@ -282,17 +282,17 @@ struct hif_tx_result_flags {
} __packed;

struct hif_cnf_tx {
- u32 status;
- u32 packet_id;
+ __le32 status;
+ __le32 packet_id;
u8 txed_rate;
u8 ack_failures;
struct hif_tx_result_flags tx_result_flags;
- u32 media_delay;
- u32 tx_queue_delay;
+ __le32 media_delay;
+ __le32 tx_queue_delay;
} __packed;

struct hif_cnf_multi_transmit {
- u32 num_tx_confs;
+ __le32 num_tx_confs;
struct hif_cnf_tx tx_conf_payload[];
} __packed;

@@ -331,8 +331,8 @@ struct hif_rx_flags {
} __packed;

struct hif_ind_rx {
- u32 status;
- u16 channel_number;
+ __le32 status;
+ __le16 channel_number;
u8 rxed_rate;
u8 rcpi_rssi;
struct hif_rx_flags rx_flags;
@@ -345,15 +345,15 @@ struct hif_req_edca_queue_params {
u8 reserved1;
u8 aifsn;
u8 reserved2;
- u16 cw_min;
- u16 cw_max;
- u16 tx_op_limit;
- u16 allowed_medium_time;
- u32 reserved3;
+ __le16 cw_min;
+ __le16 cw_max;
+ __le16 tx_op_limit;
+ __le16 allowed_medium_time;
+ __le32 reserved3;
} __packed;

struct hif_cnf_edca_queue_params {
- u32 status;
+ __le32 status;
} __packed;

struct hif_join_flags {
@@ -367,26 +367,26 @@ struct hif_req_join {
u8 infrastructure_bss_mode:1;
u8 reserved1:7;
u8 band;
- u16 channel_number;
+ __le16 channel_number;
u8 bssid[ETH_ALEN];
- u16 atim_window;
+ __le16 atim_window;
u8 short_preamble:1;
u8 reserved2:7;
u8 probe_for_join;
u8 reserved3;
struct hif_join_flags join_flags;
- u32 ssid_length;
+ __le32 ssid_length;
u8 ssid[HIF_API_SSID_SIZE];
- u32 beacon_interval;
- u32 basic_rate_set;
+ __le32 beacon_interval;
+ __le32 basic_rate_set;
} __packed;

struct hif_cnf_join {
- u32 status;
+ __le32 status;
} __packed;

struct hif_ind_join_complete {
- u32 status;
+ __le32 status;
} __packed;

struct hif_bss_flags {
@@ -397,12 +397,12 @@ struct hif_bss_flags {
struct hif_req_set_bss_params {
struct hif_bss_flags bss_flags;
u8 beacon_lost_count;
- u16 aid;
- u32 operational_rate_set;
+ __le16 aid;
+ __le32 operational_rate_set;
} __packed;

struct hif_cnf_set_bss_params {
- u32 status;
+ __le32 status;
} __packed;

struct hif_pm_mode {
@@ -419,11 +419,11 @@ struct hif_req_set_pm_mode {
} __packed;

struct hif_cnf_set_pm_mode {
- u32 status;
+ __le32 status;
} __packed;

struct hif_ind_set_pm_mode_cmpl {
- u32 status;
+ __le32 status;
u8 pm_mode;
u8 reserved[3];
} __packed;
@@ -432,20 +432,20 @@ struct hif_ind_set_pm_mode_cmpl {
struct hif_req_start {
u8 mode;
u8 band;
- u16 channel_number;
- u32 reserved1;
- u32 beacon_interval;
+ __le16 channel_number;
+ __le32 reserved1;
+ __le32 beacon_interval;
u8 dtim_period;
u8 short_preamble:1;
u8 reserved2:7;
u8 reserved3;
u8 ssid_length;
u8 ssid[HIF_API_SSID_SIZE];
- u32 basic_rate_set;
+ __le32 basic_rate_set;
} __packed;

struct hif_cnf_start {
- u32 status;
+ __le32 status;
} __packed;

enum hif_beacon {
@@ -459,7 +459,7 @@ struct hif_req_beacon_transmit {
} __packed;

struct hif_cnf_beacon_transmit {
- u32 status;
+ __le32 status;
} __packed;

#define HIF_LINK_ID_MAX 14
@@ -483,7 +483,7 @@ struct hif_req_map_link {
} __packed;

struct hif_cnf_map_link {
- u32 status;
+ __le32 status;
} __packed;

struct hif_suspend_resume_flags {
@@ -496,7 +496,7 @@ struct hif_suspend_resume_flags {

struct hif_ind_suspend_resume_tx {
struct hif_suspend_resume_flags suspend_resume_flags;
- u16 peer_sta_set;
+ __le16 peer_sta_set;
} __packed;


@@ -612,7 +612,7 @@ struct hif_req_add_key {
} __packed;

struct hif_cnf_add_key {
- u32 status;
+ __le32 status;
} __packed;

struct hif_req_remove_key {
@@ -621,7 +621,7 @@ struct hif_req_remove_key {
} __packed;

struct hif_cnf_remove_key {
- u32 status;
+ __le32 status;
} __packed;

enum hif_event_ind {
@@ -642,12 +642,12 @@ enum hif_ps_mode_error {

union hif_event_data {
u8 rcpi_rssi;
- u32 ps_mode_error;
- u32 peer_sta_set;
+ __le32 ps_mode_error;
+ __le32 peer_sta_set;
};

struct hif_ind_event {
- u32 event_id;
+ __le32 event_id;
union hif_event_data event_data;
} __packed;

diff --git a/drivers/staging/wfx/hif_api_general.h b/drivers/staging/wfx/hif_api_general.h
index c58b9a1eff3d..5ff86e556182 100644
--- a/drivers/staging/wfx/hif_api_general.h
+++ b/drivers/staging/wfx/hif_api_general.h
@@ -23,7 +23,7 @@
#define HIF_COUNTER_MAX 7

struct hif_msg {
- u16 len;
+ __le16 len;
u8 id;
u8 reserved:1;
u8 interface:2;
@@ -136,12 +136,12 @@ struct hif_otp_phy_info {
} __packed;

struct hif_ind_startup {
- u32 status;
- u16 hardware_id;
+ __le32 status;
+ __le16 hardware_id;
u8 opn[14];
u8 uid[8];
- u16 num_inp_ch_bufs;
- u16 size_inp_ch_buf;
+ __le16 num_inp_ch_bufs;
+ __le16 size_inp_ch_buf;
u8 num_links_ap;
u8 num_interfaces;
u8 mac_addr[2][ETH_ALEN];
@@ -155,7 +155,7 @@ struct hif_ind_startup {
u8 disabled_channel_list[2];
struct hif_otp_regul_sel_mode_info regul_sel_mode_info;
struct hif_otp_phy_info otp_phy_info;
- u32 supported_rate_mask;
+ __le32 supported_rate_mask;
u8 firmware_label[128];
} __packed;

@@ -163,12 +163,12 @@ struct hif_ind_wakeup {
} __packed;

struct hif_req_configuration {
- u16 length;
+ __le16 length;
u8 pds_data[];
} __packed;

struct hif_cnf_configuration {
- u32 status;
+ __le32 status;
} __packed;

enum hif_gpio_mode {
@@ -187,8 +187,8 @@ struct hif_req_control_gpio {
} __packed;

struct hif_cnf_control_gpio {
- u32 status;
- u32 value;
+ __le32 status;
+ __le32 value;
} __packed;

enum hif_generic_indication_type {
@@ -198,17 +198,17 @@ enum hif_generic_indication_type {
};

struct hif_rx_stats {
- u32 nb_rx_frame;
- u32 nb_crc_frame;
- u32 per_total;
- u32 throughput;
- u32 nb_rx_by_rate[API_RATE_NUM_ENTRIES];
- u16 per[API_RATE_NUM_ENTRIES];
- s16 snr[API_RATE_NUM_ENTRIES];
- s16 rssi[API_RATE_NUM_ENTRIES];
- s16 cfo[API_RATE_NUM_ENTRIES];
- u32 date;
- u32 pwr_clk_freq;
+ __le32 nb_rx_frame;
+ __le32 nb_crc_frame;
+ __le32 per_total;
+ __le32 throughput;
+ __le32 nb_rx_by_rate[API_RATE_NUM_ENTRIES];
+ __le16 per[API_RATE_NUM_ENTRIES];
+ __le16 snr[API_RATE_NUM_ENTRIES]; // signed value
+ __le16 rssi[API_RATE_NUM_ENTRIES]; // signed value
+ __le16 cfo[API_RATE_NUM_ENTRIES]; // signed value
+ __le32 date;
+ __le32 pwr_clk_freq;
u8 is_ext_pwr_clk;
s8 current_temp;
} __packed;
@@ -219,7 +219,7 @@ union hif_indication_data {
};

struct hif_ind_generic {
- u32 indication_type;
+ __le32 indication_type;
union hif_indication_data indication_data;
} __packed;

@@ -244,7 +244,7 @@ enum hif_error {
};

struct hif_ind_error {
- u32 type;
+ __le32 type;
u8 data[];
} __packed;

@@ -269,7 +269,7 @@ struct hif_sl_msg_hdr {

struct hif_sl_msg {
struct hif_sl_msg_hdr hdr;
- u16 len;
+ __le16 len;
u8 payload[];
} __packed;

@@ -292,7 +292,7 @@ struct hif_req_set_sl_mac_key {
} __packed;

struct hif_cnf_set_sl_mac_key {
- u32 status;
+ __le32 status;
} __packed;

enum hif_sl_session_key_alg {
@@ -312,14 +312,14 @@ struct hif_req_sl_exchange_pub_keys {
} __packed;

struct hif_cnf_sl_exchange_pub_keys {
- u32 status;
+ __le32 status;
} __packed;

#define API_NCP_PUB_KEY_SIZE 32
#define API_NCP_PUB_KEY_MAC_SIZE 64

struct hif_ind_sl_exchange_pub_keys {
- u32 status;
+ __le32 status;
u8 ncp_pub_key[API_NCP_PUB_KEY_SIZE];
u8 ncp_pub_key_mac[API_NCP_PUB_KEY_MAC_SIZE];
} __packed;
@@ -332,7 +332,7 @@ struct hif_req_sl_configure {
} __packed;

struct hif_cnf_sl_configure {
- u32 status;
+ __le32 status;
} __packed;

#endif
diff --git a/drivers/staging/wfx/hif_api_mib.h b/drivers/staging/wfx/hif_api_mib.h
index e6d05789720c..cd1c3fd37d1d 100644
--- a/drivers/staging/wfx/hif_api_mib.h
+++ b/drivers/staging/wfx/hif_api_mib.h
@@ -161,7 +161,7 @@ struct hif_ie_table_entry {
} __packed;

struct hif_mib_bcn_filter_table {
- u32 num_of_info_elmts;
+ __le32 num_of_info_elmts;
struct hif_ie_table_entry ie_table[];
} __packed;

@@ -172,68 +172,68 @@ enum hif_beacon_filter {
};

struct hif_mib_bcn_filter_enable {
- u32 enable;
- u32 bcn_count;
+ __le32 enable;
+ __le32 bcn_count;
} __packed;

struct hif_mib_extended_count_table {
- u32 count_plcp_errors;
- u32 count_fcs_errors;
- u32 count_tx_packets;
- u32 count_rx_packets;
- u32 count_rx_packet_errors;
- u32 count_rx_decryption_failures;
- u32 count_rx_mic_failures;
- u32 count_rx_no_key_failures;
- u32 count_tx_multicast_frames;
- u32 count_tx_frames_success;
- u32 count_tx_frame_failures;
- u32 count_tx_frames_retried;
- u32 count_tx_frames_multi_retried;
- u32 count_rx_frame_duplicates;
- u32 count_rts_success;
- u32 count_rts_failures;
- u32 count_ack_failures;
- u32 count_rx_multicast_frames;
- u32 count_rx_frames_success;
- u32 count_rx_cmacicv_errors;
- u32 count_rx_cmac_replays;
- u32 count_rx_mgmt_ccmp_replays;
- u32 count_rx_bipmic_errors;
- u32 count_rx_beacon;
- u32 count_miss_beacon;
- u32 reserved[15];
+ __le32 count_plcp_errors;
+ __le32 count_fcs_errors;
+ __le32 count_tx_packets;
+ __le32 count_rx_packets;
+ __le32 count_rx_packet_errors;
+ __le32 count_rx_decryption_failures;
+ __le32 count_rx_mic_failures;
+ __le32 count_rx_no_key_failures;
+ __le32 count_tx_multicast_frames;
+ __le32 count_tx_frames_success;
+ __le32 count_tx_frame_failures;
+ __le32 count_tx_frames_retried;
+ __le32 count_tx_frames_multi_retried;
+ __le32 count_rx_frame_duplicates;
+ __le32 count_rts_success;
+ __le32 count_rts_failures;
+ __le32 count_ack_failures;
+ __le32 count_rx_multicast_frames;
+ __le32 count_rx_frames_success;
+ __le32 count_rx_cmacicv_errors;
+ __le32 count_rx_cmac_replays;
+ __le32 count_rx_mgmt_ccmp_replays;
+ __le32 count_rx_bipmic_errors;
+ __le32 count_rx_beacon;
+ __le32 count_miss_beacon;
+ __le32 reserved[15];
} __packed;

struct hif_mib_count_table {
- u32 count_plcp_errors;
- u32 count_fcs_errors;
- u32 count_tx_packets;
- u32 count_rx_packets;
- u32 count_rx_packet_errors;
- u32 count_rx_decryption_failures;
- u32 count_rx_mic_failures;
- u32 count_rx_no_key_failures;
- u32 count_tx_multicast_frames;
- u32 count_tx_frames_success;
- u32 count_tx_frame_failures;
- u32 count_tx_frames_retried;
- u32 count_tx_frames_multi_retried;
- u32 count_rx_frame_duplicates;
- u32 count_rts_success;
- u32 count_rts_failures;
- u32 count_ack_failures;
- u32 count_rx_multicast_frames;
- u32 count_rx_frames_success;
- u32 count_rx_cmacicv_errors;
- u32 count_rx_cmac_replays;
- u32 count_rx_mgmt_ccmp_replays;
- u32 count_rx_bipmic_errors;
+ __le32 count_plcp_errors;
+ __le32 count_fcs_errors;
+ __le32 count_tx_packets;
+ __le32 count_rx_packets;
+ __le32 count_rx_packet_errors;
+ __le32 count_rx_decryption_failures;
+ __le32 count_rx_mic_failures;
+ __le32 count_rx_no_key_failures;
+ __le32 count_tx_multicast_frames;
+ __le32 count_tx_frames_success;
+ __le32 count_tx_frame_failures;
+ __le32 count_tx_frames_retried;
+ __le32 count_tx_frames_multi_retried;
+ __le32 count_rx_frame_duplicates;
+ __le32 count_rts_success;
+ __le32 count_rts_failures;
+ __le32 count_ack_failures;
+ __le32 count_rx_multicast_frames;
+ __le32 count_rx_frames_success;
+ __le32 count_rx_cmacicv_errors;
+ __le32 count_rx_cmac_replays;
+ __le32 count_rx_mgmt_ccmp_replays;
+ __le32 count_rx_bipmic_errors;
} __packed;

struct hif_mib_mac_address {
u8 mac_addr[ETH_ALEN];
- u16 reserved;
+ __le16 reserved;
} __packed;

struct hif_mib_wep_default_key_id {
@@ -242,15 +242,15 @@ struct hif_mib_wep_default_key_id {
} __packed;

struct hif_mib_dot11_rts_threshold {
- u32 threshold;
+ __le32 threshold;
} __packed;

struct hif_mib_slot_time {
- u32 slot_time;
+ __le32 slot_time;
} __packed;

struct hif_mib_current_tx_power_level {
- s32 power_level;
+ __le32 power_level; // signed value
} __packed;

struct hif_mib_non_erp_protection {
@@ -274,7 +274,7 @@ struct hif_mib_template_frame {
u8 frame_type;
u8 init_rate:7;
u8 mode:1;
- u16 frame_length;
+ __le16 frame_length;
u8 frame[700];
} __packed;

@@ -328,7 +328,7 @@ struct hif_mib_set_association_mode {
u8 greenfield:1;
u8 reserved3:7;
u8 mpdu_start_spacing;
- u32 basic_rate_set;
+ __le32 basic_rate_set;
} __packed;

struct hif_mib_set_uapsd_information {
@@ -342,9 +342,9 @@ struct hif_mib_set_uapsd_information {
u8 deliv_video:1;
u8 deliv_voice:1;
u8 reserved2:4;
- u16 min_auto_trigger_interval;
- u16 max_auto_trigger_interval;
- u16 auto_trigger_step;
+ __le16 min_auto_trigger_interval;
+ __le16 max_auto_trigger_interval;
+ __le16 auto_trigger_step;
} __packed;

struct hif_mib_tx_rate_retry_policy {
@@ -384,7 +384,7 @@ struct hif_mib_set_ht_protection {
} __packed;

struct hif_mib_keep_alive_period {
- u16 keep_alive_period;
+ __le16 keep_alive_period;
u8 reserved[2];
} __packed;

--
2.25.1