⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mdevtbl_rel.c

📁 Atheros AP Test with Agilent N4010A source code
💻 C
📖 第 1 页 / 共 2 页
字号:
	beginSendStatsPktAr5513,
	writeRxDescriptorAr5513,
	rxBeginConfigAr5513,
	rxCleanupConfigAr5513,
	txCleanupConfigAr5211,
	txGetDescRateAr5212,
	setPPM5513,
	isTxdescEvent5211,
	isRxdescEvent5211,
	isTxComplete5211,
	enableRx5211,
	disableRx5211,
	setQueueAr5211,
	mapQueueAr5211,
	clearKeyCacheAr5211,
	AGCDeafAr5211,
	AGCUnDeafAr5211
};
#endif
static RF_API_TABLE fezAPI = {
	initPowerAr5210,
	setSinglePowerAr5210,
	setChannelAr5210
};

static RF_API_TABLE sombreroAPI = {
	initPowerAr5211,
	setSinglePowerAr5211,
	setChannelAr5211
};

static RF_API_TABLE sombrero_beanieAPI = {
	initPowerAr5211,
	setSinglePowerAr5211,
	setChannelAr5211_beanie
};

static RF_API_TABLE derbyAPI = {
	initPowerAr5212,
	setSinglePowerAr5211,
	setChannelAr5212
};


static RF_API_TABLE griffinRfAPI = {
	initPowerAr2413,
	setSinglePowerAr5211,
	setChannelAr2413
};
#ifndef LINUX
static RF_API_TABLE dragonRfAPI = {
	initPowerAr6000,
	setSinglePowerAr5211,
	setChannelAr6000
};
#endif
static ART_ANI_API_TABLE veniceArtAniAPI = {
	configArtAniLadderAr5212,
	enableArtAniAr5212,
	disableArtAniAr5212,
	setArtAniLevelAr5212,
	setArtAniLevelMaxAr5212,
	setArtAniLevelMinAr5212,
	incrementArtAniLevelAr5212,
	decrementArtAniLevelAr5212,
	getArtAniLevelAr5212,
	measArtAniFalseDetectsAr5212,
	isArtAniOptimizedAr5212,
	getArtAniFalseDetectsAr5212,
	setArtAniFalseDetectIntervalAr5212,
	programCurrArtAniLevelAr5212
};

ANALOG_REV fezRevs[] = { 
	{0, 0x8},
    {0, 0x9}
};
const A_UINT16 numFezRevs = sizeof(fezRevs)/sizeof(ANALOG_REV);

ANALOG_REV sombreroRevs[] = {
	{1, 0x5},
	{1, 0x6},
	{1, 0x7}
};
const A_UINT16 numSombreroRevs = sizeof(sombreroRevs)/sizeof(ANALOG_REV);

ANALOG_REV derby1Revs[] = {
	{3, 0x1},
	{3, 0x2}
};
const A_UINT16 numDerby1Revs = sizeof(derby1Revs)/sizeof(ANALOG_REV);

ANALOG_REV derby1_2Revs[] = {
	{3, 0x3},
	{3, 0x4},
//	{0, 0} 
};
const A_UINT16 numderby1_2Revs = sizeof(derby1_2Revs)/sizeof(ANALOG_REV);

ANALOG_REV derby2Revs[] = {
	{3, 0x5},
	{4, 0x5},
//	{3, 0x6},
//	{4, 0x6},
	{0, 0}   // dummy to handle AP31 with no 5G derby
};
const A_UINT16 numderby2Revs = sizeof(derby2Revs)/sizeof(ANALOG_REV);

ANALOG_REV derby2_1Revs[] = {
	{3, 0x6},
	{4, 0x6},
	{0, 0}   // dummy to handle AP31 with no 5G derby
};
const A_UINT16 numderby2_1Revs = sizeof(derby2_1Revs)/sizeof(ANALOG_REV);

A_UINT16 veniceRevs[] = {
	0x50, 0x51, 0x53, 0x56
};

