289 lines
7.8 KiB
C
289 lines
7.8 KiB
C
/******************************************************************************
|
|
*
|
|
* Copyright(c) 2007 - 2017 Realtek Corporation.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of version 2 of the GNU General Public License as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#ifndef __RTW_BT_MP_H
|
|
#define __RTW_BT_MP_H
|
|
|
|
|
|
#if (MP_DRIVER == 1)
|
|
|
|
#pragma pack(1)
|
|
|
|
/* definition for BT_UP_OP_BT_READY */
|
|
#define MP_BT_NOT_READY 0
|
|
#define MP_BT_READY 1
|
|
|
|
/* definition for BT_UP_OP_BT_SET_MODE */
|
|
typedef enum _MP_BT_MODE {
|
|
MP_BT_MODE_RF_TXRX_TEST_MODE = 0,
|
|
MP_BT_MODE_BT20_DUT_TEST_MODE = 1,
|
|
MP_BT_MODE_BT40_DIRECT_TEST_MODE = 2,
|
|
MP_BT_MODE_CONNECT_TEST_MODE = 3,
|
|
MP_BT_MODE_MAX
|
|
} MP_BT_MODE, *PMP_BT_MODE;
|
|
|
|
|
|
/* definition for BT_UP_OP_BT_SET_TX_RX_PARAMETER */
|
|
typedef struct _BT_TXRX_PARAMETERS {
|
|
u1Byte txrxChannel;
|
|
u4Byte txrxTxPktCnt;
|
|
u1Byte txrxTxPktInterval;
|
|
u1Byte txrxPayloadType;
|
|
u1Byte txrxPktType;
|
|
u2Byte txrxPayloadLen;
|
|
u4Byte txrxPktHeader;
|
|
u1Byte txrxWhitenCoeff;
|
|
u1Byte txrxBdaddr[6];
|
|
u1Byte txrxTxGainIndex;
|
|
} BT_TXRX_PARAMETERS, *PBT_TXRX_PARAMETERS;
|
|
|
|
/* txrxPktType */
|
|
typedef enum _MP_BT_PKT_TYPE {
|
|
MP_BT_PKT_DH1 = 0,
|
|
MP_BT_PKT_DH3 = 1,
|
|
MP_BT_PKT_DH5 = 2,
|
|
MP_BT_PKT_2DH1 = 3,
|
|
MP_BT_PKT_2DH3 = 4,
|
|
MP_BT_PKT_2DH5 = 5,
|
|
MP_BT_PKT_3DH1 = 6,
|
|
MP_BT_PKT_3DH3 = 7,
|
|
MP_BT_PKT_3DH5 = 8,
|
|
MP_BT_PKT_LE = 9,
|
|
MP_BT_PKT_MAX
|
|
} MP_BT_PKT_TYPE, *PMP_BT_PKT_TYPE;
|
|
/* txrxPayloadType */
|
|
typedef enum _MP_BT_PAYLOAD_TYPE {
|
|
MP_BT_PAYLOAD_01010101 = 0,
|
|
MP_BT_PAYLOAD_ALL_1 = 1,
|
|
MP_BT_PAYLOAD_ALL_0 = 2,
|
|
MP_BT_PAYLOAD_11110000 = 3,
|
|
MP_BT_PAYLOAD_PRBS9 = 4,
|
|
MP_BT_PAYLOAD_MAX = 8,
|
|
} MP_BT_PAYLOAD_TYPE, *PMP_BT_PAYLOAD_TYPE;
|
|
|
|
|
|
/* definition for BT_UP_OP_BT_TEST_CTRL */
|
|
typedef enum _MP_BT_TEST_CTRL {
|
|
MP_BT_TEST_STOP_ALL_TESTS = 0,
|
|
MP_BT_TEST_START_RX_TEST = 1,
|
|
MP_BT_TEST_START_PACKET_TX_TEST = 2,
|
|
MP_BT_TEST_START_CONTINUOUS_TX_TEST = 3,
|
|
MP_BT_TEST_START_INQUIRY_SCAN_TEST = 4,
|
|
MP_BT_TEST_START_PAGE_SCAN_TEST = 5,
|
|
MP_BT_TEST_START_INQUIRY_PAGE_SCAN_TEST = 6,
|
|
MP_BT_TEST_START_LEGACY_CONNECT_TEST = 7,
|
|
MP_BT_TEST_START_LE_CONNECT_TEST_INITIATOR = 8,
|
|
MP_BT_TEST_START_LE_CONNECT_TEST_ADVERTISER = 9,
|
|
MP_BT_TEST_MAX
|
|
} MP_BT_TEST_CTRL, *PMP_BT_TEST_CTRL;
|
|
|
|
|
|
typedef enum _RTL_EXT_C2H_EVT {
|
|
EXT_C2H_WIFI_FW_ACTIVE_RSP = 0,
|
|
EXT_C2H_TRIG_BY_BT_FW = 1,
|
|
MAX_EXT_C2HEVENT
|
|
} RTL_EXT_C2H_EVT;
|
|
|
|
/* OP codes definition between the user layer and driver */
|
|
typedef enum _BT_CTRL_OPCODE_UPPER {
|
|
BT_UP_OP_BT_READY = 0x00,
|
|
BT_UP_OP_BT_SET_MODE = 0x01,
|
|
BT_UP_OP_BT_SET_TX_RX_PARAMETER = 0x02,
|
|
BT_UP_OP_BT_SET_GENERAL = 0x03,
|
|
BT_UP_OP_BT_GET_GENERAL = 0x04,
|
|
BT_UP_OP_BT_TEST_CTRL = 0x05,
|
|
BT_UP_OP_TEST_BT = 0x06,
|
|
BT_UP_OP_MAX
|
|
} BT_CTRL_OPCODE_UPPER, *PBT_CTRL_OPCODE_UPPER;
|
|
|
|
|
|
typedef enum _BT_SET_GENERAL {
|
|
BT_GSET_REG = 0x00,
|
|
BT_GSET_RESET = 0x01,
|
|
BT_GSET_TARGET_BD_ADDR = 0x02,
|
|
BT_GSET_TX_PWR_FINETUNE = 0x03,
|
|
BT_SET_TRACKING_INTERVAL = 0x04,
|
|
BT_SET_THERMAL_METER = 0x05,
|
|
BT_ENABLE_CFO_TRACKING = 0x06,
|
|
BT_GSET_UPDATE_BT_PATCH = 0x07,
|
|
BT_GSET_MAX
|
|
} BT_SET_GENERAL, *PBT_SET_GENERAL;
|
|
|
|
typedef enum _BT_GET_GENERAL {
|
|
BT_GGET_REG = 0x00,
|
|
BT_GGET_STATUS = 0x01,
|
|
BT_GGET_REPORT = 0x02,
|
|
BT_GGET_AFH_MAP = 0x03,
|
|
BT_GGET_AFH_STATUS = 0x04,
|
|
BT_GGET_MAX
|
|
} BT_GET_GENERAL, *PBT_GET_GENERAL;
|
|
|
|
/* definition for BT_UP_OP_BT_SET_GENERAL */
|
|
typedef enum _BT_REG_TYPE {
|
|
BT_REG_RF = 0,
|
|
BT_REG_MODEM = 1,
|
|
BT_REG_BLUEWIZE = 2,
|
|
BT_REG_VENDOR = 3,
|
|
BT_REG_LE = 4,
|
|
BT_REG_MAX
|
|
} BT_REG_TYPE, *PBT_REG_TYPE;
|
|
|
|
/* definition for BT_LO_OP_GET_AFH_MAP */
|
|
typedef enum _BT_AFH_MAP_TYPE {
|
|
BT_AFH_MAP_RESULT = 0,
|
|
BT_AFH_MAP_WIFI_PSD_ONLY = 1,
|
|
BT_AFH_MAP_WIFI_CH_BW_ONLY = 2,
|
|
BT_AFH_MAP_BT_PSD_ONLY = 3,
|
|
BT_AFH_MAP_HOST_CLASSIFICATION_ONLY = 4,
|
|
BT_AFH_MAP_MAX
|
|
} BT_AFH_MAP_TYPE, *PBT_AFH_MAP_TYPE;
|
|
|
|
/* definition for BT_UP_OP_BT_GET_GENERAL */
|
|
typedef enum _BT_REPORT_TYPE {
|
|
BT_REPORT_RX_PACKET_CNT = 0,
|
|
BT_REPORT_RX_ERROR_BITS = 1,
|
|
BT_REPORT_RSSI = 2,
|
|
BT_REPORT_CFO_HDR_QUALITY = 3,
|
|
BT_REPORT_CONNECT_TARGET_BD_ADDR = 4,
|
|
BT_REPORT_MAX
|
|
} BT_REPORT_TYPE, *PBT_REPORT_TYPE;
|
|
|
|
VOID
|
|
MPTBT_Test(
|
|
IN PADAPTER Adapter,
|
|
IN u1Byte opCode,
|
|
IN u1Byte byte1,
|
|
IN u1Byte byte2,
|
|
IN u1Byte byte3
|
|
);
|
|
|
|
NDIS_STATUS
|
|
MPTBT_SendOidBT(
|
|
IN PADAPTER pAdapter,
|
|
IN PVOID InformationBuffer,
|
|
IN ULONG InformationBufferLength,
|
|
OUT PULONG BytesRead,
|
|
OUT PULONG BytesNeeded
|
|
);
|
|
|
|
VOID
|
|
MPTBT_FwC2hBtMpCtrl(
|
|
PADAPTER Adapter,
|
|
pu1Byte tmpBuf,
|
|
u1Byte length
|
|
);
|
|
|
|
void MPh2c_timeout_handle(void *FunctionContext);
|
|
|
|
VOID mptbt_BtControlProcess(
|
|
PADAPTER Adapter,
|
|
PVOID pInBuf
|
|
);
|
|
|
|
#define BT_H2C_MAX_RETRY 1
|
|
#define BT_MAX_C2H_LEN 20
|
|
|
|
typedef struct _BT_REQ_CMD {
|
|
UCHAR opCodeVer;
|
|
UCHAR OpCode;
|
|
USHORT paraLength;
|
|
UCHAR pParamStart[100];
|
|
} BT_REQ_CMD, *PBT_REQ_CMD;
|
|
|
|
typedef struct _BT_RSP_CMD {
|
|
USHORT status;
|
|
USHORT paraLength;
|
|
UCHAR pParamStart[100];
|
|
} BT_RSP_CMD, *PBT_RSP_CMD;
|
|
|
|
|
|
typedef struct _BT_H2C {
|
|
u1Byte opCodeVer:4;
|
|
u1Byte reqNum:4;
|
|
u1Byte opCode;
|
|
u1Byte buf[100];
|
|
} BT_H2C, *PBT_H2C;
|
|
|
|
|
|
|
|
typedef struct _BT_EXT_C2H {
|
|
u1Byte extendId;
|
|
u1Byte statusCode:4;
|
|
u1Byte retLen:4;
|
|
u1Byte opCodeVer:4;
|
|
u1Byte reqNum:4;
|
|
u1Byte buf[100];
|
|
} BT_EXT_C2H, *PBT_EXT_C2H;
|
|
|
|
|
|
typedef enum _BT_OPCODE_STATUS {
|
|
BT_OP_STATUS_SUCCESS = 0x00, /* Success */
|
|
BT_OP_STATUS_VERSION_MISMATCH = 0x01,
|
|
BT_OP_STATUS_UNKNOWN_OPCODE = 0x02,
|
|
BT_OP_STATUS_ERROR_PARAMETER = 0x03,
|
|
BT_OP_STATUS_MAX
|
|
} BT_OPCODE_STATUS, *PBT_OPCODE_STATUS;
|
|
|
|
|
|
|
|
/* OP codes definition between driver and bt fw */
|
|
typedef enum _BT_CTRL_OPCODE_LOWER {
|
|
BT_LO_OP_GET_BT_VERSION = 0x00,
|
|
BT_LO_OP_RESET = 0x01,
|
|
BT_LO_OP_TEST_CTRL = 0x02,
|
|
BT_LO_OP_SET_BT_MODE = 0x03,
|
|
BT_LO_OP_SET_CHNL_TX_GAIN = 0x04,
|
|
BT_LO_OP_SET_PKT_TYPE_LEN = 0x05,
|
|
BT_LO_OP_SET_PKT_CNT_L_PL_TYPE = 0x06,
|
|
BT_LO_OP_SET_PKT_CNT_H_PKT_INTV = 0x07,
|
|
BT_LO_OP_SET_PKT_HEADER = 0x08,
|
|
BT_LO_OP_SET_WHITENCOEFF = 0x09,
|
|
BT_LO_OP_SET_BD_ADDR_L = 0x0a,
|
|
BT_LO_OP_SET_BD_ADDR_H = 0x0b,
|
|
BT_LO_OP_WRITE_REG_ADDR = 0x0c,
|
|
BT_LO_OP_WRITE_REG_VALUE = 0x0d,
|
|
BT_LO_OP_GET_BT_STATUS = 0x0e,
|
|
BT_LO_OP_GET_BD_ADDR_L = 0x0f,
|
|
BT_LO_OP_GET_BD_ADDR_H = 0x10,
|
|
BT_LO_OP_READ_REG = 0x11,
|
|
BT_LO_OP_SET_TARGET_BD_ADDR_L = 0x12,
|
|
BT_LO_OP_SET_TARGET_BD_ADDR_H = 0x13,
|
|
BT_LO_OP_SET_TX_POWER_CALIBRATION = 0x14,
|
|
BT_LO_OP_GET_RX_PKT_CNT_L = 0x15,
|
|
BT_LO_OP_GET_RX_PKT_CNT_H = 0x16,
|
|
BT_LO_OP_GET_RX_ERROR_BITS_L = 0x17,
|
|
BT_LO_OP_GET_RX_ERROR_BITS_H = 0x18,
|
|
BT_LO_OP_GET_RSSI = 0x19,
|
|
BT_LO_OP_GET_CFO_HDR_QUALITY_L = 0x1a,
|
|
BT_LO_OP_GET_CFO_HDR_QUALITY_H = 0x1b,
|
|
BT_LO_OP_GET_TARGET_BD_ADDR_L = 0x1c,
|
|
BT_LO_OP_GET_TARGET_BD_ADDR_H = 0x1d,
|
|
BT_LO_OP_GET_AFH_MAP_L = 0x1e,
|
|
BT_LO_OP_GET_AFH_MAP_M = 0x1f,
|
|
BT_LO_OP_GET_AFH_MAP_H = 0x20,
|
|
BT_LO_OP_GET_AFH_STATUS = 0x21,
|
|
BT_LO_OP_SET_TRACKING_INTERVAL = 0x22,
|
|
BT_LO_OP_SET_THERMAL_METER = 0x23,
|
|
BT_LO_OP_ENABLE_CFO_TRACKING = 0x24,
|
|
BT_LO_OP_MAX
|
|
} BT_CTRL_OPCODE_LOWER, *PBT_CTRL_OPCODE_LOWER;
|
|
|
|
|
|
|
|
|
|
#endif /* #if(MP_DRIVER == 1) */
|
|
|
|
#endif /* #ifndef __INC_MPT_BT_H */
|