]>
Commit | Line | Data |
---|---|---|
17d50d1d | 1 | /* |
5b68138e | 2 | * Copyright (c) 2009-2011 Atheros Communications Inc. |
17d50d1d VT |
3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | |
5 | * purpose with or without fee is hereby granted, provided that the above | |
6 | * copyright notice and this permission notice appear in all copies. | |
7 | * | |
8 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
9 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
10 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
11 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
12 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
13 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
14 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
15 | */ | |
16 | ||
17 | #ifndef BTCOEX_H | |
18 | #define BTCOEX_H | |
19 | ||
af03abec LR |
20 | #include "hw.h" |
21 | ||
a6ef530f VN |
22 | #define ATH_WLANACTIVE_GPIO_9280 5 |
23 | #define ATH_BTACTIVE_GPIO_9280 6 | |
24 | #define ATH_BTPRIORITY_GPIO_9285 7 | |
25 | ||
26 | #define ATH_WLANACTIVE_GPIO_9300 5 | |
27 | #define ATH_BTACTIVE_GPIO_9300 4 | |
28 | #define ATH_BTPRIORITY_GPIO_9300 8 | |
f14462c6 | 29 | |
1773912b VT |
30 | #define ATH_BTCOEX_DEF_BT_PERIOD 45 |
31 | #define ATH_BTCOEX_DEF_DUTY_CYCLE 55 | |
58da1318 | 32 | #define ATH_BTCOEX_BTSCAN_DUTY_CYCLE 90 |
1773912b VT |
33 | #define ATH_BTCOEX_BMISS_THRESH 50 |
34 | ||
35 | #define ATH_BT_PRIORITY_TIME_THRESHOLD 1000 /* ms */ | |
36 | #define ATH_BT_CNT_THRESHOLD 3 | |
58da1318 | 37 | #define ATH_BT_CNT_SCAN_THRESHOLD 15 |
1773912b | 38 | |
6995fb80 RM |
39 | #define ATH_BTCOEX_RX_WAIT_TIME 100 |
40 | #define ATH_BTCOEX_STOMP_FTP_THRESH 5 | |
41 | ||
e82cb03f RM |
42 | #define ATH_BTCOEX_HT20_MAX_TXPOWER 0x14 |
43 | #define ATH_BTCOEX_HT40_MAX_TXPOWER 0x10 | |
44 | ||
54f10b05 RM |
45 | #define AR9300_NUM_BT_WEIGHTS 4 |
46 | #define AR9300_NUM_WLAN_WEIGHTS 4 | |
d3f193ee SM |
47 | |
48 | #define ATH_AIC_MAX_BT_CHANNEL 79 | |
49 | ||
978f78bf VN |
50 | /* Defines the BT AR_BT_COEX_WGHT used */ |
51 | enum ath_stomp_type { | |
978f78bf VN |
52 | ATH_BTCOEX_STOMP_ALL, |
53 | ATH_BTCOEX_STOMP_LOW, | |
54f10b05 | 54 | ATH_BTCOEX_STOMP_NONE, |
8227bf45 | 55 | ATH_BTCOEX_STOMP_LOW_FTP, |
2884561a | 56 | ATH_BTCOEX_STOMP_AUDIO, |
54f10b05 | 57 | ATH_BTCOEX_STOMP_MAX |
978f78bf VN |
58 | }; |
59 | ||
22f25d0d VT |
60 | enum ath_btcoex_scheme { |
61 | ATH_BTCOEX_CFG_NONE, | |
62 | ATH_BTCOEX_CFG_2WIRE, | |
63 | ATH_BTCOEX_CFG_3WIRE, | |
e1ff147d | 64 | ATH_BTCOEX_CFG_MCI, |
22f25d0d VT |
65 | }; |
66 | ||
6af24c49 MSS |
67 | struct ath9k_hw_mci { |
68 | u32 raw_intr; | |
69 | u32 rx_msg_intr; | |
70 | u32 cont_status; | |
71 | u32 gpm_addr; | |
72 | u32 gpm_len; | |
73 | u32 gpm_idx; | |
74 | u32 sched_addr; | |
75 | u32 wlan_channels[4]; | |
76 | u32 wlan_cal_seq; | |
77 | u32 wlan_cal_done; | |
78 | u32 config; | |
79 | u8 *gpm_buf; | |
6af24c49 MSS |
80 | bool ready; |
81 | bool update_2g5g; | |
82 | bool is_2g; | |
83 | bool query_bt; | |
84 | bool unhalt_bt_gpm; /* need send UNHALT */ | |
85 | bool halted_bt_gpm; /* HALT sent */ | |
86 | bool need_flush_btinfo; | |
87 | bool bt_version_known; | |
88 | bool wlan_channels_update; | |
89 | u8 wlan_ver_major; | |
90 | u8 wlan_ver_minor; | |
91 | u8 bt_ver_major; | |
92 | u8 bt_ver_minor; | |
93 | u8 bt_state; | |
6995fb80 | 94 | u8 stomp_ftp; |
db60428b | 95 | bool concur_tx; |
2097fdd7 | 96 | u32 last_recovery; |
6af24c49 MSS |
97 | }; |
98 | ||
d3f193ee SM |
99 | struct ath9k_hw_aic { |
100 | bool aic_enabled; | |
101 | u8 aic_cal_state; | |
102 | u8 aic_caled_chan; | |
103 | u32 aic_sram[ATH_AIC_MAX_BT_CHANNEL]; | |
104 | u32 aic_cal_start_time; | |
105 | }; | |
106 | ||
766ec4a9 | 107 | struct ath_btcoex_hw { |
46289e1e | 108 | enum ath_btcoex_scheme scheme; |
6af24c49 | 109 | struct ath9k_hw_mci mci; |
b6ab9ae2 | 110 | struct ath9k_hw_aic aic; |
8c1b3954 | 111 | bool enabled; |
f14462c6 VT |
112 | u8 wlanactive_gpio; |
113 | u8 btactive_gpio; | |
1773912b | 114 | u8 btpriority_gpio; |
1773912b VT |
115 | u32 bt_coex_mode; /* Register setting for AR_BT_COEX_MODE */ |
116 | u32 bt_coex_weights; /* Register setting for AR_BT_COEX_WEIGHT */ | |
117 | u32 bt_coex_mode2; /* Register setting for AR_BT_COEX_MODE2 */ | |
c7212b71 | 118 | u32 bt_coex_mode3; /* Register setting for AR_BT_COEX_MODE3 */ |
54f10b05 RM |
119 | u32 bt_weight[AR9300_NUM_BT_WEIGHTS]; |
120 | u32 wlan_weight[AR9300_NUM_WLAN_WEIGHTS]; | |
db60428b | 121 | u8 tx_prio[ATH_BTCOEX_STOMP_MAX]; |
f14462c6 VT |
122 | }; |
123 | ||
d68475de | 124 | void ath9k_hw_btcoex_init_scheme(struct ath_hw *ah); |
75d7839f LR |
125 | void ath9k_hw_btcoex_init_2wire(struct ath_hw *ah); |
126 | void ath9k_hw_btcoex_init_3wire(struct ath_hw *ah); | |
db222190 | 127 | void ath9k_hw_btcoex_deinit(struct ath_hw *ah); |
d3c83ac1 | 128 | void ath9k_hw_btcoex_init_mci(struct ath_hw *ah); |
766ec4a9 | 129 | void ath9k_hw_init_btcoex_hw(struct ath_hw *ah, int qnum); |
5e197292 LR |
130 | void ath9k_hw_btcoex_set_weight(struct ath_hw *ah, |
131 | u32 bt_weight, | |
5160b46f SM |
132 | u32 wlan_weight, |
133 | enum ath_stomp_type stomp_type); | |
17d50d1d | 134 | void ath9k_hw_btcoex_disable(struct ath_hw *ah); |
978f78bf VN |
135 | void ath9k_hw_btcoex_bt_stomp(struct ath_hw *ah, |
136 | enum ath_stomp_type stomp_type); | |
db60428b | 137 | void ath9k_hw_btcoex_set_concur_txprio(struct ath_hw *ah, u8 *stomp_txprio); |
2e20250a | 138 | |
17d50d1d | 139 | #endif |