From: Arend van Spriel <[email protected]>

Structures interfacing with the device have a specific endianess and
structures exchanged between host and device have been annotated so
sparse checking can be done. The Makefile has been modified to add
the __CHECK_ENDIAN__ flag.

Reported-by: Johannes Berg <[email protected]>
Reviewed-by: Pieter-Paul Giesberts <[email protected]>
Reviewed-by: Roland Vossen <[email protected]>
Signed-off-by: Franky Lin <[email protected]>
---
 drivers/staging/brcm80211/brcmsmac/Makefile       |    3 +-
 drivers/staging/brcm80211/brcmsmac/d11.h          |   80 ++++++++++++--------
 drivers/staging/brcm80211/brcmsmac/dma.c          |   41 ++++++-----
 drivers/staging/brcm80211/brcmsmac/mac80211_if.c  |   15 ++--
 drivers/staging/brcm80211/brcmsmac/main.c         |   81 +++++++++++----------
 drivers/staging/brcm80211/brcmsmac/phy/phy_cmn.c  |    2 +-
 drivers/staging/brcm80211/brcmsmac/phy/phy_n.c    |    2 +-
 drivers/staging/brcm80211/brcmsmac/srom.c         |    4 +-
 drivers/staging/brcm80211/brcmsmac/ucode_loader.h |    8 +-
 9 files changed, 130 insertions(+), 106 deletions(-)

diff --git a/drivers/staging/brcm80211/brcmsmac/Makefile 
b/drivers/staging/brcm80211/brcmsmac/Makefile
index 8fdca2e..e44859d 100644
--- a/drivers/staging/brcm80211/brcmsmac/Makefile
+++ b/drivers/staging/brcm80211/brcmsmac/Makefile
@@ -15,7 +15,8 @@
 # OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
 # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
-ccflags-y :=                           \
+ccflags-y := \
+       -D__CHECK_ENDIAN__ \
        -Idrivers/staging/brcm80211/brcmsmac \
        -Idrivers/staging/brcm80211/brcmsmac/phy \
        -Idrivers/staging/brcm80211/include
