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 | |
54f10b05 RM |
39 | #define AR9300_NUM_BT_WEIGHTS 4 |
40 | #define AR9300_NUM_WLAN_WEIGHTS 4 | |
978f78bf VN |
41 | /* Defines the BT AR_BT_COEX_WGHT used */ |
42 | enum ath_stomp_type { | |
978f78bf VN |
43 | ATH_BTCOEX_STOMP_ALL, |
44 | ATH_BTCOEX_STOMP_LOW, | |
54f10b05 | 45 | ATH_BTCOEX_STOMP_NONE, |
8227bf45 | 46 | ATH_BTCOEX_STOMP_LOW_FTP, |
54f10b05 | 47 | ATH_BTCOEX_STOMP_MAX |
978f78bf VN |
48 | }; |
49 | ||
22f25d0d VT |
50 | enum ath_btcoex_scheme { |
51 | ATH_BTCOEX_CFG_NONE, | |
52 | ATH_BTCOEX_CFG_2WIRE, | |
53 | ATH_BTCOEX_CFG_3WIRE, | |
54 | }; | |
55 | ||
6af24c49 MSS |
56 | struct ath9k_hw_mci { |
57 | u32 raw_intr; | |
58 | u32 rx_msg_intr; | |
59 | u32 cont_status; | |
60 | u32 gpm_addr; | |
61 | u32 gpm_len; | |
62 | u32 gpm_idx; | |
63 | u32 sched_addr; | |
64 | u32 wlan_channels[4]; | |
65 | u32 wlan_cal_seq; | |
66 | u32 wlan_cal_done; | |
67 | u32 config; | |
68 | u8 *gpm_buf; | |
6af24c49 MSS |
69 | bool ready; |
70 | bool update_2g5g; | |
71 | bool is_2g; | |
72 | bool query_bt; | |
73 | bool unhalt_bt_gpm; /* need send UNHALT */ | |
74 | bool halted_bt_gpm; /* HALT sent */ | |
75 | bool need_flush_btinfo; | |
76 | bool bt_version_known; | |
77 | bool wlan_channels_update; | |
78 | u8 wlan_ver_major; | |
79 | u8 wlan_ver_minor; | |
80 | u8 bt_ver_major; | |
81 | u8 bt_ver_minor; | |
82 | u8 bt_state; | |
83 | }; | |
84 | ||
766ec4a9 | 85 | struct ath_btcoex_hw { |
46289e1e | 86 | enum ath_btcoex_scheme scheme; |
6af24c49 | 87 | struct ath9k_hw_mci mci; |
8c1b3954 | 88 | bool enabled; |
f14462c6 VT |
89 | u8 wlanactive_gpio; |
90 | u8 btactive_gpio; | |
1773912b | 91 | u8 btpriority_gpio; |
1773912b VT |
92 | u32 bt_coex_mode; /* Register setting for AR_BT_COEX_MODE */ |
93 | u32 bt_coex_weights; /* Register setting for AR_BT_COEX_WEIGHT */ | |
94 | u32 bt_coex_mode2; /* Register setting for AR_BT_COEX_MODE2 */ | |
54f10b05 RM |
95 | u32 bt_weight[AR9300_NUM_BT_WEIGHTS]; |
96 | u32 wlan_weight[AR9300_NUM_WLAN_WEIGHTS]; | |
f14462c6 VT |
97 | }; |
98 | ||
d68475de | 99 | void ath9k_hw_btcoex_init_scheme(struct ath_hw *ah); |
75d7839f LR |
100 | void ath9k_hw_btcoex_init_2wire(struct ath_hw *ah); |
101 | void ath9k_hw_btcoex_init_3wire(struct ath_hw *ah); | |
d3c83ac1 | 102 | void ath9k_hw_btcoex_init_mci(struct ath_hw *ah); |
766ec4a9 | 103 | void ath9k_hw_init_btcoex_hw(struct ath_hw *ah, int qnum); |
5e197292 LR |
104 | void ath9k_hw_btcoex_set_weight(struct ath_hw *ah, |
105 | u32 bt_weight, | |
106 | u32 wlan_weight); | |
17d50d1d | 107 | void ath9k_hw_btcoex_disable(struct ath_hw *ah); |
978f78bf VN |
108 | void ath9k_hw_btcoex_bt_stomp(struct ath_hw *ah, |
109 | enum ath_stomp_type stomp_type); | |
2e20250a | 110 | |
17d50d1d | 111 | #endif |