const A_UINT16 numVeniceRevs = sizeof(veniceRevs)/sizeof(A_UINT16);

A_UINT16 predatorRevs[] = {
	0x00,  // For emulation
	0x80,  // Predator 1.0
	0x81,  // Predator 1.1
};

const A_UINT16 numPredatorRevs = sizeof(predatorRevs)/sizeof(A_UINT16);

A_UINT16 hainanRevs[] = {
	0x55,
	0x59
};
const A_UINT16 numHainanRevs = sizeof(hainanRevs)/sizeof(A_UINT16);

A_UINT16 griffinRevs[] = {
	0x74,  // griffin 1.0
    0x75,  // griffin 1.1
    0x76,  // griffin 2.0
	0x78,  //griffin lite
	0x79,   //griffin 2.1
//	0xa0,   //special build additions
	0x00
};
const A_UINT16 numGriffinRevs = sizeof(griffinRevs)/sizeof(A_UINT16);

A_UINT16 eagleRevs[] = {
	0xa0,   //eagle 1.0
	0xa1,  // eagle 1.0
	0x00,
};

const A_UINT16 numEagleRevs = sizeof(eagleRevs)/sizeof(A_UINT16);

A_UINT16 eagle2Revs[] = {
	0xa2,  // eagle 2.0
	0xa3,  // eagle 2.0
	0xa4,  // eagle 2.1 lite
	0xa5,  // eagle 2.1 super
};

const A_UINT16 numEagle2Revs = sizeof(eagle2Revs)/sizeof(A_UINT16);

A_UINT16 cobraRevs[] = {
	0xb0,  // cobra 1.0
};

A_UINT16 dragonRevs[] = {
	0x00,  // dragon 1.0
};
const A_UINT16 numDragonRevs = sizeof(dragonRevs)/sizeof(A_UINT16);

ANALOG_REV griffinAnalogRevs[] = {
	{5, 0x1},
	{5, 0x2},
};
const A_UINT16 numGriffinAnalogRevs = sizeof(griffinAnalogRevs)/sizeof(ANALOG_REV);

ANALOG_REV griffin1_1_AnalogRevs[] = {
	{5, 0x3},
	{5, 0x4},
};
const A_UINT16 numGriffin1_1_AnalogRevs = sizeof(griffin1_1_AnalogRevs)/sizeof(ANALOG_REV);

ANALOG_REV griffin2_AnalogRevs[] = {
	{5, 0x5},
	{5, 0x6},
};
const A_UINT16 numGriffin2_AnalogRevs = sizeof(griffin2_AnalogRevs)/sizeof(ANALOG_REV);

ANALOG_REV eagleAnalogRevs[] = {
	{6, 0x0},
	{6, 0x1},
};
const A_UINT16 numEagleAnalogRevs = sizeof(eagleAnalogRevs)/sizeof(ANALOG_REV);

ANALOG_REV eagle2AnalogRevs[] = {
	{6, 0x2},
	{6, 0x3},
};
const A_UINT16 numEagle2AnalogRevs = sizeof(eagle2AnalogRevs)/sizeof(ANALOG_REV);

ANALOG_REV cobraAnalogRevs[] = {
	{7, 0x0},
};

ANALOG_REV spiderAnalogRevs[] = {
	{8, 0x3},
};

ANALOG_REV dragonAnalogRevs[] = {
	{9, 0x0},
};
const A_UINT16 numDragonAnalogRevs = sizeof(dragonAnalogRevs)/sizeof(ANALOG_REV);

A_UINT16 condorRevs[] = {
	0x92,  //condor 1.0 lite
	0x93,  //condor 1.0 full
	0x9a,  //condor 2.0 lite
	0x9b,  //condor 2.0 full
};

const A_UINT16 numCondorRevs = sizeof(condorRevs)/sizeof(A_UINT16);

