aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath5k/ath5k.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/ath5k/ath5k.h')
-rw-r--r--drivers/net/wireless/ath5k/ath5k.h170
1 files changed, 80 insertions, 90 deletions
diff --git a/drivers/net/wireless/ath5k/ath5k.h b/drivers/net/wireless/ath5k/ath5k.h
index 69dea3392612..ba35c30d203c 100644
--- a/drivers/net/wireless/ath5k/ath5k.h
+++ b/drivers/net/wireless/ath5k/ath5k.h
@@ -30,7 +30,6 @@
30#include <net/mac80211.h> 30#include <net/mac80211.h>
31 31
32#include "hw.h" 32#include "hw.h"
33#include "regdom.h"
34 33
35/* PCI IDs */ 34/* PCI IDs */
36#define PCI_DEVICE_ID_ATHEROS_AR5210 0x0007 /* AR5210 */ 35#define PCI_DEVICE_ID_ATHEROS_AR5210 0x0007 /* AR5210 */
@@ -141,7 +140,9 @@ enum ath5k_radio {
141 AR5K_RF5110 = 0, 140 AR5K_RF5110 = 0,
142 AR5K_RF5111 = 1, 141 AR5K_RF5111 = 1,
143 AR5K_RF5112 = 2, 142 AR5K_RF5112 = 2,
144 AR5K_RF5413 = 3, 143 AR5K_RF2413 = 3,
144 AR5K_RF5413 = 4,
145 AR5K_RF2425 = 5,
145}; 146};
146 147
147/* 148/*
@@ -169,12 +170,15 @@ struct ath5k_srev_name {
169#define AR5K_SREV_VER_AR5212 0x50 170#define AR5K_SREV_VER_AR5212 0x50
170#define AR5K_SREV_VER_AR5213 0x55 171#define AR5K_SREV_VER_AR5213 0x55
171#define AR5K_SREV_VER_AR5213A 0x59 172#define AR5K_SREV_VER_AR5213A 0x59
172#define AR5K_SREV_VER_AR2424 0xa0 173#define AR5K_SREV_VER_AR2413 0x78
173#define AR5K_SREV_VER_AR5424 0xa3 174#define AR5K_SREV_VER_AR2414 0x79
175#define AR5K_SREV_VER_AR2424 0xa0 /* PCI-E */
176#define AR5K_SREV_VER_AR5424 0xa3 /* PCI-E */
174#define AR5K_SREV_VER_AR5413 0xa4 177#define AR5K_SREV_VER_AR5413 0xa4
175#define AR5K_SREV_VER_AR5414 0xa5 178#define AR5K_SREV_VER_AR5414 0xa5
176#define AR5K_SREV_VER_AR5416 0xc0 /* ? */ 179#define AR5K_SREV_VER_AR5416 0xc0 /* PCI-E */
177#define AR5K_SREV_VER_AR5418 0xca 180#define AR5K_SREV_VER_AR5418 0xca /* PCI-E */
181#define AR5K_SREV_VER_AR2425 0xe2 /* PCI-E */
178 182
179#define AR5K_SREV_RAD_5110 0x00 183#define AR5K_SREV_RAD_5110 0x00
180#define AR5K_SREV_RAD_5111 0x10 184#define AR5K_SREV_RAD_5111 0x10
@@ -184,8 +188,9 @@ struct ath5k_srev_name {
184#define AR5K_SREV_RAD_5112A 0x35 188#define AR5K_SREV_RAD_5112A 0x35
185#define AR5K_SREV_RAD_2112 0x40 189#define AR5K_SREV_RAD_2112 0x40
186#define AR5K_SREV_RAD_2112A 0x45 190#define AR5K_SREV_RAD_2112A 0x45
191#define AR5K_SREV_RAD_SC0 0x56 /* Found on 2413/2414 */
187#define AR5K_SREV_RAD_SC1 0x63 /* Found on 5413/5414 */ 192#define AR5K_SREV_RAD_SC1 0x63 /* Found on 5413/5414 */
188#define AR5K_SREV_RAD_SC2 0xa2 /* Found on 2424/5424 */ 193#define AR5K_SREV_RAD_SC2 0xa2 /* Found on 2424-5/5424 */
189#define AR5K_SREV_RAD_5133 0xc0 /* MIMO found on 5418 */ 194#define AR5K_SREV_RAD_5133 0xc0 /* MIMO found on 5418 */
190 195
191/* IEEE defs */ 196/* IEEE defs */
@@ -251,26 +256,31 @@ struct ath5k_srev_name {
251 */ 256 */
252#define MODULATION_TURBO 0x00000080 257#define MODULATION_TURBO 0x00000080
253 258
254enum ath5k_vendor_mode { 259enum ath5k_driver_mode {
255 MODE_ATHEROS_TURBO = NUM_IEEE80211_MODES+1, 260 AR5K_MODE_11A = 0,
256 MODE_ATHEROS_TURBOG 261 AR5K_MODE_11A_TURBO = 1,
262 AR5K_MODE_11B = 2,
263 AR5K_MODE_11G = 3,
264 AR5K_MODE_11G_TURBO = 4,
265 AR5K_MODE_XR = 0,
266 AR5K_MODE_MAX = 5
257}; 267};
258 268
259/* Number of supported mac80211 enum ieee80211_phymode modes by this driver */
260#define NUM_DRIVER_MODES 3
261
262/* adding this flag to rate_code enables short preamble, see ar5212_reg.h */ 269/* adding this flag to rate_code enables short preamble, see ar5212_reg.h */
263#define AR5K_SET_SHORT_PREAMBLE 0x04 270#define AR5K_SET_SHORT_PREAMBLE 0x04
264 271
265#define HAS_SHPREAMBLE(_ix) (rt->rates[_ix].modulation == IEEE80211_RATE_CCK_2) 272#define HAS_SHPREAMBLE(_ix) \
266#define SHPREAMBLE_FLAG(_ix) (HAS_SHPREAMBLE(_ix) ? AR5K_SET_SHORT_PREAMBLE : 0) 273 (rt->rates[_ix].modulation == IEEE80211_RATE_SHORT_PREAMBLE)
274#define SHPREAMBLE_FLAG(_ix) \
275 (HAS_SHPREAMBLE(_ix) ? AR5K_SET_SHORT_PREAMBLE : 0)
276
267 277
268/****************\ 278/****************\
269 TX DEFINITIONS 279 TX DEFINITIONS
270\****************/ 280\****************/
271 281
272/* 282/*
273 * Tx Descriptor 283 * TX Status
274 */ 284 */
275struct ath5k_tx_status { 285struct ath5k_tx_status {
276 u16 ts_seqnum; 286 u16 ts_seqnum;
@@ -418,7 +428,7 @@ enum ath5k_dmasize {
418\****************/ 428\****************/
419 429
420/* 430/*
421 * Rx Descriptor 431 * RX Status
422 */ 432 */
423struct ath5k_rx_status { 433struct ath5k_rx_status {
424 u16 rs_datalen; 434 u16 rs_datalen;
@@ -440,16 +450,6 @@ struct ath5k_rx_status {
440#define AR5K_RXKEYIX_INVALID ((u8) - 1) 450#define AR5K_RXKEYIX_INVALID ((u8) - 1)
441#define AR5K_TXKEYIX_INVALID ((u32) - 1) 451#define AR5K_TXKEYIX_INVALID ((u32) - 1)
442 452
443struct ath5k_mib_stats {
444 u32 ackrcv_bad;
445 u32 rts_bad;
446 u32 rts_good;
447 u32 fcs_bad;
448 u32 beacons;
449};
450
451
452
453 453
454/**************************\ 454/**************************\
455 BEACON TIMERS DEFINITIONS 455 BEACON TIMERS DEFINITIONS
@@ -492,29 +492,23 @@ struct ath5k_beacon_state {
492#define TSF_TO_TU(_tsf) (u32)((_tsf) >> 10) 492#define TSF_TO_TU(_tsf) (u32)((_tsf) >> 10)
493 493
494 494
495
496/********************\ 495/********************\
497 COMMON DEFINITIONS 496 COMMON DEFINITIONS
498\********************/ 497\********************/
499 498
500/* 499/*
501 * Atheros descriptor 500 * Atheros hardware descriptor
501 * This is read and written to by the hardware
502 */ 502 */
503struct ath5k_desc { 503struct ath5k_desc {
504 u32 ds_link; 504 u32 ds_link; /* physical address of the next descriptor */
505 u32 ds_data; 505 u32 ds_data; /* physical address of data buffer (skb) */
506 u32 ds_ctl0;
507 u32 ds_ctl1;
508 u32 ds_hw[4];
509 506
510 union { 507 union {
511 struct ath5k_rx_status rx; 508 struct ath5k_hw_5210_tx_desc ds_tx5210;
512 struct ath5k_tx_status tx; 509 struct ath5k_hw_5212_tx_desc ds_tx5212;
513 } ds_us; 510 struct ath5k_hw_all_rx_desc ds_rx;
514 511 } ud;
515#define ds_rxstat ds_us.rx
516#define ds_txstat ds_us.tx
517
518} __packed; 512} __packed;
519 513
520#define AR5K_RXDESC_INTREQ 0x0020 514#define AR5K_RXDESC_INTREQ 0x0020
@@ -560,8 +554,8 @@ struct ath5k_desc {
560 * Used internaly in OpenHAL (ar5211.c/ar5212.c 554 * Used internaly in OpenHAL (ar5211.c/ar5212.c
561 * for reset_tx_queue). Also see struct struct ieee80211_channel. 555 * for reset_tx_queue). Also see struct struct ieee80211_channel.
562 */ 556 */
563#define IS_CHAN_XR(_c) ((_c.val & CHANNEL_XR) != 0) 557#define IS_CHAN_XR(_c) ((_c.hw_value & CHANNEL_XR) != 0)
564#define IS_CHAN_B(_c) ((_c.val & CHANNEL_B) != 0) 558#define IS_CHAN_B(_c) ((_c.hw_value & CHANNEL_B) != 0)
565 559
566/* 560/*
567 * The following structure will be used to map 2GHz channels to 561 * The following structure will be used to map 2GHz channels to
@@ -584,7 +578,7 @@ struct ath5k_athchan_2ghz {
584 578
585/** 579/**
586 * struct ath5k_rate - rate structure 580 * struct ath5k_rate - rate structure
587 * @valid: is this a valid rate for the current mode 581 * @valid: is this a valid rate for rate control (remove)
588 * @modulation: respective mac80211 modulation 582 * @modulation: respective mac80211 modulation
589 * @rate_kbps: rate in kbit/s 583 * @rate_kbps: rate in kbit/s
590 * @rate_code: hardware rate value, used in &struct ath5k_desc, on RX on 584 * @rate_code: hardware rate value, used in &struct ath5k_desc, on RX on
@@ -643,47 +637,48 @@ struct ath5k_rate_table {
643 637
644/* 638/*
645 * Rate tables... 639 * Rate tables...
640 * TODO: CLEAN THIS !!!
646 */ 641 */
647#define AR5K_RATES_11A { 8, { \ 642#define AR5K_RATES_11A { 8, { \
648 255, 255, 255, 255, 255, 255, 255, 255, 6, 4, 2, 0, \ 643 255, 255, 255, 255, 255, 255, 255, 255, 6, 4, 2, 0, \
649 7, 5, 3, 1, 255, 255, 255, 255, 255, 255, 255, 255, \ 644 7, 5, 3, 1, 255, 255, 255, 255, 255, 255, 255, 255, \
650 255, 255, 255, 255, 255, 255, 255, 255 }, { \ 645 255, 255, 255, 255, 255, 255, 255, 255 }, { \
651 { 1, IEEE80211_RATE_OFDM, 6000, 11, 140, 0 }, \ 646 { 1, 0, 6000, 11, 140, 0 }, \
652 { 1, IEEE80211_RATE_OFDM, 9000, 15, 18, 0 }, \ 647 { 1, 0, 9000, 15, 18, 0 }, \
653 { 1, IEEE80211_RATE_OFDM, 12000, 10, 152, 2 }, \ 648 { 1, 0, 12000, 10, 152, 2 }, \
654 { 1, IEEE80211_RATE_OFDM, 18000, 14, 36, 2 }, \ 649 { 1, 0, 18000, 14, 36, 2 }, \
655 { 1, IEEE80211_RATE_OFDM, 24000, 9, 176, 4 }, \ 650 { 1, 0, 24000, 9, 176, 4 }, \
656 { 1, IEEE80211_RATE_OFDM, 36000, 13, 72, 4 }, \ 651 { 1, 0, 36000, 13, 72, 4 }, \
657 { 1, IEEE80211_RATE_OFDM, 48000, 8, 96, 4 }, \ 652 { 1, 0, 48000, 8, 96, 4 }, \
658 { 1, IEEE80211_RATE_OFDM, 54000, 12, 108, 4 } } \ 653 { 1, 0, 54000, 12, 108, 4 } } \
659} 654}
660 655
661#define AR5K_RATES_11B { 4, { \ 656#define AR5K_RATES_11B { 4, { \
662 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, \ 657 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, \
663 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, \ 658 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, \
664 3, 2, 1, 0, 255, 255, 255, 255 }, { \ 659 3, 2, 1, 0, 255, 255, 255, 255 }, { \
665 { 1, IEEE80211_RATE_CCK, 1000, 27, 130, 0 }, \ 660 { 1, 0, 1000, 27, 130, 0 }, \
666 { 1, IEEE80211_RATE_CCK_2, 2000, 26, 132, 1 }, \ 661 { 1, IEEE80211_RATE_SHORT_PREAMBLE, 2000, 26, 132, 1 }, \
667 { 1, IEEE80211_RATE_CCK_2, 5500, 25, 139, 1 }, \ 662 { 1, IEEE80211_RATE_SHORT_PREAMBLE, 5500, 25, 139, 1 }, \
668 { 1, IEEE80211_RATE_CCK_2, 11000, 24, 150, 1 } } \ 663 { 1, IEEE80211_RATE_SHORT_PREAMBLE, 11000, 24, 150, 1 } } \
669} 664}
670 665
671#define AR5K_RATES_11G { 12, { \ 666#define AR5K_RATES_11G { 12, { \
672 255, 255, 255, 255, 255, 255, 255, 255, 10, 8, 6, 4, \ 667 255, 255, 255, 255, 255, 255, 255, 255, 10, 8, 6, 4, \
673 11, 9, 7, 5, 255, 255, 255, 255, 255, 255, 255, 255, \ 668 11, 9, 7, 5, 255, 255, 255, 255, 255, 255, 255, 255, \
674 3, 2, 1, 0, 255, 255, 255, 255 }, { \ 669 3, 2, 1, 0, 255, 255, 255, 255 }, { \
675 { 1, IEEE80211_RATE_CCK, 1000, 27, 2, 0 }, \ 670 { 1, 0, 1000, 27, 2, 0 }, \
676 { 1, IEEE80211_RATE_CCK_2, 2000, 26, 4, 1 }, \ 671 { 1, IEEE80211_RATE_SHORT_PREAMBLE, 2000, 26, 4, 1 }, \
677 { 1, IEEE80211_RATE_CCK_2, 5500, 25, 11, 1 }, \ 672 { 1, IEEE80211_RATE_SHORT_PREAMBLE, 5500, 25, 11, 1 }, \
678 { 1, IEEE80211_RATE_CCK_2, 11000, 24, 22, 1 }, \ 673 { 1, IEEE80211_RATE_SHORT_PREAMBLE, 11000, 24, 22, 1 }, \
679 { 0, IEEE80211_RATE_OFDM, 6000, 11, 12, 4 }, \ 674 { 0, 0, 6000, 11, 12, 4 }, \
680 { 0, IEEE80211_RATE_OFDM, 9000, 15, 18, 4 }, \ 675 { 0, 0, 9000, 15, 18, 4 }, \
681 { 1, IEEE80211_RATE_OFDM, 12000, 10, 24, 6 }, \ 676 { 1, 0, 12000, 10, 24, 6 }, \
682 { 1, IEEE80211_RATE_OFDM, 18000, 14, 36, 6 }, \ 677 { 1, 0, 18000, 14, 36, 6 }, \
683 { 1, IEEE80211_RATE_OFDM, 24000, 9, 48, 8 }, \ 678 { 1, 0, 24000, 9, 48, 8 }, \
684 { 1, IEEE80211_RATE_OFDM, 36000, 13, 72, 8 }, \ 679 { 1, 0, 36000, 13, 72, 8 }, \
685 { 1, IEEE80211_RATE_OFDM, 48000, 8, 96, 8 }, \ 680 { 1, 0, 48000, 8, 96, 8 }, \
686 { 1, IEEE80211_RATE_OFDM, 54000, 12, 108, 8 } } \ 681 { 1, 0, 54000, 12, 108, 8 } } \
687} 682}
688 683
689#define AR5K_RATES_TURBO { 8, { \ 684#define AR5K_RATES_TURBO { 8, { \
@@ -708,14 +703,14 @@ struct ath5k_rate_table {
708 { 1, MODULATION_XR, 1000, 2, 139, 1 }, \ 703 { 1, MODULATION_XR, 1000, 2, 139, 1 }, \
709 { 1, MODULATION_XR, 2000, 6, 150, 2 }, \ 704 { 1, MODULATION_XR, 2000, 6, 150, 2 }, \
710 { 1, MODULATION_XR, 3000, 1, 150, 3 }, \ 705 { 1, MODULATION_XR, 3000, 1, 150, 3 }, \
711 { 1, IEEE80211_RATE_OFDM, 6000, 11, 140, 4 }, \ 706 { 1, 0, 6000, 11, 140, 4 }, \
712 { 1, IEEE80211_RATE_OFDM, 9000, 15, 18, 4 }, \ 707 { 1, 0, 9000, 15, 18, 4 }, \
713 { 1, IEEE80211_RATE_OFDM, 12000, 10, 152, 6 }, \ 708 { 1, 0, 12000, 10, 152, 6 }, \
714 { 1, IEEE80211_RATE_OFDM, 18000, 14, 36, 6 }, \ 709 { 1, 0, 18000, 14, 36, 6 }, \
715 { 1, IEEE80211_RATE_OFDM, 24000, 9, 176, 8 }, \ 710 { 1, 0, 24000, 9, 176, 8 }, \
716 { 1, IEEE80211_RATE_OFDM, 36000, 13, 72, 8 }, \ 711 { 1, 0, 36000, 13, 72, 8 }, \
717 { 1, IEEE80211_RATE_OFDM, 48000, 8, 96, 8 }, \ 712 { 1, 0, 48000, 8, 96, 8 }, \
718 { 1, IEEE80211_RATE_OFDM, 54000, 12, 108, 8 } } \ 713 { 1, 0, 54000, 12, 108, 8 } } \
719} 714}
720 715
721/* 716/*
@@ -890,12 +885,14 @@ enum ath5k_capability_type {
890 AR5K_CAP_RFSILENT = 20, /* Supports RFsilent */ 885 AR5K_CAP_RFSILENT = 20, /* Supports RFsilent */
891}; 886};
892 887
888
889/* XXX: we *may* move cap_range stuff to struct wiphy */
893struct ath5k_capabilities { 890struct ath5k_capabilities {
894 /* 891 /*
895 * Supported PHY modes 892 * Supported PHY modes
896 * (ie. CHANNEL_A, CHANNEL_B, ...) 893 * (ie. CHANNEL_A, CHANNEL_B, ...)
897 */ 894 */
898 DECLARE_BITMAP(cap_mode, NUM_DRIVER_MODES); 895 DECLARE_BITMAP(cap_mode, AR5K_MODE_MAX);
899 896
900 /* 897 /*
901 * Frequency range (without regulation restrictions) 898 * Frequency range (without regulation restrictions)
@@ -908,14 +905,6 @@ struct ath5k_capabilities {
908 } cap_range; 905 } cap_range;
909 906
910 /* 907 /*
911 * Active regulation domain settings
912 */
913 struct {
914 enum ath5k_regdom reg_current;
915 enum ath5k_regdom reg_hw;
916 } cap_regdomain;
917
918 /*
919 * Values stored in the EEPROM (some of them...) 908 * Values stored in the EEPROM (some of them...)
920 */ 909 */
921 struct ath5k_eeprom_info cap_eeprom; 910 struct ath5k_eeprom_info cap_eeprom;
@@ -963,6 +952,7 @@ struct ath5k_hw {
963 u16 ah_phy_revision; 952 u16 ah_phy_revision;
964 u16 ah_radio_5ghz_revision; 953 u16 ah_radio_5ghz_revision;
965 u16 ah_radio_2ghz_revision; 954 u16 ah_radio_2ghz_revision;
955 u32 ah_phy_spending;
966 956
967 enum ath5k_version ah_version; 957 enum ath5k_version ah_version;
968 enum ath5k_radio ah_radio; 958 enum ath5k_radio ah_radio;
@@ -1038,8 +1028,10 @@ struct ath5k_hw {
1038 int (*ah_setup_xtx_desc)(struct ath5k_hw *, struct ath5k_desc *, 1028 int (*ah_setup_xtx_desc)(struct ath5k_hw *, struct ath5k_desc *,
1039 unsigned int, unsigned int, unsigned int, unsigned int, 1029 unsigned int, unsigned int, unsigned int, unsigned int,
1040 unsigned int, unsigned int); 1030 unsigned int, unsigned int);
1041 int (*ah_proc_tx_desc)(struct ath5k_hw *, struct ath5k_desc *); 1031 int (*ah_proc_tx_desc)(struct ath5k_hw *, struct ath5k_desc *,
1042 int (*ah_proc_rx_desc)(struct ath5k_hw *, struct ath5k_desc *); 1032 struct ath5k_tx_status *);
1033 int (*ah_proc_rx_desc)(struct ath5k_hw *, struct ath5k_desc *,
1034 struct ath5k_rx_status *);
1043}; 1035};
1044 1036
1045/* 1037/*
@@ -1070,6 +1062,7 @@ extern int ath5k_hw_update_tx_triglevel(struct ath5k_hw *ah, bool increase);
1070extern bool ath5k_hw_is_intr_pending(struct ath5k_hw *ah); 1062extern bool ath5k_hw_is_intr_pending(struct ath5k_hw *ah);
1071extern int ath5k_hw_get_isr(struct ath5k_hw *ah, enum ath5k_int *interrupt_mask); 1063extern int ath5k_hw_get_isr(struct ath5k_hw *ah, enum ath5k_int *interrupt_mask);
1072extern enum ath5k_int ath5k_hw_set_intr(struct ath5k_hw *ah, enum ath5k_int new_mask); 1064extern enum ath5k_int ath5k_hw_set_intr(struct ath5k_hw *ah, enum ath5k_int new_mask);
1065extern void ath5k_hw_update_mib_counters(struct ath5k_hw *ah, struct ieee80211_low_level_stats *stats);
1073/* EEPROM access functions */ 1066/* EEPROM access functions */
1074extern int ath5k_hw_set_regdomain(struct ath5k_hw *ah, u16 regdomain); 1067extern int ath5k_hw_set_regdomain(struct ath5k_hw *ah, u16 regdomain);
1075/* Protocol Control Unit Functions */ 1068/* Protocol Control Unit Functions */
@@ -1098,7 +1091,6 @@ extern int ath5k_hw_set_beacon_timers(struct ath5k_hw *ah, const struct ath5k_be
1098extern void ath5k_hw_reset_beacon(struct ath5k_hw *ah); 1091extern void ath5k_hw_reset_beacon(struct ath5k_hw *ah);
1099extern int ath5k_hw_beaconq_finish(struct ath5k_hw *ah, unsigned long phys_addr); 1092extern int ath5k_hw_beaconq_finish(struct ath5k_hw *ah, unsigned long phys_addr);
1100#endif 1093#endif
1101extern void ath5k_hw_update_mib_counters(struct ath5k_hw *ah, struct ath5k_mib_stats *statistics);
1102/* ACK bit rate */ 1094/* ACK bit rate */
1103void ath5k_hw_set_ack_bitrate_high(struct ath5k_hw *ah, bool high); 1095void ath5k_hw_set_ack_bitrate_high(struct ath5k_hw *ah, bool high);
1104/* ACK/CTS Timeouts */ 1096/* ACK/CTS Timeouts */
@@ -1129,8 +1121,6 @@ extern int ath5k_hw_set_gpio_input(struct ath5k_hw *ah, u32 gpio);
1129extern u32 ath5k_hw_get_gpio(struct ath5k_hw *ah, u32 gpio); 1121extern u32 ath5k_hw_get_gpio(struct ath5k_hw *ah, u32 gpio);
1130extern int ath5k_hw_set_gpio(struct ath5k_hw *ah, u32 gpio, u32 val); 1122extern int ath5k_hw_set_gpio(struct ath5k_hw *ah, u32 gpio, u32 val);
1131extern void ath5k_hw_set_gpio_intr(struct ath5k_hw *ah, unsigned int gpio, u32 interrupt_level); 1123extern void ath5k_hw_set_gpio_intr(struct ath5k_hw *ah, unsigned int gpio, u32 interrupt_level);
1132/* Regulatory Domain/Channels Setup */
1133extern u16 ath5k_get_regdomain(struct ath5k_hw *ah);
1134/* Misc functions */ 1124/* Misc functions */
1135extern int ath5k_hw_get_capability(struct ath5k_hw *ah, enum ath5k_capability_type cap_type, u32 capability, u32 *result); 1125extern int ath5k_hw_get_capability(struct ath5k_hw *ah, enum ath5k_capability_type cap_type, u32 capability, u32 *result);
1136 1126