[Madwifi-cvs] revision 4016 committed
Status: Beta
Brought to you by:
otaku
From: Pavel R. <svn...@ma...> - 2009-04-28 06:07:25
|
Project : madwifi Revision : 4016 Author : proski (Pavel Roskin) Date : 2009-04-28 08:05:55 +0200 (Tue, 28 Apr 2009) Log Message : Merge 4013:4015 from trunk Affected Files: * madwifi/branches/madwifi-dfs/ath/if_ath.c updated * madwifi/branches/madwifi-dfs/ath/if_ath_hal_extensions.c updated * madwifi/branches/madwifi-dfs/ath/if_ath_hal_extensions.h updated * madwifi/branches/madwifi-dfs/ath/if_ath_radar.c updated * madwifi/branches/madwifi-dfs/ath_rate/minstrel/minstrel.c updated * madwifi/branches/madwifi-dfs/ath_rate/minstrel/minstrel.h updated * madwifi/branches/madwifi-dfs/ath_rate/sample/sample.c updated * madwifi/branches/madwifi-dfs/ath_rate/sample/sample.h updated * madwifi/branches/madwifi-hal-0.10.5.6/ath/if_ath.c updated * madwifi/branches/madwifi-hal-0.10.5.6/ath/if_ath_hal_extensions.c updated * madwifi/branches/madwifi-hal-0.10.5.6/ath/if_ath_hal_extensions.h updated * madwifi/branches/madwifi-hal-0.10.5.6/ath/if_ath_radar.c updated * madwifi/branches/madwifi-hal-0.10.5.6/ath_rate/minstrel/minstrel.c updated * madwifi/branches/madwifi-hal-0.10.5.6/ath_rate/minstrel/minstrel.h updated * madwifi/branches/madwifi-hal-0.10.5.6/ath_rate/sample/sample.c updated * madwifi/branches/madwifi-hal-0.10.5.6/ath_rate/sample/sample.h updated * madwifi/branches/madwifi-hal-0.9.30.13/ath/if_ath.c updated * madwifi/branches/madwifi-hal-0.9.30.13/ath/if_ath_hal_extensions.c updated * madwifi/branches/madwifi-hal-0.9.30.13/ath/if_ath_hal_extensions.h updated * madwifi/branches/madwifi-hal-0.9.30.13/ath/if_ath_radar.c updated * madwifi/branches/madwifi-hal-0.9.30.13/ath_rate/minstrel/minstrel.c updated * madwifi/branches/madwifi-hal-0.9.30.13/ath_rate/minstrel/minstrel.h updated * madwifi/branches/madwifi-hal-0.9.30.13/ath_rate/sample/sample.c updated * madwifi/branches/madwifi-hal-0.9.30.13/ath_rate/sample/sample.h updated * madwifi/branches/madwifi-hal-testing/ath/if_ath.c updated * madwifi/branches/madwifi-hal-testing/ath/if_ath_hal_extensions.c updated * madwifi/branches/madwifi-hal-testing/ath/if_ath_hal_extensions.h updated * madwifi/branches/madwifi-hal-testing/ath/if_ath_radar.c updated * madwifi/branches/madwifi-hal-testing/ath_rate/minstrel/minstrel.c updated * madwifi/branches/madwifi-hal-testing/ath_rate/minstrel/minstrel.h updated * madwifi/branches/madwifi-hal-testing/ath_rate/sample/sample.c updated * madwifi/branches/madwifi-hal-testing/ath_rate/sample/sample.h updated Modified: madwifi/branches/madwifi-dfs/ath/if_ath.c =================================================================== --- madwifi/branches/madwifi-dfs/ath/if_ath.c 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-dfs/ath/if_ath.c 2009-04-28 06:05:55 UTC (rev 4016) @@ -11908,7 +11908,7 @@ ath_set_ack_bitrate(sc, sc->sc_ackrate); netif_wake_queue(dev); /* restart xmit */ - if (ar_device(sc->devid) == 5212 || ar_device(sc->devid) == 5213) { + if (ar_device(sc) == 5212) { /* registers taken from openhal */ #define AR5K_AR5212_TXCFG 0x0030 #define AR5K_AR5212_TXCFG_TXCONT_ENABLE 0x00000080 Modified: madwifi/branches/madwifi-dfs/ath/if_ath_hal_extensions.c =================================================================== --- madwifi/branches/madwifi-dfs/ath/if_ath_hal_extensions.c 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-dfs/ath/if_ath_hal_extensions.c 2009-04-28 06:05:55 UTC (rev 4016) @@ -80,56 +80,35 @@ { "xxxxx", AR5K_VERSION_RAD, AR5K_SREV_UNKNOWN }, }; +#define AR5210_MAGIC 0x19980124 +#define AR5211_MAGIC 0x19570405 +#define AR5212_MAGIC 0x19541014 +#define AR5416_MAGIC 0x20065416 int -ar_device(int devid) +ar_device(struct ath_softc *sc) { - switch (devid) { - case AR5210_DEFAULT: - case AR5210_PROD: - case AR5210_AP: + int magic = sc->sc_ah->ah_magic; + + switch (magic) { + case AR5210_MAGIC: return 5210; - case AR5211_DEFAULT: - case AR5311_DEVID: - case AR5211_LEGACY: - case AR5211_FPGA11B: + case AR5211_MAGIC: return 5211; - case AR5212_DEFAULT: - case AR5212_DEVID: - case AR5212_FPGA: - case AR5212_DEVID_IBM: - case AR5212_AR5312_REV2: - case AR5212_AR5312_REV7: - case AR5212_AR2313_REV8: - case AR5212_AR2315_REV6: - case AR5212_AR2315_REV7: - case AR5212_AR2317_REV1: - case AR5212_DEVID_0014: - case AR5212_DEVID_0015: - case AR5212_DEVID_0016: - case AR5212_DEVID_0017: - case AR5212_DEVID_0018: - case AR5212_DEVID_0019: - case AR5212_AR2413: - case AR5212_AR5413: - case AR5212_AR5424: - case AR5212_DEVID_FF19: + case AR5212_MAGIC: return 5212; - case AR5213_SREV_1_0: - case AR5213_SREV_REG: - case AR_SUBVENDOR_ID_NOG: - case AR_SUBVENDOR_ID_NEW_A: - return 5213; + case AR5416_MAGIC: + return 5416; default: - return 0; /* unknown */ + printk(KERN_WARNING "unknown HAL magic 0x%08x\n", magic); + return 0; } } - int ath_set_ack_bitrate(struct ath_softc *sc, int high) { - if (ar_device(sc->devid) == 5212 || ar_device(sc->devid) == 5213) { + if (ar_device(sc) == 5212) { /* set ack to be sent at low bit-rate */ u_int32_t v = AR5K_STA_ID1_BASE_RATE_11B | AR5K_STA_ID1_ACKCTS_6MB; if (high) Modified: madwifi/branches/madwifi-dfs/ath/if_ath_hal_extensions.h =================================================================== --- madwifi/branches/madwifi-dfs/ath/if_ath_hal_extensions.h 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-dfs/ath/if_ath_hal_extensions.h 2009-04-28 06:05:55 UTC (rev 4016) @@ -239,7 +239,7 @@ int ath_set_ack_bitrate(struct ath_softc *sc, int); -int ar_device(int devid); +int ar_device(struct ath_softc *sc); const char * ath5k_chip_name(enum ath5k_srev_type type, u_int16_t val); static inline unsigned long field_width(unsigned long mask, unsigned long shift) Modified: madwifi/branches/madwifi-dfs/ath/if_ath_radar.c =================================================================== --- madwifi/branches/madwifi-dfs/ath/if_ath_radar.c 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-dfs/ath/if_ath_radar.c 2009-04-28 06:05:55 UTC (rev 4016) @@ -185,7 +185,7 @@ int ath_radar_is_enabled(struct ath_softc *sc) { struct ath_hal *ah = sc->sc_ah; - if (ar_device(sc->devid) >= 5211) + if (ar_device(sc) >= 5211) return ((OS_REG_READ(ah, AR5K_AR5212_PHY_ERR_FIL) & AR5K_AR5212_PHY_ERR_FIL_RADAR) && (sc->sc_imask & HAL_INT_RXPHY) && @@ -269,7 +269,7 @@ /* configure radar pulse detector register using default values, but do * not toggle the enable bit. XXX: allow tweaking?? */ ath_radar_set_params(sc, NULL); - if (ar_device(sc->devid) >= 5211) { + if (ar_device(sc) >= 5211) { HAL_INT old_ier = ath_hal_intrget(ah); HAL_INT new_ier = old_ier; unsigned int old_radar = OS_REG_READ(ah, AR5K_PHY_RADAR); Modified: madwifi/branches/madwifi-dfs/ath_rate/minstrel/minstrel.c =================================================================== --- madwifi/branches/madwifi-dfs/ath_rate/minstrel/minstrel.c 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-dfs/ath_rate/minstrel/minstrel.c 2009-04-28 06:05:55 UTC (rev 4016) @@ -470,10 +470,10 @@ int tries = 0; int mrr; int final_ndx; - int rate0, tries0, ndx0; - int rate1, tries1, ndx1; - int rate2, tries2, ndx2; - int rate3, tries3, ndx3; + int rate0, tries0, ndx0, hwrate0; + int rate1, tries1, ndx1, hwrate1; + int rate2, tries2, ndx2, hwrate2; + int rate3, tries3, ndx3, hwrate3; /* This is the index in the retry chain we finish at. * With no retransmits, it is always 0. @@ -520,19 +520,31 @@ * call will always return 6,3,2,2. For some packets, we can * get a mrr of 0, -1, -1, -1, which indicates there is no * chain installed for that packet */ - rate0 = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate0)].ieeerate; + if (sc->sc_ah->ah_magic != 0x20065416) { + hwrate0 = MS(ds->ds_ctl3, AR_XmitRate0); + hwrate1 = MS(ds->ds_ctl3, AR_XmitRate1); + hwrate2 = MS(ds->ds_ctl3, AR_XmitRate2); + hwrate3 = MS(ds->ds_ctl3, AR_XmitRate3); + } else { + hwrate0 = MS(ds->ds_ctl3, AR5416_XmitRate0); + hwrate1 = MS(ds->ds_ctl3, AR5416_XmitRate1); + hwrate2 = MS(ds->ds_ctl3, AR5416_XmitRate2); + hwrate3 = MS(ds->ds_ctl3, AR5416_XmitRate3); + } + + rate0 = sc->sc_hwmap[hwrate0].ieeerate; tries0 = MS(ds->ds_ctl2, AR_XmitDataTries0); ndx0 = rate_to_ndx(sn, rate0); - rate1 = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate1)].ieeerate; + rate1 = sc->sc_hwmap[hwrate1].ieeerate; tries1 = MS(ds->ds_ctl2, AR_XmitDataTries1); ndx1 = rate_to_ndx(sn, rate1); - rate2 = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate2)].ieeerate; + rate2 = sc->sc_hwmap[hwrate2].ieeerate; tries2 = MS(ds->ds_ctl2, AR_XmitDataTries2); ndx2 = rate_to_ndx(sn, rate2); - rate3 = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate3)].ieeerate; + rate3 = sc->sc_hwmap[hwrate3].ieeerate; tries3 = MS(ds->ds_ctl2, AR_XmitDataTries3); ndx3 = rate_to_ndx(sn, rate3); Modified: madwifi/branches/madwifi-dfs/ath_rate/minstrel/minstrel.h =================================================================== --- madwifi/branches/madwifi-dfs/ath_rate/minstrel/minstrel.h 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-dfs/ath_rate/minstrel/minstrel.h 2009-04-28 06:05:55 UTC (rev 4016) @@ -209,6 +209,16 @@ #define AR_XmitRate3 0x000f8000 /* series 3 tx rate */ #define AR_XmitRate3_S 15 +/* TX ds_ctl3 for 5416 */ +#define AR5416_XmitRate0 0x000000ff /* series 0 tx rate */ +#define AR5416_XmitRate0_S 0 +#define AR5416_XmitRate1 0x0000ff00 /* series 1 tx rate */ +#define AR5416_XmitRate1_S 8 +#define AR5416_XmitRate2 0x00ff0000 /* series 2 tx rate */ +#define AR5416_XmitRate2_S 16 +#define AR5416_XmitRate3 0xff000000 /* series 3 tx rate */ +#define AR5416_XmitRate3_S 24 + #define MS(_v, _f) (((_v) & (_f)) >> _f##_S) #endif /* _DEV_ATH_RATE_MINSTEL_H */ Modified: madwifi/branches/madwifi-dfs/ath_rate/sample/sample.c =================================================================== --- madwifi/branches/madwifi-dfs/ath_rate/sample/sample.c 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-dfs/ath_rate/sample/sample.c 2009-04-28 06:05:55 UTC (rev 4016) @@ -681,31 +681,7 @@ MAC_ADDR(an->an_node.ni_macaddr), __func__); return; } - mrr = sc->sc_mrretry && !(ic->ic_flags & IEEE80211_F_USEPROT) && ENABLE_MRR; - - - if (sc->sc_mrretry && ts->ts_status) { - /* this packet failed */ - DPRINTF(sc, ATH_DEBUG_RATE, "%s: " MAC_FMT " size %u rate/try %u/%u %u/%u %u/%u %u/%u status %s retries (%u/%u)\n", - dev_info, - MAC_ADDR(an->an_node.ni_macaddr), - bin_to_size(size_to_bin(frame_size)), - sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate0)].ieeerate, - MS(ds->ds_ctl2, AR_XmitDataTries0), - sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate1)].ieeerate, - MS(ds->ds_ctl2, AR_XmitDataTries1), - sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate2)].ieeerate, - MS(ds->ds_ctl2, AR_XmitDataTries2), - sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate3)].ieeerate, - MS(ds->ds_ctl2, AR_XmitDataTries3), - ts->ts_status ? "FAIL" : "OK", - short_tries, long_tries); - } - - mrr = sc->sc_mrretry && !(ic->ic_flags & IEEE80211_F_USEPROT) && ENABLE_MRR; - - if (!mrr || !(ts->ts_rate & HAL_TXSTAT_ALTRATE)) { /* only one rate was used */ int ndx = rate_to_ndx(sn, final_rate); @@ -718,7 +694,7 @@ short_tries, long_tries, ts->ts_status); } } else { - unsigned int rate[4], tries[4]; + unsigned int rate[4], tries[4], hwrate[4]; int ndx[4]; int finalTSIdx = ts->ts_finaltsi; @@ -726,19 +702,31 @@ * Process intermediate rates that failed. */ - rate[0] = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate0)].ieeerate; + if (sc->sc_ah->ah_magic != 0x20065416) { + hwrate[0] = MS(ds->ds_ctl3, AR_XmitRate0); + hwrate[1] = MS(ds->ds_ctl3, AR_XmitRate1); + hwrate[2] = MS(ds->ds_ctl3, AR_XmitRate2); + hwrate[3] = MS(ds->ds_ctl3, AR_XmitRate3); + } else { + hwrate[0] = MS(ds->ds_ctl3, AR5416_XmitRate0); + hwrate[1] = MS(ds->ds_ctl3, AR5416_XmitRate1); + hwrate[2] = MS(ds->ds_ctl3, AR5416_XmitRate2); + hwrate[3] = MS(ds->ds_ctl3, AR5416_XmitRate3); + } + + rate[0] = sc->sc_hwmap[hwrate[0]].ieeerate; tries[0] = MS(ds->ds_ctl2, AR_XmitDataTries0); ndx[0] = rate_to_ndx(sn, rate[0]); - rate[1] = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate1)].ieeerate; + rate[1] = sc->sc_hwmap[hwrate[1]].ieeerate; tries[1] = MS(ds->ds_ctl2, AR_XmitDataTries1); ndx[1] = rate_to_ndx(sn, rate[1]); - rate[2] = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate2)].ieeerate; + rate[2] = sc->sc_hwmap[hwrate[2]].ieeerate; tries[2] = MS(ds->ds_ctl2, AR_XmitDataTries2); ndx[2] = rate_to_ndx(sn, rate[2]); - rate[3] = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate3)].ieeerate; + rate[3] = sc->sc_hwmap[hwrate[3]].ieeerate; tries[3] = MS(ds->ds_ctl2, AR_XmitDataTries3); ndx[3] = rate_to_ndx(sn, rate[3]); Modified: madwifi/branches/madwifi-dfs/ath_rate/sample/sample.h =================================================================== --- madwifi/branches/madwifi-dfs/ath_rate/sample/sample.h 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-dfs/ath_rate/sample/sample.h 2009-04-28 06:05:55 UTC (rev 4016) @@ -135,6 +135,16 @@ #define AR_XmitRate3 0x000f8000 /* series 3 tx rate */ #define AR_XmitRate3_S 15 +/* TX ds_ctl3 for 5416 */ +#define AR5416_XmitRate0 0x000000ff /* series 0 tx rate */ +#define AR5416_XmitRate0_S 0 +#define AR5416_XmitRate1 0x0000ff00 /* series 1 tx rate */ +#define AR5416_XmitRate1_S 8 +#define AR5416_XmitRate2 0x00ff0000 /* series 2 tx rate */ +#define AR5416_XmitRate2_S 16 +#define AR5416_XmitRate3 0xff000000 /* series 3 tx rate */ +#define AR5416_XmitRate3_S 24 + #define MS(_v, _f) (((_v) & (_f)) >> _f##_S) #endif /* _DEV_ATH_RATE_SAMPLE_H */ Modified: madwifi/branches/madwifi-hal-0.10.5.6/ath/if_ath.c =================================================================== --- madwifi/branches/madwifi-hal-0.10.5.6/ath/if_ath.c 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-0.10.5.6/ath/if_ath.c 2009-04-28 06:05:55 UTC (rev 4016) @@ -11580,7 +11580,7 @@ ath_set_ack_bitrate(sc, sc->sc_ackrate); netif_wake_queue(dev); /* restart xmit */ - if (ar_device(sc->devid) == 5212 || ar_device(sc->devid) == 5213) { + if (ar_device(sc) == 5212) { /* registers taken from openhal */ #define AR5K_AR5212_TXCFG 0x0030 #define AR5K_AR5212_TXCFG_TXCONT_ENABLE 0x00000080 Modified: madwifi/branches/madwifi-hal-0.10.5.6/ath/if_ath_hal_extensions.c =================================================================== --- madwifi/branches/madwifi-hal-0.10.5.6/ath/if_ath_hal_extensions.c 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-0.10.5.6/ath/if_ath_hal_extensions.c 2009-04-28 06:05:55 UTC (rev 4016) @@ -80,56 +80,35 @@ { "xxxxx", AR5K_VERSION_RAD, AR5K_SREV_UNKNOWN }, }; +#define AR5210_MAGIC 0x19980124 +#define AR5211_MAGIC 0x19570405 +#define AR5212_MAGIC 0x19541014 +#define AR5416_MAGIC 0x20065416 int -ar_device(int devid) +ar_device(struct ath_softc *sc) { - switch (devid) { - case AR5210_DEFAULT: - case AR5210_PROD: - case AR5210_AP: + int magic = sc->sc_ah->ah_magic; + + switch (magic) { + case AR5210_MAGIC: return 5210; - case AR5211_DEFAULT: - case AR5311_DEVID: - case AR5211_LEGACY: - case AR5211_FPGA11B: + case AR5211_MAGIC: return 5211; - case AR5212_DEFAULT: - case AR5212_DEVID: - case AR5212_FPGA: - case AR5212_DEVID_IBM: - case AR5212_AR5312_REV2: - case AR5212_AR5312_REV7: - case AR5212_AR2313_REV8: - case AR5212_AR2315_REV6: - case AR5212_AR2315_REV7: - case AR5212_AR2317_REV1: - case AR5212_DEVID_0014: - case AR5212_DEVID_0015: - case AR5212_DEVID_0016: - case AR5212_DEVID_0017: - case AR5212_DEVID_0018: - case AR5212_DEVID_0019: - case AR5212_AR2413: - case AR5212_AR5413: - case AR5212_AR5424: - case AR5212_DEVID_FF19: + case AR5212_MAGIC: return 5212; - case AR5213_SREV_1_0: - case AR5213_SREV_REG: - case AR_SUBVENDOR_ID_NOG: - case AR_SUBVENDOR_ID_NEW_A: - return 5213; + case AR5416_MAGIC: + return 5416; default: - return 0; /* unknown */ + printk(KERN_WARNING "unknown HAL magic 0x%08x\n", magic); + return 0; } } - int ath_set_ack_bitrate(struct ath_softc *sc, int high) { - if (ar_device(sc->devid) == 5212 || ar_device(sc->devid) == 5213) { + if (ar_device(sc) == 5212) { /* set ack to be sent at low bit-rate */ u_int32_t v = AR5K_STA_ID1_BASE_RATE_11B | AR5K_STA_ID1_ACKCTS_6MB; if (high) Modified: madwifi/branches/madwifi-hal-0.10.5.6/ath/if_ath_hal_extensions.h =================================================================== --- madwifi/branches/madwifi-hal-0.10.5.6/ath/if_ath_hal_extensions.h 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-0.10.5.6/ath/if_ath_hal_extensions.h 2009-04-28 06:05:55 UTC (rev 4016) @@ -268,7 +268,7 @@ int ath_set_ack_bitrate(struct ath_softc *sc, int); -int ar_device(int devid); +int ar_device(struct ath_softc *sc); const char * ath5k_chip_name(enum ath5k_srev_type type, u_int16_t val); void ath_hw_beacon_stop(struct ath_softc *sc); int ath_hw_check_atim(struct ath_softc *sc, int window, int intval); Modified: madwifi/branches/madwifi-hal-0.10.5.6/ath/if_ath_radar.c =================================================================== --- madwifi/branches/madwifi-hal-0.10.5.6/ath/if_ath_radar.c 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-0.10.5.6/ath/if_ath_radar.c 2009-04-28 06:05:55 UTC (rev 4016) @@ -158,7 +158,7 @@ int ath_radar_is_enabled(struct ath_softc *sc) { struct ath_hal *ah = sc->sc_ah; - if (ar_device(sc->devid) >= 5211) + if (ar_device(sc) >= 5211) return ((OS_REG_READ(ah, AR5K_AR5212_PHY_ERR_FIL) & AR5K_AR5212_PHY_ERR_FIL_RADAR) && (sc->sc_imask & HAL_INT_RXPHY) && @@ -243,7 +243,7 @@ /* configure radar pulse detector register using default values, but do * not toggle the enable bit. XXX: allow tweaking?? */ ath_radar_set_params(sc, NULL); - if (ar_device(sc->devid) >= 5211) { + if (ar_device(sc) >= 5211) { HAL_INT old_ier = ath_hal_intrget(ah); HAL_INT new_ier = old_ier; unsigned int old_radar = OS_REG_READ(ah, AR5K_PHY_RADAR); Modified: madwifi/branches/madwifi-hal-0.10.5.6/ath_rate/minstrel/minstrel.c =================================================================== --- madwifi/branches/madwifi-hal-0.10.5.6/ath_rate/minstrel/minstrel.c 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-0.10.5.6/ath_rate/minstrel/minstrel.c 2009-04-28 06:05:55 UTC (rev 4016) @@ -470,10 +470,10 @@ int tries = 0; int mrr; int final_ndx; - int rate0, tries0, ndx0; - int rate1, tries1, ndx1; - int rate2, tries2, ndx2; - int rate3, tries3, ndx3; + int rate0, tries0, ndx0, hwrate0; + int rate1, tries1, ndx1, hwrate1; + int rate2, tries2, ndx2, hwrate2; + int rate3, tries3, ndx3, hwrate3; /* This is the index in the retry chain we finish at. * With no retransmits, it is always 0. @@ -520,19 +520,31 @@ * call will always return 6,3,2,2. For some packets, we can * get a mrr of 0, -1, -1, -1, which indicates there is no * chain installed for that packet */ - rate0 = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate0)].ieeerate; + if (sc->sc_ah->ah_magic != 0x20065416) { + hwrate0 = MS(ds->ds_ctl3, AR_XmitRate0); + hwrate1 = MS(ds->ds_ctl3, AR_XmitRate1); + hwrate2 = MS(ds->ds_ctl3, AR_XmitRate2); + hwrate3 = MS(ds->ds_ctl3, AR_XmitRate3); + } else { + hwrate0 = MS(ds->ds_ctl3, AR5416_XmitRate0); + hwrate1 = MS(ds->ds_ctl3, AR5416_XmitRate1); + hwrate2 = MS(ds->ds_ctl3, AR5416_XmitRate2); + hwrate3 = MS(ds->ds_ctl3, AR5416_XmitRate3); + } + + rate0 = sc->sc_hwmap[hwrate0].ieeerate; tries0 = MS(ds->ds_ctl2, AR_XmitDataTries0); ndx0 = rate_to_ndx(sn, rate0); - rate1 = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate1)].ieeerate; + rate1 = sc->sc_hwmap[hwrate1].ieeerate; tries1 = MS(ds->ds_ctl2, AR_XmitDataTries1); ndx1 = rate_to_ndx(sn, rate1); - rate2 = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate2)].ieeerate; + rate2 = sc->sc_hwmap[hwrate2].ieeerate; tries2 = MS(ds->ds_ctl2, AR_XmitDataTries2); ndx2 = rate_to_ndx(sn, rate2); - rate3 = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate3)].ieeerate; + rate3 = sc->sc_hwmap[hwrate3].ieeerate; tries3 = MS(ds->ds_ctl2, AR_XmitDataTries3); ndx3 = rate_to_ndx(sn, rate3); Modified: madwifi/branches/madwifi-hal-0.10.5.6/ath_rate/minstrel/minstrel.h =================================================================== --- madwifi/branches/madwifi-hal-0.10.5.6/ath_rate/minstrel/minstrel.h 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-0.10.5.6/ath_rate/minstrel/minstrel.h 2009-04-28 06:05:55 UTC (rev 4016) @@ -209,6 +209,16 @@ #define AR_XmitRate3 0x000f8000 /* series 3 tx rate */ #define AR_XmitRate3_S 15 +/* TX ds_ctl3 for 5416 */ +#define AR5416_XmitRate0 0x000000ff /* series 0 tx rate */ +#define AR5416_XmitRate0_S 0 +#define AR5416_XmitRate1 0x0000ff00 /* series 1 tx rate */ +#define AR5416_XmitRate1_S 8 +#define AR5416_XmitRate2 0x00ff0000 /* series 2 tx rate */ +#define AR5416_XmitRate2_S 16 +#define AR5416_XmitRate3 0xff000000 /* series 3 tx rate */ +#define AR5416_XmitRate3_S 24 + #define MS(_v, _f) (((_v) & (_f)) >> _f##_S) #endif /* _DEV_ATH_RATE_MINSTEL_H */ Modified: madwifi/branches/madwifi-hal-0.10.5.6/ath_rate/sample/sample.c =================================================================== --- madwifi/branches/madwifi-hal-0.10.5.6/ath_rate/sample/sample.c 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-0.10.5.6/ath_rate/sample/sample.c 2009-04-28 06:05:55 UTC (rev 4016) @@ -681,31 +681,7 @@ MAC_ADDR(an->an_node.ni_macaddr), __func__); return; } - mrr = sc->sc_mrretry && !(ic->ic_flags & IEEE80211_F_USEPROT) && ENABLE_MRR; - - - if (sc->sc_mrretry && ts->ts_status) { - /* this packet failed */ - DPRINTF(sc, ATH_DEBUG_RATE, "%s: " MAC_FMT " size %u rate/try %u/%u %u/%u %u/%u %u/%u status %s retries (%u/%u)\n", - dev_info, - MAC_ADDR(an->an_node.ni_macaddr), - bin_to_size(size_to_bin(frame_size)), - sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate0)].ieeerate, - MS(ds->ds_ctl2, AR_XmitDataTries0), - sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate1)].ieeerate, - MS(ds->ds_ctl2, AR_XmitDataTries1), - sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate2)].ieeerate, - MS(ds->ds_ctl2, AR_XmitDataTries2), - sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate3)].ieeerate, - MS(ds->ds_ctl2, AR_XmitDataTries3), - ts->ts_status ? "FAIL" : "OK", - short_tries, long_tries); - } - - mrr = sc->sc_mrretry && !(ic->ic_flags & IEEE80211_F_USEPROT) && ENABLE_MRR; - - if (!mrr || !(ts->ts_rate & HAL_TXSTAT_ALTRATE)) { /* only one rate was used */ int ndx = rate_to_ndx(sn, final_rate); @@ -718,7 +694,7 @@ short_tries, long_tries, ts->ts_status); } } else { - unsigned int rate[4], tries[4]; + unsigned int rate[4], tries[4], hwrate[4]; int ndx[4]; int finalTSIdx = ts->ts_finaltsi; @@ -726,19 +702,31 @@ * Process intermediate rates that failed. */ - rate[0] = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate0)].ieeerate; + if (sc->sc_ah->ah_magic != 0x20065416) { + hwrate[0] = MS(ds->ds_ctl3, AR_XmitRate0); + hwrate[1] = MS(ds->ds_ctl3, AR_XmitRate1); + hwrate[2] = MS(ds->ds_ctl3, AR_XmitRate2); + hwrate[3] = MS(ds->ds_ctl3, AR_XmitRate3); + } else { + hwrate[0] = MS(ds->ds_ctl3, AR5416_XmitRate0); + hwrate[1] = MS(ds->ds_ctl3, AR5416_XmitRate1); + hwrate[2] = MS(ds->ds_ctl3, AR5416_XmitRate2); + hwrate[3] = MS(ds->ds_ctl3, AR5416_XmitRate3); + } + + rate[0] = sc->sc_hwmap[hwrate[0]].ieeerate; tries[0] = MS(ds->ds_ctl2, AR_XmitDataTries0); ndx[0] = rate_to_ndx(sn, rate[0]); - rate[1] = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate1)].ieeerate; + rate[1] = sc->sc_hwmap[hwrate[1]].ieeerate; tries[1] = MS(ds->ds_ctl2, AR_XmitDataTries1); ndx[1] = rate_to_ndx(sn, rate[1]); - rate[2] = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate2)].ieeerate; + rate[2] = sc->sc_hwmap[hwrate[2]].ieeerate; tries[2] = MS(ds->ds_ctl2, AR_XmitDataTries2); ndx[2] = rate_to_ndx(sn, rate[2]); - rate[3] = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate3)].ieeerate; + rate[3] = sc->sc_hwmap[hwrate[3]].ieeerate; tries[3] = MS(ds->ds_ctl2, AR_XmitDataTries3); ndx[3] = rate_to_ndx(sn, rate[3]); Modified: madwifi/branches/madwifi-hal-0.10.5.6/ath_rate/sample/sample.h =================================================================== --- madwifi/branches/madwifi-hal-0.10.5.6/ath_rate/sample/sample.h 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-0.10.5.6/ath_rate/sample/sample.h 2009-04-28 06:05:55 UTC (rev 4016) @@ -135,6 +135,16 @@ #define AR_XmitRate3 0x000f8000 /* series 3 tx rate */ #define AR_XmitRate3_S 15 +/* TX ds_ctl3 for 5416 */ +#define AR5416_XmitRate0 0x000000ff /* series 0 tx rate */ +#define AR5416_XmitRate0_S 0 +#define AR5416_XmitRate1 0x0000ff00 /* series 1 tx rate */ +#define AR5416_XmitRate1_S 8 +#define AR5416_XmitRate2 0x00ff0000 /* series 2 tx rate */ +#define AR5416_XmitRate2_S 16 +#define AR5416_XmitRate3 0xff000000 /* series 3 tx rate */ +#define AR5416_XmitRate3_S 24 + #define MS(_v, _f) (((_v) & (_f)) >> _f##_S) #endif /* _DEV_ATH_RATE_SAMPLE_H */ Modified: madwifi/branches/madwifi-hal-0.9.30.13/ath/if_ath.c =================================================================== --- madwifi/branches/madwifi-hal-0.9.30.13/ath/if_ath.c 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-0.9.30.13/ath/if_ath.c 2009-04-28 06:05:55 UTC (rev 4016) @@ -11580,7 +11580,7 @@ ath_set_ack_bitrate(sc, sc->sc_ackrate); netif_wake_queue(dev); /* restart xmit */ - if (ar_device(sc->devid) == 5212 || ar_device(sc->devid) == 5213) { + if (ar_device(sc) == 5212) { /* registers taken from openhal */ #define AR5K_AR5212_TXCFG 0x0030 #define AR5K_AR5212_TXCFG_TXCONT_ENABLE 0x00000080 Modified: madwifi/branches/madwifi-hal-0.9.30.13/ath/if_ath_hal_extensions.c =================================================================== --- madwifi/branches/madwifi-hal-0.9.30.13/ath/if_ath_hal_extensions.c 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-0.9.30.13/ath/if_ath_hal_extensions.c 2009-04-28 06:05:55 UTC (rev 4016) @@ -80,56 +80,35 @@ { "xxxxx", AR5K_VERSION_RAD, AR5K_SREV_UNKNOWN }, }; +#define AR5210_MAGIC 0x19980124 +#define AR5211_MAGIC 0x19570405 +#define AR5212_MAGIC 0x19541014 +#define AR5416_MAGIC 0x20065416 int -ar_device(int devid) +ar_device(struct ath_softc *sc) { - switch (devid) { - case AR5210_DEFAULT: - case AR5210_PROD: - case AR5210_AP: + int magic = sc->sc_ah->ah_magic; + + switch (magic) { + case AR5210_MAGIC: return 5210; - case AR5211_DEFAULT: - case AR5311_DEVID: - case AR5211_LEGACY: - case AR5211_FPGA11B: + case AR5211_MAGIC: return 5211; - case AR5212_DEFAULT: - case AR5212_DEVID: - case AR5212_FPGA: - case AR5212_DEVID_IBM: - case AR5212_AR5312_REV2: - case AR5212_AR5312_REV7: - case AR5212_AR2313_REV8: - case AR5212_AR2315_REV6: - case AR5212_AR2315_REV7: - case AR5212_AR2317_REV1: - case AR5212_DEVID_0014: - case AR5212_DEVID_0015: - case AR5212_DEVID_0016: - case AR5212_DEVID_0017: - case AR5212_DEVID_0018: - case AR5212_DEVID_0019: - case AR5212_AR2413: - case AR5212_AR5413: - case AR5212_AR5424: - case AR5212_DEVID_FF19: + case AR5212_MAGIC: return 5212; - case AR5213_SREV_1_0: - case AR5213_SREV_REG: - case AR_SUBVENDOR_ID_NOG: - case AR_SUBVENDOR_ID_NEW_A: - return 5213; + case AR5416_MAGIC: + return 5416; default: - return 0; /* unknown */ + printk(KERN_WARNING "unknown HAL magic 0x%08x\n", magic); + return 0; } } - int ath_set_ack_bitrate(struct ath_softc *sc, int high) { - if (ar_device(sc->devid) == 5212 || ar_device(sc->devid) == 5213) { + if (ar_device(sc) == 5212) { /* set ack to be sent at low bit-rate */ u_int32_t v = AR5K_STA_ID1_BASE_RATE_11B | AR5K_STA_ID1_ACKCTS_6MB; if (high) Modified: madwifi/branches/madwifi-hal-0.9.30.13/ath/if_ath_hal_extensions.h =================================================================== --- madwifi/branches/madwifi-hal-0.9.30.13/ath/if_ath_hal_extensions.h 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-0.9.30.13/ath/if_ath_hal_extensions.h 2009-04-28 06:05:55 UTC (rev 4016) @@ -268,7 +268,7 @@ int ath_set_ack_bitrate(struct ath_softc *sc, int); -int ar_device(int devid); +int ar_device(struct ath_softc *sc); const char * ath5k_chip_name(enum ath5k_srev_type type, u_int16_t val); void ath_hw_beacon_stop(struct ath_softc *sc); int ath_hw_check_atim(struct ath_softc *sc, int window, int intval); Modified: madwifi/branches/madwifi-hal-0.9.30.13/ath/if_ath_radar.c =================================================================== --- madwifi/branches/madwifi-hal-0.9.30.13/ath/if_ath_radar.c 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-0.9.30.13/ath/if_ath_radar.c 2009-04-28 06:05:55 UTC (rev 4016) @@ -158,7 +158,7 @@ int ath_radar_is_enabled(struct ath_softc *sc) { struct ath_hal *ah = sc->sc_ah; - if (ar_device(sc->devid) >= 5211) + if (ar_device(sc) >= 5211) return ((OS_REG_READ(ah, AR5K_AR5212_PHY_ERR_FIL) & AR5K_AR5212_PHY_ERR_FIL_RADAR) && (sc->sc_imask & HAL_INT_RXPHY) && @@ -243,7 +243,7 @@ /* configure radar pulse detector register using default values, but do * not toggle the enable bit. XXX: allow tweaking?? */ ath_radar_set_params(sc, NULL); - if (ar_device(sc->devid) >= 5211) { + if (ar_device(sc) >= 5211) { HAL_INT old_ier = ath_hal_intrget(ah); HAL_INT new_ier = old_ier; unsigned int old_radar = OS_REG_READ(ah, AR5K_PHY_RADAR); Modified: madwifi/branches/madwifi-hal-0.9.30.13/ath_rate/minstrel/minstrel.c =================================================================== --- madwifi/branches/madwifi-hal-0.9.30.13/ath_rate/minstrel/minstrel.c 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-0.9.30.13/ath_rate/minstrel/minstrel.c 2009-04-28 06:05:55 UTC (rev 4016) @@ -470,10 +470,10 @@ int tries = 0; int mrr; int final_ndx; - int rate0, tries0, ndx0; - int rate1, tries1, ndx1; - int rate2, tries2, ndx2; - int rate3, tries3, ndx3; + int rate0, tries0, ndx0, hwrate0; + int rate1, tries1, ndx1, hwrate1; + int rate2, tries2, ndx2, hwrate2; + int rate3, tries3, ndx3, hwrate3; /* This is the index in the retry chain we finish at. * With no retransmits, it is always 0. @@ -520,19 +520,31 @@ * call will always return 6,3,2,2. For some packets, we can * get a mrr of 0, -1, -1, -1, which indicates there is no * chain installed for that packet */ - rate0 = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate0)].ieeerate; + if (sc->sc_ah->ah_magic != 0x20065416) { + hwrate0 = MS(ds->ds_ctl3, AR_XmitRate0); + hwrate1 = MS(ds->ds_ctl3, AR_XmitRate1); + hwrate2 = MS(ds->ds_ctl3, AR_XmitRate2); + hwrate3 = MS(ds->ds_ctl3, AR_XmitRate3); + } else { + hwrate0 = MS(ds->ds_ctl3, AR5416_XmitRate0); + hwrate1 = MS(ds->ds_ctl3, AR5416_XmitRate1); + hwrate2 = MS(ds->ds_ctl3, AR5416_XmitRate2); + hwrate3 = MS(ds->ds_ctl3, AR5416_XmitRate3); + } + + rate0 = sc->sc_hwmap[hwrate0].ieeerate; tries0 = MS(ds->ds_ctl2, AR_XmitDataTries0); ndx0 = rate_to_ndx(sn, rate0); - rate1 = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate1)].ieeerate; + rate1 = sc->sc_hwmap[hwrate1].ieeerate; tries1 = MS(ds->ds_ctl2, AR_XmitDataTries1); ndx1 = rate_to_ndx(sn, rate1); - rate2 = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate2)].ieeerate; + rate2 = sc->sc_hwmap[hwrate2].ieeerate; tries2 = MS(ds->ds_ctl2, AR_XmitDataTries2); ndx2 = rate_to_ndx(sn, rate2); - rate3 = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate3)].ieeerate; + rate3 = sc->sc_hwmap[hwrate3].ieeerate; tries3 = MS(ds->ds_ctl2, AR_XmitDataTries3); ndx3 = rate_to_ndx(sn, rate3); Modified: madwifi/branches/madwifi-hal-0.9.30.13/ath_rate/minstrel/minstrel.h =================================================================== --- madwifi/branches/madwifi-hal-0.9.30.13/ath_rate/minstrel/minstrel.h 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-0.9.30.13/ath_rate/minstrel/minstrel.h 2009-04-28 06:05:55 UTC (rev 4016) @@ -209,6 +209,16 @@ #define AR_XmitRate3 0x000f8000 /* series 3 tx rate */ #define AR_XmitRate3_S 15 +/* TX ds_ctl3 for 5416 */ +#define AR5416_XmitRate0 0x000000ff /* series 0 tx rate */ +#define AR5416_XmitRate0_S 0 +#define AR5416_XmitRate1 0x0000ff00 /* series 1 tx rate */ +#define AR5416_XmitRate1_S 8 +#define AR5416_XmitRate2 0x00ff0000 /* series 2 tx rate */ +#define AR5416_XmitRate2_S 16 +#define AR5416_XmitRate3 0xff000000 /* series 3 tx rate */ +#define AR5416_XmitRate3_S 24 + #define MS(_v, _f) (((_v) & (_f)) >> _f##_S) #endif /* _DEV_ATH_RATE_MINSTEL_H */ Modified: madwifi/branches/madwifi-hal-0.9.30.13/ath_rate/sample/sample.c =================================================================== --- madwifi/branches/madwifi-hal-0.9.30.13/ath_rate/sample/sample.c 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-0.9.30.13/ath_rate/sample/sample.c 2009-04-28 06:05:55 UTC (rev 4016) @@ -681,31 +681,7 @@ MAC_ADDR(an->an_node.ni_macaddr), __func__); return; } - mrr = sc->sc_mrretry && !(ic->ic_flags & IEEE80211_F_USEPROT) && ENABLE_MRR; - - - if (sc->sc_mrretry && ts->ts_status) { - /* this packet failed */ - DPRINTF(sc, ATH_DEBUG_RATE, "%s: " MAC_FMT " size %u rate/try %u/%u %u/%u %u/%u %u/%u status %s retries (%u/%u)\n", - dev_info, - MAC_ADDR(an->an_node.ni_macaddr), - bin_to_size(size_to_bin(frame_size)), - sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate0)].ieeerate, - MS(ds->ds_ctl2, AR_XmitDataTries0), - sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate1)].ieeerate, - MS(ds->ds_ctl2, AR_XmitDataTries1), - sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate2)].ieeerate, - MS(ds->ds_ctl2, AR_XmitDataTries2), - sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate3)].ieeerate, - MS(ds->ds_ctl2, AR_XmitDataTries3), - ts->ts_status ? "FAIL" : "OK", - short_tries, long_tries); - } - - mrr = sc->sc_mrretry && !(ic->ic_flags & IEEE80211_F_USEPROT) && ENABLE_MRR; - - if (!mrr || !(ts->ts_rate & HAL_TXSTAT_ALTRATE)) { /* only one rate was used */ int ndx = rate_to_ndx(sn, final_rate); @@ -718,7 +694,7 @@ short_tries, long_tries, ts->ts_status); } } else { - unsigned int rate[4], tries[4]; + unsigned int rate[4], tries[4], hwrate[4]; int ndx[4]; int finalTSIdx = ts->ts_finaltsi; @@ -726,19 +702,31 @@ * Process intermediate rates that failed. */ - rate[0] = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate0)].ieeerate; + if (sc->sc_ah->ah_magic != 0x20065416) { + hwrate[0] = MS(ds->ds_ctl3, AR_XmitRate0); + hwrate[1] = MS(ds->ds_ctl3, AR_XmitRate1); + hwrate[2] = MS(ds->ds_ctl3, AR_XmitRate2); + hwrate[3] = MS(ds->ds_ctl3, AR_XmitRate3); + } else { + hwrate[0] = MS(ds->ds_ctl3, AR5416_XmitRate0); + hwrate[1] = MS(ds->ds_ctl3, AR5416_XmitRate1); + hwrate[2] = MS(ds->ds_ctl3, AR5416_XmitRate2); + hwrate[3] = MS(ds->ds_ctl3, AR5416_XmitRate3); + } + + rate[0] = sc->sc_hwmap[hwrate[0]].ieeerate; tries[0] = MS(ds->ds_ctl2, AR_XmitDataTries0); ndx[0] = rate_to_ndx(sn, rate[0]); - rate[1] = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate1)].ieeerate; + rate[1] = sc->sc_hwmap[hwrate[1]].ieeerate; tries[1] = MS(ds->ds_ctl2, AR_XmitDataTries1); ndx[1] = rate_to_ndx(sn, rate[1]); - rate[2] = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate2)].ieeerate; + rate[2] = sc->sc_hwmap[hwrate[2]].ieeerate; tries[2] = MS(ds->ds_ctl2, AR_XmitDataTries2); ndx[2] = rate_to_ndx(sn, rate[2]); - rate[3] = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate3)].ieeerate; + rate[3] = sc->sc_hwmap[hwrate[3]].ieeerate; tries[3] = MS(ds->ds_ctl2, AR_XmitDataTries3); ndx[3] = rate_to_ndx(sn, rate[3]); Modified: madwifi/branches/madwifi-hal-0.9.30.13/ath_rate/sample/sample.h =================================================================== --- madwifi/branches/madwifi-hal-0.9.30.13/ath_rate/sample/sample.h 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-0.9.30.13/ath_rate/sample/sample.h 2009-04-28 06:05:55 UTC (rev 4016) @@ -135,6 +135,16 @@ #define AR_XmitRate3 0x000f8000 /* series 3 tx rate */ #define AR_XmitRate3_S 15 +/* TX ds_ctl3 for 5416 */ +#define AR5416_XmitRate0 0x000000ff /* series 0 tx rate */ +#define AR5416_XmitRate0_S 0 +#define AR5416_XmitRate1 0x0000ff00 /* series 1 tx rate */ +#define AR5416_XmitRate1_S 8 +#define AR5416_XmitRate2 0x00ff0000 /* series 2 tx rate */ +#define AR5416_XmitRate2_S 16 +#define AR5416_XmitRate3 0xff000000 /* series 3 tx rate */ +#define AR5416_XmitRate3_S 24 + #define MS(_v, _f) (((_v) & (_f)) >> _f##_S) #endif /* _DEV_ATH_RATE_SAMPLE_H */ Modified: madwifi/branches/madwifi-hal-testing/ath/if_ath.c =================================================================== --- madwifi/branches/madwifi-hal-testing/ath/if_ath.c 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-testing/ath/if_ath.c 2009-04-28 06:05:55 UTC (rev 4016) @@ -11549,7 +11549,7 @@ ath_set_ack_bitrate(sc, sc->sc_ackrate); netif_wake_queue(dev); /* restart xmit */ - if (ar_device(sc->devid) == 5212 || ar_device(sc->devid) == 5213) { + if (ar_device(sc) == 5212) { /* registers taken from openhal */ #define AR5K_AR5212_TXCFG 0x0030 #define AR5K_AR5212_TXCFG_TXCONT_ENABLE 0x00000080 Modified: madwifi/branches/madwifi-hal-testing/ath/if_ath_hal_extensions.c =================================================================== --- madwifi/branches/madwifi-hal-testing/ath/if_ath_hal_extensions.c 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-testing/ath/if_ath_hal_extensions.c 2009-04-28 06:05:55 UTC (rev 4016) @@ -80,56 +80,35 @@ { "xxxxx", AR5K_VERSION_RAD, AR5K_SREV_UNKNOWN }, }; +#define AR5210_MAGIC 0x19980124 +#define AR5211_MAGIC 0x19570405 +#define AR5212_MAGIC 0x19541014 +#define AR5416_MAGIC 0x20065416 int -ar_device(int devid) +ar_device(struct ath_softc *sc) { - switch (devid) { - case AR5210_DEFAULT: - case AR5210_PROD: - case AR5210_AP: + int magic = sc->sc_ah->ah_magic; + + switch (magic) { + case AR5210_MAGIC: return 5210; - case AR5211_DEFAULT: - case AR5311_DEVID: - case AR5211_LEGACY: - case AR5211_FPGA11B: + case AR5211_MAGIC: return 5211; - case AR5212_DEFAULT: - case AR5212_DEVID: - case AR5212_FPGA: - case AR5212_DEVID_IBM: - case AR5212_AR5312_REV2: - case AR5212_AR5312_REV7: - case AR5212_AR2313_REV8: - case AR5212_AR2315_REV6: - case AR5212_AR2315_REV7: - case AR5212_AR2317_REV1: - case AR5212_DEVID_0014: - case AR5212_DEVID_0015: - case AR5212_DEVID_0016: - case AR5212_DEVID_0017: - case AR5212_DEVID_0018: - case AR5212_DEVID_0019: - case AR5212_AR2413: - case AR5212_AR5413: - case AR5212_AR5424: - case AR5212_DEVID_FF19: + case AR5212_MAGIC: return 5212; - case AR5213_SREV_1_0: - case AR5213_SREV_REG: - case AR_SUBVENDOR_ID_NOG: - case AR_SUBVENDOR_ID_NEW_A: - return 5213; + case AR5416_MAGIC: + return 5416; default: - return 0; /* unknown */ + printk(KERN_WARNING "unknown HAL magic 0x%08x\n", magic); + return 0; } } - int ath_set_ack_bitrate(struct ath_softc *sc, int high) { - if (ar_device(sc->devid) == 5212 || ar_device(sc->devid) == 5213) { + if (ar_device(sc) == 5212) { /* set ack to be sent at low bit-rate */ u_int32_t v = AR5K_STA_ID1_BASE_RATE_11B | AR5K_STA_ID1_ACKCTS_6MB; if (high) Modified: madwifi/branches/madwifi-hal-testing/ath/if_ath_hal_extensions.h =================================================================== --- madwifi/branches/madwifi-hal-testing/ath/if_ath_hal_extensions.h 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-testing/ath/if_ath_hal_extensions.h 2009-04-28 06:05:55 UTC (rev 4016) @@ -171,7 +171,7 @@ }; int ath_set_ack_bitrate(struct ath_softc *sc, int); -int ar_device(int devid); +int ar_device(struct ath_softc *sc); const char * ath5k_chip_name(enum ath5k_srev_type type, u_int16_t val); void ath_hw_beacon_stop(struct ath_softc *sc); int ath_hw_check_atim(struct ath_softc *sc, int window, int intval); Modified: madwifi/branches/madwifi-hal-testing/ath/if_ath_radar.c =================================================================== --- madwifi/branches/madwifi-hal-testing/ath/if_ath_radar.c 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-testing/ath/if_ath_radar.c 2009-04-28 06:05:55 UTC (rev 4016) @@ -158,7 +158,7 @@ int ath_radar_is_enabled(struct ath_softc *sc) { struct ath_hal *ah = sc->sc_ah; - if (ar_device(sc->devid) >= 5211) + if (ar_device(sc) >= 5211) return ((OS_REG_READ(ah, AR5K_AR5212_PHY_ERR_FIL) & AR5K_AR5212_PHY_ERR_FIL_RADAR) && (sc->sc_imask & HAL_INT_RXPHY) && @@ -243,7 +243,7 @@ /* configure radar pulse detector register using default values, but do * not toggle the enable bit. XXX: allow tweaking?? */ ath_radar_set_params(sc, NULL); - if (ar_device(sc->devid) >= 5211) { + if (ar_device(sc) >= 5211) { HAL_INT old_ier = ath_hal_intrget(ah); HAL_INT new_ier = old_ier; unsigned int old_radar = OS_REG_READ(ah, AR5K_PHY_RADAR); Modified: madwifi/branches/madwifi-hal-testing/ath_rate/minstrel/minstrel.c =================================================================== --- madwifi/branches/madwifi-hal-testing/ath_rate/minstrel/minstrel.c 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-testing/ath_rate/minstrel/minstrel.c 2009-04-28 06:05:55 UTC (rev 4016) @@ -470,10 +470,10 @@ int tries = 0; int mrr; int final_ndx; - int rate0, tries0, ndx0; - int rate1, tries1, ndx1; - int rate2, tries2, ndx2; - int rate3, tries3, ndx3; + int rate0, tries0, ndx0, hwrate0; + int rate1, tries1, ndx1, hwrate1; + int rate2, tries2, ndx2, hwrate2; + int rate3, tries3, ndx3, hwrate3; /* This is the index in the retry chain we finish at. * With no retransmits, it is always 0. @@ -520,19 +520,31 @@ * call will always return 6,3,2,2. For some packets, we can * get a mrr of 0, -1, -1, -1, which indicates there is no * chain installed for that packet */ - rate0 = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate0)].ieeerate; + if (sc->sc_ah->ah_magic != 0x20065416) { + hwrate0 = MS(ds->ds_ctl3, AR_XmitRate0); + hwrate1 = MS(ds->ds_ctl3, AR_XmitRate1); + hwrate2 = MS(ds->ds_ctl3, AR_XmitRate2); + hwrate3 = MS(ds->ds_ctl3, AR_XmitRate3); + } else { + hwrate0 = MS(ds->ds_ctl3, AR5416_XmitRate0); + hwrate1 = MS(ds->ds_ctl3, AR5416_XmitRate1); + hwrate2 = MS(ds->ds_ctl3, AR5416_XmitRate2); + hwrate3 = MS(ds->ds_ctl3, AR5416_XmitRate3); + } + + rate0 = sc->sc_hwmap[hwrate0].ieeerate; tries0 = MS(ds->ds_ctl2, AR_XmitDataTries0); ndx0 = rate_to_ndx(sn, rate0); - rate1 = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate1)].ieeerate; + rate1 = sc->sc_hwmap[hwrate1].ieeerate; tries1 = MS(ds->ds_ctl2, AR_XmitDataTries1); ndx1 = rate_to_ndx(sn, rate1); - rate2 = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate2)].ieeerate; + rate2 = sc->sc_hwmap[hwrate2].ieeerate; tries2 = MS(ds->ds_ctl2, AR_XmitDataTries2); ndx2 = rate_to_ndx(sn, rate2); - rate3 = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate3)].ieeerate; + rate3 = sc->sc_hwmap[hwrate3].ieeerate; tries3 = MS(ds->ds_ctl2, AR_XmitDataTries3); ndx3 = rate_to_ndx(sn, rate3); Modified: madwifi/branches/madwifi-hal-testing/ath_rate/minstrel/minstrel.h =================================================================== --- madwifi/branches/madwifi-hal-testing/ath_rate/minstrel/minstrel.h 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-testing/ath_rate/minstrel/minstrel.h 2009-04-28 06:05:55 UTC (rev 4016) @@ -209,6 +209,16 @@ #define AR_XmitRate3 0x000f8000 /* series 3 tx rate */ #define AR_XmitRate3_S 15 +/* TX ds_ctl3 for 5416 */ +#define AR5416_XmitRate0 0x000000ff /* series 0 tx rate */ +#define AR5416_XmitRate0_S 0 +#define AR5416_XmitRate1 0x0000ff00 /* series 1 tx rate */ +#define AR5416_XmitRate1_S 8 +#define AR5416_XmitRate2 0x00ff0000 /* series 2 tx rate */ +#define AR5416_XmitRate2_S 16 +#define AR5416_XmitRate3 0xff000000 /* series 3 tx rate */ +#define AR5416_XmitRate3_S 24 + #define MS(_v, _f) (((_v) & (_f)) >> _f##_S) #endif /* _DEV_ATH_RATE_MINSTEL_H */ Modified: madwifi/branches/madwifi-hal-testing/ath_rate/sample/sample.c =================================================================== --- madwifi/branches/madwifi-hal-testing/ath_rate/sample/sample.c 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-testing/ath_rate/sample/sample.c 2009-04-28 06:05:55 UTC (rev 4016) @@ -681,31 +681,7 @@ MAC_ADDR(an->an_node.ni_macaddr), __func__); return; } - mrr = sc->sc_mrretry && !(ic->ic_flags & IEEE80211_F_USEPROT) && ENABLE_MRR; - - - if (sc->sc_mrretry && ts->ts_status) { - /* this packet failed */ - DPRINTF(sc, ATH_DEBUG_RATE, "%s: " MAC_FMT " size %u rate/try %u/%u %u/%u %u/%u %u/%u status %s retries (%u/%u)\n", - dev_info, - MAC_ADDR(an->an_node.ni_macaddr), - bin_to_size(size_to_bin(frame_size)), - sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate0)].ieeerate, - MS(ds->ds_ctl2, AR_XmitDataTries0), - sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate1)].ieeerate, - MS(ds->ds_ctl2, AR_XmitDataTries1), - sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate2)].ieeerate, - MS(ds->ds_ctl2, AR_XmitDataTries2), - sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate3)].ieeerate, - MS(ds->ds_ctl2, AR_XmitDataTries3), - ts->ts_status ? "FAIL" : "OK", - short_tries, long_tries); - } - - mrr = sc->sc_mrretry && !(ic->ic_flags & IEEE80211_F_USEPROT) && ENABLE_MRR; - - if (!mrr || !(ts->ts_rate & HAL_TXSTAT_ALTRATE)) { /* only one rate was used */ int ndx = rate_to_ndx(sn, final_rate); @@ -718,7 +694,7 @@ short_tries, long_tries, ts->ts_status); } } else { - unsigned int rate[4], tries[4]; + unsigned int rate[4], tries[4], hwrate[4]; int ndx[4]; int finalTSIdx = ts->ts_finaltsi; @@ -726,19 +702,31 @@ * Process intermediate rates that failed. */ - rate[0] = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate0)].ieeerate; + if (sc->sc_ah->ah_magic != 0x20065416) { + hwrate[0] = MS(ds->ds_ctl3, AR_XmitRate0); + hwrate[1] = MS(ds->ds_ctl3, AR_XmitRate1); + hwrate[2] = MS(ds->ds_ctl3, AR_XmitRate2); + hwrate[3] = MS(ds->ds_ctl3, AR_XmitRate3); + } else { + hwrate[0] = MS(ds->ds_ctl3, AR5416_XmitRate0); + hwrate[1] = MS(ds->ds_ctl3, AR5416_XmitRate1); + hwrate[2] = MS(ds->ds_ctl3, AR5416_XmitRate2); + hwrate[3] = MS(ds->ds_ctl3, AR5416_XmitRate3); + } + + rate[0] = sc->sc_hwmap[hwrate[0]].ieeerate; tries[0] = MS(ds->ds_ctl2, AR_XmitDataTries0); ndx[0] = rate_to_ndx(sn, rate[0]); - rate[1] = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate1)].ieeerate; + rate[1] = sc->sc_hwmap[hwrate[1]].ieeerate; tries[1] = MS(ds->ds_ctl2, AR_XmitDataTries1); ndx[1] = rate_to_ndx(sn, rate[1]); - rate[2] = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate2)].ieeerate; + rate[2] = sc->sc_hwmap[hwrate[2]].ieeerate; tries[2] = MS(ds->ds_ctl2, AR_XmitDataTries2); ndx[2] = rate_to_ndx(sn, rate[2]); - rate[3] = sc->sc_hwmap[MS(ds->ds_ctl3, AR_XmitRate3)].ieeerate; + rate[3] = sc->sc_hwmap[hwrate[3]].ieeerate; tries[3] = MS(ds->ds_ctl2, AR_XmitDataTries3); ndx[3] = rate_to_ndx(sn, rate[3]); Modified: madwifi/branches/madwifi-hal-testing/ath_rate/sample/sample.h =================================================================== --- madwifi/branches/madwifi-hal-testing/ath_rate/sample/sample.h 2009-04-28 05:59:25 UTC (rev 4015) +++ madwifi/branches/madwifi-hal-testing/ath_rate/sample/sample.h 2009-04-28 06:05:55 UTC (rev 4016) @@ -135,6 +135,16 @@ #define AR_XmitRate3 0x000f8000 /* series 3 tx rate */ #define AR_XmitRate3_S 15 +/* TX ds_ctl3 for 5416 */ +#define AR5416_XmitRate0 0x000000ff /* series 0 tx rate */ +#define AR5416_XmitRate0_S 0 +#define AR5416_XmitRate1 0x0000ff00 /* series 1 tx rate */ +#define AR5416_XmitRate1_S 8 +#define AR5416_XmitRate2 0x00ff0000 /* series 2 tx rate */ +#define AR5416_XmitRate2_S 16 +#define AR5416_XmitRate3 0xff000000 /* series 3 tx rate */ +#define AR5416_XmitRate3_S 24 + #define MS(_v, _f) (((_v) & (_f)) >> _f##_S) #endif /* _DEV_ATH_RATE_SAMPLE_H */ |