diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath5k/ath5k.h')
-rw-r--r-- | drivers/net/wireless/ath/ath5k/ath5k.h | 68 |
1 files changed, 29 insertions, 39 deletions
diff --git a/drivers/net/wireless/ath/ath5k/ath5k.h b/drivers/net/wireless/ath/ath5k/ath5k.h index 6cd5efcec417..ac67f02e26d8 100644 --- a/drivers/net/wireless/ath/ath5k/ath5k.h +++ b/drivers/net/wireless/ath/ath5k/ath5k.h | |||
@@ -35,6 +35,7 @@ | |||
35 | * TODO: Make a more generic struct (eg. add more stuff to ath5k_capabilities) | 35 | * TODO: Make a more generic struct (eg. add more stuff to ath5k_capabilities) |
36 | * and clean up common bits, then introduce set/get functions in eeprom.c */ | 36 | * and clean up common bits, then introduce set/get functions in eeprom.c */ |
37 | #include "eeprom.h" | 37 | #include "eeprom.h" |
38 | #include "../ath.h" | ||
38 | 39 | ||
39 | /* PCI IDs */ | 40 | /* PCI IDs */ |
40 | #define PCI_DEVICE_ID_ATHEROS_AR5210 0x0007 /* AR5210 */ | 41 | #define PCI_DEVICE_ID_ATHEROS_AR5210 0x0007 /* AR5210 */ |
@@ -165,13 +166,6 @@ | |||
165 | #define AR5K_INI_VAL_XR 0 | 166 | #define AR5K_INI_VAL_XR 0 |
166 | #define AR5K_INI_VAL_MAX 5 | 167 | #define AR5K_INI_VAL_MAX 5 |
167 | 168 | ||
168 | /* Used for BSSID etc manipulation */ | ||
169 | #define AR5K_LOW_ID(_a)( \ | ||
170 | (_a)[0] | (_a)[1] << 8 | (_a)[2] << 16 | (_a)[3] << 24 \ | ||
171 | ) | ||
172 | |||
173 | #define AR5K_HIGH_ID(_a) ((_a)[4] | (_a)[5] << 8) | ||
174 | |||
175 | /* | 169 | /* |
176 | * Some tuneable values (these should be changeable by the user) | 170 | * Some tuneable values (these should be changeable by the user) |
177 | * TODO: Make use of them and add more options OR use debug/configfs | 171 | * TODO: Make use of them and add more options OR use debug/configfs |
@@ -204,6 +198,7 @@ | |||
204 | #define AR5K_TUNE_CWMAX_11B 1023 | 198 | #define AR5K_TUNE_CWMAX_11B 1023 |
205 | #define AR5K_TUNE_CWMAX_XR 7 | 199 | #define AR5K_TUNE_CWMAX_XR 7 |
206 | #define AR5K_TUNE_NOISE_FLOOR -72 | 200 | #define AR5K_TUNE_NOISE_FLOOR -72 |
201 | #define AR5K_TUNE_CCA_MAX_GOOD_VALUE -95 | ||
207 | #define AR5K_TUNE_MAX_TXPOWER 63 | 202 | #define AR5K_TUNE_MAX_TXPOWER 63 |
208 | #define AR5K_TUNE_DEFAULT_TXPOWER 25 | 203 | #define AR5K_TUNE_DEFAULT_TXPOWER 25 |
209 | #define AR5K_TUNE_TPC_TXPOWER false | 204 | #define AR5K_TUNE_TPC_TXPOWER false |
@@ -540,13 +535,12 @@ struct ath5k_txq_info { | |||
540 | u32 tqi_cbr_period; /* Constant bit rate period */ | 535 | u32 tqi_cbr_period; /* Constant bit rate period */ |
541 | u32 tqi_cbr_overflow_limit; | 536 | u32 tqi_cbr_overflow_limit; |
542 | u32 tqi_burst_time; | 537 | u32 tqi_burst_time; |
543 | u32 tqi_ready_time; /* Not used */ | 538 | u32 tqi_ready_time; /* Time queue waits after an event */ |
544 | }; | 539 | }; |
545 | 540 | ||
546 | /* | 541 | /* |
547 | * Transmit packet types. | 542 | * Transmit packet types. |
548 | * used on tx control descriptor | 543 | * used on tx control descriptor |
549 | * TODO: Use them inside base.c corectly | ||
550 | */ | 544 | */ |
551 | enum ath5k_pkt_type { | 545 | enum ath5k_pkt_type { |
552 | AR5K_PKT_TYPE_NORMAL = 0, | 546 | AR5K_PKT_TYPE_NORMAL = 0, |
@@ -1012,6 +1006,14 @@ struct ath5k_capabilities { | |||
1012 | } cap_queues; | 1006 | } cap_queues; |
1013 | }; | 1007 | }; |
1014 | 1008 | ||
1009 | /* size of noise floor history (keep it a power of two) */ | ||
1010 | #define ATH5K_NF_CAL_HIST_MAX 8 | ||
1011 | struct ath5k_nfcal_hist | ||
1012 | { | ||
1013 | s16 index; /* current index into nfval */ | ||
1014 | s16 nfval[ATH5K_NF_CAL_HIST_MAX]; /* last few noise floors */ | ||
1015 | }; | ||
1016 | |||
1015 | 1017 | ||
1016 | /***************************************\ | 1018 | /***************************************\ |
1017 | HARDWARE ABSTRACTION LAYER STRUCTURE | 1019 | HARDWARE ABSTRACTION LAYER STRUCTURE |
@@ -1027,6 +1029,7 @@ struct ath5k_capabilities { | |||
1027 | /* TODO: Clean up and merge with ath5k_softc */ | 1029 | /* TODO: Clean up and merge with ath5k_softc */ |
1028 | struct ath5k_hw { | 1030 | struct ath5k_hw { |
1029 | u32 ah_magic; | 1031 | u32 ah_magic; |
1032 | struct ath_common common; | ||
1030 | 1033 | ||
1031 | struct ath5k_softc *ah_sc; | 1034 | struct ath5k_softc *ah_sc; |
1032 | void __iomem *ah_iobase; | 1035 | void __iomem *ah_iobase; |
@@ -1059,6 +1062,7 @@ struct ath5k_hw { | |||
1059 | u32 ah_cw_min; | 1062 | u32 ah_cw_min; |
1060 | u32 ah_cw_max; | 1063 | u32 ah_cw_max; |
1061 | u32 ah_limit_tx_retries; | 1064 | u32 ah_limit_tx_retries; |
1065 | u8 ah_coverage_class; | ||
1062 | 1066 | ||
1063 | /* Antenna Control */ | 1067 | /* Antenna Control */ |
1064 | u32 ah_ant_ctl[AR5K_EEPROM_N_MODES][AR5K_ANT_MAX]; | 1068 | u32 ah_ant_ctl[AR5K_EEPROM_N_MODES][AR5K_ANT_MAX]; |
@@ -1067,14 +1071,6 @@ struct ath5k_hw { | |||
1067 | u8 ah_def_ant; | 1071 | u8 ah_def_ant; |
1068 | bool ah_software_retry; | 1072 | bool ah_software_retry; |
1069 | 1073 | ||
1070 | u8 ah_sta_id[ETH_ALEN]; | ||
1071 | |||
1072 | /* Current BSSID we are trying to assoc to / create. | ||
1073 | * This is passed by mac80211 on config_interface() and cached here for | ||
1074 | * use in resets */ | ||
1075 | u8 ah_bssid[ETH_ALEN]; | ||
1076 | u8 ah_bssid_mask[ETH_ALEN]; | ||
1077 | |||
1078 | int ah_gpio_npins; | 1074 | int ah_gpio_npins; |
1079 | 1075 | ||
1080 | struct ath5k_capabilities ah_capabilities; | 1076 | struct ath5k_capabilities ah_capabilities; |
@@ -1125,6 +1121,8 @@ struct ath5k_hw { | |||
1125 | struct ieee80211_channel r_last_channel; | 1121 | struct ieee80211_channel r_last_channel; |
1126 | } ah_radar; | 1122 | } ah_radar; |
1127 | 1123 | ||
1124 | struct ath5k_nfcal_hist ah_nfcal_hist; | ||
1125 | |||
1128 | /* noise floor from last periodic calibration */ | 1126 | /* noise floor from last periodic calibration */ |
1129 | s32 ah_noise_floor; | 1127 | s32 ah_noise_floor; |
1130 | 1128 | ||
@@ -1160,7 +1158,7 @@ struct ath5k_hw { | |||
1160 | */ | 1158 | */ |
1161 | 1159 | ||
1162 | /* Attach/Detach Functions */ | 1160 | /* Attach/Detach Functions */ |
1163 | extern struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc *sc); | 1161 | extern int ath5k_hw_attach(struct ath5k_softc *sc); |
1164 | extern void ath5k_hw_detach(struct ath5k_hw *ah); | 1162 | extern void ath5k_hw_detach(struct ath5k_hw *ah); |
1165 | 1163 | ||
1166 | /* LED functions */ | 1164 | /* LED functions */ |
@@ -1202,11 +1200,11 @@ extern bool ath5k_eeprom_is_hb63(struct ath5k_hw *ah); | |||
1202 | 1200 | ||
1203 | /* Protocol Control Unit Functions */ | 1201 | /* Protocol Control Unit Functions */ |
1204 | extern int ath5k_hw_set_opmode(struct ath5k_hw *ah); | 1202 | extern int ath5k_hw_set_opmode(struct ath5k_hw *ah); |
1203 | extern void ath5k_hw_set_coverage_class(struct ath5k_hw *ah, u8 coverage_class); | ||
1205 | /* BSSID Functions */ | 1204 | /* BSSID Functions */ |
1206 | extern void ath5k_hw_get_lladdr(struct ath5k_hw *ah, u8 *mac); | ||
1207 | extern int ath5k_hw_set_lladdr(struct ath5k_hw *ah, const u8 *mac); | 1205 | extern int ath5k_hw_set_lladdr(struct ath5k_hw *ah, const u8 *mac); |
1208 | extern void ath5k_hw_set_associd(struct ath5k_hw *ah, const u8 *bssid, u16 assoc_id); | 1206 | extern void ath5k_hw_set_associd(struct ath5k_hw *ah); |
1209 | extern int ath5k_hw_set_bssid_mask(struct ath5k_hw *ah, const u8 *mask); | 1207 | extern void ath5k_hw_set_bssid_mask(struct ath5k_hw *ah, const u8 *mask); |
1210 | /* Receive start/stop functions */ | 1208 | /* Receive start/stop functions */ |
1211 | extern void ath5k_hw_start_rx_pcu(struct ath5k_hw *ah); | 1209 | extern void ath5k_hw_start_rx_pcu(struct ath5k_hw *ah); |
1212 | extern void ath5k_hw_stop_rx_pcu(struct ath5k_hw *ah); | 1210 | extern void ath5k_hw_stop_rx_pcu(struct ath5k_hw *ah); |
@@ -1234,6 +1232,10 @@ extern int ath5k_hw_set_ack_timeout(struct ath5k_hw *ah, unsigned int timeout); | |||
1234 | extern unsigned int ath5k_hw_get_ack_timeout(struct ath5k_hw *ah); | 1232 | extern unsigned int ath5k_hw_get_ack_timeout(struct ath5k_hw *ah); |
1235 | extern int ath5k_hw_set_cts_timeout(struct ath5k_hw *ah, unsigned int timeout); | 1233 | extern int ath5k_hw_set_cts_timeout(struct ath5k_hw *ah, unsigned int timeout); |
1236 | extern unsigned int ath5k_hw_get_cts_timeout(struct ath5k_hw *ah); | 1234 | extern unsigned int ath5k_hw_get_cts_timeout(struct ath5k_hw *ah); |
1235 | /* Clock rate related functions */ | ||
1236 | unsigned int ath5k_hw_htoclock(struct ath5k_hw *ah, unsigned int usec); | ||
1237 | unsigned int ath5k_hw_clocktoh(struct ath5k_hw *ah, unsigned int clock); | ||
1238 | unsigned int ath5k_hw_get_clockrate(struct ath5k_hw *ah); | ||
1237 | /* Key table (WEP) functions */ | 1239 | /* Key table (WEP) functions */ |
1238 | extern int ath5k_hw_reset_key(struct ath5k_hw *ah, u16 entry); | 1240 | extern int ath5k_hw_reset_key(struct ath5k_hw *ah, u16 entry); |
1239 | extern int ath5k_hw_is_key_valid(struct ath5k_hw *ah, u16 entry); | 1241 | extern int ath5k_hw_is_key_valid(struct ath5k_hw *ah, u16 entry); |
@@ -1288,8 +1290,10 @@ extern int ath5k_hw_rfgain_opt_init(struct ath5k_hw *ah); | |||
1288 | extern bool ath5k_channel_ok(struct ath5k_hw *ah, u16 freq, unsigned int flags); | 1290 | extern bool ath5k_channel_ok(struct ath5k_hw *ah, u16 freq, unsigned int flags); |
1289 | extern int ath5k_hw_channel(struct ath5k_hw *ah, struct ieee80211_channel *channel); | 1291 | extern int ath5k_hw_channel(struct ath5k_hw *ah, struct ieee80211_channel *channel); |
1290 | /* PHY calibration */ | 1292 | /* PHY calibration */ |
1293 | void ath5k_hw_init_nfcal_hist(struct ath5k_hw *ah); | ||
1291 | extern int ath5k_hw_phy_calibrate(struct ath5k_hw *ah, struct ieee80211_channel *channel); | 1294 | extern int ath5k_hw_phy_calibrate(struct ath5k_hw *ah, struct ieee80211_channel *channel); |
1292 | extern int ath5k_hw_noise_floor_calibration(struct ath5k_hw *ah, short freq); | 1295 | extern int ath5k_hw_noise_floor_calibration(struct ath5k_hw *ah, short freq); |
1296 | extern s16 ath5k_hw_get_noise_floor(struct ath5k_hw *ah); | ||
1293 | extern void ath5k_hw_calibration_poll(struct ath5k_hw *ah); | 1297 | extern void ath5k_hw_calibration_poll(struct ath5k_hw *ah); |
1294 | /* Spur mitigation */ | 1298 | /* Spur mitigation */ |
1295 | bool ath5k_hw_chan_has_spur_noise(struct ath5k_hw *ah, | 1299 | bool ath5k_hw_chan_has_spur_noise(struct ath5k_hw *ah, |
@@ -1311,35 +1315,21 @@ extern int ath5k_hw_set_txpower_limit(struct ath5k_hw *ah, u8 txpower); | |||
1311 | * Functions used internaly | 1315 | * Functions used internaly |
1312 | */ | 1316 | */ |
1313 | 1317 | ||
1314 | /* | 1318 | static inline struct ath_common *ath5k_hw_common(struct ath5k_hw *ah) |
1315 | * Translate usec to hw clock units | ||
1316 | * TODO: Half/quarter rate | ||
1317 | */ | ||
1318 | static inline unsigned int ath5k_hw_htoclock(unsigned int usec, bool turbo) | ||
1319 | { | 1319 | { |
1320 | return turbo ? (usec * 80) : (usec * 40); | 1320 | return &ah->common; |
1321 | } | 1321 | } |
1322 | 1322 | ||
1323 | /* | 1323 | static inline struct ath_regulatory *ath5k_hw_regulatory(struct ath5k_hw *ah) |
1324 | * Translate hw clock units to usec | ||
1325 | * TODO: Half/quarter rate | ||
1326 | */ | ||
1327 | static inline unsigned int ath5k_hw_clocktoh(unsigned int clock, bool turbo) | ||
1328 | { | 1324 | { |
1329 | return turbo ? (clock / 80) : (clock / 40); | 1325 | return &(ath5k_hw_common(ah)->regulatory); |
1330 | } | 1326 | } |
1331 | 1327 | ||
1332 | /* | ||
1333 | * Read from a register | ||
1334 | */ | ||
1335 | static inline u32 ath5k_hw_reg_read(struct ath5k_hw *ah, u16 reg) | 1328 | static inline u32 ath5k_hw_reg_read(struct ath5k_hw *ah, u16 reg) |
1336 | { | 1329 | { |
1337 | return ioread32(ah->ah_iobase + reg); | 1330 | return ioread32(ah->ah_iobase + reg); |
1338 | } | 1331 | } |
1339 | 1332 | ||
1340 | /* | ||
1341 | * Write to a register | ||
1342 | */ | ||
1343 | static inline void ath5k_hw_reg_write(struct ath5k_hw *ah, u32 val, u16 reg) | 1333 | static inline void ath5k_hw_reg_write(struct ath5k_hw *ah, u32 val, u16 reg) |
1344 | { | 1334 | { |
1345 | iowrite32(val, ah->ah_iobase + reg); | 1335 | iowrite32(val, ah->ah_iobase + reg); |