From: Jérôme Pouiller <jerome.pouil...@silabs.com>

The structs hif_queue, hif_data_flags, hif_tx_flags and
hif_ht_tx_parameters have no real reasons to exist. Drop them and
simplify access to fields of struct hif_req_tx.

Signed-off-by: Jérôme Pouiller <jerome.pouil...@silabs.com>
---
 drivers/staging/wfx/data_tx.c     | 39 ++++++++++--------------
 drivers/staging/wfx/hif_api_cmd.h | 49 +++++++++----------------------
 2 files changed, 30 insertions(+), 58 deletions(-)

diff --git a/drivers/staging/wfx/data_tx.c b/drivers/staging/wfx/data_tx.c
index 1f2158d6eaa9..e2fb770e98fc 100644
--- a/drivers/staging/wfx/data_tx.c
+++ b/drivers/staging/wfx/data_tx.c
@@ -300,23 +300,14 @@ static u8 wfx_tx_get_rate_id(struct wfx_vif *wvif,
        return rate_id;
 }
 
-static struct hif_ht_tx_parameters wfx_tx_get_tx_parms(struct wfx_dev *wdev,
-                                                      struct ieee80211_tx_info 
*tx_info)
+static int wfx_tx_get_frame_format(struct ieee80211_tx_info *tx_info)
 {
-       struct ieee80211_tx_rate *rate = &tx_info->driver_rates[0];
-       struct hif_ht_tx_parameters ret = { };
-
-       if (!(rate->flags & IEEE80211_TX_RC_MCS))
-               ret.frame_format = HIF_FRAME_FORMAT_NON_HT;
-       else if (!(rate->flags & IEEE80211_TX_RC_GREEN_FIELD))
-               ret.frame_format = HIF_FRAME_FORMAT_MIXED_FORMAT_HT;
+       if (!(tx_info->driver_rates[0].flags & IEEE80211_TX_RC_MCS))
+               return HIF_FRAME_FORMAT_NON_HT;
+       else if (!(tx_info->driver_rates[0].flags & 
IEEE80211_TX_RC_GREEN_FIELD))
+               return HIF_FRAME_FORMAT_MIXED_FORMAT_HT;
        else
-               ret.frame_format = HIF_FRAME_FORMAT_GF_HT_11N;
-       if (rate->flags & IEEE80211_TX_RC_SHORT_GI)
-               ret.short_gi = 1;
-       if (tx_info->flags & IEEE80211_TX_CTL_STBC)
-               ret.stbc = 0; // FIXME: Not yet supported by firmware?
-       return ret;
+               return HIF_FRAME_FORMAT_GF_HT_11N;
 }
 
 static int wfx_tx_get_icv_len(struct ieee80211_key_conf *hw_key)
@@ -377,14 +368,16 @@ static int wfx_tx_inner(struct wfx_vif *wvif, struct 
ieee80211_sta *sta,
        req->packet_id |= IEEE80211_SEQ_TO_SN(le16_to_cpu(hdr->seq_ctrl)) << 16;
        req->packet_id |= queue_id << 28;
 
-       req->data_flags.fc_offset = offset;
+       req->fc_offset = offset;
        if (tx_info->flags & IEEE80211_TX_CTL_SEND_AFTER_DTIM)
-               req->data_flags.after_dtim = 1;
-       req->queue_id.peer_sta_id = wfx_tx_get_link_id(wvif, sta, hdr);
+               req->after_dtim = 1;
+       req->peer_sta_id = wfx_tx_get_link_id(wvif, sta, hdr);
        // Queue index are inverted between firmware and Linux
-       req->queue_id.queue_id = 3 - queue_id;
-       req->ht_tx_parameters = wfx_tx_get_tx_parms(wvif->wdev, tx_info);
-       req->tx_flags.retry_policy_index = wfx_tx_get_rate_id(wvif, tx_info);
+       req->queue_id = 3 - queue_id;
+       req->retry_policy_index = wfx_tx_get_rate_id(wvif, tx_info);
+       req->frame_format = wfx_tx_get_frame_format(tx_info);
+       if (tx_info->driver_rates[0].flags & IEEE80211_TX_RC_SHORT_GI)
+               req->short_gi = 1;
 
        // Auxiliary operations
        wfx_tx_queues_put(wvif, skb);
@@ -436,10 +429,10 @@ static void wfx_skb_dtor(struct wfx_vif *wvif, struct 
sk_buff *skb)
        struct hif_req_tx *req = (struct hif_req_tx *)hif->body;
        unsigned int offset = sizeof(struct hif_msg) +
                              sizeof(struct hif_req_tx) +
-                             req->data_flags.fc_offset;
+                             req->fc_offset;
 
        WARN_ON(!wvif);
-       wfx_tx_policy_put(wvif, req->tx_flags.retry_policy_index);
+       wfx_tx_policy_put(wvif, req->retry_policy_index);
        skb_pull(skb, offset);
        ieee80211_tx_status_irqsafe(wvif->wdev->hw, skb);
 }
diff --git a/drivers/staging/wfx/hif_api_cmd.h 
b/drivers/staging/wfx/hif_api_cmd.h
index b86ec39f2615..d5ef1118b87c 100644
--- a/drivers/staging/wfx/hif_api_cmd.h
+++ b/drivers/staging/wfx/hif_api_cmd.h
@@ -191,53 +191,32 @@ enum hif_frame_format {
        HIF_FRAME_FORMAT_GF_HT_11N                 = 0x2
 };
 
-enum hif_stbc {
-       HIF_STBC_NOT_ALLOWED                       = 0x0,
-       HIF_STBC_ALLOWED                           = 0x1
-};
-
-struct hif_queue {
+struct hif_req_tx {
+       // packet_id is not interpreted by the device, so it is not necessary to
+       // declare it little endian
+       u32    packet_id;
+       u8     max_tx_rate;
        u8     queue_id:2;
        u8     peer_sta_id:4;
-       u8     reserved:2;
-} __packed;
-
-struct hif_data_flags {
+       u8     reserved1:2;
        u8     more:1;
        u8     fc_offset:3;
        u8     after_dtim:1;
-       u8     reserved:3;
-} __packed;
-
-struct hif_tx_flags {
+       u8     reserved2:3;
        u8     start_exp:1;
-       u8     reserved:3;
+       u8     reserved3:3;
        u8     retry_policy_index:4;
-} __packed;
-
-struct hif_ht_tx_parameters {
+       __le32 reserved4;
+       __le32 expire_time;
        u8     frame_format:4;
        u8     fec_coding:1;
        u8     short_gi:1;
-       u8     reserved1:1;
+       u8     reserved5:1;
        u8     stbc:1;
-       u8     reserved2;
+       u8     reserved6;
        u8     aggregation:1;
-       u8     reserved3:7;
-       u8     reserved4;
-} __packed;
-
-struct hif_req_tx {
-       // packet_id is not interpreted by the device, so it is not necessary to
-       // declare it little endian
-       u32    packet_id;
-       u8     max_tx_rate;
-       struct hif_queue queue_id;
-       struct hif_data_flags data_flags;
-       struct hif_tx_flags tx_flags;
-       __le32 reserved;
-       __le32 expire_time;
-       struct hif_ht_tx_parameters ht_tx_parameters;
+       u8     reserved7:7;
+       u8     reserved8;
        u8     frame[];
 } __packed;
 
-- 
2.28.0

Reply via email to