亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? am930hw.c

?? wlan_monitor monitor utility for wlan device
?? C
?? 第 1 頁 / 共 4 頁
字號:
	return result;}/*----------------------------------------------------------------*	am930hw_mibset**	I/F function used by mac and mgr to set the values of MIB*	elements.**	TODO: for now this function operates on entire sutro MIB structures.*	TODO: need to make the function work on individual elements**	returns: AM930HW_SUCCESS or*			 AM930HW_FAILURE----------------------------------------------------------------*/UINT32 am930hw_mibset( am930hw_t *hw, UINT32 mibsec, UINT32 offset,						UINT32 len, void *buf){	UINT32					result = AM930HW_SUCCESS;	sucmd_set_mib_var_t		cmd;	am930hw_cmd_result_t	cmd_result;	DBFENTER;	memset( &cmd, 0, sizeof(cmd));	cmd.type = mibsec;	cmd.size = len;	cmd.index = offset;	memcpy( cmd.data, buf, len);	cmd_result = am930hw_fw_cmd( hw, SUCMD_CMD_SET_MIB_VAR, &cmd, sizeof(cmd));		if ( cmd_result.fw_status != SUCMD_STAT_CMPLT || 		cmd_result.drvr_status != 0 )	{		DBPRT( DBFWCMD, "SetMIB failed!\n");		result = AM930HW_FAILURE;	}	DBFEXIT;	return result;}/*----------------------------------------------------------------*	am930hw_mibsetitem**	I/F function used by mac and mgr to set the values of MIB*	items.**	returns: AM930HW_SUCCESS or*			 AM930HW_FAILURE----------------------------------------------------------------*/UINT32 am930hw_mibsetitem( am930hw_t *hw, UINT32 itemid, void *buf, UINT32 len){	UINT32	result = AM930HW_SUCCESS;	DBFENTER;	result = am930hw_mibset( hw, MI_SEC(itemid), MI_OFF(itemid), 								MI_SZ(itemid), buf);	DBFEXIT;	return result;}/*----------------------------------------------------------------*	am930hw_sync**	Helper function to send the sutro SYNC command. **	returns: AM930HW_CMD_SUCCESS or*			 AM930HW_CMD_SYNCFAILED----------------------------------------------------------------*/UINT32 am930hw_sync( am930hw_t *hw, UINT32 ch, UINT32 startBSS, 					wlan_bss_ts_t ts, UINT32 ref_time ){	UINT32 					result = AM930HW_CMD_SUCCESS;	sucmd_sync_t			cmd;	am930hw_cmd_result_t	cmd_result;	DBFENTER;	memset( &cmd, 0, sizeof(cmd));	/* values from arguments */	cmd.set_or_ch = ch;	cmd.start_BSS = startBSS;	cmd.ref_time = ref_time;	if ( ts != NULL )	{		memcpy( &cmd.bss_timestamp, ts, WLAN_BSS_TS_LEN);	}	else	{		memset( &cmd.bss_timestamp, 0, WLAN_BSS_TS_LEN);	}/*	cmd.pattern = 5;	cmd.index = 1;	cmd.dwell_interval = 0x3c;*/	cmd_result = am930hw_fw_cmd( hw, SUCMD_CMD_SYNC, &cmd, sizeof(cmd));		if ( cmd_result.fw_status != SUCMD_STAT_CMPLT || 		cmd_result.drvr_status != 0 )	{		printk( KERN_DEBUG "sync command failed!\n");		result = AM930HW_CMD_SYNCFAILED;	}	DBFEXIT;	return result;}/*----------------------------------------------------------------*	am930hw_tx_enable**	Helper function to send the sutro INIT_TX command. *	ASSUMPTION: The queue heads have already been set in the*				members of the object.**	returns: AM930HW_CMD_SUCCESS or*			 AM930HW_CMD_INITTXFAILED----------------------------------------------------------------*/UINT32 am930hw_tx_enable(am930hw_t *hw){	UINT32 					result = AM930HW_CMD_SUCCESS;	sucmd_init_tx_t			cmd;	am930hw_cmd_result_t	cmd_result;	int						i;	DBFENTER;	/* Lets zero the last complete block */	for ( i = 0; i < 5; i++)	{		write32(hw, hw->txcmplt + (i * sizeof(UINT32)), 0);	}	/* Now send the init_tx command */	memset( &cmd, 0, sizeof(cmd));	cmd.data_desc = hw->tx_tail;	cmd_result = am930hw_fw_cmd( hw, SUCMD_CMD_INIT_TX, &cmd, sizeof(cmd));		if ( cmd_result.fw_status != SUCMD_STAT_CMPLT || 		cmd_result.drvr_status != 0 )	{		printk( KERN_DEBUG "init_tx failed!\n");		result = AM930HW_CMD_INITTXFAILED;	}	DBFEXIT;	return result;}/*----------------------------------------------------------------*	am930hw_txdata**	I/F function to send a packet via the sutro data queue.*	rate is in 100Kbps.**	returns: AM930HW_SUCCESS or*			 AM930HW_FAILURE----------------------------------------------------------------*/UINT32 am930hw_txdata( am930hw_t* hw, UINT8 *buf, UINT32 len, UINT32 rate){	UINT32				result = AM930HW_SUCCESS;	UINT32				slot;	UINT8				state;	DBFENTER;		if ( buf == NULL || len > AM930_MAX_TXDATA )	{		result = AM930HW_FAILURE;	}	else	{		/* Test if there is room in the queue */		state = read8(hw, hw->tx_tail + TXD_OFF_STATE);		if ( !SUTXD_ST_IS_HOSTOWN(state) ) 		{			/*	printk(KERN_DEBUG"f/w tx queue full!\n"); */			result = AM930HW_FAILURE;		} 		else		{			/* if so, update the tail pointer */			slot = hw->tx_tail;			hw->tx_tail = read32(hw, hw->tx_tail + TXD_OFF_NEXT);			/* copy the frame to card memory */			writecard(hw, slot + sizeof(am930tx_desc_t), buf, len);			/* set the offset and len */			write32(hw, slot + TXD_OFF_START_FRAME, slot + sizeof(am930tx_desc_t));			write16(hw, slot + TXD_OFF_LEN, len);			write8(hw, slot + TXD_OFF_SIFS_ATTEMPTS, 0);			write8(hw, slot + TXD_OFF_SIFS_FAILURES, 0);			write8(hw, slot + TXD_OFF_DIFS_ATTEMPTS, 0);			write8(hw, slot + TXD_OFF_DIFS_FAILURES, 0);			write8(hw, slot + TXD_OFF_RTS_ATTEMPTS, 0);			write8(hw, slot + TXD_OFF_DATA_ATTEMPTS, 0);			write8(hw, slot + TXD_OFF_TX_CNTL, 0);			write8(hw, slot + TXD_OFF_RATE, rate);			/* give sutro ownership of the descriptor */			write8(hw, slot + TXD_OFF_STATE, SUTXD_ST_FWOWN);		}	}	DBFEXIT;	return result;}/*----------------------------------------------------------------*	am930mem_init**	Initializes a structure to handle _very_ simple memory *	management.  The structure contains a bitarray that's used*	to indicate the alloc/free state of each fragment of a block*	of memory.  The region of memory is identified by the start and*	len members.  This implementation is used to manage the*	tx buffer memory on the PRISM card.**	Note: If len is not evenly divisible by sizeof(mem->bits)*8, then*			there will be a small chunk of memory at the end of the*			managed region that will never be allocated.**	returns: nothing----------------------------------------------------------------*/void am930mem_init( am930mem_t *mem, UINT32 start, UINT32 len){	memset( mem, 0, sizeof(*mem));	mem->start = start;	mem->len = len;	mem->fragsize = len / (sizeof(mem->bits) * 8);}/*----------------------------------------------------------------*	am930mem_alloc**	Tests the structure lock.  If set, returns NULL*	Searches the bitarray for the appropriate sized chunk,*	If found*		sets the bits*		unlocks the structure*		returns the offset*	else*		unlocks the structure*		returns NULL**	Note: LSb in mem->bits corresponds to fragment at address mem->start*	Note: mem->start can't be zero*	Note: len of alloc'd region isn't saved, caller _must_ save it!**	returns: 0 on failure, non-zero on success----------------------------------------------------------------*/UINT32 am930mem_alloc( am930mem_t *mem, UINT32 size ){	UINT32	amask;	UINT32	nbits;	INT		i;	UINT32	allocaddr = 0;	if ( test_and_set_bit(0, &mem->lock) == 0)	{		nbits = size / mem->fragsize;		nbits += ((size % mem->fragsize) ? 1 : 0);		amask = ((UINT32)0xffffffff) >> ((sizeof(mem->bits) * 8) - nbits);		allocaddr = 0;		i = 0;		while (allocaddr == 0 && i < ((sizeof(mem->bits) * 8) - nbits) )		{			if ( (amask & mem->bits) == 0 )			{				mem->bits |= amask;				allocaddr = mem->start + (mem->fragsize * i);			}			amask = amask << 1;			i++;		}		clear_bit(0, &mem->lock);	}	return allocaddr;}/*----------------------------------------------------------------*	am930mem_free**	Tests the structure lock.  If set, returns the value of p*	clears the bits associated with the fragments in p,*	returns NULL**	returns: 0 on failure, non-zero on success----------------------------------------------------------------*/UINT32 am930mem_free( am930mem_t *mem, UINT32 p, UINT32 size){	UINT32	amask;	UINT32	nbits;	UINT32	lshift;	if ( test_and_set_bit(0, &mem->lock) == 0)	{		nbits = size / mem->fragsize;		nbits += ((size % mem->fragsize) ? 1 : 0);		amask = ((UINT32)0xffffffff) >> ((sizeof(mem->bits)*8) - nbits);		lshift = p / mem->fragsize;		amask = amask << lshift;		mem->bits &= ~amask;		clear_bit(0, &mem->lock);	}	return p;}/*----------------------------------------------------------------*	readcard, writecard, *   read8, read16, read32, *   write8, write16, write32**	Functions to read/write to the 'shared' memory on the card.*	These functions are abstracted here so we can choose between*	either the io register or memory mapped access to the card *   memory.**	The 8, 16, and 32 functions are for reading/writing bytes, *	halfwords and words respectively.*----------------------------------------------------------------*/void readcard( am930hw_t *hw, UINT32 cardaddr, void *buf, UINT32 len){	if ( hw->usemem ) {		UINT8 * dp = (UINT8 *) buf;		volatile UINT8 * sp = ((volatile UINT8 *) hw->membase) + cardaddr;		while( len-- != 0 ) {			*dp++ = readb(sp++);			udelay(am930_iodelay);		} 	}	else {		UINT8	byte;		INT		i;		u_long	flags;		UINT8	lmal;		UINT8	lmau;		/* set bank select and flash deselect */		byte = inb_p(BSS(hw));		byte &= ~0x38;  		outb_p(byte, BSS(hw));		/* save the address regs and set the new address */		save_flags(flags);		cli();		lmal = inb( LMAL(hw));		lmau = inb( LMAU(hw));		/* write the address */		outb( (cardaddr) & 0x00ff, LMAL(hw));		udelay(am930_iodelay);		outb( ((cardaddr) & 0x7f00) >> 8, LMAU(hw));		udelay(am930_iodelay);		sti();		restore_flags(flags);		/* now, copy the data */		for ( i = 0; i < len; i++)		{			/* retrieve the byte */			((UINT8*)buf)[i] = inb( DPLL(hw) );			udelay(am930_iodelay);		}		/* restore the address regs */		save_flags(flags);		cli();		outb( lmal, LMAL(hw));		udelay(am930_iodelay);		outb( lmau, LMAU(hw));		udelay(am930_iodelay);		sti();		restore_flags(flags);	}}void writecard( am930hw_t *hw, UINT32 cardaddr, void *buf, UINT32 len){	if ( hw->usemem ) {		UINT8 * sp = (UINT8 *) buf;		volatile UINT8 * dp = ((volatile UINT8 *) hw->membase) + cardaddr;		while( len-- != 0 ) {			writeb( *sp++, dp++ );			udelay(am930_iodelay);		}	}	else {		UINT8	byte;		INT		i;		u_long	flags;		UINT8	lmal;		UINT8	lmau;		/* set bank select and flash deselect */		byte = inb_p(BSS(hw));		byte &= ~0x38;  		outb_p(byte, BSS(hw));		/* save the address regs and set the new address */		save_flags(flags);		cli();		lmal = inb( LMAL(hw));		lmau = inb( LMAU(hw));		/* write the address */		outb( (cardaddr) & 0x00ff, LMAL(hw));		udelay(am930_iodelay);		outb( ((cardaddr) & 0x7f00) >> 8, LMAU(hw));		udelay(am930_iodelay);		sti();		restore_flags(flags);		/* now, copy the data */		for ( i = 0; i < len; i++)		{			/* set the byte */			outb( ((UINT8*)buf)[i], DPLL(hw) );			udelay(am930_iodelay);		}		/* restore the address regs */		save_flags(flags);		cli();		outb( lmal, LMAL(hw));		udelay(am930_iodelay);		outb( lmau, LMAU(hw));		udelay(am930_iodelay);		sti();		restore_flags(flags);	}}UINT8  read8( am930hw_t *hw, UINT32 cardaddr ) {	UINT8 result;	readcard( hw, cardaddr, &result, 1);	return result;}UINT16 read16( am930hw_t *hw, UINT32 cardaddr ) {	UINT16 result;	readcard( hw, cardaddr, &result, 2);	return result;}UINT32 read32( am930hw_t *hw, UINT32 cardaddr ) {	UINT32 result;	readcard( hw, cardaddr, &result, 4);	return result;}void   write8( am930hw_t *hw, UINT32 cardaddr, UINT8 val ){	writecard( hw, cardaddr, &val, 1);}void   write16( am930hw_t *hw, UINT32 cardaddr, UINT16 val ){	writecard( hw, cardaddr, &val, 2);}void   write32( am930hw_t *hw, UINT32 cardaddr, UINT32 val ){	writecard( hw, cardaddr, &val, 4);}void am930db_prrxdesc( am930rx_desc_t *desc){	printk(KERN_DEBUG"rxd:");	printk("nxt:%lx ",	desc->next);	printk("st:%02x ",	desc->state);	printk("ss:%02x ",	desc->rssi);	printk("ch:%d ",	desc->index_or_ch);	printk("lt:%ld ",	desc->local_time);	printk("dp:%lx ",	desc->rx_start_frame);	printk("l:%d ",		desc->rx_len);	printk("r:%x\n",	desc->rate);}/*#ifdef DBMSG_ENABLED	#include "am930hw_db.c"#endif*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品五月天| 久久精子c满五个校花| 91免费版在线看| 国产精品一区二区不卡| 麻豆freexxxx性91精品| 久久精品国产免费| 狂野欧美性猛交blacked| 蜜桃精品视频在线| 国产精品一品二品| 成人精品亚洲人成在线| 一本色道亚洲精品aⅴ| 色成人在线视频| 欧美欧美欧美欧美| 日韩欧美国产麻豆| 国产欧美视频一区二区三区| 国产精品免费久久| 亚洲一区在线视频观看| 五月天视频一区| 久久91精品久久久久久秒播| 国产毛片精品视频| 91在线播放网址| 日韩一区二区三区电影| 中文字幕免费不卡| 亚洲高清免费视频| 久久国产生活片100| 99久久综合狠狠综合久久| 在线免费观看成人短视频| 日韩一区二区三区高清免费看看| 久久午夜色播影院免费高清| 成人欧美一区二区三区视频网页| 亚洲一二三专区| 国产剧情av麻豆香蕉精品| 99热99精品| 精品久久久久久久久久久久久久久久久 | 欧美日韩大陆一区二区| 日韩精品专区在线影院观看| 国产精品久久久久久亚洲毛片 | 免费成人av在线| 成人丝袜18视频在线观看| 欧美视频一区二| 欧美激情综合在线| 日韩高清不卡一区二区| voyeur盗摄精品| 欧美电影免费提供在线观看| 一区二区在线观看不卡| 国产精品亚洲成人| 日韩欧美在线网站| 亚洲成人三级小说| 91在线播放网址| 久久嫩草精品久久久久| 日韩精品五月天| 在线欧美小视频| 亚洲男女一区二区三区| 国产乱一区二区| 精品国产人成亚洲区| 五月婷婷激情综合| 欧美又粗又大又爽| 中文字幕色av一区二区三区| 韩国三级电影一区二区| 日韩亚洲欧美中文三级| 亚洲精品国产成人久久av盗摄| 高清av一区二区| 2021中文字幕一区亚洲| 久久精品国产亚洲一区二区三区| 欧美三级一区二区| 亚洲综合男人的天堂| 91小视频免费观看| 亚洲欧美日韩在线| 91蜜桃视频在线| 综合久久久久久| 色婷婷亚洲一区二区三区| 亚洲欧洲三级电影| 91麻豆福利精品推荐| 亚洲免费观看视频| 色激情天天射综合网| 亚洲国产精品天堂| 欧美私模裸体表演在线观看| 一区二区三区在线播| 欧美无乱码久久久免费午夜一区| 一区二区三区中文字幕电影| 欧美性大战久久| 日本欧美在线观看| 精品嫩草影院久久| 国产大片一区二区| 日韩理论片在线| 在线这里只有精品| 日本亚洲视频在线| 国产午夜精品一区二区| 成人久久视频在线观看| 一区二区三区精品| 制服丝袜亚洲精品中文字幕| 青青草国产成人av片免费| 精品免费一区二区三区| av毛片久久久久**hd| 一级精品视频在线观看宜春院| 欧美性受极品xxxx喷水| 蜜乳av一区二区三区| 国产色产综合色产在线视频| 色综合一区二区三区| 亚洲成人资源在线| 国产亚洲欧美一区在线观看| 波多野结衣中文一区| 亚洲成a人v欧美综合天堂下载| 日韩欧美高清一区| av影院午夜一区| 天天做天天摸天天爽国产一区| 精品成a人在线观看| 色婷婷综合视频在线观看| 久久精品国产精品青草| 成人免费在线观看入口| 91麻豆精品国产91| 北条麻妃一区二区三区| 蜜臀av性久久久久蜜臀aⅴ| 国产精品久久久久久久久动漫| 欧美喷潮久久久xxxxx| 成人av电影在线观看| 人禽交欧美网站| 亚洲美女免费视频| 国产视频一区在线播放| 欧美日韩国产乱码电影| 岛国精品在线播放| 七七婷婷婷婷精品国产| 一区二区三区精品久久久| 日本一区二区三区dvd视频在线| 欧美性极品少妇| 99精品黄色片免费大全| 精品一区二区三区免费视频| 亚洲国产欧美一区二区三区丁香婷| 久久伊人中文字幕| 91精品午夜视频| 欧美午夜精品久久久久久孕妇| 国产xxx精品视频大全| 久久99日本精品| 五月婷婷综合网| 亚洲一区av在线| 亚洲激情一二三区| 亚洲欧美自拍偷拍色图| 欧美国产精品v| 久久久不卡网国产精品一区| 日韩欧美一区二区久久婷婷| 欧美日韩国产综合久久| 在线免费观看日本一区| 欧美最猛黑人xxxxx猛交| 91女人视频在线观看| 不卡视频免费播放| 不卡的看片网站| 99久久国产综合精品色伊| 成人av手机在线观看| www.成人在线| 色综合久久久久综合体| 色综合激情久久| 色94色欧美sute亚洲13| 色婷婷av一区二区三区之一色屋| 91免费观看在线| 欧美无砖专区一中文字| 欧美精品v国产精品v日韩精品| 欧美日本国产一区| 91麻豆精品国产综合久久久久久| 在线电影国产精品| 日韩三级中文字幕| 久久青草欧美一区二区三区| 国产亚洲精品久| 亚洲欧美日韩在线不卡| 一区二区三区四区在线免费观看| 亚洲黄色小说网站| 日韩国产欧美三级| 久久国产免费看| 成人激情开心网| 在线观看欧美黄色| 制服丝袜在线91| 久久久精品日韩欧美| 亚洲男同1069视频| 免费看欧美女人艹b| 国产成人综合网| 色偷偷成人一区二区三区91| 欧美一区二区三区视频在线| 久久久精品免费网站| 一区二区三区四区亚洲| 日韩精品亚洲专区| 国产成人午夜精品影院观看视频| 91免费小视频| 欧美成人a在线| 亚洲欧美另类综合偷拍| 青娱乐精品在线视频| jiyouzz国产精品久久| 欧美肥妇free| 亚洲欧美在线aaa| 免费观看成人av| 色婷婷综合在线| 久久伊人中文字幕| 亚洲国产aⅴ天堂久久| 国产成人福利片| 538在线一区二区精品国产| 中文乱码免费一区二区| 天天av天天翘天天综合网色鬼国产 | 99久久99久久久精品齐齐| 欧美精品三级日韩久久| 国产精品国模大尺度视频| 日欧美一区二区| 日本乱人伦aⅴ精品|