ANALOG_REV condorAnalogRevs[] = {
	{6, 0x3},
	{7, 0x1},
	{0xa, 0x2}, //condor 2.0
};
const A_UINT16 numCondorAnalogRevs = sizeof(condorAnalogRevs)/sizeof(ANALOG_REV);


DEVICE_INIT_DATA ar5kInitData[] = {
#ifndef MDK_AP


	{DONT_MATCH, derby2_1Revs, (sizeof(derby2_1Revs)/sizeof(ANALOG_REV)), hainanRevs, (sizeof(hainanRevs)/sizeof(A_UINT16)), SW_DEVICE_ID_HAINAN_DERBY, //Identifiers
	 hainan_derby2_1,  sizeof(hainan_derby2_1)/sizeof(ATHEROS_REG_FILE),	//Register file
	 &veniceAPI, &derbyAPI,	&veniceArtAniAPI,								//APIs
	 3, hainan_derby2_1_mode, sizeof(hainan_derby2_1_mode)/sizeof(MODE_INFO), //Mode file
	 CFG_VERSION_STRING_d017 },												//configuration string


	{DONT_MATCH, condorAnalogRevs, (sizeof(condorAnalogRevs)/sizeof(ANALOG_REV)), condorRevs,(sizeof(condorRevs)/sizeof(A_UINT16)), SW_DEVICE_ID_CONDOR, //Identifiers
	 condor,  sizeof(condor)/sizeof(ATHEROS_REG_FILE),	//Register file
	 &eagleAPI, &griffinRfAPI,	&veniceArtAniAPI,								//APIs
	 3, condor_mode, sizeof(condor_mode)/sizeof(MODE_INFO), //Mode file
	 CFG_VERSION_STRING_0020 },												//configuration string


	{DONT_MATCH, griffin2_AnalogRevs,sizeof(griffin2_AnalogRevs)/sizeof(ANALOG_REV) , griffinRevs,sizeof(griffinRevs)/sizeof(A_UINT16) , SW_DEVICE_ID_GRIFFIN, //Identifiers
	 griffin2,  sizeof(griffin2)/sizeof(ATHEROS_REG_FILE),	//Register file
	 &veniceAPI, &griffinRfAPI,	&veniceArtAniAPI,								//APIs
	 3, griffin2_mode, sizeof(griffin2_mode)/sizeof(MODE_INFO), //Mode file
	 CFG_VERSION_STRING_c018 },												//configuration string

	{DONT_MATCH, eagle2AnalogRevs,sizeof(eagle2AnalogRevs)/sizeof(ANALOG_REV) , eagle2Revs, sizeof(eagle2Revs)/sizeof(A_UINT16), SW_DEVICE_ID_EAGLE, //Identifiers
	 eagle2,  sizeof(eagle2)/sizeof(ATHEROS_REG_FILE),	//Register file
	 &eagleAPI, &griffinRfAPI,	&veniceArtAniAPI,								//APIs
	 3, eagle2_mode, sizeof(eagle2_mode)/sizeof(MODE_INFO), //Mode file
	 CFG_VERSION_STRING_d019 },												//configuration string

#ifndef LINUX  //TO BE CHANGED
	 {DONT_MATCH, dragonAnalogRevs, sizeof(dragonAnalogRevs)/sizeof(ANALOG_REV), dragonRevs, sizeof(dragonRevs)/sizeof(A_UINT16), SW_DEVICE_ID_DRAGON, //Identifiers
	 dragon,  sizeof(dragon)/sizeof(ATHEROS_REG_FILE),	//Register file
	 &dragonAPI, &dragonRfAPI,	&veniceArtAniAPI,								//APIs
	 3, dragon_mode, sizeof(dragon_mode)/sizeof(MODE_INFO), //Mode file
	 CFG_VERSION_STRING_d022 },
#endif
// Predator 
	{DONT_MATCH, derby2_1Revs, sizeof(derby2_1Revs)/sizeof(ANALOG_REV), predatorRevs, sizeof(predatorRevs)/sizeof(A_UINT16), SW_DEVICE_ID_PREDATOR, //Identifiers
	 predator_derby2_1,  sizeof(predator_derby2_1)/sizeof(ATHEROS_REG_FILE),	//Register file
	 &veniceAPI, &derbyAPI,	&veniceArtAniAPI,								//APIs
	 3, predator_derby2_1_mode, sizeof(predator_derby2_1_mode)/sizeof(MODE_INFO), //Mode file
	 CFG_VERSION_STRING_00b0 },												//configuration string
//#endif   // PREDATOR_BUILD

#endif //MDK_AP


#ifdef SPIRIT_AP
   	{0x0011, NULL, 0, NULL, 0, 0x0011,
	 ar5k0011_spirit1_som2_e4,  sizeof(ar5k0011_spirit1_som2_e4)/sizeof(ATHEROS_REG_FILE), 
	 &maui2API, &sombreroAPI,&veniceArtAniAPI,0,NULL,0,NULL },
#endif //SPIRIT_AP

#ifdef AP22_AP
	{0x0012, NULL, 0, NULL, 0, SW_DEVICE_ID_BOSS_0012,									//Identifiers
	 boss_0012, sizeof(boss_0012)/sizeof(ATHEROS_REG_FILE),				//register file
	 &maui2API, &sombrero_beanieAPI, &veniceArtAniAPI,					//APIs
	 2, boss_0012_mode, sizeof(boss_0012_mode)/sizeof(MODE_INFO),		//Mode file
	 CFG_VERSION_STRING_0012 },											//configuraton string

	{0xff12, NULL, 0, NULL, 0,	SW_DEVICE_ID_BOSS_0012,						    		//Identifiers
	 boss_0012, sizeof(boss_0012)/sizeof(ATHEROS_REG_FILE),				//Register file
	 &maui2API, &sombrero_beanieAPI, &veniceArtAniAPI,					//APIs
	 2, boss_0012_mode, sizeof(boss_0012_mode)/sizeof(MODE_INFO),		//Mode file
	 CFG_VERSION_STRING_0012 },											//configuration string

	{DONT_MATCH, derby2_1Revs, sizeof(derby2_1Revs)/sizeof(ANALOG_REV), veniceRevs, sizeof(veniceRevs)/sizeof(A_UINT16), SW_DEVICE_ID_VENICE_DERBY2, //Identifiers
	 venice_derby2_1,  sizeof(venice_derby2_1)/sizeof(ATHEROS_REG_FILE),		//Register file
	 &veniceAPI, &derbyAPI,	&veniceArtAniAPI,							//APIs
	 3, venice_derby2_1_mode, sizeof(venice_derby2_1_mode)/sizeof(MODE_INFO), //Mode file
	 CFG_VERSION_STRING_d016 },											//configuration string

	//will only point to this structure if want to load EAR from EEPROM
	{DONT_MATCH, derby2Revs, sizeof(derby2Revs)/sizeof(ANALOG_REV), veniceRevs, sizeof(veniceRevs)/sizeof(A_UINT16), SW_DEVICE_ID_VENICE_DERBY2, //Identifiers
	 venice_derby2_1_ear,  sizeof(venice_derby2_1_ear)/sizeof(ATHEROS_REG_FILE),		//Register file
	 &veniceAPI, &derbyAPI,	&veniceArtAniAPI,							//APIs
	 3, venice_derby2_1_mode_ear, sizeof(venice_derby2_1_mode_ear)/sizeof(MODE_INFO), //Mode file
	 CFG_VERSION_STRING_d016_EAR },											//configuration string

	{DONT_MATCH, derby2_1Revs, sizeof(derby2_1Revs)/sizeof(ANALOG_REV), hainanRevs, sizeof(hainanRevs)/sizeof(A_UINT16), SW_DEVICE_ID_HAINAN_DERBY, //Identifiers
	 hainan_derby2_1,  sizeof(hainan_derby2_1)/sizeof(ATHEROS_REG_FILE),	//Register file
	 &veniceAPI, &derbyAPI,	&veniceArtAniAPI,								//APIs
	 3, hainan_derby2_1_mode, sizeof(hainan_derby2_1_mode)/sizeof(MODE_INFO), //Mode file
	 CFG_VERSION_STRING_d017 },												//configuration string

	//will only point to this structure if want to load EAR from EEPROM
	//This is to support hainan ear, which must use same frozen venice_derby config file
	{DONT_MATCH, derby2Revs, sizeof(derby2Revs)/sizeof(ANALOG_REV), veniceRevs, sizeof(veniceRevs)/sizeof(A_UINT16), SW_DEVICE_ID_VENICE_DERBY2, //Identifiers
	 hainan_derby2_1_ear,  sizeof(hainan_derby2_1_ear)/sizeof(ATHEROS_REG_FILE),		//Register file
	 &veniceAPI, &derbyAPI,	&veniceArtAniAPI,							//APIs
	 3, hainan_derby2_1_mode_ear, sizeof(hainan_derby2_1_mode_ear)/sizeof(MODE_INFO), //Mode file
	 CFG_VERSION_STRING_d017_EAR },											//configuration string

	{DONT_MATCH, sombreroRevs, sizeof(sombreroRevs)/sizeof(ANALOG_REV), veniceRevs, sizeof(veniceRevs)/sizeof(A_UINT16), SW_DEVICE_ID_VENICE_SOMBRERO,	//Identifiers
	 venice,  sizeof(venice)/sizeof(ATHEROS_REG_FILE),						//Register file
	 &veniceAPI, &sombrero_beanieAPI, &veniceArtAniAPI,						//APIs
	 3, venice_mode, sizeof(venice_mode)/sizeof(MODE_INFO),					//Mode file
	 CFG_VERSION_STRING_0013 },												//configuration string
#endif // AP22_AP

#if (defined(FREEDOM_AP)||defined(THIN_CLIENT_BUILD))&&!defined(COBRA_AP)
	{0xa014,  derby2Revs, sizeof(derby2Revs)/sizeof(ANALOG_REV), NULL, 0,	0xa016,										//Identifiers
	 freedom2_derby2,  sizeof(freedom2_derby2)/sizeof(ATHEROS_REG_FILE),		//Register file
	 &veniceAPI, &derbyAPI,	&veniceArtAniAPI,								//APIs
	 3, freedom2_derby2_mode, sizeof(freedom2_derby2_mode)/sizeof(MODE_INFO), //Mode file 
	 CFG_VERSION_STRING_a016 },																	//configuration string

#endif

//	{0xa014,  derby2_1Revs, sizeof(derby2_1Revs)/sizeof(ANALOG_REV), NULL, 0,	0xa016,										//Identifiers
//	 freedom2_derby2_1,  sizeof(freedom2_derby2_1)/sizeof(ATHEROS_REG_FILE),		//Register file
//	 &veniceAPI, &derbyAPI,	&veniceArtAniAPI,								//APIs
//	 3, freedom2_derby2_1_mode, sizeof(freedom2_derby2_1_mode)/sizeof(MODE_INFO), //Mode file 
//	 CFG_VERSION_STRING_ad16 },																	//configuration string

//#endif

#ifdef SENAO_AP
	{DONT_MATCH, derby2_1Revs, sizeof(derby2_1Revs)/sizeof(ANALOG_REV), veniceRevs, sizeof(veniceRevs)/sizeof(A_UINT16), SW_DEVICE_ID_VENICE_DERBY2, //Identifiers
	 venice_derby2_1,  sizeof(venice_derby2_1)/sizeof(ATHEROS_REG_FILE),		//Register file
	 &veniceAPI, &derbyAPI,	&veniceArtAniAPI,							//APIs
	 3, venice_derby2_1_mode, sizeof(venice_derby2_1_mode)/sizeof(MODE_INFO), //Mode file
	 CFG_VERSION_STRING_d016 },											//configuration string

	//will only point to this structure if want to load EAR from EEPROM
	{DONT_MATCH, derby2Revs, sizeof(derby2Revs)/sizeof(ANALOG_REV), veniceRevs, sizeof(veniceRevs)/sizeof(A_UINT16), SW_DEVICE_ID_VENICE_DERBY2, //Identifiers
	 venice_derby2_1_ear,  sizeof(venice_derby2_1_ear)/sizeof(ATHEROS_REG_FILE),		//Register file
	 &veniceAPI, &derbyAPI,	&veniceArtAniAPI,							//APIs
	 3, venice_derby2_1_mode_ear, sizeof(venice_derby2_1_mode_ear)/sizeof(MODE_INFO), //Mode file
	 CFG_VERSION_STRING_d016_EAR },											//configuration string

	{DONT_MATCH, derby2_1Revs, sizeof(derby2Revs)/sizeof(ANALOG_REV), hainanRevs, sizeof(hainanRevs)/sizeof(A_UINT16), SW_DEVICE_ID_HAINAN_DERBY, //Identifiers
	 hainan_derby2_1,  sizeof(hainan_derby2_1)/sizeof(ATHEROS_REG_FILE),	//Register file
	 &veniceAPI, &derbyAPI,	&veniceArtAniAPI,								//APIs
	 3, hainan_derby2_1_mode, sizeof(hainan_derby2_1_mode)/sizeof(MODE_INFO), //Mode file
	 CFG_VERSION_STRING_d017 },												//configuration string

	//will only point to this structure if want to load EAR from EEPROM
	//This is to support hainan ear, which must use same frozen venice_derby config file
	{DONT_MATCH, derby2Revs, sizeof(derby2Revs)/sizeof(ANALOG_REV), veniceRevs, sizeof(veniceRevs)/sizeof(A_UINT16), SW_DEVICE_ID_VENICE_DERBY2, //Identifiers
	 hainan_derby2_1_ear,  sizeof(hainan_derby2_1_ear)/sizeof(ATHEROS_REG_FILE),		//Register file
	 &veniceAPI, &derbyAPI,	&veniceArtAniAPI,							//APIs
	 3, hainan_derby2_1_mode_ear, sizeof(hainan_derby2_1_mode_ear)/sizeof(MODE_INFO), //Mode file
	 CFG_VERSION_STRING_d017_EAR },											//configuration string

	{DONT_MATCH, griffin2_AnalogRevs,  sizeof(griffin2_AnalogRevs)/sizeof(ANALOG_REV), griffinRevs,sizeof(griffinRevs)/sizeof(A_UINT16), SW_DEVICE_ID_GRIFFIN, //Identifiers
	 griffin2,  sizeof(griffin2)/sizeof(ATHEROS_REG_FILE),	//Register file
	 &veniceAPI, &griffinRfAPI,	&veniceArtAniAPI,								//APIs
	 3, griffin2_mode, sizeof(griffin2_mode)/sizeof(MODE_INFO), //Mode file
	 CFG_VERSION_STRING_c018 },												//configuration string 

//will only point to this structure if want to load EAR from EEPROM
	//This is to support hainan ear, which must use same frozen venice_derby config file
	{DONT_MATCH, griffinAnalogRevs,sizeof(griffinAnalogRevs)/sizeof(ANALOG_REV),griffinRevs,sizeof(griffinRevs)/sizeof(A_UINT16),SW_DEVICE_ID_GRIFFIN, //Identifiers
	 hainan_derby2_1_ear,  sizeof(hainan_derby2_1_ear)/sizeof(ATHEROS_REG_FILE),		//Register file
	 &veniceAPI, &griffinRfAPI,	&veniceArtAniAPI,							//APIs
	 3, hainan_derby2_1_mode_ear, sizeof(hainan_derby2_1_mode_ear)/sizeof(MODE_INFO), //Mode file
	 CFG_VERSION_STRING_d017_EAR },	


	{DONT_MATCH, eagle2AnalogRevs, sizeof(eagle2AnalogRevs)/sizeof(ANALOG_REV), eagle2Revs, sizeof(eagle2Revs)/sizeof(A_UINT16), SW_DEVICE_ID_EAGLE, //Identifiers
	 eagle2,  sizeof(eagle2)/sizeof(ATHEROS_REG_FILE),	//Register file
	 &eagleAPI, &griffinRfAPI,	&veniceArtAniAPI,								//APIs
	 3, eagle2_mode, sizeof(eagle2_mode)/sizeof(MODE_INFO), //Mode file
	 CFG_VERSION_STRING_d019 },												//configuration string

	//will only point to this structure if want to load EAR from EEPROM
	//This is to support hainan ear, which must use same frozen venice_derby config file
	{DONT_MATCH, eagle2AnalogRevs, sizeof(eagle2AnalogRevs)/sizeof(ANALOG_REV), eagle2Revs, sizeof(eagle2Revs)/sizeof(A_UINT16), SW_DEVICE_ID_GRIFFIN, //Identifiers
	 hainan_derby2_1_ear,  sizeof(hainan_derby2_1_ear)/sizeof(ATHEROS_REG_FILE),		//Register file
	 &eagleAPI, &griffinRfAPI,	&veniceArtAniAPI,							//APIs
	 3, hainan_derby2_1_mode_ear, sizeof(hainan_derby2_1_mode_ear)/sizeof(MODE_INFO), //Mode file
	 CFG_VERSION_STRING_d017_EAR },											//configuration string
#endif // SENAO_AP

#ifdef COBRA_AP
	{DEVICE_ID_COBRA, cobraAnalogRevs,  sizeof(cobraAnalogRevs)/sizeof(ANALOG_REV), cobraRevs, sizeof(cobraRevs)/sizeof(A_UINT16), SW_DEVICE_ID_AP51, //Identifiers
	 cobra,  sizeof(cobra)/sizeof(ATHEROS_REG_FILE),	//Register file
	 &veniceAPI, &griffinRfAPI,	&veniceArtAniAPI,								//APIs
	 3, cobra_mode, sizeof(cobra_mode)/sizeof(MODE_INFO), //Mode file
	 CFG_VERSION_STRING_0020 },												//configuration string

	{DEVICE_ID_COBRA, spiderAnalogRevs,  sizeof(spiderAnalogRevs)/sizeof(ANALOG_REV), cobraRevs, sizeof(cobraRevs)/sizeof(A_UINT16), DEVICE_ID_SPIDER1_0, //Identifiers
	 spider,  sizeof(spider)/sizeof(ATHEROS_REG_FILE),	//Register file
	 &veniceAPI, &griffinRfAPI,	&veniceArtAniAPI,								//APIs
	 3, spider_mode, sizeof(spider_mode)/sizeof(MODE_INFO), //Mode file
	 CFG_VERSION_STRING_a055 },												//configuration string

#ifdef PCI_INTERFACE
	{DONT_MATCH, eagle2AnalogRevs, sizeof(eagle2AnalogRevs)/sizeof(ANALOG_REV), eagle2Revs, sizeof(eagle2Revs)/sizeof(A_UINT16), SW_DEVICE_ID_EAGLE, //Identifiers
	 eagle2,  sizeof(eagle2)/sizeof(ATHEROS_REG_FILE),	//Register file
	 &eagleAPI, &griffinRfAPI,	&veniceArtAniAPI,								//APIs
	 3, eagle2_mode, sizeof(eagle2_mode)/sizeof(MODE_INFO), //Mode file
	 CFG_VERSION_STRING_d019 },												//configuration string
#endif

#endif // Cobra AP


};

A_UINT32 numDeviceIDs = (sizeof(ar5kInitData)/sizeof(DEVICE_INIT_DATA));



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -