blob: 18c856a831e1df056eefba87a1018107adc15dcd [file] [log] [blame]
/*
* Copyright (c) 2013,2016 The Linux Foundation. All rights reserved.
*
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of The Linux Foundation nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _BTCONFIG_H_
#define _BTCONFIG_H_
#define VERSION "2.14"
//#define DUMP_DEBUG 1
//#define DEBUG 1 // @@ boyi @@
#ifdef ANDROID
#define FW_PATH_AR "/etc/firmware/ar3k/"
#else
#define FW_PATH_AR "/lib/firmware/ar3k/"
#endif
#define BDADDR_FILE "ar3kbdaddr.pst"
#define PS_ASIC_FILE "PS_ASIC.pst"
#define PS_FPGA_FILE "PS_FPGA.pst"
#define PATCH_FILE "RamPatch.txt"
#define ROM_DEV_TYPE 0xdeadc0de
#define FPGA_ROM_VERSION 0x99999999
#define PS_RAM_SIZE 2048
#define TRUE 1
#define FALSE 0
#define LINE_SIZE_MAX 3000
#define PS_RESET 2
#define PS_WRITE 1
#define HCI_PS_CMD_HDR_LEN 7
#define PS_RESET_PARAM_LEN 6
#define HCI_MAX_CMD_SIZE 260
#define PS_RESET_CMD_LEN (HCI_PS_CMD_HDR_LEN + PS_RESET_PARAM_LEN)
#define PS_ID_MASK 0xFF
#define HCI_VENDOR_CMD_OGF 0x3F
#define HCI_PS_CMD_OCF 0x0B
#define HCI_CHG_BAUD_CMD_OCF 0x0C
#define HCI_CMD_OGF_HOST_CTL 0x03
#define HCI_CMD_OGF_INFO_PARAM 0x04
#define HCI_CMD_OCF_RESET 0x0003
#define HCI_CMD_OCF_READ_BD_ADDR 0x0009
#define WRITE_BDADDR_CMD_LEN 14
#define WRITE_BAUD_CMD_LEN 6
#define MAX_CMD_LEN WRITE_BDADDR_CMD_LEN
#define BD_ADDR_SIZE 6
#define BD_ADDR_PSTAG 1
#define PS_READ 0
#define PS_READ_RAW 3
#define WRITE_PATCH 8
#define ENABLE_PATCH 11
#define PS_WRITE_RAW 4
#define PS_GET_LENGTH 5
#define PS_SET_ACCESS_MODE 6
#define PS_SET_ACCESS_PRIORITY 7
#define PS_WRITE 1
#define PS_DYNMEM_OVERRIDE 10
#define PS_VERIFY_CRC 9
#define CHANGE_BDADDR 15
#define PS_COMMAND_HEADER 4
#define HCI_EVENT_SIZE 7
#define PS_RETRY_COUNT 3
#define RAM_PS_REGION (1<<0)
#define RAM_PATCH_REGION (1<<1)
#define RAM_DYN_MEM_REGION (1<<2)
#define RAMPS_MAX_PS_DATA_PER_TAG 244
#define RAMPS_MAX_PS_TAGS_PER_FILE 50
#define PSTAG_RF_TEST_BLOCK_START (300)
#define PSTAG_SYSTEM_BLOCK_START (1)
#define BT_SOC_INIT_TOOL_START_MAGIC_WORD 0xB1B1
#define PSTAG_RF_PARAM_TABLE0 (PSTAG_RF_TEST_BLOCK_START+0)
#define PSTAG_SYSCFG_PARAM_TABLE0 (PSTAG_SYSTEM_BLOCK_START+18)
#define PATCH_MAX_LEN 20000
#define DYN_MEM_MAX_LEN 40
#define SKIP_BLANKS(str) while (*str == ' ') str++
#define MAX_RADIO_CFG_TABLE_SIZE 1000
#define MAX_BYTE_LENGTH 244
#define DEBUG_EVENT_TYPE_PS 0x02
#define DEBUG_EVENT_TYPE_MEMBLK 0x03
#define HCI_EVENT_HEADER_SIZE 0x03
#define HI_MAGIC_NUMBER ((const unsigned short int) 0xFADE)
#define HI_VERSION (0x0300) //Version 3.0
#define EEPROM_CONFIG 0x00020C00
#define FPGA_REGISTER 0x4FFC
#define MAX_EVENT_SIZE 260
// Vendor specific command OCF
#define OCF_PS 0x000B
#define OCF_MEMOP 0x0014
#define OGF_TEST_CMD 0x06
#define OCF_HOST_INTEREST 0x000A
#define OCF_CONT_TX_TESTER 0x0023
#define OCF_TX_TESTER 0x001B
#define OCF_SLEEP_MODE 0x0004
#define OCF_READ_MEMORY 0x0005
#define OCF_WRITE_MEMORY 0x0006
#define OCF_DISABLE_TX 0x002D
#define OCF_TEST_MODE_SEQN_TRACKING 0x0018
#define OCF_READ_VERSION 0x001E
#define OCF_AUDIO_CMD 0x0013
#define OCF_GET_BERTYPE 0x005C
#define OCF_RX_TESTER 0x005B
#define UCHAR unsigned char
#define BOOL unsigned short
#define UINT16 unsigned short int
#define UINT32 unsigned int
#define SINT16 signed short int
#define UINT8 unsigned char
#define SINT8 signed char
#if __BYTE_ORDER == __LITTLE_ENDIAN
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define htobs(d) (d)
#define htobl(d) (d)
#define btohs(d) (d)
#define btohl(d) (d)
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#elif __BYTE_ORDER == __BIG_ENDIAN
#define htobs(d) bswap_16(d)
#define htobl(d) bswap_32(d)
#define btohs(d) bswap_16(d)
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define btohl(d) bswap_32(d)
#else
#error "Unknown byte order"
#endif
#define MAX_TAGS 50
#define PS_HDR_LEN 4
#define HCI_VENDOR_CMD_OGF 0x3F
#define HCI_PS_CMD_OCF 0x0B
#define PS_EVENT_LEN 100
#define HCI_EV_SUCCESS 0x00
#define BT_PORT 2398
/* For ROME QCA61x4 chipset */
#define EVT_VENDOR (0xFF)
#define EVT_CMD_COMPLETE (0x0E)
#define HCI_COMMAND_PKT (0x01)
#define HCI_MAX_EVENT_SIZE (260)
#define MAX_SIZE_PER_TLV_SEGMENT (243)
#define EDL_PATCH_CMD_LEN (1)
#define EDL_PATCH_VER_REQ_CMD (0x19)
#define EDL_PATCH_TLV_REQ_CMD (0x1E)
#define EDL_CMD_REQ_RES_EVT (0x00)
#define EDL_PATCH_VER_RES_EVT (0x19)
#define EDL_APP_VER_RES_EVT (0x02)
#define EDL_TVL_DNLD_RES_EVT (0x04)
#define EDL_CMD_EXE_STATUS_EVT (0x00)
#define EDL_SET_BAUDRATE_RSP_EVT (0x92)
#define EDL_NVM_ACCESS_CODE_EVT (0x0B)
#define HCI_PATCH_CMD_OCF (0)
#define FW_PATH_ROME "/lib/firmware/qca"
#define FLOW_CTL (0x0001)
#define BAUDRATE_CHANGE_SUCCESS (0x01)
#define CC_MIN_SIZE (0x7)
#define HCI_CMD_SUCCESS (0x0)
enum qca_bardrate_type {
QCA_BAUDRATE_115200 = 0,
QCA_BAUDRATE_57600,
QCA_BAUDRATE_38400,
QCA_BAUDRATE_19200,
QCA_BAUDRATE_9600,
QCA_BAUDRATE_230400,
QCA_BAUDRATE_250000,
QCA_BAUDRATE_460800,
QCA_BAUDRATE_500000,
QCA_BAUDRATE_720000,
QCA_BAUDRATE_921600,
QCA_BAUDRATE_1000000,
QCA_BAUDRATE_1250000,
QCA_BAUDRATE_2000000,
QCA_BAUDRATE_3000000,
QCA_BAUDRATE_4000000,
QCA_BAUDRATE_1600000,
QCA_BAUDRATE_3200000,
QCA_BAUDRATE_3500000,
QCA_BAUDRATE_AUTO = 0xFE,
QCA_BAUDRATE_RESERVED
};
enum qca_tlv_type {
TLV_TYPE_PATCH = 1,
TLV_TYPE_NVM
};
struct patch_data {
int8_t type;
int64_t len;
uint8_t *data;
};
#ifndef ANDROID
size_t
strlcpy(char *dst, const char *src, size_t size)
{
const char *s = src;
size_t n = size;
if (n && --n)
do {
if (!(*dst++ = *src++))
break;
} while (--n);
if (!n) {
if (size)
*dst = '\0';
while (*src++);
}
return src - s - 1;
}
#endif //strlcpy is present on the string.h on android but not on the x86. hence use this instead.
typedef struct tPsTagEntry
{
int TagId;
UCHAR TagLen;
UCHAR TagData[RAMPS_MAX_PS_DATA_PER_TAG];
} tPsTagEntry, *tpPsTagEntry;
typedef struct tRamPatch
{
int Len;
UCHAR Data[PATCH_MAX_LEN];
} tRamPatch, *ptRamPatch;
typedef struct tRamDynMemOverride
{
int Len;
UCHAR Data[DYN_MEM_MAX_LEN];
} tRamDynMemOverride, *ptRamDynMemOverride;
tPsTagEntry PsTagEntry[RAMPS_MAX_PS_TAGS_PER_FILE];
tRamPatch RamPatch[50];
tRamDynMemOverride RamDynMemOverride;
enum MB_FILEFORMAT {
MB_FILEFORMAT_PS,
MB_FILEFORMAT_PATCH,
MB_FILEFORMAT_DY,
};
enum RamPsSection
{
RAM_PS_SECTION,
RAM_PATCH_SECTION,
RAM_DYN_MEM_SECTION
};
enum eType {
eHex,
edecimal,
};
struct ST_PS_DATA_FORMAT {
enum eType eDataType;
BOOL bIsArray;
};
#define CONV_DEC_DIGIT_TO_VALUE(c) ((c) - '0')
#define IS_HEX(c) (IS_BETWEEN((c), '0', '9') || IS_BETWEEN((c), 'a', 'f') || IS_BETWEEN((c), 'A', 'F'))
#define IS_BETWEEN(x, lower, upper) (((lower) <= (x)) && ((x) <= (upper)))
#define IS_DIGIT(c) (IS_BETWEEN((c), '0', '9'))
#define CONV_HEX_DIGIT_TO_VALUE(c) (IS_DIGIT(c) ? ((c) - '0') : (IS_BETWEEN((c), 'A', 'Z') ? ((c) - 'A' + 10) : ((c) - 'a' + 10)))
#define BYTES_OF_PS_DATA_PER_LINE 16
struct ST_READ_STATUS {
unsigned uTagID;
unsigned uSection;
unsigned uLineCount;
unsigned uCharCount;
unsigned uByteCount;
};
//DUT MODE related
#define MC_BCAM_COMPARE_ADDRESS 0x00008080
#define HCI_3_PATCH_SPACE_LENGTH_1 (0x80)
#define HCI_3_PATCH_SPACE_LENGTH_2 (0x279C)
#define MEM_BLK_DATA_MAX (244)
#define MC_BCAM_VALID_ADDRESS 0x00008100
//Audio stat
typedef struct tAudio_Stat {
UINT16 RxSilenceInsert;
UINT16 RxAirPktDump;
UINT16 RxCmplt;
UINT16 TxCmplt;
UINT16 MaxPLCGenInterval;
UINT16 RxAirPktStatusGood;
UINT16 RxAirPktStatusError;
UINT16 RxAirPktStatusLost;
UINT16 RxAirPktStatusPartial;
SINT16 SampleMin;
SINT16 SampleMax;
UINT16 SampleCounter;
UINT16 SampleStatEnable;
} tAudioStat;
//DMA stats
typedef struct tBRM_Stats {
// DMA Stats
UINT32 DmaIntrs;
// Voice Stats
UINT16 VoiceTxDmaIntrs;
UINT16 VoiceTxErrorIntrs;
UINT16 VoiceTxDmaErrorIntrs;
UINT16 VoiceTxPktAvail;
UINT16 VoiceTxPktDumped;
UINT16 VoiceTxDmaSilenceInserts;
UINT16 VoiceRxDmaIntrs;
UINT16 VoiceRxErrorIntrs;
UINT16 VoiceRxGoodPkts;
UINT16 VoiceRxErrCrc;
UINT16 VoiceRxErrUnderOverFlow;
UINT16 VoiceRxPktDumped;
UINT16 VoiceTxReapOnError;
UINT16 VoiceRxReapOnError;
UINT16 VoiceSchedulingError;
UINT16 SchedOnVoiceError;
UINT16 Temp1;
UINT16 Temp2;
// Control Stats
UINT16 ErrWrongLlid;
UINT16 ErrL2CapLen;
UINT16 ErrUnderOverFlow;
UINT16 RxBufferDumped;
UINT16 ErrWrongLmpPktType;
UINT16 ErrWrongL2CapPktType;
UINT16 HecFailPkts;
UINT16 IgnoredPkts;
UINT16 CrcFailPkts;
UINT16 HwErrRxOverflow;
UINT16 CtrlErrNoLmpBufs;
// ACL Stats
UINT16 DataTxBuffers;
UINT16 DataRxBuffers;
UINT16 DataRxErrCrc;
UINT16 DataRxPktDumped;
UINT16 LmpTxBuffers;
UINT16 LmpRxBuffers;
UINT16 ForceOverQosJob;
// Sniff Stats
UINT16 SniffSchedulingError;
UINT16 SniffIntervalNoCorr;
// Test Mode Stats
UINT16 TestModeDroppedTxPkts;
UINT16 TestModeDroppedLmps;
// Error Stats
UINT16 TimePassedIntrs;
UINT16 NoCommandIntrs;
} tBRM_Stats;
typedef struct tSYSUTIL_ChipId {
char *pName;
UINT32 HwRev;
} tSYSUTIL_ChipId;
typedef struct tSU_RevInfo {
tSYSUTIL_ChipId *pChipId;
tSYSUTIL_ChipId *pChipRadioId;
UINT32 ChipRadioId;
UINT32 SubRadioId;
UINT32 RomVersion;
UINT32 RomBuildNumber;
UINT32 BuildVersion;
UINT32 BuildNumber;
UINT16 RadioFormat;
UINT16 RadioContent;
UINT16 SysCfgFormat;
UINT16 SysCfgContent;
UINT8 ProductId;
} tSU_RevInfo;
typedef struct {
UINT8 b[6];
} __attribute__((packed)) bdaddr_t;
typedef struct {
UINT16 opcode; /* OCF & OGF */
UINT8 plen;
} __attribute__((packed)) hci_command_hdr;
typedef struct {
UINT8 evt;
UINT8 plen;
} __attribute__((packed)) hci_event_hdr;
typedef struct {
UINT8 ncmd;
UINT16 opcode;
} __attribute__ ((packed)) evt_cmd_complete;
#define HCI_COMMAND_HEADER_SIZE 3
#define HCI_OPCODE_PACK(ogf, ocf) (UINT16)((ocf & 0x03ff)|(ogf << 10))
#endif