/* * 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. * *
* * */ #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_