diff --git a/drivers/staging/brcm80211/brcmsmac/d11.h 
b/drivers/staging/brcm80211/brcmsmac/d11.h
index cbb574a..392e282 100644
--- a/drivers/staging/brcm80211/brcmsmac/d11.h
+++ b/drivers/staging/brcm80211/brcmsmac/d11.h
@@ -745,37 +745,37 @@ struct cck_phy_hdr {
 
 /* TX DMA buffer header */
 struct d11txh {
-       u16 MacTxControlLow;    /* 0x0 */
-       u16 MacTxControlHigh;   /* 0x1 */
-       u16 MacFrameControl;    /* 0x2 */
-       u16 TxFesTimeNormal;    /* 0x3 */
-       u16 PhyTxControlWord;   /* 0x4 */
-       u16 PhyTxControlWord_1; /* 0x5 */
-       u16 PhyTxControlWord_1_Fbr;     /* 0x6 */
-       u16 PhyTxControlWord_1_Rts;     /* 0x7 */
-       u16 PhyTxControlWord_1_FbrRts;  /* 0x8 */
-       u16 MainRates;  /* 0x9 */
-       u16 XtraFrameTypes;     /* 0xa */
+       __le16 MacTxControlLow; /* 0x0 */
+       __le16 MacTxControlHigh;        /* 0x1 */
+       __le16 MacFrameControl; /* 0x2 */
+       __le16 TxFesTimeNormal; /* 0x3 */
+       __le16 PhyTxControlWord;        /* 0x4 */
+       __le16 PhyTxControlWord_1;      /* 0x5 */
+       __le16 PhyTxControlWord_1_Fbr;  /* 0x6 */
+       __le16 PhyTxControlWord_1_Rts;  /* 0x7 */
+       __le16 PhyTxControlWord_1_FbrRts;       /* 0x8 */
+       __le16 MainRates;       /* 0x9 */
+       __le16 XtraFrameTypes;  /* 0xa */
        u8 IV[16];              /* 0x0b - 0x12 */
        u8 TxFrameRA[6];        /* 0x13 - 0x15 */
-       u16 TxFesTimeFallback;  /* 0x16 */
+       __le16 TxFesTimeFallback;       /* 0x16 */
        u8 RTSPLCPFallback[6];  /* 0x17 - 0x19 */
-       u16 RTSDurFallback;     /* 0x1a */
+       __le16 RTSDurFallback;  /* 0x1a */
        u8 FragPLCPFallback[6]; /* 0x1b - 1d */
-       u16 FragDurFallback;    /* 0x1e */
-       u16 MModeLen;   /* 0x1f */
-       u16 MModeFbrLen;        /* 0x20 */
-       u16 TstampLow;  /* 0x21 */
-       u16 TstampHigh; /* 0x22 */
-       u16 ABI_MimoAntSel;     /* 0x23 */
-       u16 PreloadSize;        /* 0x24 */
-       u16 AmpduSeqCtl;        /* 0x25 */
-       u16 TxFrameID;  /* 0x26 */
-       u16 TxStatus;   /* 0x27 */
-       u16 MaxNMpdus;  /* 0x28 */
-       u16 MaxABytes_MRT;      /* 0x29 */
-       u16 MaxABytes_FBR;      /* 0x2a */
-       u16 MinMBytes;  /* 0x2b */
+       __le16 FragDurFallback; /* 0x1e */
+       __le16 MModeLen;        /* 0x1f */
+       __le16 MModeFbrLen;     /* 0x20 */
+       __le16 TstampLow;       /* 0x21 */
+       __le16 TstampHigh;      /* 0x22 */
+       __le16 ABI_MimoAntSel;  /* 0x23 */
+       __le16 PreloadSize;     /* 0x24 */
+       __le16 AmpduSeqCtl;     /* 0x25 */
+       __le16 TxFrameID;       /* 0x26 */
+       __le16 TxStatus;        /* 0x27 */
+       __le16 MaxNMpdus;       /* 0x28 */
+       __le16 MaxABytes_MRT;   /* 0x29 */
+       __le16 MaxABytes_FBR;   /* 0x2a */
+       __le16 MinMBytes;       /* 0x2b */
        u8 RTSPhyHeader[D11_PHY_HDR_LEN];       /* 0x2c - 0x2e */
        struct ieee80211_rts rts_frame; /* 0x2f - 0x36 */
        u16 PAD;                /* 0x37 */
@@ -1379,6 +1379,21 @@ struct shm_acparams {
  * RxTSFTime: RxTSFTime time of first MAC symbol + M_PHY_PLCPRX_DLY
  * RxChan: gain code, channel radio code, and phy type
  */
+struct d11rxhdr_le {
+       __le16 RxFrameSize;
+       u16 PAD;
+       __le16 PhyRxStatus_0;
+       __le16 PhyRxStatus_1;
+       __le16 PhyRxStatus_2;
+       __le16 PhyRxStatus_3;
+       __le16 PhyRxStatus_4;
+       __le16 PhyRxStatus_5;
+       __le16 RxStatus1;
+       __le16 RxStatus2;
+       __le16 RxTSFTime;
+       __le16 RxChan;
+} __packed;
+
 struct d11rxhdr {
        u16 RxFrameSize;
        u16 PAD;
@@ -1392,20 +1407,21 @@ struct d11rxhdr {
        u16 RxStatus2;
        u16 RxTSFTime;
        u16 RxChan;
-} __packed;
+};
 
 /*
  * rxhdr: received frame header data
- * tsf_l: TSF_L reading
- * rssi: computed instanteneous rssi in BMAC
+ * rssi: rssi computed by PHY
  * rxpwr0: obsoleted, place holder for legacy ROM code. use rxpwr[]
  * rxpwr1: obsoleted, place holder for legacy ROM code. use rxpwr[]
  * do_rssi_ma: do per-pkt sampling for per-antenna ma in HIGH
  * rxpwr: rssi for supported antennas
  */
 struct brcms_d11rxhdr {
-       struct d11rxhdr rxhdr;
-       u32 tsf_l;
+       union {
+               struct d11rxhdr_le rxh_le;
+               struct d11rxhdr rxh_cpu;
+       };
        s8 rssi;
        s8 rxpwr0;
        s8 rxpwr1;
diff --git a/drivers/staging/brcm80211/brcmsmac/dma.c 
b/drivers/staging/brcm80211/brcmsmac/dma.c
index 714c74c..ef856ce 100644
--- a/drivers/staging/brcm80211/brcmsmac/dma.c
+++ b/drivers/staging/brcm80211/brcmsmac/dma.c
@@ -206,10 +206,10 @@
  * Descriptors are only read by the hardware, never written back.
  */
 struct dma64desc {
-       u32 ctrl1;      /* misc control bits & bufcount */
-       u32 ctrl2;      /* buffer count and address extension */
-       u32 addrlow;    /* memory address of the date buffer, bits 31:0 */
-       u32 addrhigh;   /* memory address of the date buffer, bits 63:32 */
+       __le32 ctrl1;   /* misc control bits & bufcount */
+       __le32 ctrl2;   /* buffer count and address extension */
+       __le32 addrlow; /* memory address of the date buffer, bits 31:0 */
+       __le32 addrhigh; /* memory address of the date buffer, bits 63:32 */
 };
 
 /* dma engine software state */
@@ -295,15 +295,18 @@ struct dma_info {
 static uint dma_msg_level;
 
 /* Check for odd number of 1's */
-static u32 parity32(u32 data)
+static u32 parity32(__le32 data)
 {
-       data ^= data >> 16;
-       data ^= data >> 8;
-       data ^= data >> 4;
-       data ^= data >> 2;
-       data ^= data >> 1;
+       /* no swap needed for counting 1's */
+       u32 par_data = *(u32 *)&data;
 
-       return data & 1;
+       par_data ^= par_data >> 16;
+       par_data ^= par_data >> 8;
+       par_data ^= par_data >> 4;
+       par_data ^= par_data >> 2;
+       par_data ^= par_data >> 1;
+
+       return par_data & 1;
 }
 
 static bool dma64_dd_parity(struct dma64desc *dd)
@@ -873,13 +876,13 @@ static struct sk_buff *dma64_getnextrxp(struct dma_info 
*di, bool forceall)
        rxp = di->rxp[i];
        di->rxp[i] = NULL;
 
-       pa = cpu_to_le32(di->rxd64[i].addrlow) - di->dataoffsetlow;
+       pa = le32_to_cpu(di->rxd64[i].addrlow) - di->dataoffsetlow;
 
        /* clear this packet from the descriptor ring */
        pci_unmap_single(di->pbus, pa, di->rxbufsize, PCI_DMA_FROMDEVICE);
 
-       di->rxd64[i].addrlow = 0xdeadbeef;
-       di->rxd64[i].addrhigh = 0xdeadbeef;
+       di->rxd64[i].addrlow = cpu_to_le32(0xdeadbeef);
+       di->rxd64[i].addrhigh = cpu_to_le32(0xdeadbeef);
 
        di->rxin = nextrxd(di, i);
 
@@ -917,7 +920,7 @@ struct sk_buff *dma_rx(struct dma_pub *pub)
        if (head == NULL)
                return NULL;
 
-       len = le16_to_cpu(*(u16 *) (head->data));
+       len = le16_to_cpu(*(__le16 *) (head->data));
        DMA_TRACE(("%s: dma_rx len %d\n", di->name, len));
        dma_spin_for_len(len, head);
 
@@ -1367,14 +1370,14 @@ struct sk_buff *dma_getnexttxp(struct dma_pub *pub, 
enum txd_range range)
                dma_addr_t pa;
                uint size;
 
-               pa = cpu_to_le32(di->txd64[i].addrlow) - di->dataoffsetlow;
+               pa = le32_to_cpu(di->txd64[i].addrlow) - di->dataoffsetlow;
 
                size =
-                   (cpu_to_le32(di->txd64[i].ctrl2) &
+                   (le32_to_cpu(di->txd64[i].ctrl2) &
                     D64_CTRL2_BC_MASK);
 
-               di->txd64[i].addrlow = 0xdeadbeef;
-               di->txd64[i].addrhigh = 0xdeadbeef;
+               di->txd64[i].addrlow = cpu_to_le32(0xdeadbeef);
+               di->txd64[i].addrhigh = cpu_to_le32(0xdeadbeef);
 
                txp = di->txp[i];
                di->txp[i] = NULL;
diff --git a/drivers/staging/brcm80211/brcmsmac/mac80211_if.c 
b/drivers/staging/brcm80211/brcmsmac/mac80211_if.c
index 9bd4b83..50ca1bc 100644
--- a/drivers/staging/brcm80211/brcmsmac/mac80211_if.c
+++ b/drivers/staging/brcm80211/brcmsmac/mac80211_if.c
@@ -88,9 +88,9 @@
 }
 
 struct firmware_hdr {
-       u32 offset;
-       u32 len;
-       u32 idx;
+       __le32 offset;
+       __le32 len;
+       __le32 idx;
 };
 
 static const char * const brcms_firmwares[MAX_FW_IMAGES] = {
@@ -242,7 +242,7 @@ static struct ieee80211_supported_band brcms_band_2GHz_nphy 
= {
                   .mcs = {
                           /* placeholders for now */
                           .rx_mask = {0xff, 0xff, 0, 0, 0, 0, 0, 0, 0, 0},
-                          .rx_highest = 500,
+                          .rx_highest = cpu_to_le16(500),
                           .tx_params = IEEE80211_HT_MCS_TX_DEFINED}
                   }
 };
@@ -264,7 +264,7 @@ static struct ieee80211_supported_band brcms_band_5GHz_nphy 
= {
                   .mcs = {
                           /* placeholders for now */
                           .rx_mask = {0xff, 0xff, 0, 0, 0, 0, 0, 0, 0, 0},
-                          .rx_highest = 500,
+                          .rx_highest = cpu_to_le16(500),
                           .tx_params = IEEE80211_HT_MCS_TX_DEFINED}
                   }
 };
@@ -1055,7 +1055,8 @@ static int ieee_hw_rate_init(struct ieee80211_hw *hw)
                if (phy_type == PHY_TYPE_LCN) {
                        /* Single stream */
                        brcms_band_2GHz_nphy.ht_cap.mcs.rx_mask[1] = 0;
-                       brcms_band_2GHz_nphy.ht_cap.mcs.rx_highest = 72;
+                       brcms_band_2GHz_nphy.ht_cap.mcs.rx_highest =
+                                       cpu_to_le16(72);
                }
                hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &brcms_band_2GHz_nphy;
        } else {
@@ -1692,7 +1693,7 @@ int brcms_ucode_init_uint(struct brcms_info *wl, u32 
*data, u32 idx)
                                                  "ERROR: fw hdr len\n");
                                        return -ENOMSG;
                                }
-                               *data = le32_to_cpu(*((u32 *) pdata));
+                               *data = le32_to_cpu(*((__le32 *) pdata));
                                return 0;
                        }
                }
