1 /****************************************************************************** 2 * 3 * Copyright(c) 2007 - 2017 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 *****************************************************************************/ 15 16 #ifndef __RTW_BT_MP_H 17 #define __RTW_BT_MP_H 18 19 20 #if (MP_DRIVER == 1) 21 22 #pragma pack(1) 23 24 /* definition for BT_UP_OP_BT_READY */ 25 #define MP_BT_NOT_READY 0 26 #define MP_BT_READY 1 27 28 /* definition for BT_UP_OP_BT_SET_MODE */ 29 typedef enum _MP_BT_MODE { 30 MP_BT_MODE_RF_TXRX_TEST_MODE = 0, 31 MP_BT_MODE_BT20_DUT_TEST_MODE = 1, 32 MP_BT_MODE_BT40_DIRECT_TEST_MODE = 2, 33 MP_BT_MODE_CONNECT_TEST_MODE = 3, 34 MP_BT_MODE_MAX 35 } MP_BT_MODE, *PMP_BT_MODE; 36 37 38 /* definition for BT_UP_OP_BT_SET_TX_RX_PARAMETER */ 39 typedef struct _BT_TXRX_PARAMETERS { 40 u8 txrxChannel; 41 u32 txrxTxPktCnt; 42 u8 txrxTxPktInterval; 43 u8 txrxPayloadType; 44 u8 txrxPktType; 45 u16 txrxPayloadLen; 46 u32 txrxPktHeader; 47 u8 txrxWhitenCoeff; 48 u8 txrxBdaddr[6]; 49 u8 txrxTxGainIndex; 50 } BT_TXRX_PARAMETERS, *PBT_TXRX_PARAMETERS; 51 52 /* txrxPktType */ 53 typedef enum _MP_BT_PKT_TYPE { 54 MP_BT_PKT_DH1 = 0, 55 MP_BT_PKT_DH3 = 1, 56 MP_BT_PKT_DH5 = 2, 57 MP_BT_PKT_2DH1 = 3, 58 MP_BT_PKT_2DH3 = 4, 59 MP_BT_PKT_2DH5 = 5, 60 MP_BT_PKT_3DH1 = 6, 61 MP_BT_PKT_3DH3 = 7, 62 MP_BT_PKT_3DH5 = 8, 63 MP_BT_PKT_LE = 9, 64 MP_BT_PKT_MAX 65 } MP_BT_PKT_TYPE, *PMP_BT_PKT_TYPE; 66 /* txrxPayloadType */ 67 typedef enum _MP_BT_PAYLOAD_TYPE { 68 MP_BT_PAYLOAD_01010101 = 0, 69 MP_BT_PAYLOAD_ALL_1 = 1, 70 MP_BT_PAYLOAD_ALL_0 = 2, 71 MP_BT_PAYLOAD_11110000 = 3, 72 MP_BT_PAYLOAD_PRBS9 = 4, 73 MP_BT_PAYLOAD_MAX = 8, 74 } MP_BT_PAYLOAD_TYPE, *PMP_BT_PAYLOAD_TYPE; 75 76 77 /* definition for BT_UP_OP_BT_TEST_CTRL */ 78 typedef enum _MP_BT_TEST_CTRL { 79 MP_BT_TEST_STOP_ALL_TESTS = 0, 80 MP_BT_TEST_START_RX_TEST = 1, 81 MP_BT_TEST_START_PACKET_TX_TEST = 2, 82 MP_BT_TEST_START_CONTINUOUS_TX_TEST = 3, 83 MP_BT_TEST_START_INQUIRY_SCAN_TEST = 4, 84 MP_BT_TEST_START_PAGE_SCAN_TEST = 5, 85 MP_BT_TEST_START_INQUIRY_PAGE_SCAN_TEST = 6, 86 MP_BT_TEST_START_LEGACY_CONNECT_TEST = 7, 87 MP_BT_TEST_START_LE_CONNECT_TEST_INITIATOR = 8, 88 MP_BT_TEST_START_LE_CONNECT_TEST_ADVERTISER = 9, 89 MP_BT_TEST_MAX 90 } MP_BT_TEST_CTRL, *PMP_BT_TEST_CTRL; 91 92 93 typedef enum _RTL_EXT_C2H_EVT { 94 EXT_C2H_WIFI_FW_ACTIVE_RSP = 0, 95 EXT_C2H_TRIG_BY_BT_FW = 1, 96 MAX_EXT_C2HEVENT 97 } RTL_EXT_C2H_EVT; 98 99 /* OP codes definition between the user layer and driver */ 100 typedef enum _BT_CTRL_OPCODE_UPPER { 101 BT_UP_OP_BT_READY = 0x00, 102 BT_UP_OP_BT_SET_MODE = 0x01, 103 BT_UP_OP_BT_SET_TX_RX_PARAMETER = 0x02, 104 BT_UP_OP_BT_SET_GENERAL = 0x03, 105 BT_UP_OP_BT_GET_GENERAL = 0x04, 106 BT_UP_OP_BT_TEST_CTRL = 0x05, 107 BT_UP_OP_TEST_BT = 0x06, 108 BT_UP_OP_MAX 109 } BT_CTRL_OPCODE_UPPER, *PBT_CTRL_OPCODE_UPPER; 110 111 112 typedef enum _BT_SET_GENERAL { 113 BT_GSET_REG = 0x00, 114 BT_GSET_RESET = 0x01, 115 BT_GSET_TARGET_BD_ADDR = 0x02, 116 BT_GSET_TX_PWR_FINETUNE = 0x03, 117 BT_SET_TRACKING_INTERVAL = 0x04, 118 BT_SET_THERMAL_METER = 0x05, 119 BT_ENABLE_CFO_TRACKING = 0x06, 120 BT_GSET_UPDATE_BT_PATCH = 0x07, 121 BT_GSET_MAX 122 } BT_SET_GENERAL, *PBT_SET_GENERAL; 123 124 typedef enum _BT_GET_GENERAL { 125 BT_GGET_REG = 0x00, 126 BT_GGET_STATUS = 0x01, 127 BT_GGET_REPORT = 0x02, 128 BT_GGET_AFH_MAP = 0x03, 129 BT_GGET_AFH_STATUS = 0x04, 130 BT_GGET_MAX 131 } BT_GET_GENERAL, *PBT_GET_GENERAL; 132 133 /* definition for BT_UP_OP_BT_SET_GENERAL */ 134 typedef enum _BT_REG_TYPE { 135 BT_REG_RF = 0, 136 BT_REG_MODEM = 1, 137 BT_REG_BLUEWIZE = 2, 138 BT_REG_VENDOR = 3, 139 BT_REG_LE = 4, 140 BT_REG_MAX 141 } BT_REG_TYPE, *PBT_REG_TYPE; 142 143 /* definition for BT_LO_OP_GET_AFH_MAP */ 144 typedef enum _BT_AFH_MAP_TYPE { 145 BT_AFH_MAP_RESULT = 0, 146 BT_AFH_MAP_WIFI_PSD_ONLY = 1, 147 BT_AFH_MAP_WIFI_CH_BW_ONLY = 2, 148 BT_AFH_MAP_BT_PSD_ONLY = 3, 149 BT_AFH_MAP_HOST_CLASSIFICATION_ONLY = 4, 150 BT_AFH_MAP_MAX 151 } BT_AFH_MAP_TYPE, *PBT_AFH_MAP_TYPE; 152 153 /* definition for BT_UP_OP_BT_GET_GENERAL */ 154 typedef enum _BT_REPORT_TYPE { 155 BT_REPORT_RX_PACKET_CNT = 0, 156 BT_REPORT_RX_ERROR_BITS = 1, 157 BT_REPORT_RSSI = 2, 158 BT_REPORT_CFO_HDR_QUALITY = 3, 159 BT_REPORT_CONNECT_TARGET_BD_ADDR = 4, 160 BT_REPORT_MAX 161 } BT_REPORT_TYPE, *PBT_REPORT_TYPE; 162 163 void 164 MPTBT_Test( 165 PADAPTER Adapter, 166 u8 opCode, 167 u8 byte1, 168 u8 byte2, 169 u8 byte3 170 ); 171 172 uint 173 MPTBT_SendOidBT( 174 PADAPTER pAdapter, 175 void *InformationBuffer, 176 u32 InformationBufferLength, 177 u32 *BytesRead, 178 u32 *BytesNeeded 179 ); 180 181 void 182 MPTBT_FwC2hBtMpCtrl( 183 PADAPTER Adapter, 184 u8 *tmpBuf, 185 u8 length 186 ); 187 188 void MPh2c_timeout_handle(void *FunctionContext); 189 190 void mptbt_BtControlProcess( 191 PADAPTER Adapter, 192 void *pInBuf 193 ); 194 195 #define BT_H2C_MAX_RETRY 1 196 #define BT_MAX_C2H_LEN 20 197 198 typedef struct _BT_REQ_CMD { 199 u8 opCodeVer; 200 u8 OpCode; 201 u16 paraLength; 202 u8 pParamStart[100]; 203 } BT_REQ_CMD, *PBT_REQ_CMD; 204 205 typedef struct _BT_RSP_CMD { 206 u16 status; 207 u16 paraLength; 208 u8 pParamStart[100]; 209 } BT_RSP_CMD, *PBT_RSP_CMD; 210 211 212 typedef struct _BT_H2C { 213 u8 opCodeVer:4; 214 u8 reqNum:4; 215 u8 opCode; 216 u8 buf[100]; 217 } BT_H2C, *PBT_H2C; 218 219 220 221 typedef struct _BT_EXT_C2H { 222 u8 extendId; 223 u8 statusCode:4; 224 u8 retLen:4; 225 u8 opCodeVer:4; 226 u8 reqNum:4; 227 u8 buf[100]; 228 } BT_EXT_C2H, *PBT_EXT_C2H; 229 230 231 typedef enum _BT_OPCODE_STATUS { 232 BT_OP_STATUS_SUCCESS = 0x00, /* Success */ 233 BT_OP_STATUS_VERSION_MISMATCH = 0x01, 234 BT_OP_STATUS_UNKNOWN_OPCODE = 0x02, 235 BT_OP_STATUS_ERROR_PARAMETER = 0x03, 236 BT_OP_STATUS_MAX 237 } BT_OPCODE_STATUS, *PBT_OPCODE_STATUS; 238 239 240 241 /* OP codes definition between driver and bt fw */ 242 typedef enum _BT_CTRL_OPCODE_LOWER { 243 BT_LO_OP_GET_BT_VERSION = 0x00, 244 BT_LO_OP_RESET = 0x01, 245 BT_LO_OP_TEST_CTRL = 0x02, 246 BT_LO_OP_SET_BT_MODE = 0x03, 247 BT_LO_OP_SET_CHNL_TX_GAIN = 0x04, 248 BT_LO_OP_SET_PKT_TYPE_LEN = 0x05, 249 BT_LO_OP_SET_PKT_CNT_L_PL_TYPE = 0x06, 250 BT_LO_OP_SET_PKT_CNT_H_PKT_INTV = 0x07, 251 BT_LO_OP_SET_PKT_HEADER = 0x08, 252 BT_LO_OP_SET_WHITENCOEFF = 0x09, 253 BT_LO_OP_SET_BD_ADDR_L = 0x0a, 254 BT_LO_OP_SET_BD_ADDR_H = 0x0b, 255 BT_LO_OP_WRITE_REG_ADDR = 0x0c, 256 BT_LO_OP_WRITE_REG_VALUE = 0x0d, 257 BT_LO_OP_GET_BT_STATUS = 0x0e, 258 BT_LO_OP_GET_BD_ADDR_L = 0x0f, 259 BT_LO_OP_GET_BD_ADDR_H = 0x10, 260 BT_LO_OP_READ_REG = 0x11, 261 BT_LO_OP_SET_TARGET_BD_ADDR_L = 0x12, 262 BT_LO_OP_SET_TARGET_BD_ADDR_H = 0x13, 263 BT_LO_OP_SET_TX_POWER_CALIBRATION = 0x14, 264 BT_LO_OP_GET_RX_PKT_CNT_L = 0x15, 265 BT_LO_OP_GET_RX_PKT_CNT_H = 0x16, 266 BT_LO_OP_GET_RX_ERROR_BITS_L = 0x17, 267 BT_LO_OP_GET_RX_ERROR_BITS_H = 0x18, 268 BT_LO_OP_GET_RSSI = 0x19, 269 BT_LO_OP_GET_CFO_HDR_QUALITY_L = 0x1a, 270 BT_LO_OP_GET_CFO_HDR_QUALITY_H = 0x1b, 271 BT_LO_OP_GET_TARGET_BD_ADDR_L = 0x1c, 272 BT_LO_OP_GET_TARGET_BD_ADDR_H = 0x1d, 273 BT_LO_OP_GET_AFH_MAP_L = 0x1e, 274 BT_LO_OP_GET_AFH_MAP_M = 0x1f, 275 BT_LO_OP_GET_AFH_MAP_H = 0x20, 276 BT_LO_OP_GET_AFH_STATUS = 0x21, 277 BT_LO_OP_SET_TRACKING_INTERVAL = 0x22, 278 BT_LO_OP_SET_THERMAL_METER = 0x23, 279 BT_LO_OP_ENABLE_CFO_TRACKING = 0x24, 280 BT_LO_OP_MAX 281 } BT_CTRL_OPCODE_LOWER, *PBT_CTRL_OPCODE_LOWER; 282 283 284 285 286 #endif /* #if(MP_DRIVER == 1) */ 287 288 #endif /* #ifndef __INC_MPT_BT_H */ 289