403 lines
12 KiB
C
403 lines
12 KiB
C
/*
|
|
* Copyright (c) 2008-2009 Atheros Corporation. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation;
|
|
*
|
|
* Software distributed under the License is distributed on an "AS
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* rights and limitations under the License.
|
|
*
|
|
* <Header file contains required data for master blaster mode>
|
|
*
|
|
* <masterblaster.h>
|
|
*/
|
|
|
|
#ifndef _MASTERBLASTER_H_
|
|
#define _MASTERBLASTER_H_
|
|
#include "btconfig.h"
|
|
|
|
#define INVALID_MASTERBLASTER_FIELD (-1)
|
|
#define UNUSED(x) (x=x)
|
|
// Bluetooth Packet Type Identifiers
|
|
#define MAX_TRANSMIT_POWER_CONTROL_ENTRIES 10
|
|
|
|
#define LC_JTAG_MODEM_REGS_ADDRESS 0x00020800
|
|
#define AGC_BYPASS_ADDRESS 0x0000040c
|
|
#define AGC_BYPASS_ENABLE_MASK 0x00000001
|
|
#define AGC_BYPASS_ENABLE_LSB 0
|
|
#define AGC_BYPASS_ENABLE_SET(x) (((x) << AGC_BYPASS_ENABLE_LSB) & AGC_BYPASS_ENABLE_MASK)
|
|
#define LC_DEV_PARAM_CTL_ADDRESS 0x00020010
|
|
#define LC_DEV_PARAM_CTL_FREQ_HOP_EN_MASK 0x00000001
|
|
#define LC_DEV_PARAM_CTL_RX_FREQ_MASK 0x00007f00
|
|
#define LC_DEV_PARAM_CTL_WHITEN_EN_MASK 0x00008000
|
|
#define LC_DEV_PARAM_CTL_RX_FREQ_SET(x) (((x) << LC_DEV_PARAM_CTL_RX_FREQ_LSB) & LC_DEV_PARAM_CTL_RX_FREQ_MASK)
|
|
#define LC_DEV_PARAM_CTL_RX_FREQ_LSB 8
|
|
|
|
#define CORR_PARAM1_ADDRESS 0x00000048
|
|
#define CORR_PARAM1_TIM_THR_MASK 0xfc000000
|
|
#define CORR_PARAM1_TIM_THR_LSB 26
|
|
#define CORR_PARAM1_TIM_THR_SET(x) (((x) << CORR_PARAM1_TIM_THR_LSB) & CORR_PARAM1_TIM_THR_MASK)
|
|
|
|
typedef struct tBtHost_Interest {
|
|
short int MagicNumber;
|
|
short int Version;
|
|
int TraceDataAddr;
|
|
int GlobalDmaStats; // BRM Global DMA Statistics
|
|
int TpcTableAddr; // SysCfg Transmit power table
|
|
int AudioStatAddr;
|
|
int AudioConfigAddr;
|
|
int AudioInternalAddr;
|
|
int SysCfgAddr;
|
|
int ReservedRamAddr;
|
|
} tBtHostInterest;
|
|
|
|
typedef struct PsSysCfgTransmitPowerControlEntry {
|
|
char TxPowerLevel;
|
|
int RadioConfig;
|
|
} tPsSysCfgTransmitPowerControlEntry;
|
|
|
|
typedef struct PsSysCfgTransmitPowerControlTable {
|
|
int NumOfEntries;
|
|
tPsSysCfgTransmitPowerControlEntry t[MAX_TRANSMIT_POWER_CONTROL_ENTRIES];
|
|
} tPsSysCfgTransmitPowerControlTable;
|
|
typedef UCHAR tBRM_PktType;
|
|
|
|
enum {
|
|
TxTest_PktType_NULL = 0x00,
|
|
TxTest_PktType_POLL = 0x01,
|
|
TxTest_PktType_FHS = 0x02,
|
|
TxTest_PktType_DM1 = 0x03,
|
|
TxTest_PktType_DH1 = 0x04,
|
|
TxTest_PktType_HV1 = 0x05,
|
|
TxTest_PktType_HV2 = 0x06,
|
|
TxTest_PktType_HV3 = 0x07,
|
|
TxTest_PktType_DV = 0x08,
|
|
TxTest_PktType_AUX1 = 0x09,
|
|
TxTest_PktType_DM3 = 0x0A,
|
|
TxTest_PktType_DH3 = 0x0B,
|
|
TxTest_PktType_DM5 = 0x0E,
|
|
TxTest_PktType_DH5 = 0x0F,
|
|
TxTest_PktType_2DH1 = 0x24,
|
|
TxTest_PktType_2DH3 = 0x2A,
|
|
TxTest_PktType_2DH5 = 0x2E,
|
|
TxTest_PktType_3DH1 = 0x28,
|
|
TxTest_PktType_3DH3 = 0x2B,
|
|
TxTest_PktType_3DH5 = 0x2F,
|
|
TxTest_PktType_Invalid = 0xff,
|
|
};
|
|
|
|
typedef UCHAR tBRM_eSCO_PktType;
|
|
|
|
enum {
|
|
TxTest_PktType_EV3 = 0x17,
|
|
TxTest_PktType_EV4 = 0x1C,
|
|
TxTest_PktType_EV5 = 0x1D,
|
|
TxTest_PktType_2EV3 = 0x36,
|
|
TxTest_PktType_2EV5 = 0x3C,
|
|
TxTest_PktType_3EV3 = 0x37,
|
|
TxTest_PktType_3EV5 = 0x3D,
|
|
};
|
|
|
|
typedef UCHAR tBRM_PktMode;
|
|
|
|
enum {
|
|
eBRM_Mode_Basic = 0,
|
|
eBRM_Mode_2Mbps = 2,
|
|
eBRM_Mode_3Mbps = 3
|
|
};
|
|
|
|
// tBRM_TestMode
|
|
enum {
|
|
eBRM_TestMode_Pause = 0,
|
|
eBRM_TestMode_TX_0,
|
|
eBRM_TestMode_TX_1,
|
|
eBRM_TestMode_TX_1010,
|
|
eBRM_TestMode_TX_PRBS,
|
|
eBRM_TestMode_Loop_ACL,
|
|
eBRM_TestMode_Loop_SCO,
|
|
eBRM_TestMode_Loop_ACL_No_Whitening,
|
|
eBRM_TestMode_Loop_SCO_No_Whitening,
|
|
eBRM_TestMode_TX_11110000,
|
|
eBRM_TestMode_Rx,
|
|
eBRM_TestMode_Exit = 255,
|
|
};
|
|
enum {
|
|
Cont_Tx_Raw_1MHz = 0,
|
|
Cont_Tx_Raw_2MHz,
|
|
Cont_Tx_Raw_3MHz,
|
|
Cont_Tx_Regular,
|
|
CW_Single_Tone,
|
|
};
|
|
typedef UCHAR tBRM_TestMode;
|
|
|
|
typedef struct tBRM_TestControl {
|
|
tBRM_TestMode Mode;
|
|
UCHAR HopMode;
|
|
UCHAR TxFreq;
|
|
UCHAR RxFreq;
|
|
UCHAR Power;
|
|
// UCHAR PollPeriod;
|
|
UCHAR Packet;
|
|
UCHAR SkipRxSlot;
|
|
int DataLen;
|
|
} tBRM_TestControl;
|
|
|
|
typedef struct tLE_TxParms {
|
|
UCHAR PktPayload;
|
|
} tLE_TxParms;
|
|
|
|
typedef struct tBRM_Control_packet {
|
|
tBRM_TestControl testCtrl;
|
|
UCHAR bdaddr[6];
|
|
UCHAR ContTxMode; // Continuous TX Mode
|
|
UCHAR ContTxType;
|
|
UCHAR ContRxMode; // Continuous RX Mode
|
|
UCHAR BERType;
|
|
UCHAR LERxMode;
|
|
UCHAR LETxMode;
|
|
tLE_TxParms LETxParms;
|
|
} tBRM_Control_packet;
|
|
|
|
|
|
#define DM1_MAX_PAYLOAD 17
|
|
#define DH1_MAX_PAYLOAD 27
|
|
#define DM3_MAX_PAYLOAD 121
|
|
#define DH3_MAX_PAYLOAD 183
|
|
#define DM5_MAX_PAYLOAD 224
|
|
#define DH5_MAX_PAYLOAD 339
|
|
#define AUX1_MAX_PAYLOAD 29
|
|
#define E2_DH1_MAX_PAYLOAD 54
|
|
#define E2_DH3_MAX_PAYLOAD 367
|
|
#define E2_DH5_MAX_PAYLOAD 679
|
|
#define E3_DH1_MAX_PAYLOAD 83
|
|
#define E3_DH3_MAX_PAYLOAD 552
|
|
#define E3_DH5_MAX_PAYLOAD 1021
|
|
|
|
enum E_MasterBlasterFieldID
|
|
{
|
|
CR = 0,
|
|
CT,
|
|
LR,
|
|
LT,
|
|
LTM,
|
|
CX,
|
|
TM,
|
|
HM,
|
|
TF,
|
|
RF,
|
|
PT,
|
|
DL,
|
|
PO,
|
|
BA,
|
|
SB,
|
|
GB,
|
|
RX,
|
|
TX,
|
|
EN,
|
|
ST,
|
|
EX,
|
|
EXX,
|
|
};
|
|
|
|
enum E_MasterBlasterTestFlag
|
|
{
|
|
MB_NO_TEST = 0,
|
|
MB_RX_TEST,
|
|
MB_TX_TEST,
|
|
MB_CONT_RX_TEST,
|
|
MB_CONT_TX_TEST,
|
|
MB_LE_RX_TEST,
|
|
MB_LE_TX_TEST,
|
|
};
|
|
|
|
enum E_DisableEnable
|
|
{
|
|
DISABLE = 0,
|
|
ENABLE = 1,
|
|
};
|
|
|
|
#define MB_MIN_DATALEN 0
|
|
#define MB_MAX_DATALEN 1021
|
|
#define MB_MIN_FREQUENCY 0
|
|
#define MB_MAX_FREQUENCY 79
|
|
#define MB_MIN_FREQUENCY_LE 0
|
|
#define MB_MAX_FREQUENCY_LE 39
|
|
#define MB_MIN_DATALEN_LE 0
|
|
#define MB_MAX_DATALEN_LE 37
|
|
typedef struct STR_MasterBlasterOption
|
|
{
|
|
char *Name;
|
|
int Value;
|
|
} tMasterBlasterOption;
|
|
|
|
typedef struct STR_MasterBlasterField
|
|
{
|
|
char *Name;
|
|
char *Alias;
|
|
char *Usage;
|
|
int Default;
|
|
tMasterBlasterOption *Options;
|
|
int (*pFunc)(tBRM_Control_packet *MasterBlaster, tMasterBlasterOption *Option);
|
|
} tMasterBlasterField;
|
|
|
|
static tMasterBlasterOption TestModeOption[] =
|
|
{
|
|
{"TX_0", eBRM_TestMode_TX_0},
|
|
{"TX_1", eBRM_TestMode_TX_1},
|
|
{"TX_1010", eBRM_TestMode_TX_1010},
|
|
{"TX_PRBS", eBRM_TestMode_TX_PRBS},
|
|
{"TX_11110000", eBRM_TestMode_TX_11110000},
|
|
{"RX", eBRM_TestMode_Rx},
|
|
};
|
|
|
|
static tMasterBlasterOption HopModeOption[] =
|
|
{
|
|
{"Disable", DISABLE},
|
|
{"Enable", ENABLE},
|
|
};
|
|
|
|
static tMasterBlasterOption PacketTypeOption[] =
|
|
{
|
|
{"DM1", TxTest_PktType_DM1},
|
|
{"DM3", TxTest_PktType_DM3},
|
|
{"DM5", TxTest_PktType_DM5},
|
|
{"DH1", TxTest_PktType_DH1},
|
|
{"DH3", TxTest_PktType_DH3},
|
|
{"DH5", TxTest_PktType_DH5},
|
|
{"2-DH1", TxTest_PktType_2DH1},
|
|
{"2-DH3", TxTest_PktType_2DH3},
|
|
{"2-DH5", TxTest_PktType_2DH5},
|
|
{"3-DH1", TxTest_PktType_3DH1},
|
|
{"3-DH3", TxTest_PktType_3DH3},
|
|
{"3-DH5", TxTest_PktType_3DH5},
|
|
};
|
|
|
|
static int MaxDataLenOption[] =
|
|
{
|
|
DM1_MAX_PAYLOAD,
|
|
DM3_MAX_PAYLOAD,
|
|
DM5_MAX_PAYLOAD,
|
|
DH1_MAX_PAYLOAD,
|
|
DH3_MAX_PAYLOAD,
|
|
DH5_MAX_PAYLOAD,
|
|
E2_DH1_MAX_PAYLOAD,
|
|
E2_DH3_MAX_PAYLOAD,
|
|
E2_DH5_MAX_PAYLOAD,
|
|
E3_DH1_MAX_PAYLOAD,
|
|
E3_DH3_MAX_PAYLOAD,
|
|
E3_DH5_MAX_PAYLOAD,
|
|
};
|
|
|
|
enum {
|
|
eBRM_BERMode_ALL = 0, // ALL type
|
|
eBRM_BERMode_ALL_DATA, // All type except dm1,dm3,dm5
|
|
eBRM_BERMode_DM1,
|
|
eBRM_BERMode_DM3,
|
|
eBRM_BERMode_DM5,
|
|
eBRM_BERMode_DH1,
|
|
eBRM_BERMode_DH3,
|
|
eBRM_BERMode_DH5,
|
|
eBRM_BERMode_2DH1,
|
|
eBRM_BERMode_2DH3,
|
|
eBRM_BERMode_2DH5,
|
|
eBRM_BERMode_3DH1,
|
|
eBRM_BERMode_3DH3,
|
|
eBRM_BERMode_3DH5,
|
|
};
|
|
|
|
static tMasterBlasterOption BERPacketTypeOption[] =
|
|
{
|
|
{"ALL", eBRM_BERMode_ALL},
|
|
{"ALL_DATA", eBRM_BERMode_ALL_DATA},
|
|
{"DM1", eBRM_BERMode_DM1},
|
|
{"DM3", eBRM_BERMode_DM3},
|
|
{"DM5", eBRM_BERMode_DM5},
|
|
{"DH1", eBRM_BERMode_DH1},
|
|
{"DH3", eBRM_BERMode_DH3},
|
|
{"DH5", eBRM_BERMode_DH5},
|
|
{"2DH1", eBRM_BERMode_2DH1},
|
|
{"2DH3", eBRM_BERMode_2DH3},
|
|
{"2DH5", eBRM_BERMode_2DH5},
|
|
{"3DH1", eBRM_BERMode_3DH1},
|
|
{"3DH3", eBRM_BERMode_3DH3},
|
|
{"3DH5", eBRM_BERMode_3DH5},
|
|
};
|
|
|
|
static tMasterBlasterOption ContTxModeOption[] =
|
|
{
|
|
{"Disable", DISABLE},
|
|
{"Enable", ENABLE},
|
|
};
|
|
|
|
static tMasterBlasterOption ContTxTypeOption[] =
|
|
{
|
|
{"Raw_1MHz", Cont_Tx_Raw_1MHz},
|
|
{"Raw_2MHz", Cont_Tx_Raw_2MHz},
|
|
{"Raw_3MHz", Cont_Tx_Raw_3MHz},
|
|
{"Regular_BT_Packet_Format", Cont_Tx_Regular},
|
|
{"CW_Single_Tone", CW_Single_Tone},
|
|
};
|
|
|
|
static tMasterBlasterOption ContRxModeOption[] =
|
|
{
|
|
{"Disable", DISABLE},
|
|
{"Enable", ENABLE},
|
|
};
|
|
|
|
static tMasterBlasterOption LETxPktPayloadOption[] =
|
|
{
|
|
{"Random_9", 0},
|
|
{"11110000", 1},
|
|
{"10101010", 2},
|
|
{"Random_15", 3},
|
|
{"11111111", 4},
|
|
{"00000000", 5},
|
|
{"00001111", 6},
|
|
{"01010101", 7},
|
|
};
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Prototypes
|
|
//----------------------------------------------------------------------------
|
|
|
|
void InitMasterBlaster (tBRM_Control_packet *MasterBlaster, bdaddr_t *BdAddr, UCHAR *SkipRxSlot);
|
|
|
|
int CheckField (tBRM_Control_packet MasterBlaster, char *FieldAlias);
|
|
int GetTestModeOptionIndex (int Mode);
|
|
int GetPacketTypeOptionIndex (int PacketType);
|
|
|
|
void PrintMasterBlasterMenu (tBRM_Control_packet *MasterBlaster);
|
|
int SetMasterBlasterTestMode (tBRM_Control_packet *MasterBlaster, tMasterBlasterOption *Option);
|
|
int SetMasterBlasterHopMode (tBRM_Control_packet *MasterBlaster, tMasterBlasterOption *Option);
|
|
int SetMasterBlasterPacketType (tBRM_Control_packet *MasterBlaster, tMasterBlasterOption *Option);
|
|
int SetMasterBlasterTxFreq (tBRM_Control_packet *MasterBlaster, tMasterBlasterOption *Option);
|
|
int SetMasterBlasterRxFreq (tBRM_Control_packet *MasterBlaster, tMasterBlasterOption *Option);
|
|
int SetMasterBlasterPower (tBRM_Control_packet *MasterBlaster, tMasterBlasterOption *Option);
|
|
int SetMasterBlasterDataLen (tBRM_Control_packet *MasterBlaster, tMasterBlasterOption *Option);
|
|
int SetMasterBlasterBdAddr (tBRM_Control_packet *MasterBlaster, tMasterBlasterOption *Option);
|
|
int SetMasterBlasterContTxMode (tBRM_Control_packet *MasterBlaster, tMasterBlasterOption *Option);
|
|
int SetMasterBlasterContTxType (tBRM_Control_packet *MasterBlaster, tMasterBlasterOption *Option);
|
|
int SetMasterBlasterNothing (tBRM_Control_packet *MasterBlaster, tMasterBlasterOption *Option);
|
|
int SetMasterBlasterContRxMode (tBRM_Control_packet *MasterBlaster, tMasterBlasterOption *Option);
|
|
int SetMasterBlasterLERxMode(tBRM_Control_packet *MasterBlaster, tMasterBlasterOption *Option);
|
|
int SetMasterBlasterLETxMode(tBRM_Control_packet *MasterBlaster, tMasterBlasterOption *Option);
|
|
int SetMasterBlasterLETxPktPayload(tBRM_Control_packet *MasterBlaster, tMasterBlasterOption *Option);
|
|
int SetMasterBlasterBERType(tBRM_Control_packet *MasterBlaster, tMasterBlasterOption *Option);
|
|
|
|
int ToggleOption (int *Value, tMasterBlasterOption *Option, tMasterBlasterOption *OptionArray,
|
|
int Size, int FieldID, int Step);
|
|
int MinMaxOption (int *Value, tMasterBlasterOption *Option, int Min, int Max);
|
|
int ToggleMinMaxOption (int *Value, tMasterBlasterOption *Option, int FieldID, int Min, int Max, int Step);
|
|
|
|
//----------------------------------------------------------------------------
|
|
// Variables
|
|
//----------------------------------------------------------------------------
|
|
|
|
extern tMasterBlasterField MasterBlasterMenu[];
|
|
extern tPsSysCfgTransmitPowerControlTable TpcTable;
|
|
|
|
#endif // _MASTERBLASTER_H_
|