halbtcoutsrc.h revision dbb30ebeefaf01121b32ae6b5baf29524f3a0b30
1/****************************************************************************** 2 * 3 * Copyright(c) 2009-2012 Realtek Corporation. 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of version 2 of the GNU General Public License as 7 * published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12 * more details. 13 * 14 * The full GNU General Public License is included in this distribution in the 15 * file called LICENSE. 16 * 17 * Contact Information: 18 * wlanfae <wlanfae@realtek.com> 19 * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park, 20 * Hsinchu 300, Taiwan. 21 * 22 * Larry Finger <Larry.Finger@lwfinger.net> 23 * 24 *****************************************************************************/ 25#ifndef __HALBTC_OUT_SRC_H__ 26#define __HALBTC_OUT_SRC_H__ 27 28#include "../wifi.h" 29 30#define NORMAL_EXEC false 31#define FORCE_EXEC true 32 33#define BTC_RF_A RF90_PATH_A 34#define BTC_RF_B RF90_PATH_B 35#define BTC_RF_C RF90_PATH_C 36#define BTC_RF_D RF90_PATH_D 37 38#define BTC_SMSP SINGLEMAC_SINGLEPHY 39#define BTC_DMDP DUALMAC_DUALPHY 40#define BTC_DMSP DUALMAC_SINGLEPHY 41#define BTC_MP_UNKNOWN 0xff 42 43#define IN 44#define OUT 45 46#define BT_TMP_BUF_SIZE 100 47 48#define BT_COEX_ANT_TYPE_PG 0 49#define BT_COEX_ANT_TYPE_ANTDIV 1 50#define BT_COEX_ANT_TYPE_DETECTED 2 51 52#define BTC_MIMO_PS_STATIC 0 53#define BTC_MIMO_PS_DYNAMIC 1 54 55#define BTC_RATE_DISABLE 0 56#define BTC_RATE_ENABLE 1 57 58/* single Antenna definition */ 59#define BTC_ANT_PATH_WIFI 0 60#define BTC_ANT_PATH_BT 1 61#define BTC_ANT_PATH_PTA 2 62/* dual Antenna definition */ 63#define BTC_ANT_WIFI_AT_MAIN 0 64#define BTC_ANT_WIFI_AT_AUX 1 65/* coupler Antenna definition */ 66#define BTC_ANT_WIFI_AT_CPL_MAIN 0 67#define BTC_ANT_WIFI_AT_CPL_AUX 1 68 69enum btc_chip_interface { 70 BTC_INTF_UNKNOWN = 0, 71 BTC_INTF_PCI = 1, 72 BTC_INTF_USB = 2, 73 BTC_INTF_SDIO = 3, 74 BTC_INTF_GSPI = 4, 75 BTC_INTF_MAX 76}; 77 78enum btc_chip_type { 79 BTC_CHIP_UNDEF = 0, 80 BTC_CHIP_CSR_BC4 = 1, 81 BTC_CHIP_CSR_BC8 = 2, 82 BTC_CHIP_RTL8723A = 3, 83 BTC_CHIP_RTL8821 = 4, 84 BTC_CHIP_RTL8723B = 5, 85 BTC_CHIP_MAX 86}; 87 88enum btc_msg_type { 89 BTC_MSG_INTERFACE = 0x0, 90 BTC_MSG_ALGORITHM = 0x1, 91 BTC_MSG_MAX 92}; 93 94extern u32 btc_dbg_type[]; 95 96/* following is for BTC_MSG_INTERFACE */ 97#define INTF_INIT BIT0 98#define INTF_NOTIFY BIT2 99 100/* following is for BTC_ALGORITHM */ 101#define ALGO_BT_RSSI_STATE BIT0 102#define ALGO_WIFI_RSSI_STATE BIT1 103#define ALGO_BT_MONITOR BIT2 104#define ALGO_TRACE BIT3 105#define ALGO_TRACE_FW BIT4 106#define ALGO_TRACE_FW_DETAIL BIT5 107#define ALGO_TRACE_FW_EXEC BIT6 108#define ALGO_TRACE_SW BIT7 109#define ALGO_TRACE_SW_DETAIL BIT8 110#define ALGO_TRACE_SW_EXEC BIT9 111 112/* following is for wifi link status */ 113#define WIFI_STA_CONNECTED BIT0 114#define WIFI_AP_CONNECTED BIT1 115#define WIFI_HS_CONNECTED BIT2 116#define WIFI_P2P_GO_CONNECTED BIT3 117#define WIFI_P2P_GC_CONNECTED BIT4 118 119#define CL_SPRINTF snprintf 120#define CL_PRINTF printk 121 122#define BTC_PRINT(dbgtype, dbgflag, printstr, ...) \ 123 do { \ 124 if (unlikely(btc_dbg_type[dbgtype] & dbgflag)) {\ 125 printk(printstr, ##__VA_ARGS__); \ 126 } \ 127 } while (0) 128 129#define BTC_RSSI_HIGH(_rssi_) \ 130 ((_rssi_ == BTC_RSSI_STATE_HIGH || \ 131 _rssi_ == BTC_RSSI_STATE_STAY_HIGH) ? true : false) 132#define BTC_RSSI_MEDIUM(_rssi_) \ 133 ((_rssi_ == BTC_RSSI_STATE_MEDIUM || \ 134 _rssi_ == BTC_RSSI_STATE_STAY_MEDIUM) ? true : false) 135#define BTC_RSSI_LOW(_rssi_) \ 136 ((_rssi_ == BTC_RSSI_STATE_LOW || \ 137 _rssi_ == BTC_RSSI_STATE_STAY_LOW) ? true : false) 138 139enum btc_power_save_type { 140 BTC_PS_WIFI_NATIVE = 0, 141 BTC_PS_LPS_ON = 1, 142 BTC_PS_LPS_OFF = 2, 143 BTC_PS_LPS_MAX 144}; 145 146struct btc_board_info { 147 /* The following is some board information */ 148 u8 bt_chip_type; 149 u8 pg_ant_num; /* pg ant number */ 150 u8 btdm_ant_num; /* ant number for btdm */ 151 u8 btdm_ant_pos; 152 bool bt_exist; 153}; 154 155enum btc_dbg_opcode { 156 BTC_DBG_SET_COEX_NORMAL = 0x0, 157 BTC_DBG_SET_COEX_WIFI_ONLY = 0x1, 158 BTC_DBG_SET_COEX_BT_ONLY = 0x2, 159 BTC_DBG_MAX 160}; 161 162enum btc_rssi_state { 163 BTC_RSSI_STATE_HIGH = 0x0, 164 BTC_RSSI_STATE_MEDIUM = 0x1, 165 BTC_RSSI_STATE_LOW = 0x2, 166 BTC_RSSI_STATE_STAY_HIGH = 0x3, 167 BTC_RSSI_STATE_STAY_MEDIUM = 0x4, 168 BTC_RSSI_STATE_STAY_LOW = 0x5, 169 BTC_RSSI_MAX 170}; 171 172enum btc_wifi_role { 173 BTC_ROLE_STATION = 0x0, 174 BTC_ROLE_AP = 0x1, 175 BTC_ROLE_IBSS = 0x2, 176 BTC_ROLE_HS_MODE = 0x3, 177 BTC_ROLE_MAX 178}; 179 180enum btc_wifi_bw_mode { 181 BTC_WIFI_BW_LEGACY = 0x0, 182 BTC_WIFI_BW_HT20 = 0x1, 183 BTC_WIFI_BW_HT40 = 0x2, 184 BTC_WIFI_BW_MAX 185}; 186 187enum btc_wifi_traffic_dir { 188 BTC_WIFI_TRAFFIC_TX = 0x0, 189 BTC_WIFI_TRAFFIC_RX = 0x1, 190 BTC_WIFI_TRAFFIC_MAX 191}; 192 193enum btc_wifi_pnp { 194 BTC_WIFI_PNP_WAKE_UP = 0x0, 195 BTC_WIFI_PNP_SLEEP = 0x1, 196 BTC_WIFI_PNP_MAX 197}; 198 199enum btc_get_type { 200 /* type bool */ 201 BTC_GET_BL_HS_OPERATION, 202 BTC_GET_BL_HS_CONNECTING, 203 BTC_GET_BL_WIFI_CONNECTED, 204 BTC_GET_BL_WIFI_BUSY, 205 BTC_GET_BL_WIFI_SCAN, 206 BTC_GET_BL_WIFI_LINK, 207 BTC_GET_BL_WIFI_DHCP, 208 BTC_GET_BL_WIFI_SOFTAP_IDLE, 209 BTC_GET_BL_WIFI_SOFTAP_LINKING, 210 BTC_GET_BL_WIFI_IN_EARLY_SUSPEND, 211 BTC_GET_BL_WIFI_ROAM, 212 BTC_GET_BL_WIFI_4_WAY_PROGRESS, 213 BTC_GET_BL_WIFI_UNDER_5G, 214 BTC_GET_BL_WIFI_AP_MODE_ENABLE, 215 BTC_GET_BL_WIFI_ENABLE_ENCRYPTION, 216 BTC_GET_BL_WIFI_UNDER_B_MODE, 217 BTC_GET_BL_EXT_SWITCH, 218 219 /* type s4Byte */ 220 BTC_GET_S4_WIFI_RSSI, 221 BTC_GET_S4_HS_RSSI, 222 223 /* type u32 */ 224 BTC_GET_U4_WIFI_BW, 225 BTC_GET_U4_WIFI_TRAFFIC_DIRECTION, 226 BTC_GET_U4_WIFI_FW_VER, 227 BTC_GET_U4_WIFI_LINK_STATUS, 228 BTC_GET_U4_BT_PATCH_VER, 229 230 /* type u1Byte */ 231 BTC_GET_U1_WIFI_DOT11_CHNL, 232 BTC_GET_U1_WIFI_CENTRAL_CHNL, 233 BTC_GET_U1_WIFI_HS_CHNL, 234 BTC_GET_U1_MAC_PHY_MODE, 235 BTC_GET_U1_AP_NUM, 236 237 /* for 1Ant */ 238 BTC_GET_U1_LPS_MODE, 239 BTC_GET_BL_BT_SCO_BUSY, 240 241 /* for test mode */ 242 BTC_GET_DRIVER_TEST_CFG, 243 BTC_GET_MAX 244}; 245 246enum btc_set_type { 247 /* type bool */ 248 BTC_SET_BL_BT_DISABLE, 249 BTC_SET_BL_BT_TRAFFIC_BUSY, 250 BTC_SET_BL_BT_LIMITED_DIG, 251 BTC_SET_BL_FORCE_TO_ROAM, 252 BTC_SET_BL_TO_REJ_AP_AGG_PKT, 253 BTC_SET_BL_BT_CTRL_AGG_SIZE, 254 BTC_SET_BL_INC_SCAN_DEV_NUM, 255 256 /* type u1Byte */ 257 BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON, 258 BTC_SET_UI_SCAN_SIG_COMPENSATION, 259 BTC_SET_U1_AGG_BUF_SIZE, 260 261 /* type trigger some action */ 262 BTC_SET_ACT_GET_BT_RSSI, 263 BTC_SET_ACT_AGGREGATE_CTRL, 264 265 /********* for 1Ant **********/ 266 /* type bool */ 267 BTC_SET_BL_BT_SCO_BUSY, 268 /* type u1Byte */ 269 BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE, 270 BTC_SET_U1_LPS_VAL, 271 BTC_SET_U1_RPWM_VAL, 272 BTC_SET_U1_1ANT_LPS, 273 BTC_SET_U1_1ANT_RPWM, 274 /* type trigger some action */ 275 BTC_SET_ACT_LEAVE_LPS, 276 BTC_SET_ACT_ENTER_LPS, 277 BTC_SET_ACT_NORMAL_LPS, 278 BTC_SET_ACT_INC_FORCE_EXEC_PWR_CMD_CNT, 279 BTC_SET_ACT_DISABLE_LOW_POWER, 280 BTC_SET_ACT_UPDATE_ra_mask, 281 BTC_SET_ACT_SEND_MIMO_PS, 282 /* BT Coex related */ 283 BTC_SET_ACT_CTRL_BT_INFO, 284 BTC_SET_ACT_CTRL_BT_COEX, 285 /***************************/ 286 BTC_SET_MAX 287}; 288 289enum btc_dbg_disp_type { 290 BTC_DBG_DISP_COEX_STATISTICS = 0x0, 291 BTC_DBG_DISP_BT_LINK_INFO = 0x1, 292 BTC_DBG_DISP_BT_FW_VER = 0x2, 293 BTC_DBG_DISP_FW_PWR_MODE_CMD = 0x3, 294 BTC_DBG_DISP_MAX 295}; 296 297enum btc_notify_type_ips { 298 BTC_IPS_LEAVE = 0x0, 299 BTC_IPS_ENTER = 0x1, 300 BTC_IPS_MAX 301}; 302 303enum btc_notify_type_lps { 304 BTC_LPS_DISABLE = 0x0, 305 BTC_LPS_ENABLE = 0x1, 306 BTC_LPS_MAX 307}; 308 309enum btc_notify_type_scan { 310 BTC_SCAN_FINISH = 0x0, 311 BTC_SCAN_START = 0x1, 312 BTC_SCAN_MAX 313}; 314 315enum btc_notify_type_associate { 316 BTC_ASSOCIATE_FINISH = 0x0, 317 BTC_ASSOCIATE_START = 0x1, 318 BTC_ASSOCIATE_MAX 319}; 320 321enum btc_notify_type_media_status { 322 BTC_MEDIA_DISCONNECT = 0x0, 323 BTC_MEDIA_CONNECT = 0x1, 324 BTC_MEDIA_MAX 325}; 326 327enum btc_notify_type_special_packet { 328 BTC_PACKET_UNKNOWN = 0x0, 329 BTC_PACKET_DHCP = 0x1, 330 BTC_PACKET_ARP = 0x2, 331 BTC_PACKET_EAPOL = 0x3, 332 BTC_PACKET_MAX 333}; 334 335enum hci_ext_bt_operation { 336 HCI_BT_OP_NONE = 0x0, 337 HCI_BT_OP_INQUIRY_START = 0x1, 338 HCI_BT_OP_INQUIRY_FINISH = 0x2, 339 HCI_BT_OP_PAGING_START = 0x3, 340 HCI_BT_OP_PAGING_SUCCESS = 0x4, 341 HCI_BT_OP_PAGING_UNSUCCESS = 0x5, 342 HCI_BT_OP_PAIRING_START = 0x6, 343 HCI_BT_OP_PAIRING_FINISH = 0x7, 344 HCI_BT_OP_BT_DEV_ENABLE = 0x8, 345 HCI_BT_OP_BT_DEV_DISABLE = 0x9, 346 HCI_BT_OP_MAX 347}; 348 349enum btc_notify_type_stack_operation { 350 BTC_STACK_OP_NONE = 0x0, 351 BTC_STACK_OP_INQ_PAGE_PAIR_START = 0x1, 352 BTC_STACK_OP_INQ_PAGE_PAIR_FINISH = 0x2, 353 BTC_STACK_OP_MAX 354}; 355 356typedef u8 (*bfp_btc_r1)(void *btc_context, u32 reg_addr); 357 358typedef u16 (*bfp_btc_r2)(void *btc_context, u32 reg_addr); 359 360typedef u32 (*bfp_btc_r4)(void *btc_context, u32 reg_addr); 361 362typedef void (*bfp_btc_w1)(void *btc_context, u32 reg_addr, u32 data); 363 364typedef void (*bfp_btc_w1_bit_mak)(void *btc_context, u32 reg_addr, 365 u8 bit_mask, u8 data1b); 366 367typedef void (*bfp_btc_w2)(void *btc_context, u32 reg_addr, u16 data); 368 369typedef void (*bfp_btc_w4)(void *btc_context, u32 reg_addr, u32 data); 370 371typedef void (*bfp_btc_wr_1byte_bit_mask)(void *btc_context, u32 reg_addr, 372 u8 bit_mask, u8 data); 373 374typedef void (*bfp_btc_set_bb_reg)(void *btc_context, u32 reg_addr, 375 u32 bit_mask, u32 data); 376 377typedef u32 (*bfp_btc_get_bb_reg)(void *btc_context, u32 reg_addr, 378 u32 bit_mask); 379 380typedef void (*bfp_btc_set_rf_reg)(void *btc_context, u8 rf_path, u32 reg_addr, 381 u32 bit_mask, u32 data); 382 383typedef u32 (*bfp_btc_get_rf_reg)(void *btc_context, u8 rf_path, 384 u32 reg_addr, u32 bit_mask); 385 386typedef void (*bfp_btc_fill_h2c)(void *btc_context, u8 element_id, 387 u32 cmd_len, u8 *cmd_buffer); 388 389typedef bool (*bfp_btc_get)(void *btcoexist, u8 get_type, void *out_buf); 390 391typedef bool (*bfp_btc_set)(void *btcoexist, u8 set_type, void *in_buf); 392 393typedef void (*bfp_btc_disp_dbg_msg)(void *btcoexist, u8 disp_type); 394 395struct btc_bt_info { 396 bool bt_disabled; 397 u8 rssi_adjust_for_agc_table_on; 398 u8 rssi_adjust_for_1ant_coex_type; 399 bool bt_busy; 400 u8 agg_buf_size; 401 bool limited_dig; 402 bool reject_agg_pkt; 403 bool bt_ctrl_buf_size; 404 bool increase_scan_dev_num; 405 u16 bt_hci_ver; 406 u16 bt_real_fw_ver; 407 u8 bt_fw_ver; 408 409 bool bt_disable_low_pwr; 410 411 /* the following is for 1Ant solution */ 412 bool bt_ctrl_lps; 413 bool bt_pwr_save_mode; 414 bool bt_lps_on; 415 bool force_to_roam; 416 u8 force_exec_pwr_cmd_cnt; 417 u8 lps_val; 418 u8 rpwm_val; 419 u32 ra_mask; 420}; 421 422struct btc_stack_info { 423 bool profile_notified; 424 u16 hci_version; /* stack hci version */ 425 u8 num_of_link; 426 bool bt_link_exist; 427 bool sco_exist; 428 bool acl_exist; 429 bool a2dp_exist; 430 bool hid_exist; 431 u8 num_of_hid; 432 bool pan_exist; 433 bool unknown_acl_exist; 434 char min_bt_rssi; 435}; 436 437struct btc_statistics { 438 u32 cnt_bind; 439 u32 cnt_init_hw_config; 440 u32 cnt_init_coex_dm; 441 u32 cnt_ips_notify; 442 u32 cnt_lps_notify; 443 u32 cnt_scan_notify; 444 u32 cnt_connect_notify; 445 u32 cnt_media_status_notify; 446 u32 cnt_special_packet_notify; 447 u32 cnt_bt_info_notify; 448 u32 cnt_periodical; 449 u32 cnt_coex_dm_switch; 450 u32 cnt_stack_operation_notify; 451 u32 cnt_dbg_ctrl; 452}; 453 454struct btc_bt_link_info { 455 bool bt_link_exist; 456 bool sco_exist; 457 bool sco_only; 458 bool a2dp_exist; 459 bool a2dp_only; 460 bool hid_exist; 461 bool hid_only; 462 bool pan_exist; 463 bool pan_only; 464}; 465 466enum btc_antenna_pos { 467 BTC_ANTENNA_AT_MAIN_PORT = 0x1, 468 BTC_ANTENNA_AT_AUX_PORT = 0x2, 469}; 470 471struct btc_coexist { 472 /* make sure only one adapter can bind the data context */ 473 bool binded; 474 /* default adapter */ 475 void *adapter; 476 struct btc_board_info board_info; 477 /* some bt info referenced by non-bt module */ 478 struct btc_bt_info bt_info; 479 struct btc_stack_info stack_info; 480 enum btc_chip_interface chip_interface; 481 struct btc_bt_link_info bt_link_info; 482 483 bool initilized; 484 bool stop_coex_dm; 485 bool manual_control; 486 u8 *cli_buf; 487 struct btc_statistics statistics; 488 u8 pwr_mode_val[10]; 489 490 /* function pointers - io related */ 491 bfp_btc_r1 btc_read_1byte; 492 bfp_btc_w1 btc_write_1byte; 493 bfp_btc_w1_bit_mak btc_write_1byte_bitmask; 494 bfp_btc_r2 btc_read_2byte; 495 bfp_btc_w2 btc_write_2byte; 496 bfp_btc_r4 btc_read_4byte; 497 bfp_btc_w4 btc_write_4byte; 498 499 bfp_btc_set_bb_reg btc_set_bb_reg; 500 bfp_btc_get_bb_reg btc_get_bb_reg; 501 502 bfp_btc_set_rf_reg btc_set_rf_reg; 503 bfp_btc_get_rf_reg btc_get_rf_reg; 504 505 bfp_btc_fill_h2c btc_fill_h2c; 506 507 bfp_btc_disp_dbg_msg btc_disp_dbg_msg; 508 509 bfp_btc_get btc_get; 510 bfp_btc_set btc_set; 511}; 512 513bool halbtc_is_wifi_uplink(struct rtl_priv *adapter); 514 515extern struct btc_coexist gl_bt_coexist; 516 517bool exhalbtc_initlize_variables(struct rtl_priv *adapter); 518void exhalbtc_init_hw_config(struct btc_coexist *btcoexist); 519void exhalbtc_init_coex_dm(struct btc_coexist *btcoexist); 520void exhalbtc_ips_notify(struct btc_coexist *btcoexist, u8 type); 521void exhalbtc_lps_notify(struct btc_coexist *btcoexist, u8 type); 522void exhalbtc_scan_notify(struct btc_coexist *btcoexist, u8 type); 523void exhalbtc_connect_notify(struct btc_coexist *btcoexist, u8 action); 524void exhalbtc_mediastatus_notify(struct btc_coexist *btcoexist, 525 enum rt_media_status media_status); 526void exhalbtc_special_packet_notify(struct btc_coexist *btcoexist, u8 pkt_type); 527void exhalbtc_bt_info_notify(struct btc_coexist *btcoexist, u8 *tmp_buf, 528 u8 length); 529void exhalbtc_stack_operation_notify(struct btc_coexist *btcoexist, u8 type); 530void exhalbtc_halt_notify(struct btc_coexist *btcoexist); 531void exhalbtc_pnp_notify(struct btc_coexist *btcoexist, u8 pnp_state); 532void exhalbtc_coex_dm_switch(struct btc_coexist *btcoexist); 533void exhalbtc_periodical(struct btc_coexist *btcoexist); 534void exhalbtc_dbg_control(struct btc_coexist *btcoexist, u8 code, u8 len, 535 u8 *data); 536void exhalbtc_stack_update_profile_info(void); 537void exhalbtc_set_hci_version(u16 hci_version); 538void exhalbtc_set_bt_patch_version(u16 bt_hci_version, u16 bt_patch_version); 539void exhalbtc_update_min_bt_rssi(char bt_rssi); 540void exhalbtc_set_bt_exist(bool bt_exist); 541void exhalbtc_set_chip_type(u8 chip_type); 542void exhalbtc_set_ant_num(u8 type, u8 ant_num); 543void exhalbtc_display_bt_coex_info(struct btc_coexist *btcoexist); 544void exhalbtc_signal_compensation(struct btc_coexist *btcoexist, 545 u8 *rssi_wifi, u8 *rssi_bt); 546void exhalbtc_lps_leave(struct btc_coexist *btcoexist); 547void exhalbtc_low_wifi_traffic_notify(struct btc_coexist *btcoexist); 548 549#endif 550