diff --git a/drivers/staging/brcm80211/brcmsmac/main.c 
b/drivers/staging/brcm80211/brcmsmac/main.c
index 3ec952c..7af7618 100644
--- a/drivers/staging/brcm80211/brcmsmac/main.c
+++ b/drivers/staging/brcm80211/brcmsmac/main.c
@@ -343,9 +343,9 @@ static u16 frametype(u32 rspec, u8 mimoframe)
 #define XMTFIFOTBL_STARTREV    20
 
 struct d11init {
-       u16 addr;
-       u16 size;
-       u32 value;
+       __le16 addr;
+       __le16 size;
+       __le32 value;
 };
 
 /* currently the best mechanism for determining SIFS is the band in use */
@@ -673,7 +673,7 @@ static void brcms_c_write_inits(struct brcms_hardware 
*wlc_hw,
 
        base = (u8 *)wlc_hw->regs;
 
-       for (i = 0; inits[i].addr != 0xffff; i++) {
+       for (i = 0; inits[i].addr != cpu_to_le16(0xffff); i++) {
                size = le16_to_cpu(inits[i].size);
                addr = base + le16_to_cpu(inits[i].addr);
                value = le32_to_cpu(inits[i].value);
@@ -881,7 +881,7 @@ brcms_c_dotxstatus(struct brcms_c_info *wlc, struct 
tx_status *txs)
                brcms_c_print_txstatus(txs);
        }
 
-       if (txs->frameid != cpu_to_le16(txh->TxFrameID))
+       if (txs->frameid != le16_to_cpu(txh->TxFrameID))
                goto fatal;
        tx_info = IEEE80211_SKB_CB(p);
        h = (struct ieee80211_hdr *)((u8 *) (txh + 1) + D11_PHY_HDR_LEN);
@@ -900,7 +900,7 @@ brcms_c_dotxstatus(struct brcms_c_info *wlc, struct 
tx_status *txs)
                       "%s: Pkt tx suppressed, possibly channel %d\n",
                       __func__, CHSPEC_CHANNEL(wlc->default_bss->chanspec));
 
-       tx_rts = cpu_to_le16(txh->MacTxControlLow) & TXC_SENDRTS;
+       tx_rts = le16_to_cpu(txh->MacTxControlLow) & TXC_SENDRTS;
        tx_frame_count =
            (txs->status & TX_STATUS_FRM_RTX_MASK) >> TX_STATUS_FRM_RTX_SHIFT;
        tx_rts_count =
@@ -1669,6 +1669,8 @@ brcms_b_write_template_ram(struct brcms_hardware *wlc_hw, 
int offset, int len,
 {
        struct d11regs *regs;
        u32 word;
+       __le32 word_le;
+       __be32 word_be;
        bool be_bit;
        BCMMSG(wlc_hw->wlc->wiphy, "wl%d\n", wlc_hw->unit);
 
@@ -1684,10 +1686,13 @@ brcms_b_write_template_ram(struct brcms_hardware 
*wlc_hw, int offset, int len,
        while (len > 0) {
                memcpy(&word, buf, sizeof(u32));
 
-               if (be_bit)
-                       word = cpu_to_be32(word);
-               else
-                       word = cpu_to_le32(word);
+               if (be_bit) {
+                       word_be = cpu_to_be32(word);
+                       word = *(u32 *)&word_be;
+               } else {
+                       word_le = cpu_to_le32(word);
+                       word = *(u32 *)&word_le;
+               }
 
                W_REG(&regs->tplatewrdata, word);
 
@@ -2430,8 +2435,9 @@ static void brcms_c_gpio_init(struct brcms_c_info *wlc)
        ai_gpiocontrol(wlc_hw->sih, gm, gc, GPIO_DRV_PRIORITY);
 }
 
-static void brcms_ucode_write(struct brcms_hardware *wlc_hw, const u32 ucode[],
-                             const uint nbytes) {
+static void brcms_ucode_write(struct brcms_hardware *wlc_hw,
+                             const __le32 ucode[], const size_t nbytes)
+{
        struct d11regs *regs = wlc_hw->regs;
        uint i;
        uint count;
@@ -4259,7 +4265,7 @@ void brcms_c_wme_setparams(struct brcms_c_info *wlc, u16 
aci,
        do {
                memset((char *)&acp_shm, 0, sizeof(struct shm_acparams));
                /* fill in shm ac params struct */
-               acp_shm.txop = le16_to_cpu(params->txop);
+               acp_shm.txop = params->txop;
                /* convert from units of 32us to us for ucode */
                wlc->edcf_txop[aci & 0x3] = acp_shm.txop =
                    EDCF_TXOP2USEC(acp_shm.txop);
@@ -4312,16 +4318,11 @@ void brcms_c_edcf_setparams(struct brcms_c_info *wlc, 
bool suspend)
        u16 aci;
        int i_ac;
        struct ieee80211_tx_queue_params txq_pars;
-       struct ieee80211_tx_queue_params *params = &txq_pars;
        static struct edcf_acparam default_edcf_acparams[] = {
-                {EDCF_AC_BE_ACI_STA, EDCF_AC_BE_ECW_STA,
-                 cpu_to_le16(EDCF_AC_BE_TXOP_STA)},
-                {EDCF_AC_BK_ACI_STA, EDCF_AC_BK_ECW_STA,
-                 cpu_to_le16(EDCF_AC_BK_TXOP_STA)},
-                {EDCF_AC_VI_ACI_STA, EDCF_AC_VI_ECW_STA,
-                 cpu_to_le16(EDCF_AC_VI_TXOP_STA)},
-                {EDCF_AC_VO_ACI_STA, EDCF_AC_VO_ECW_STA,
-                 cpu_to_le16(EDCF_AC_VO_TXOP_STA)}
+                {EDCF_AC_BE_ACI_STA, EDCF_AC_BE_ECW_STA, EDCF_AC_BE_TXOP_STA},
+                {EDCF_AC_BK_ACI_STA, EDCF_AC_BK_ECW_STA, EDCF_AC_BK_TXOP_STA},
+                {EDCF_AC_VI_ACI_STA, EDCF_AC_VI_ECW_STA, EDCF_AC_VI_TXOP_STA},
+                {EDCF_AC_VO_ACI_STA, EDCF_AC_VO_ECW_STA, EDCF_AC_VO_TXOP_STA}
        }; /* ucode needs these parameters during its initialization */
        struct edcf_acparam *edcf_acp = &default_edcf_acparams[0];
 
@@ -4330,15 +4331,15 @@ void brcms_c_edcf_setparams(struct brcms_c_info *wlc, 
bool suspend)
                aci = (edcf_acp->ACI & EDCF_ACI_MASK) >> EDCF_ACI_SHIFT;
 
                /* fill in shm ac params struct */
-               params->txop = edcf_acp->TXOP;
-               params->aifs = edcf_acp->ACI;
+               txq_pars.txop = edcf_acp->TXOP;
+               txq_pars.aifs = edcf_acp->ACI;
 
                /* CWmin = 2^(ECWmin) - 1 */
-               params->cw_min = EDCF_ECW2CW(edcf_acp->ECW & EDCF_ECWMIN_MASK);
+               txq_pars.cw_min = EDCF_ECW2CW(edcf_acp->ECW & EDCF_ECWMIN_MASK);
                /* CWmax = 2^(ECWmax) - 1 */
-               params->cw_max = EDCF_ECW2CW((edcf_acp->ECW & EDCF_ECWMAX_MASK)
+               txq_pars.cw_max = EDCF_ECW2CW((edcf_acp->ECW & EDCF_ECWMAX_MASK)
                                            >> EDCF_ECWMAX_SHIFT);
-               brcms_c_wme_setparams(wlc, aci, params, suspend);
+               brcms_c_wme_setparams(wlc, aci, &txq_pars, suspend);
        }
 
        if (suspend)
@@ -8139,7 +8140,7 @@ static u64 brcms_c_recover_tsf64(struct brcms_c_info *wlc,
        brcms_b_read_tsf(wlc->hw, &tsf_l, &tsf_h);
 
        rx_tsf_16_31 = (u16)(tsf_l >> 16);
-       rx_tsf_0_15 = rxh->rxhdr.RxTSFTime;
+       rx_tsf_0_15 = rxh->rxh_cpu.RxTSFTime;
 
        /*
         * a greater tsf time indicates the low 16 bits of
@@ -8301,6 +8302,7 @@ brcms_c_recvctl(struct brcms_c_info *wlc, struct d11rxhdr 
*rxh,
  */
 void brcms_c_recv(struct brcms_c_info *wlc, struct sk_buff *p)
 {
+       struct d11rxhdr_le *rxh_le;
        struct d11rxhdr *rxh;
        struct ieee80211_hdr *h;
        uint len;
@@ -8309,23 +8311,24 @@ void brcms_c_recv(struct brcms_c_info *wlc, struct 
sk_buff *p)
        BCMMSG(wlc->wiphy, "wl%d\n", wlc->pub->unit);
 
        /* frame starts with rxhdr */
+       rxh_le = (struct d11rxhdr_le *) (p->data);
        rxh = (struct d11rxhdr *) (p->data);
 
        /* strip off rxhdr */
        skb_pull(p, BRCMS_HWRXOFF);
 
        /* fixup rx header endianness */
-       rxh->RxFrameSize = le16_to_cpu(rxh->RxFrameSize);
-       rxh->PhyRxStatus_0 = le16_to_cpu(rxh->PhyRxStatus_0);
-       rxh->PhyRxStatus_1 = le16_to_cpu(rxh->PhyRxStatus_1);
-       rxh->PhyRxStatus_2 = le16_to_cpu(rxh->PhyRxStatus_2);
-       rxh->PhyRxStatus_3 = le16_to_cpu(rxh->PhyRxStatus_3);
-       rxh->PhyRxStatus_4 = le16_to_cpu(rxh->PhyRxStatus_4);
-       rxh->PhyRxStatus_5 = le16_to_cpu(rxh->PhyRxStatus_5);
-       rxh->RxStatus1 = le16_to_cpu(rxh->RxStatus1);
-       rxh->RxStatus2 = le16_to_cpu(rxh->RxStatus2);
-       rxh->RxTSFTime = le16_to_cpu(rxh->RxTSFTime);
-       rxh->RxChan = le16_to_cpu(rxh->RxChan);
+       rxh->RxFrameSize = le16_to_cpu(rxh_le->RxFrameSize);
+       rxh->PhyRxStatus_0 = le16_to_cpu(rxh_le->PhyRxStatus_0);
+       rxh->PhyRxStatus_1 = le16_to_cpu(rxh_le->PhyRxStatus_1);
+       rxh->PhyRxStatus_2 = le16_to_cpu(rxh_le->PhyRxStatus_2);
+       rxh->PhyRxStatus_3 = le16_to_cpu(rxh_le->PhyRxStatus_3);
+       rxh->PhyRxStatus_4 = le16_to_cpu(rxh_le->PhyRxStatus_4);
+       rxh->PhyRxStatus_5 = le16_to_cpu(rxh_le->PhyRxStatus_5);
+       rxh->RxStatus1 = le16_to_cpu(rxh_le->RxStatus1);
+       rxh->RxStatus2 = le16_to_cpu(rxh_le->RxStatus2);
+       rxh->RxTSFTime = le16_to_cpu(rxh_le->RxTSFTime);
+       rxh->RxChan = le16_to_cpu(rxh_le->RxChan);
 
        /* MAC inserts 2 pad bytes for a4 headers or QoS or A-MSDU subframes */
        if (rxh->RxStatus1 & RXS_PBPRES) {
diff --git a/drivers/staging/brcm80211/brcmsmac/phy/phy_cmn.c 
b/drivers/staging/brcm80211/brcmsmac/phy/phy_cmn.c
index a26c682..3f6e4bc 100644
--- a/drivers/staging/brcm80211/brcmsmac/phy/phy_cmn.c
+++ b/drivers/staging/brcm80211/brcmsmac/phy/phy_cmn.c
@@ -2613,7 +2613,7 @@ void wlc_phy_compute_dB(u32 *cmplx_pwr, s8 
*p_cmplx_pwr_dB, u8 core)
 void wlc_phy_rssi_compute(struct brcms_phy_pub *pih,
                          struct brcms_d11rxhdr *wlc_rxhdr)
 {
-       struct d11rxhdr *rxh = &wlc_rxhdr->rxhdr;
+       struct d11rxhdr_le *rxh = &wlc_rxhdr->rxh_le;
        int rssi = le16_to_cpu(rxh->PhyRxStatus_1) & PRXS1_JSSI_MASK;
        uint radioid = pih->radioid;
        struct brcms_phy *pi = (struct brcms_phy *) pih;
diff --git a/drivers/staging/brcm80211/brcmsmac/phy/phy_n.c 
b/drivers/staging/brcm80211/brcmsmac/phy/phy_n.c
index 58645d2..224ce06 100644
--- a/drivers/staging/brcm80211/brcmsmac/phy/phy_n.c
+++ b/drivers/staging/brcm80211/brcmsmac/phy/phy_n.c
@@ -23111,7 +23111,7 @@ void wlc_phy_rssi_cal_nphy(struct brcms_phy *pi)
 int
 wlc_phy_rssi_compute_nphy(struct brcms_phy *pi, struct brcms_d11rxhdr *wlc_rxh)
 {
-       struct d11rxhdr *rxh = &wlc_rxh->rxhdr;
+       struct d11rxhdr_le *rxh = &wlc_rxh->rxh_le;
        s16 rxpwr, rxpwr0, rxpwr1;
        s16 phyRx0_l, phyRx2_l;
 
diff --git a/drivers/staging/brcm80211/brcmsmac/srom.c 
b/drivers/staging/brcm80211/brcmsmac/srom.c
index 5bf0732..b37faf4 100644
--- a/drivers/staging/brcm80211/brcmsmac/srom.c
+++ b/drivers/staging/brcm80211/brcmsmac/srom.c
@@ -820,14 +820,14 @@ static inline void ltoh16_buf(u16 *buf, unsigned int size)
 {
        size /= 2;
        while (size--)
-               *(buf + size) = le16_to_cpu(*(buf + size));
+               *(buf + size) = le16_to_cpu(*(__le16 *)(buf + size));
 }
 
 static inline void htol16_buf(u16 *buf, unsigned int size)
 {
        size /= 2;
        while (size--)
-               *(buf + size) = cpu_to_le16(*(buf + size));
+               *(__le16 *)(buf + size) = cpu_to_le16(*(buf + size));
 }
 
 /* Initialization of varbuf structure */
diff --git a/drivers/staging/brcm80211/brcmsmac/ucode_loader.h 
b/drivers/staging/brcm80211/brcmsmac/ucode_loader.h
index 438675a..49d5b7e 100644
--- a/drivers/staging/brcm80211/brcmsmac/ucode_loader.h
+++ b/drivers/staging/brcm80211/brcmsmac/ucode_loader.h
@@ -35,10 +35,10 @@ struct brcms_ucode {
        struct d11init *d11n0absinitvals16;
        struct d11init *d11n0bsinitvals16;
        struct d11init *d11n0initvals16;
-       u32 *bcm43xx_16_mimo;
-       u32 bcm43xx_16_mimosz;
-       u32 *bcm43xx_24_lcn;
-       u32 bcm43xx_24_lcnsz;
+       __le32 *bcm43xx_16_mimo;
+       size_t bcm43xx_16_mimosz;
+       __le32 *bcm43xx_24_lcn;
+       size_t bcm43xx_24_lcnsz;
        u32 *bcm43xx_bommajor;
        u32 *bcm43xx_bomminor;
 };
-- 
1.7.1


_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel

Reply via email to