Ticket #1280: big-endian-ratectrl.patch

File big-endian-ratectrl.patch, 13.6 kB (added by rudger, 5 years ago)

Patch fixing bitmask usage of struct ar5212_desc in sample.c

  • ath_rate/sample/sample.c

    old new  
    494494        else 
    495495                *txrate = sn->rates[ndx].rateCode; 
    496496        sn->packets_sent[size_bin]++; 
     497 
     498        DPRINTF(sc, "%s: %s %s %u/%u\n", dev_info, 
     499                        ether_sprintf(an->an_node.ni_macaddr), __func__, 
     500                        sc->sc_hwmap[*txrate].ieeerate, *try0); 
     501 
    497502} 
    498503 
    499504static void 
     
    520525                             sn->rates[0].rateCode, 3,  /* series 2 */ 
    521526                             0, 0                       /* series 3 */ 
    522527                            ); 
     528        DPRINTF(sc, "%s: %s %s %u/3 %u/3 0/0\n", dev_info, 
     529                        ether_sprintf(an->an_node.ni_macaddr), __func__, 
     530                        sc->sc_hwmap[rateCode].ieeerate, sc->sc_hwmap[sn->rates[0].rateCode].ieeerate); 
    523531} 
    524532 
    525533static void 
     
    629637{ 
    630638        struct sample_node *sn = ATH_NODE_SAMPLE(an); 
    631639        struct ieee80211com *ic = &sc->sc_ic; 
    632         const struct ar5212_desc *ads = (const struct ar5212_desc *)&ds->ds_ctl0; 
     640        u_int32_t *ads_le = (u_int32_t *)&ds->ds_ctl0; 
     641//      const struct ar5212_desc *ads = (const struct ar5212_desc *)&ds->ds_ctl0; 
    633642        unsigned int final_rate; 
    634643        unsigned int short_tries; 
    635644        unsigned int long_tries; 
    636645        unsigned int frame_size; 
    637646        unsigned int mrr; 
    638647 
     648        DPRINTF(sc, "%s: %s %s txc0 %08x txc1 %08x txc2 %08x txc3 %08x txs1 %08x txs1 %08x\n",  
     649                dev_info, ether_sprintf(an->an_node.ni_macaddr), __func__,  
     650                ads_le[0], ads_le[1], ads_le[2], ads_le[3], ads_le[4], ads_le[5]); 
     651 
     652        DPRINTF(sc, "TXC0: len %u pow %u rtscts %u veol %u clr dest %u ant mode %u inter_req %u key valid %u cts %u\n", 
     653                GET_TXC0_FRAME_LEN(ds), GET_TXC0_XMIT_POWER(ds), GET_TXC0_RTSCTS(ds), 
     654                GET_TXC0_VEOL(ds), GET_TXC0_CLR_DEST(ds), GET_TXC0_ANT_MODE(ds), 
     655                GET_TXC0_INTER_REQ(ds), GET_TXC0_KEY_VALID(ds), GET_TXC0_CTS_EANBLE(ds)); 
     656         
     657        DPRINTF(sc, "TXC2: rts dur %u dur upd %u tries0 %u tries1 %u tries2 %u tries3 %u\n", 
     658                GET_TXC2_RTS_DURATION(ds), GET_TXC2_DURATION_UPDATE_ENABLE(ds),  
     659                GET_TXC2_TRIES0(ds), GET_TXC2_TRIES1(ds), GET_TXC2_TRIES2(ds), GET_TXC2_TRIES3(ds)); 
     660 
     661        DPRINTF(sc, "TXC3: rate0 %u rate1 %u rate2 %u rate3 %u rts cts rate %u\n",  
     662                sc->sc_hwmap[GET_TXC3_RATE0(ds)].ieeerate,  
     663                sc->sc_hwmap[GET_TXC3_RATE1(ds)].ieeerate,  
     664                sc->sc_hwmap[GET_TXC3_RATE2(ds)].ieeerate,  
     665                sc->sc_hwmap[GET_TXC3_RATE3(ds)].ieeerate,  
     666                sc->sc_hwmap[GET_TXC3_RTS_CTS_RATE(ds)].ieeerate); 
     667 
     668        DPRINTF(sc, "TXS0: ok %u excessive %u fifo under %u filtered %u rts fail cnt %u data fail cnt %u virt coll cnt %u timestp %u\n", 
     669                GET_TXS0_FRAME_XMIT_OK(ds), GET_TXS0_EXCESSIVE_RETRIES(ds), GET_TXS0_FIFO_UNDERRUN(ds), 
     670                GET_TXS0_FILTERED(ds), GET_TXS0_RTS_FAIL_COUNT(ds), GET_TXS0_DATA_FAIL_COUNT(ds),     
     671                GET_TXS0_VIRT_COLL_COUNT(ds), GET_TXS0_SEND_TIMESTAMP_COUNT(ds)); 
     672 
     673        DPRINTF(sc, "TXS1: done %u seq nr %u ack strength %u final ts %u comp suc %u xmit ant %u\n", 
     674                GET_TXS1_DONE(ds), GET_TXS1_SEQ_NUM(ds), GET_TXS1_ACK_SIG_STRENGTH(ds), 
     675                GET_TXS1_FINAL_TS_INDEX(ds), GET_TXS1_COMP_SUCCESS(ds), GET_TXS1_XMIT_ANT(ds)); 
     676 
     677 
     678 
    639679        final_rate = sc->sc_hwmap[ds->ds_txstat.ts_rate &~ HAL_TXSTAT_ALTRATE].ieeerate; 
    640680        short_tries = ds->ds_txstat.ts_shortretry + 1; 
    641681        long_tries = ds->ds_txstat.ts_longretry + 1; 
     
    648688                DPRINTF(sc, "%s: %s %s no rates yet\n", dev_info,  
    649689                        ether_sprintf(an->an_node.ni_macaddr), __func__); 
    650690                return; 
    651    
     691       
    652692 
    653693        mrr = sc->sc_mrretry && !(ic->ic_flags & IEEE80211_F_USEPROT) && ENABLE_MRR; 
    654694 
    655         if (sc->sc_mrretry && ds->ds_txstat.ts_status) { 
     695        //if (sc->sc_mrretry && ds->ds_txstat.ts_status) { 
    656696                /* this packet failed */ 
    657                 DPRINTF(sc, "%s: %s size %u rate/try %u/%u %u/%u %u/%u %u/%u status %s retries (%u/%u)\n", 
     697                DPRINTF(sc, "%s: %s size %u rate/try %u/%u %u/%u %u/%u %u/%u status %s retries (%u/%u) final %u\n", 
    658698                        dev_info, 
    659699                        ether_sprintf(an->an_node.ni_macaddr), 
    660700                        bin_to_size(size_to_bin(frame_size)), 
    661                         sc->sc_hwmap[ads->xmit_rate0].ieeerate, ads->xmit_tries0
    662                         sc->sc_hwmap[ads->xmit_rate1].ieeerate, ads->xmit_tries1
    663                         sc->sc_hwmap[ads->xmit_rate2].ieeerate, ads->xmit_tries2
    664                         sc->sc_hwmap[ads->xmit_rate3].ieeerate, ads->xmit_tries3
     701                        sc->sc_hwmap[GET_TXC3_RATE0(ds)].ieeerate, GET_TXC2_TRIES0(ds)
     702                        sc->sc_hwmap[GET_TXC3_RATE1(ds)].ieeerate, GET_TXC2_TRIES1(ds)
     703                        sc->sc_hwmap[GET_TXC3_RATE2(ds)].ieeerate, GET_TXC2_TRIES2(ds)
     704                        sc->sc_hwmap[GET_TXC3_RATE3(ds)].ieeerate, GET_TXC2_TRIES3(ds)
    665705                        ds->ds_txstat.ts_status ? "FAIL" : "OK", 
    666706                        short_tries, 
    667                         long_tries); 
    668         } 
     707                        long_tries, 
     708                        GET_TXS1_FINAL_TS_INDEX(ds)); 
     709        //} 
    669710 
    670711 
    671712        if (!mrr || !(ds->ds_txstat.ts_rate & HAL_TXSTAT_ALTRATE)) { 
     
    682723        } else { 
    683724                unsigned int rate[4], tries[4]; 
    684725                int ndx[4]; 
    685                 int finalTSIdx = ads->final_ts_index
     726                int finalTSIdx = GET_TXS1_FINAL_TS_INDEX(ds)
    686727 
    687728                /* 
    688729                 * Process intermediate rates that failed. 
    689730                 */ 
    690731 
    691                 rate[0] = sc->sc_hwmap[ads->xmit_rate0].ieeerate; 
    692                 tries[0] = ads->xmit_tries0
     732                rate[0] = sc->sc_hwmap[GET_TXC3_RATE0(ds)].ieeerate; 
     733                tries[0] = GET_TXC2_TRIES0(ds)
    693734                ndx[0] = rate_to_ndx(sn, rate[0]); 
    694735 
    695                 rate[1] = sc->sc_hwmap[ads->xmit_rate1].ieeerate; 
    696                 tries[1] = ads->xmit_tries1
     736                rate[1] = sc->sc_hwmap[GET_TXC3_RATE1(ds)].ieeerate; 
     737                tries[1] = GET_TXC2_TRIES1(ds)
    697738                ndx[1] = rate_to_ndx(sn, rate[1]); 
    698739 
    699                 rate[2] = sc->sc_hwmap[ads->xmit_rate2].ieeerate; 
    700                 tries[2] = ads->xmit_tries2
     740                rate[2] = sc->sc_hwmap[GET_TXC3_RATE2(ds)].ieeerate; 
     741                tries[2] = GET_TXC2_TRIES2(ds)
    701742                ndx[2] = rate_to_ndx(sn, rate[2]); 
    702743 
    703                 rate[3] = sc->sc_hwmap[ads->xmit_rate3].ieeerate; 
    704                 tries[3] = ads->xmit_tries3
     744                rate[3] = sc->sc_hwmap[GET_TXC3_RATE3(ds)].ieeerate; 
     745                tries[3] = GET_TXC2_TRIES3(ds)
    705746                ndx[3] = rate_to_ndx(sn, rate[3]); 
    706747 
    707748#if 0 
     
    753794                                short_tries, ds->ds_txstat.ts_longretry + 1 - tries[0] - tries[1] - tries[2], 
    754795                                ds->ds_txstat.ts_status); 
    755796        } 
     797         
     798         
    756799} 
    757800 
    758801static void 
     
    798841                sn->rates[x].shortPreambleRateCode = 
    799842                        rt->info[sn->rates[x].rix].rateCode | 
    800843                        rt->info[sn->rates[x].rix].shortPreamble; 
     844#if 0                    
     845                DPRINTF(sc, "%s: %s %s Fill %d code %u SPcode %u\n",  
     846                        dev_info, __func__, ether_sprintf(ni->ni_macaddr), 
     847                        x, sc->sc_hwmap[sn->rates[x].rateCode].ieeerate,  
     848                        sc->sc_hwmap[sn->rates[x].shortPreambleRateCode].ieeerate); 
     849#endif                   
    801850        } 
    802  
    803851        ni->ni_txrate = 0; 
    804852        sn->num_rates = ni->ni_rates.rs_nrates; 
    805853 
  • hal/ah_desc.h

    old new  
    180180 
    181181/* flags passed to rx descriptor setup methods */ 
    182182#define HAL_RXDESC_INTREQ       0x0020  /* enable per-descriptor interrupt */ 
     183 
     184/* 
     185 * Definitions of ath_desc -> ds_ctl0 also called TXC0 
     186 */ 
     187#define TXC0_FRAME_LEN_MASK                             0x00000FFF 
     188#define TXC0_XMIT_POWER_MASK                    (0x3f << 16) 
     189#define TXC0_XMIT_POWER_SHIFT                   16 
     190#define TXC0_RTSCTS                                             (1 << 22) 
     191#define TXC0_VEOL                                               (1 << 23) 
     192#define TXC0_CLR_DEST_MASK                              (1 << 24) 
     193#define TXC0_ANT_MODE_XMIT_MASK                 (0xf << 25) 
     194#define TXC0_ANT_MODE_XMIT_SHIFT                25 
     195#define TXC0_INTER_REQ                                  (1 << 29) 
     196#define TXC0_KEY_VALID                                  (1 << 30) 
     197#define TXC0_CTS_EANBLE                                 (1 << 31) 
     198 
     199/* Value defines */ 
     200#define GET_TXC0_FRAME_LEN(ds)     (ds->ds_ctl0 & TXC0_FRAME_LEN_MASK) 
     201#define GET_TXC0_XMIT_POWER(ds)    ((ds->ds_ctl0 & TXC0_XMIT_POWER_MASK) >> TXC0_XMIT_POWER_SHIFT) 
     202#define GET_TXC0_RTSCTS(ds)        ((ds->ds_ctl0 & TXC0_RTSCTS) ? 1 : 0) 
     203#define GET_TXC0_VEOL(ds)          ((ds->ds_ctl0 & TXC0_VEOL) ? 1 : 0) 
     204#define GET_TXC0_CLR_DEST(ds)      ((ds->ds_ctl0 & TXC0_CLR_DEST_MASK) ? 1 : 0) 
     205#define GET_TXC0_ANT_MODE(ds)      ((ds->ds_ctl0 & TXC0_ANT_MODE_XMIT_MASK) >> TXC0_ANT_MODE_XMIT_SHIFT) 
     206#define GET_TXC0_INTER_REQ(ds)     ((ds->ds_ctl0 & TXC0_INTER_REQ) ? 1 : 0) 
     207#define GET_TXC0_KEY_VALID(ds)     ((ds->ds_ctl0 & TXC0_KEY_VALID) ? 1 : 0) 
     208#define GET_TXC0_CTS_EANBLE(ds)    ((ds->ds_ctl0 & TXC0_CTS_EANBLE) ? 1 : 0) 
     209 
     210/* 
     211 * Definitions of ath_desc -> ds_ctl1 also called TXC1 
     212 */ 
     213#define TXC1_BUF_LEN_MASK                               (0xFFF << 0 ) 
     214#define TXC1_MORE                                               (0x1   << 12) 
     215#define TXC1_ENCRYPT_KEY_INDEX_SHIFT    13 
     216#define TXC1_ENCRYPT_KEY_INDEX_MASK             (0x7F  << TXC1_ENCRYPT_KEY_INDEX_SHIFT) 
     217#define TXC1_FRAME_TYPE_SHIFT                   20 
     218#define TXC1_FRAME_TYPE_MASK                    (0xF   << TXC1_FRAME_TYPE_SHIFT) 
     219#define TXC1_NO_ACK                                             (0x1   << 24) 
     220#define TXC1_COMP_PROC_SHIFT                    25 
     221#define TXC1_COMP_PROC_MASK                             (0x3   << TXC1_COMP_PROC_SHIFT) 
     222#define TXC1_COMP_ICV_LEN_SHIFT                 29 
     223#define TXC1_COMP_ICV_LEN_MASK                  (0x3   << TXC1_COMP_ICV_LEN_SHIFT) 
     224 
     225 
     226/* Value defines */ 
     227#define GET_TXC1_BUF_LEN(ds)                    (ds->ds_ctl1 & TXC1_BUF_LEN_MASK) 
     228#define GET_TXC1_MORE(ds)                       ((ds->ds_ctl1 & TXC1_MORE) ? 1 : 0) 
     229#define GET_TXC1_ENCRYPT_KEY_INDEX(ds)  ((ds->ds_ctl1 & TXC1_ENCRYPT_KEY_INDEX_MASK) >> TXC1_ENCRYPT_KEY_INDEX_SHIFT) 
     230#define GET_TXC1_FRAME_TYPE(ds)                 ((ds->ds_ctl1 & TXC1_FRAME_TYPE_MASK) >> TXC1_FRAME_TYPE_SHIFT) 
     231#define GET_TXC1_NO_ACK(ds)                     ((ds->ds_ctl1 & TXC1_NO_ACK) ? 1 : 0) 
     232#define GET_TXC1_COMP_PROC(ds)                  ((ds->ds_ctl1 & TXC1_COMP_PROC_MASK) >> TXC1_COMP_PROC_SHIFT) 
     233#define GET_TXC1_COMP_ICV_LEN(ds)               ((ds->ds_ctl1 & TXC1_COMP_ICV_LEN_MASK) >> TXC1_COMP_ICV_LEN_SHIFT) 
     234 
     235/* 
     236 * Definitions of ath_desc -> ds_hw[0] also called TXC2 
     237 */ 
     238#define TXC2_RTS_DURATION_MASK                  (0x7FFF << 0) 
     239#define TXC2_DURATION_UPDATE_ENABLE     (1 << 15) 
     240#define TXC2_TRIES0_SHIFT                           16 
     241#define TXC2_TRIES0_MASK                            (0xf << TXC2_TRIES0_SHIFT) 
     242#define TXC2_TRIES1_SHIFT                           20 
     243#define TXC2_TRIES1_MASK                            (0xf << TXC2_TRIES1_SHIFT) 
     244#define TXC2_TRIES2_SHIFT                           24 
     245#define TXC2_TRIES2_MASK                            (0xf << TXC2_TRIES2_SHIFT) 
     246#define TXC2_TRIES3_SHIFT                           28 
     247#define TXC2_TRIES3_MASK                            (0xf << TXC2_TRIES3_SHIFT) 
     248 
     249/* Value defines */ 
     250#define GET_TXC2_RTS_DURATION(ds)            (ds->ds_hw[0] & TXC2_RTS_DURATION_MASK) 
     251#define GET_TXC2_DURATION_UPDATE_ENABLE(ds)  ((ds->ds_hw[0] & TXC2_DURATION_UPDATE_ENABLE) ? 1 : 0) 
     252#define GET_TXC2_TRIES0(ds)                  ((ds->ds_hw[0] & TXC2_TRIES0_MASK) >> TXC2_TRIES0_SHIFT) 
     253#define GET_TXC2_TRIES1(ds)                  ((ds->ds_hw[0] & TXC2_TRIES1_MASK) >> TXC2_TRIES1_SHIFT) 
     254#define GET_TXC2_TRIES2(ds)                  ((ds->ds_hw[0] & TXC2_TRIES2_MASK) >> TXC2_TRIES2_SHIFT) 
     255#define GET_TXC2_TRIES3(ds)                  ((ds->ds_hw[0] & TXC2_TRIES3_MASK) >> TXC2_TRIES3_SHIFT) 
     256 
     257/* 
     258 * Definitions of ath_desc -> ds_hw[1] also called TXC3 
     259 */ 
     260#define TXC3_RATE0_MASK                                 (0x1F << 0) 
     261#define TXC3_RATE1_MASK                                 (0x1F << 5) 
     262#define TXC3_RATE1_SHIFT                                5 
     263#define TXC3_RATE2_MASK                                 (0x1F << 10) 
     264#define TXC3_RATE2_SHIFT                                10 
     265#define TXC3_RATE3_MASK                                 (0x1F << 15) 
     266#define TXC3_RATE3_SHIFT                                15 
     267#define TXC3_RTS_CTS_RATE_MASK                  (0x1F << 20) 
     268#define TXC3_RTS_CTS_RATE_SHIFT                 20 
     269 
     270/* Value defines */ 
     271#define GET_TXC3_RATE0(ds)                      (ds->ds_hw[1] & TXC3_RATE0_MASK) 
     272#define GET_TXC3_RATE1(ds)                      ((ds->ds_hw[1] & TXC3_RATE1_MASK) >> TXC3_RATE1_SHIFT) 
     273#define GET_TXC3_RATE2(ds)                      ((ds->ds_hw[1] & TXC3_RATE2_MASK) >> TXC3_RATE2_SHIFT) 
     274#define GET_TXC3_RATE3(ds)                      ((ds->ds_hw[1] & TXC3_RATE3_MASK) >> TXC3_RATE3_SHIFT) 
     275#define GET_TXC3_RTS_CTS_RATE(ds)               ((ds->ds_hw[1] & TXC3_RTS_CTS_RATE_MASK) >> TXC3_RTS_CTS_RATE_SHIFT) 
     276 
     277/* 
     278 * Definitions of ath_desc -> ds_hw[2] also called TXS0 
     279 */ 
     280#define TXS0_FRAME_XMIT_OK                              (0x1  << 0) 
     281#define TXS0_EXCESSIVE_RETRIES          (0x1  << 1) 
     282#define TXS0_FIFO_UNDERRUN                  (0x1  << 2) 
     283#define TXS0_FILTERED                       (0x1  << 3) 
     284#define TXS0_RTS_FAIL_COUNT_SHIFT               4 
     285#define TXS0_RTS_FAIL_COUNT_MASK                (0xF  << TXS0_RTS_FAIL_COUNT_SHIFT) 
     286#define TXS0_DATA_FAIL_COUNT_SHIFT              8 
     287#define TXS0_DATA_FAIL_COUNT_MASK               (0xF  << TXS0_DATA_FAIL_COUNT_SHIFT) 
     288#define TXS0_VIRT_COLL_COUNT_SHIFT              12 
     289#define TXS0_VIRT_COLL_COUNT_MASK               (0xF  << TXS0_VIRT_COLL_COUNT_SHIFT) 
     290#define TXS0_SEND_TIMESTAMP_SHIFT               16 
     291#define TXS0_SEND_TIMESTAMP_MASK                (0xFFFF << TXS0_SEND_TIMESTAMP_SHIFT) 
     292 
     293#define GET_TXS0_FRAME_XMIT_OK(ds)              ((ds->ds_hw[2] & TXS0_FRAME_XMIT_OK) ? 1 : 0) 
     294#define GET_TXS0_EXCESSIVE_RETRIES(ds)  ((ds->ds_hw[2] & TXS0_EXCESSIVE_RETRIES) ? 1 : 0) 
     295#define GET_TXS0_FIFO_UNDERRUN(ds)      ((ds->ds_hw[2] & TXS0_FIFO_UNDERRUN) ? 1 : 0) 
     296#define GET_TXS0_FILTERED(ds)                   ((ds->ds_hw[2] & TXS0_FILTERED) ? 1 : 0) 
     297#define GET_TXS0_RTS_FAIL_COUNT(ds)     ((ds->ds_hw[2] & TXS0_RTS_FAIL_COUNT_MASK) >> TXS0_RTS_FAIL_COUNT_SHIFT) 
     298#define GET_TXS0_DATA_FAIL_COUNT(ds)    ((ds->ds_hw[2] & TXS0_DATA_FAIL_COUNT_MASK) >> TXS0_DATA_FAIL_COUNT_SHIFT) 
     299#define GET_TXS0_VIRT_COLL_COUNT(ds)    ((ds->ds_hw[2] & TXS0_VIRT_COLL_COUNT_MASK) >> TXS0_VIRT_COLL_COUNT_SHIFT) 
     300#define GET_TXS0_SEND_TIMESTAMP_COUNT(ds)    ((ds->ds_hw[2] & TXS0_SEND_TIMESTAMP_MASK) >> TXS0_SEND_TIMESTAMP_SHIFT) 
     301 
     302/* 
     303 * Definitions of ath_desc -> ds_hw[3] also called TXS1 
     304 */ 
     305#define TXS1_DONE                                               (0x1  << 0) 
     306#define TXS1_SEQ_NUM_SHIFT                              1 
     307#define TXS1_SEQ_NUM_MASK                               (0xFFF << TXS1_SEQ_NUM_SHIFT) 
     308#define TXS1_ACK_SIG_STRENGTH_SHIFT             13 
     309#define TXS1_ACK_SIG_STRENGTH_MASK              (0xF << TXS1_ACK_SIG_STRENGTH_SHIFT) 
     310#define TXS1_FINAL_TS_INDEX_SHIFT               21 
     311#define TXS1_FINAL_TS_INDEX_MASK                (0x3 << TXS1_FINAL_TS_INDEX_SHIFT) 
     312#define TXS1_COMP_SUCCESS                       (0x1  << 23) 
     313#define TXS1_XMIT_ANT                           (0x1  << 24) 
     314 
     315#define GET_TXS1_DONE(ds)                               ((ds->ds_hw[3] & TXS0_FRAME_XMIT_OK) ? 1 : 0) 
     316#define GET_TXS1_SEQ_NUM(ds)                    ((ds->ds_hw[3] & TXS1_SEQ_NUM_MASK) >> TXS1_SEQ_NUM_SHIFT) 
     317#define GET_TXS1_ACK_SIG_STRENGTH(ds)   ((ds->ds_hw[3] & TXS1_ACK_SIG_STRENGTH_MASK) >> TXS1_ACK_SIG_STRENGTH_SHIFT) 
     318#define GET_TXS1_FINAL_TS_INDEX(ds)             ((ds->ds_hw[3] & TXS1_FINAL_TS_INDEX_MASK) >> TXS1_FINAL_TS_INDEX_SHIFT) 
     319#define GET_TXS1_COMP_SUCCESS(ds)               ((ds->ds_hw[3] & TXS1_COMP_SUCCESS) ? 1 : 0) 
     320#define GET_TXS1_XMIT_ANT(ds)                   ((ds->ds_hw[3] & TXS1_XMIT_ANT) ? 1 : 0) 
     321 
     322 
    183323#endif /* _DEV_ATH_AR521XDMA_H */