source: trunk/package/mac80211/patches/467-ath5k_optimize_rx_status.patch @ 26566

Last change on this file since 26566 was 26566, checked in by nbd, 5 years ago

ath5k: add some more performance improvements

File size: 3.0 KB
  • drivers/net/wireless/ath/ath5k/desc.c

    a b static int ath5k_hw_proc_5212_rx_status( 
    603603                                        struct ath5k_rx_status *rs) 
    604604{ 
    605605        struct ath5k_hw_rx_status *rx_status; 
     606        u32 rxstat0, rxstat1; 
    606607 
    607608        rx_status = &desc->ud.ds_rx.rx_stat; 
     609        rxstat1 = ACCESS_ONCE(rx_status->rx_status_1); 
    608610 
    609611        /* No frame received / not ready */ 
    610         if (unlikely(!(rx_status->rx_status_1 & 
    611                                 AR5K_5212_RX_DESC_STATUS1_DONE))) 
     612        if (unlikely(!(rxstat1 & AR5K_5212_RX_DESC_STATUS1_DONE))) 
    612613                return -EINPROGRESS; 
    613614 
    614615        memset(rs, 0, sizeof(struct ath5k_rx_status)); 
     616        rxstat0 = ACCESS_ONCE(rx_status->rx_status_0); 
    615617 
    616618        /* 
    617619         * Frame receive status 
    618620         */ 
    619         rs->rs_datalen = rx_status->rx_status_0 & 
    620                 AR5K_5212_RX_DESC_STATUS0_DATA_LEN; 
    621         rs->rs_rssi = AR5K_REG_MS(rx_status->rx_status_0, 
     621        rs->rs_datalen = rxstat0 & AR5K_5212_RX_DESC_STATUS0_DATA_LEN; 
     622        rs->rs_rssi = AR5K_REG_MS(rxstat0, 
    622623                AR5K_5212_RX_DESC_STATUS0_RECEIVE_SIGNAL); 
    623         rs->rs_rate = AR5K_REG_MS(rx_status->rx_status_0, 
     624        rs->rs_rate = AR5K_REG_MS(rxstat0, 
    624625                AR5K_5212_RX_DESC_STATUS0_RECEIVE_RATE); 
    625         rs->rs_antenna = AR5K_REG_MS(rx_status->rx_status_0, 
     626        rs->rs_antenna = AR5K_REG_MS(rxstat0, 
    626627                AR5K_5212_RX_DESC_STATUS0_RECEIVE_ANTENNA); 
    627         rs->rs_more = !!(rx_status->rx_status_0 & 
    628                 AR5K_5212_RX_DESC_STATUS0_MORE); 
    629         rs->rs_tstamp = AR5K_REG_MS(rx_status->rx_status_1, 
     628        rs->rs_more = !!(rxstat0 & AR5K_5212_RX_DESC_STATUS0_MORE); 
     629        rs->rs_tstamp = AR5K_REG_MS(rxstat1, 
    630630                AR5K_5212_RX_DESC_STATUS1_RECEIVE_TIMESTAMP); 
    631631 
    632632        /* 
    633633         * Key table status 
    634634         */ 
    635         if (rx_status->rx_status_1 & AR5K_5212_RX_DESC_STATUS1_KEY_INDEX_VALID) 
    636                 rs->rs_keyix = AR5K_REG_MS(rx_status->rx_status_1, 
     635        if (rxstat1 & AR5K_5212_RX_DESC_STATUS1_KEY_INDEX_VALID) 
     636                rs->rs_keyix = AR5K_REG_MS(rxstat1, 
    637637                                           AR5K_5212_RX_DESC_STATUS1_KEY_INDEX); 
    638638        else 
    639639                rs->rs_keyix = AR5K_RXKEYIX_INVALID; 
    static int ath5k_hw_proc_5212_rx_status( 
    641641        /* 
    642642         * Receive/descriptor errors 
    643643         */ 
    644         if (!(rx_status->rx_status_1 & 
    645             AR5K_5212_RX_DESC_STATUS1_FRAME_RECEIVE_OK)) { 
    646                 if (rx_status->rx_status_1 & 
    647                                 AR5K_5212_RX_DESC_STATUS1_CRC_ERROR) 
     644        if (!(rxstat1 & AR5K_5212_RX_DESC_STATUS1_FRAME_RECEIVE_OK)) { 
     645                if (rxstat1 & AR5K_5212_RX_DESC_STATUS1_CRC_ERROR) 
    648646                        rs->rs_status |= AR5K_RXERR_CRC; 
    649647 
    650                 if (rx_status->rx_status_1 & 
    651                                 AR5K_5212_RX_DESC_STATUS1_PHY_ERROR) { 
     648                if (rxstat1 & AR5K_5212_RX_DESC_STATUS1_PHY_ERROR) { 
    652649                        rs->rs_status |= AR5K_RXERR_PHY; 
    653                         rs->rs_phyerr = AR5K_REG_MS(rx_status->rx_status_1, 
     650                        rs->rs_phyerr = AR5K_REG_MS(rxstat1, 
    654651                                AR5K_5212_RX_DESC_STATUS1_PHY_ERROR_CODE); 
    655652                        if (!ah->ah_capabilities.cap_has_phyerr_counters) 
    656653                                ath5k_ani_phy_error_report(ah, rs->rs_phyerr); 
    657654                } 
    658655 
    659                 if (rx_status->rx_status_1 & 
    660                                 AR5K_5212_RX_DESC_STATUS1_DECRYPT_CRC_ERROR) 
     656                if (rxstat1 & AR5K_5212_RX_DESC_STATUS1_DECRYPT_CRC_ERROR) 
    661657                        rs->rs_status |= AR5K_RXERR_DECRYPT; 
    662658 
    663                 if (rx_status->rx_status_1 & 
    664                                 AR5K_5212_RX_DESC_STATUS1_MIC_ERROR) 
     659                if (rxstat1 & AR5K_5212_RX_DESC_STATUS1_MIC_ERROR) 
    665660                        rs->rs_status |= AR5K_RXERR_MIC; 
    666661        } 
    667662        return 0; 
Note: See TracBrowser for help on using the repository browser.