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

📄 ar5211.c

📁 无线网卡驱动 固件程序 There are currently 3 "programming generations" of Atheros 802.11 wireless devices (
💻 C
📖 第 1 页 / 共 5 页
字号:
	AR5K_PRINT_REGISTER(IER);	AR5K_PRINT_REGISTER(RTSD0);	AR5K_PRINT_REGISTER(TXCFG);	AR5K_PRINT_REGISTER(RXCFG);	AR5K_PRINT_REGISTER(RXJLA);	AR5K_PRINT_REGISTER(MIBC);	AR5K_PRINT_REGISTER(TOPS);	AR5K_PRINT_REGISTER(RXNOFRM);	AR5K_PRINT_REGISTER(RPGTO);	AR5K_PRINT_REGISTER(RFCNT);	AR5K_PRINT_REGISTER(MISC);	AR5K_PRINT_REGISTER(PISR);	AR5K_PRINT_REGISTER(SISR0);	AR5K_PRINT_REGISTER(SISR1);	AR5K_PRINT_REGISTER(SISR3);	AR5K_PRINT_REGISTER(SISR4);	AR5K_PRINT_REGISTER(QCU_TXE);	AR5K_PRINT_REGISTER(QCU_TXD);	AR5K_PRINT_REGISTER(DCU_GBL_IFS_SIFS);	AR5K_PRINT_REGISTER(DCU_GBL_IFS_SLOT);	AR5K_PRINT_REGISTER(DCU_FP);	AR5K_PRINT_REGISTER(DCU_TXP);	AR5K_PRINT_REGISTER(DCU_TX_FILTER);	AR5K_PRINT_REGISTER(RC);	AR5K_PRINT_REGISTER(SCR);	AR5K_PRINT_REGISTER(INTPEND);	AR5K_PRINT_REGISTER(PCICFG);	AR5K_PRINT_REGISTER(GPIOCR);	AR5K_PRINT_REGISTER(GPIODO);	AR5K_PRINT_REGISTER(SREV);	AR5K_PRINT_REGISTER(EEPROM_BASE);	AR5K_PRINT_REGISTER(EEPROM_DATA);	AR5K_PRINT_REGISTER(EEPROM_CMD);	AR5K_PRINT_REGISTER(EEPROM_CFG);	AR5K_PRINT_REGISTER(PCU_MIN);	AR5K_PRINT_REGISTER(STA_ID0);	AR5K_PRINT_REGISTER(STA_ID1);	AR5K_PRINT_REGISTER(BSS_ID0);	AR5K_PRINT_REGISTER(SLOT_TIME);	AR5K_PRINT_REGISTER(TIME_OUT);	AR5K_PRINT_REGISTER(RSSI_THR);	AR5K_PRINT_REGISTER(BEACON);	AR5K_PRINT_REGISTER(CFP_PERIOD);	AR5K_PRINT_REGISTER(TIMER0);	AR5K_PRINT_REGISTER(TIMER2);	AR5K_PRINT_REGISTER(TIMER3);	AR5K_PRINT_REGISTER(CFP_DUR);	AR5K_PRINT_REGISTER(MCAST_FIL0);	AR5K_PRINT_REGISTER(MCAST_FIL1);	AR5K_PRINT_REGISTER(DIAG_SW);	AR5K_PRINT_REGISTER(TSF_U32);	AR5K_PRINT_REGISTER(ADDAC_TEST);	AR5K_PRINT_REGISTER(DEFAULT_ANTENNA);	AR5K_PRINT_REGISTER(LAST_TSTP);	AR5K_PRINT_REGISTER(NAV);	AR5K_PRINT_REGISTER(RTS_OK);	AR5K_PRINT_REGISTER(ACK_FAIL);	AR5K_PRINT_REGISTER(FCS_FAIL);	AR5K_PRINT_REGISTER(BEACON_CNT);	AR5K_PRINT_REGISTER(KEYTABLE_0);	printf("\n");	printf("PHY registers:\n");	AR5K_PRINT_REGISTER(PHY_TURBO);	AR5K_PRINT_REGISTER(PHY_AGC);	AR5K_PRINT_REGISTER(PHY_CHIP_ID);	AR5K_PRINT_REGISTER(PHY_AGCCTL);	AR5K_PRINT_REGISTER(PHY_NF);	AR5K_PRINT_REGISTER(PHY_RX_DELAY);	AR5K_PRINT_REGISTER(PHY_IQ);	AR5K_PRINT_REGISTER(PHY_PAPD_PROBE);	AR5K_PRINT_REGISTER(PHY_FC);	AR5K_PRINT_REGISTER(PHY_RADAR);	AR5K_PRINT_REGISTER(PHY_ANT_SWITCH_TABLE_0);	AR5K_PRINT_REGISTER(PHY_ANT_SWITCH_TABLE_1);	printf("\n");#endif}HAL_BOOL /*Added arguments*/ar5k_ar5211_get_diag_state(struct ath_hal *hal, int request, const void *args, u_int32_t argsize, void **result, u_int32_t *resultsize){	/*	 * We'll ignore this right now. This seems to be some kind of an obscure	 * debugging interface for the binary-only HAL.	 */	return (AH_FALSE);}voidar5k_ar5211_get_lladdr(struct ath_hal *hal, u_int8_t *mac){	bcopy(hal->ah_sta_id, mac, IEEE80211_ADDR_LEN);}HAL_BOOLar5k_ar5211_set_lladdr(struct ath_hal *hal, const u_int8_t *mac){	u_int32_t low_id, high_id;	/* Set new station ID */	bcopy(mac, hal->ah_sta_id, IEEE80211_ADDR_LEN);	bcopy(mac, &low_id, 4);	bcopy(mac + 4, &high_id, 2);	high_id = 0x0000ffff & high_id;	AR5K_REG_WRITE(AR5K_AR5211_STA_ID0, low_id);	AR5K_REG_WRITE(AR5K_AR5211_STA_ID1, high_id);	return (AH_TRUE);}HAL_BOOLar5k_ar5211_set_regdomain(struct ath_hal *hal, u_int16_t regdomain,    HAL_STATUS *status){	ieee80211_regdomain_t ieee_regdomain;	ieee_regdomain = ar5k_regdomain_to_ieee(regdomain);	if (ar5k_eeprom_regulation_domain(hal, AH_TRUE,		&ieee_regdomain) == AH_TRUE) {		*status = HAL_OK;		return (AH_TRUE);	}	*status = EIO;	return (AH_FALSE);}voidar5k_ar5211_set_ledstate(struct ath_hal *hal, HAL_LED_STATE state){	u_int32_t led;	AR5K_REG_DISABLE_BITS(AR5K_AR5211_PCICFG,	    AR5K_AR5211_PCICFG_LEDMODE |  AR5K_AR5211_PCICFG_LED);	/*	 * Some blinking values, define at your wish	 */	switch (state) {	case IEEE80211_S_SCAN:	case IEEE80211_S_AUTH:		led = AR5K_AR5211_PCICFG_LEDMODE_PROP |		    AR5K_AR5211_PCICFG_LED_PEND;		break;	case IEEE80211_S_INIT:		led = AR5K_AR5211_PCICFG_LEDMODE_PROP |		    AR5K_AR5211_PCICFG_LED_NONE;		break;	case IEEE80211_S_ASSOC:	case IEEE80211_S_RUN:		led = AR5K_AR5211_PCICFG_LEDMODE_PROP |		    AR5K_AR5211_PCICFG_LED_ASSOC;		break;	default:		led = AR5K_AR5211_PCICFG_LEDMODE_PROM |		    AR5K_AR5211_PCICFG_LED_NONE;		break;	}	AR5K_REG_ENABLE_BITS(AR5K_AR5211_PCICFG, led);}void /*Removed argument trim_offset for combatibility -need revision*/ar5k_ar5211_set_associd(struct ath_hal *hal, const u_int8_t *bssid,    u_int16_t assoc_id){	u_int32_t low_id, high_id;	u_int16_t tim_offset = 0;	/*	 * Set BSSID which triggers the "SME Join" operation	 */	bcopy(bssid, &low_id, 4);	bcopy(bssid + 4, &high_id, 2);	AR5K_REG_WRITE(AR5K_AR5211_BSS_ID0, low_id);	AR5K_REG_WRITE(AR5K_AR5211_BSS_ID1, high_id |	    ((assoc_id & 0x3fff) << AR5K_AR5211_BSS_ID1_AID_S));	bcopy(bssid, hal->ah_bssid, IEEE80211_ADDR_LEN);	if (assoc_id == 0) {		ar5k_ar5211_disable_pspoll(hal);		return;	}	AR5K_REG_WRITE(AR5K_AR5211_BEACON,	    (AR5K_REG_READ(AR5K_AR5211_BEACON) &	    ~AR5K_AR5211_BEACON_TIM) |	    (((tim_offset ? tim_offset + 4 : 0) <<	    AR5K_AR5211_BEACON_TIM_S) &	    AR5K_AR5211_BEACON_TIM));	ar5k_ar5211_enable_pspoll(hal, NULL, 0);}HAL_BOOLar5k_ar5211_set_gpio_output(struct ath_hal *hal, u_int32_t gpio){	if (gpio > AR5K_AR5211_NUM_GPIO)		return (AH_FALSE);	AR5K_REG_WRITE(AR5K_AR5211_GPIOCR,	    (AR5K_REG_READ(AR5K_AR5211_GPIOCR) &~ AR5K_AR5211_GPIOCR_ALL(gpio))	    | AR5K_AR5211_GPIOCR_ALL(gpio));	return (AH_TRUE);}HAL_BOOLar5k_ar5211_set_gpio_input(struct ath_hal *hal, u_int32_t gpio){	if (gpio > AR5K_AR5211_NUM_GPIO)		return (AH_FALSE);	AR5K_REG_WRITE(AR5K_AR5211_GPIOCR,	    (AR5K_REG_READ(AR5K_AR5211_GPIOCR) &~ AR5K_AR5211_GPIOCR_ALL(gpio))	    | AR5K_AR5211_GPIOCR_NONE(gpio));	return (AH_TRUE);}u_int32_tar5k_ar5211_get_gpio(struct ath_hal *hal, u_int32_t gpio){	if (gpio > AR5K_AR5211_NUM_GPIO)		return (0xffffffff);	/* GPIO input magic */	return (((AR5K_REG_READ(AR5K_AR5211_GPIODI) &	    AR5K_AR5211_GPIODI_M) >> gpio) & 0x1);}HAL_BOOLar5k_ar5211_set_gpio(struct ath_hal *hal, u_int32_t gpio, u_int32_t val){	u_int32_t data;	if (gpio > AR5K_AR5211_NUM_GPIO)		return (0xffffffff);	/* GPIO output magic */	data =  AR5K_REG_READ(AR5K_AR5211_GPIODO);	data &= ~(1 << gpio);	data |= (val&1) << gpio;	AR5K_REG_WRITE(AR5K_AR5211_GPIODO, data);	return (AH_TRUE);}voidar5k_ar5211_set_gpio_intr(struct ath_hal *hal, u_int gpio,    u_int32_t interrupt_level){	u_int32_t data;	if (gpio > AR5K_AR5211_NUM_GPIO)		return;	/*	 * Set the GPIO interrupt	 */	data = (AR5K_REG_READ(AR5K_AR5211_GPIOCR) &	    ~(AR5K_AR5211_GPIOCR_INT_SEL(gpio) | AR5K_AR5211_GPIOCR_INT_SELH |	    AR5K_AR5211_GPIOCR_INT_ENA | AR5K_AR5211_GPIOCR_ALL(gpio))) |	    (AR5K_AR5211_GPIOCR_INT_SEL(gpio) | AR5K_AR5211_GPIOCR_INT_ENA);	AR5K_REG_WRITE(AR5K_AR5211_GPIOCR,	    interrupt_level ? data : (data | AR5K_AR5211_GPIOCR_INT_SELH));	hal->ah_imr |= AR5K_AR5211_PIMR_GPIO;	/* Enable GPIO interrupts */	AR5K_REG_ENABLE_BITS(AR5K_AR5211_PIMR, AR5K_AR5211_PIMR_GPIO);}u_int32_tar5k_ar5211_get_tsf32(struct ath_hal *hal){	return (AR5K_REG_READ(AR5K_AR5211_TSF_L32));}u_int64_tar5k_ar5211_get_tsf64(struct ath_hal *hal){	u_int64_t tsf = AR5K_REG_READ(AR5K_AR5211_TSF_U32);	return (AR5K_REG_READ(AR5K_AR5211_TSF_L32) | (tsf << 32));}voidar5k_ar5211_reset_tsf(struct ath_hal *hal){	AR5K_REG_ENABLE_BITS(AR5K_AR5211_BEACON,	    AR5K_AR5211_BEACON_RESET_TSF);}u_int16_tar5k_ar5211_get_regdomain(struct ath_hal *hal){	return (ar5k_get_regdomain(hal));}HAL_BOOLar5k_ar5211_detect_card_present(struct ath_hal *hal){	u_int16_t magic;	/*	 * Checking the EEPROM's magic value could be an indication	 * if the card is still present. I didn't find another suitable	 * way to do this.	 */	if (ar5k_ar5211_eeprom_read(hal, AR5K_EEPROM_MAGIC, &magic) != 0)		return (AH_FALSE);	return (magic == AR5K_EEPROM_MAGIC_VALUE ? AH_TRUE : AH_FALSE);}voidar5k_ar5211_update_mib_counters(struct ath_hal *hal, HAL_MIB_STATS *statistics){	statistics->ackrcv_bad += AR5K_REG_READ(AR5K_AR5211_ACK_FAIL);	statistics->rts_bad += AR5K_REG_READ(AR5K_AR5211_RTS_FAIL);	statistics->rts_good += AR5K_REG_READ(AR5K_AR5211_RTS_OK);	statistics->fcs_bad += AR5K_REG_READ(AR5K_AR5211_FCS_FAIL);	statistics->beacons += AR5K_REG_READ(AR5K_AR5211_BEACON_CNT);}void /*Unimplemented*/ar5k_ar5211_proc_mib_event(struct ath_hal *hal, const HAL_NODE_STATS *stats) {	AR5K_TRACE;	return;}HAL_RFGAINar5k_ar5211_get_rf_gain(struct ath_hal *hal){	return (HAL_RFGAIN_INACTIVE);}HAL_BOOLar5k_ar5211_set_slot_time(struct ath_hal *hal, u_int slot_time){	if (slot_time < HAL_SLOT_TIME_9 || slot_time > HAL_SLOT_TIME_MAX)		return (AH_FALSE);	AR5K_REG_WRITE(AR5K_AR5211_DCU_GBL_IFS_SLOT, slot_time);	return (AH_TRUE);}u_intar5k_ar5211_get_slot_time(struct ath_hal *hal){	return (AR5K_REG_READ(AR5K_AR5211_DCU_GBL_IFS_SLOT) & 0xffff);}HAL_BOOLar5k_ar5211_set_ack_timeout(struct ath_hal *hal, u_int timeout){	if (ar5k_clocktoh(AR5K_REG_MS(0xffffffff, AR5K_AR5211_TIME_OUT_ACK),	    hal->ah_turbo) <= timeout)		return (AH_FALSE);	AR5K_REG_WRITE_BITS(AR5K_AR5211_TIME_OUT, AR5K_AR5211_TIME_OUT_ACK,	    ar5k_htoclock(timeout, hal->ah_turbo));	return (AH_TRUE);}u_intar5k_ar5211_get_ack_timeout(struct ath_hal *hal){	return (ar5k_clocktoh(AR5K_REG_MS(AR5K_REG_READ(AR5K_AR5211_TIME_OUT),	    AR5K_AR5211_TIME_OUT_ACK), hal->ah_turbo));}HAL_BOOLar5k_ar5211_set_cts_timeout(struct ath_hal *hal, u_int timeout){	if (ar5k_clocktoh(AR5K_REG_MS(0xffffffff, AR5K_AR5211_TIME_OUT_CTS),	    hal->ah_turbo) <= timeout)		return (AH_FALSE);	AR5K_REG_WRITE_BITS(AR5K_AR5211_TIME_OUT, AR5K_AR5211_TIME_OUT_CTS,	    ar5k_htoclock(timeout, hal->ah_turbo));	return (AH_TRUE);}u_intar5k_ar5211_get_cts_timeout(struct ath_hal *hal){	return (ar5k_clocktoh(AR5K_REG_MS(AR5K_REG_READ(AR5K_AR5211_TIME_OUT),	    AR5K_AR5211_TIME_OUT_CTS), hal->ah_turbo));}HAL_STATUS /*New*/ar5k_ar5211_get_capability(struct ath_hal *hal, HAL_CAPABILITY_TYPE cap_type,			   u_int32_t capability, u_int32_t *result) {	AR5K_TRACE;	switch (cap_type) {	case HAL_CAP_REG_DMN:		if (result){			*result = ar5k_get_regdomain(hal);			goto yes;		}	case HAL_CAP_CIPHER: 		switch (capability) {		case HAL_CIPHER_WEP: goto yes;		default:             goto no;		}	case HAL_CAP_NUM_TXQUEUES: 		if (result) {			*result = AR5K_AR5211_TX_NUM_QUEUES;			goto yes;		}	case HAL_CAP_VEOL:		goto yes;	case HAL_CAP_PSPOLL:		goto no;	case HAL_CAP_COMPRESSION:		goto yes;	case HAL_CAP_BURST:		goto yes;	case HAL_CAP_TPC:		goto yes;	case HAL_CAP_BSSIDMASK:		goto yes;	case HAL_CAP_XR:		goto yes;	default: 		goto no;	} no:	return (HAL_EINVAL); yes:	return HAL_OK;	}HAL_BOOLar5k_ar5211_set_capability(struct ath_hal *hal, HAL_CAPABILITY_TYPE cap_type,			   u_int32_t capability, u_int32_t setting, HAL_STATUS *status) {	AR5K_TRACE;	if (status) {		*status = HAL_OK;	}	return (AH_FALSE);}/* * Key table (WEP) functions */HAL_BOOLar5k_ar5211_is_cipher_supported(struct ath_hal *hal, HAL_CIPHER cipher){	/*	 * The AR5211 only supports WEP	 */	if (cipher == HAL_CIPHER_WEP)		return (AH_TRUE);	return (AH_FALSE);}u_int32_tar5k_ar5211_get_keycache_size(struct ath_hal *hal){	return (AR5K_AR5211_KEYCACHE_SIZE);}HAL_BOOLar5k_ar5211_reset_key(struct ath_hal *hal, u_int16_t entry){	int i;	AR5K_ASSERT_ENTRY(entry, AR5K_AR5211_KEYTABLE_SIZE);	for (i = 0; i < AR5K_AR5211_KEYCACHE_SIZE; i++)		AR5K_REG_WRITE(AR5K_AR5211_KEYTABLE_OFF(entry, i), 0);	return (AH_FALSE);}HAL_BOOLar5k_ar5211_is_key_valid(struct ath_hal *hal, u_int16_t entry){	AR5K_ASSERT_ENTRY(entry, AR5K_AR5211_KEYTABLE_SIZE);	/*	 * Check the validation flag at the end of the entry	 */	if (AR5K_REG_READ(AR5K_AR5211_KEYTABLE_MAC1(entry)) &

⌨️ 快捷键说明

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