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

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

?? am930hw.c

?? wlan_monitor monitor utility for wlan device
?? C
?? 第 1 頁 / 共 4 頁
字號:
	timeout = jiffies + 500;	while(  read8(hw, hw->cmd + CMD_OFF_CODE) != 0 &&			read8(hw, hw->cmd + CMD_OFF_STATUS) == 0 &&			jiffies < timeout );	if ( jiffies >= timeout )	{		printk( KERN_DEBUG "Timed out waiting for f/w cmd byte available\n");		result.drvr_status = AM930HW_FWNOTREADY;	}	else	{		/* Make sure the status and code are set properly */		write8(hw, hw->cmd + CMD_OFF_CODE, 0);		write8(hw, hw->cmd + CMD_OFF_STATUS, 0);				/* copy the parms to the command block */		if ( parmsize != 0 )		{			writecard(hw, hw->cmd + CMD_OFF_PARMS, cmdparms, ABS(parmsize));		}		/* Tell the hw object that this cmd is the most recent */		hw->last_cmd = cmd;		/* set the command */		write8(hw, hw->cmd + CMD_OFF_CODE, cmd);		/* Now, wait for the result */		timeout = jiffies + 1500;		while ( read8(hw, hw->cmd + CMD_OFF_STATUS) == SUCMD_STAT_IDLE && 				jiffies < timeout );		/* Did we time out or did the fw finish with something? */		if ( jiffies >= timeout )		{			/* If we timed out, simply set the drvr status and return */			result.fw_status = read8(hw, hw->cmd + CMD_OFF_STATUS);			result.drvr_status = AM930HW_FWCMDTIMEOUT;			printk(KERN_DEBUG "We timed out on command: 0x%02x\n", 				hw->last_cmd);		}		else		{			/* The fw finished with something, what? */			if ( read8(hw, hw->cmd + CMD_OFF_STATUS) != SUCMD_STAT_CMPLT )			{				/* some error occurred, save the result and move on */				result.fw_status = read8(hw, hw->cmd + CMD_OFF_STATUS);				result.fw_err_off = read8(hw, hw->cmd + CMD_OFF_ERR_OFF);				printk(KERN_DEBUG "f/w cmd error, code=0x%x\n", 					result.fw_status);			}			else			{				/* Everything appears to be OK, now collect any results */				result.drvr_status = 0;				result.fw_status = read8(hw, hw->cmd + CMD_OFF_STATUS);				if ( parmsize < 0 )				{					readcard( hw, hw->cmd + CMD_OFF_PARMS, cmdparms, ABS(parmsize));				}			}			/* clear the cmd and status */			write8(hw, hw->cmd + CMD_OFF_CODE, 0);			write8(hw, hw->cmd + CMD_OFF_STATUS, 0);		}	}	DBFEXIT;	return result;} /*----------------------------------------------------------------*	am930hw_getset_int**	Attempts to access the sutro f/w control structure int_mask or*	int_status field of the given control/status block. It uses the*	lockout_fw and lockout_host fields to block the firmware from*	accessing the mask and status fields while we get or update*	them.**	action values:*		SU_GET_INTMASK1		get the interrupt mask*		SU_SET_INTMASK1		set the interrupt mask*		SU_GET_INTMASK2		get the interrupt mask*		SU_SET_INTMASK2		set the interrupt mask*		SU_GET_INTSTATUS1	get the interrupt status*		SU_GET_INTSTATUS1	get the interrupt status*		SU_SET_INTSTATUS2	set the interrupt status*		SU_SET_INTSTATUS2	set the interrupt status**	The value argument is only used by the SET actions.**	returns: -1 on failure, *			 0 or GET result on success----------------------------------------------------------------*/static UINT16 am930hw_getset_int( am930hw_t *hw, 								int action,								UINT8 mask,								UINT8 status ){	UINT16 result = 0;	DBFENTER;	if ( am930hw_lockint(hw) == 0 )	{		if (action & SU_GET_INTMASK1 )			result = read8(hw, hw->cs + CS_OFF_INT_MASK);		if ( action & SU_SET_INTMASK1 )			write8(hw, hw->cs + CS_OFF_INT_MASK, mask);		if (action & SU_GET_INTMASK2 )			result = read8(hw, hw->cs + CS_OFF_INT_MASK2);		if ( action & SU_SET_INTMASK2 )			write8(hw, hw->cs + CS_OFF_INT_MASK2, mask);		if ( action & SU_GET_INTSTATUS1 )			result = read8(hw, hw->cs + CS_OFF_INT_STATUS);		if ( action & SU_SET_INTSTATUS1 )			write8(hw, hw->cs + CS_OFF_INT_STATUS, status);		if ( action & SU_GET_INTSTATUS2 )			result = read8(hw, hw->cs + CS_OFF_INT_STATUS2);		if ( action & SU_SET_INTSTATUS2 )			write8(hw, hw->cs + CS_OFF_INT_STATUS2, status);		am930hw_unlockint(hw);	}	else	{		result = -1;	}	DBFEXIT;	return result;}/*----------------------------------------------------------------*	am930hw_init_rx_tx**	Performs the second part of the object initialization. We have*	to do this here so that all of the links are in place in the*	other objects. Particularly so that interrupts get routed to*	this object.**	returns: zero on success, non-zero on failure----------------------------------------------------------------*/int am930hw_init_rx_tx( am930hw_t *hw ){	int result = 0;	DBFENTER;	/* Configure the tx queues */	if ( am930hw_init_tx_queues(hw) != 0 )	{		result = 1;	}	else	{		/* Enable tx */		if ( am930hw_tx_enable(hw) != AM930HW_CMD_SUCCESS )		{			result = 2;		}		else		{			udelay(100);			/* Enable rx */			if ( am930hw_rx_enable(hw) != AM930HW_CMD_SUCCESS )			{				result = 3;			}			else			{				udelay(100);			}		}	}	DBFEXIT;	return result;}/*----------------------------------------------------------------*	am930hw_init_tx_queue**	Initialize the tx queue related data structures and members of*	the hw object.**	NOTE: this function takes care of am930 related queues, NOT*			any of the upper level protocol packet queues.**	returns: nothing----------------------------------------------------------------*/int am930hw_init_tx_queues( am930hw_t *hw){	int					result = 0;	int					i;	UINT32				curr_off;	am930tx_dataslot_t	ds;	DBFENTER;	/* From the MIB, find out where the TX queue is supposed to go */	if ( am930hw_mibgetitem( hw, LOC_TX_BUFFER_OFFSET, 			&(hw->tx_tail), sizeof(hw->tx_tail)) != AM930HW_CMD_SUCCESS )	{		DBPRT( DBFWCMD, "mibgetitem(LOC_TX_BUFFER_OFFSET) Failed!\n");		result = 1;	}	else	{		/* We've got the MIB, now init. the main queue */		hw->tx_base = hw->tx_tail;		curr_off = hw->tx_base;		memset( &ds.desc, 0, sizeof(am930tx_desc_t));		for ( i = 0; i < AM930_NTXDESC; i++)		{			/* first set the address where the next desc will go */			if ( i < AM930_NTXDESC - 1 )  				ds.desc.next = curr_off + sizeof(ds);			else				ds.desc.next = hw->tx_base;			/* write the descriptor */			writecard( hw, curr_off, &ds.desc, sizeof(ds.desc));			/* update the offset */			curr_off += sizeof(ds);		}	}		DBFEXIT;	return result;}/*----------------------------------------------------------------*	am930hw_ISR**	HW object interrupt service routine. Called when the pcmcia*	circuitry has generated a host interrupt in response to an*	interrupt from supposedly our card.**	returns: nothing----------------------------------------------------------------*/void am930hw_ISR( am930hw_t *hw ){	UINT8	int_status;	UINT8	int_mask;	UINT8	gcr;	/* Make sure the hw object is ready */	/*  - additional checks make sure the H/W is _really_ in the slot */	/*  - sometimes an int reaches here after a card is removed and before */	/*    card services has been notified. (Thanks David) */	if ( (hw != NULL) && 		 (hw->state & AM930HW_CONFIG) && 		 (hw->mac->di->state & DEV_PRESENT) && 		 read8(hw, hw->banner) == 'P' && read8(hw, hw->banner+1) == 'C')	{		/* Make sure we have not overlapped ISR calls */		if ( hw->state & AM930HW_INTOCURRED )		{			DBPRT( DBINT, "Overlapping Interrupt detected!\n");		}		else		{			hw->state |= AM930HW_INTOCURRED;			/* Lock the int fields */			if ( am930hw_lockint(hw) != 0 )			{				DBPRT( DBFWINT, 					"Unable to lockout f/w, skip interrupt\n");				/* Clear the ECWAIT bit of GCR (by setting...wierd) */				gcr = inb_p( GCR(hw));				gcr |= BIT3;				outb_p( gcr, GCR(hw));				/* Clear the int bit of the hw->state */				hw->state &= ~AM930HW_INTOCURRED;			}			else			{				/* save the int_mask for future restoration */				int_mask = read8( hw, hw->cs + CS_OFF_INT_MASK);				write8(hw, hw->cs + CS_OFF_INT_MASK, 0x0f);				int_status = read8(hw, hw->cs + CS_OFF_INT_STATUS);				write8(hw, hw->cs + CS_OFF_INT_STATUS, 0);				am930hw_unlockint(hw);DBPRT(DBFWINT, "Int mask=0x%02x, status=0x%02x\n", int_mask, int_status);				/* Handle various int sources */				do {					if ( SUCS_INT_IS_SCANCMPLT(int_status) )					{						am930hw_onint_scancomplete(hw);					}							if ( SUCS_INT_IS_TX(int_status) )					{						am930hw_onint_tx(hw);					}							if ( SUCS_INT_IS_RX(int_status) )					{						am930hw_onint_rx(hw);					}							if ( SUCS_INT_IS_CMD(int_status) )					{						am930hw_onint_cmdcomplete(hw);					}					/* Check the int status again, to see if more int events */					/*   have occurred */							if ( am930hw_lockint(hw) != 0 )					{						DBPRT( DBFWINT, "Unable to lockout f/w, 2nd time\n");						int_status = 0;					}					else					{						int_status = read8(hw, hw->cs + CS_OFF_INT_STATUS);						if ( int_status != 0 ) /* are we handling again? */						{							write8(hw, hw->cs + CS_OFF_INT_STATUS, 0);							am930hw_unlockint(hw);						}					}				}				while ( int_status != 0 );				/* Clear the ECWAIT bit of GCR (by setting...wierd) */				gcr = inb_p( GCR(hw));				gcr |= BIT3;				outb_p( gcr, GCR(hw));				/* Clear the int bit of the hw->state */				hw->state &= ~AM930HW_INTOCURRED;				/* set the int_mask to the setting it had on ISR entry */				write8(hw, hw->cs + CS_OFF_INT_MASK, int_mask);				/* and unlock! */				am930hw_unlockint(hw);			} /* endif lockint */		} /* endif !overlapped */	} /* hw OK, card in slot */	else	{		DBPRT( DBINT, "ISR called when hw is NULL, hw not CONFIG or "					"no card in slot, future ints may be lost!\n");	}	return;}/*----------------------------------------------------------------*	am930hw_joinbss**	I/F function used by mac and mgr to join a specific bss. The*	only nod here to the sutro implementation is the sutro_ref_time*	argument used by the sutro to update it's internal timers.**	returns: AM930HW_SUCCESS or*			 AM930HW_FAILURE----------------------------------------------------------------*/UINT32 am930hw_joinbss( am930hw_t *hw, UINT32 ch, UINT32 newBSS, 						UINT48 bssid, char *ssid, UINT32 bcn_int,						wlan_bss_ts_t ts, UINT32 sutro_ref_time ){	UINT32 				result = AM930HW_SUCCESS;	su_mib_mac_mgmt_t	mm_mib;	DBFENTER;	/* retrieve the mib */	if ( am930hw_mibget(hw, SUMIB_MGMT, 0, 				sizeof(mm_mib), &mm_mib) != AM930HW_SUCCESS )	{		result = AM930HW_FAILURE;	}	else	{		/* set the bssid */		memcpy( mm_mib.current_bssid, bssid, WLAN_ADDR_LEN );		/* set the ssid */		mm_mib.current_essid[0] = WLAN_IE_SSID;		mm_mib.current_essid[1] = strlen(ssid);		strcpy( &(mm_mib.current_essid[2]), ssid);		/* set the beaconrate */		mm_mib.beacon_period = bcn_int;		/* save the mib */		if ( am930hw_mibset(hw, SUMIB_MGMT, 0, 					sizeof(mm_mib), &mm_mib) != AM930HW_SUCCESS )		{			result = AM930HW_FAILURE;		}		else		{			DBPRT( DBFWCMD, 				"Syncing with BSS, ch=%d, newbss=%d\n", 				(int)ch, (int)newBSS);			/* send the sync command */			if ( am930hw_sync( hw, 								ch, 								newBSS, 								(newBSS == 0) ? ts : NULL, 								sutro_ref_time ) != AM930HW_CMD_SUCCESS )			{				result = AM930HW_FAILURE;			}		}	}	DBFEXIT;	return result;}/*----------------------------------------------------------------*	am930hw_onint_cmdcomplete**	ISR helper for f/w generated scan complete interrupts**	returns: nothing----------------------------------------------------------------*/void am930hw_onint_cmdcomplete( am930hw_t *hw ){	DBPRT( (DBFWINT | DBFWCMD), 		"cmd complete int, last_cmd= 0x%x\n", hw->last_cmd)	hw->last_cmd = 0;}/*----------------------------------------------------------------*	am930hw_onint_rx**	ISR helper for f/w generated rx complete interrupts**	returns: nothing----------------------------------------------------------------*/void am930hw_onint_rx( am930hw_t *hw ){	UINT8 			old_state;	UINT32			old_head;	UINT32 			next;	UINT32			len;	UINT32			data_off;	UINT8 			state;	am930rxfrm_t	*frm;	DBPRT( (DBFWINT | DBRXPATH), "RX Interrupt.\n");  /* print initial rx_desc *//*#ifdef DBMSG_ENABLED	if ( (dbmask & FILEBIT) && (dbmask & 0))	{		am930rx_desc_t	desc;		readcard(hw, hw->rx_head, &desc, sizeof(desc));		am930hw_dbprintRXdesc( &desc );	}#endif*/	/* read the state and next fields from the old head */	state = read8(hw, hw->rx_head + RXD_OFF_STATE);	next = am930hw_read_rxnext(hw);	while ( !SURXD_ST_IS_FWOWN(state) &&			SURXD_ST_IS_CONSUMED(state) &&			!SURXD_ISLAST(next) &&			((next&0x0000ffffL) >= hw->rx_base && 			 (next&0x0000ffffL) < (hw->rx_base+hw->rx_len)) )	{		/* we've got a valid next ptr, it's time to move on */			old_head = hw->rx_head;		old_state = state;		hw->rx_head = next & 0x0000ffffL;		state = read8( hw, hw->rx_head + RXD_OFF_STATE);		/* make sure we own the new descriptor */		if ( SURXD_ST_IS_FWOWN(state) )		{			/* we've been handed a desc that's still owned by the f/w */			/*  set the head back to the old one, and stop the loop */			hw->rx_head = old_head;			break;		}		else		{			/* we have a new, valid descriptor...process it */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产凹凸在线观看一区二区| 91麻豆福利精品推荐| 国产精品久久久久永久免费观看 | 亚洲h动漫在线| 国产日产亚洲精品系列| 欧美精品精品一区| 色综合久久中文综合久久牛| 极品少妇一区二区三区精品视频 | 成人性生交大片免费看中文 | 亚洲高清视频的网址| 中文字幕av在线一区二区三区| 日韩无一区二区| 欧美午夜寂寞影院| 不卡区在线中文字幕| 国产美女主播视频一区| 日韩和欧美一区二区三区| 亚洲精品欧美综合四区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 99视频精品免费视频| 国产一区二区三区综合| 免费高清视频精品| 午夜精品一区二区三区免费视频| 国产精品入口麻豆原神| 国产日本亚洲高清| 久久久国产精品麻豆| 精品免费视频.| 精品欧美一区二区三区精品久久| 91.麻豆视频| 欧美肥大bbwbbw高潮| 欧美日韩国产一级二级| 成人免费毛片嘿嘿连载视频| 欧美日韩电影一区| 91一区二区在线| 国产91在线观看丝袜| 国产乱国产乱300精品| 国产主播一区二区三区| 九九在线精品视频| 国产一区在线观看麻豆| 激情五月播播久久久精品| 久久99国产精品麻豆| 久久精品国产久精国产| 久久成人精品无人区| 极品少妇xxxx偷拍精品少妇| 久久99国产精品免费网站| 激情六月婷婷综合| 精品一二三四区| 日本系列欧美系列| 老司机午夜精品99久久| 激情文学综合网| 国产不卡免费视频| 色域天天综合网| 欧美性视频一区二区三区| 欧美日韩国产综合草草| 欧美一区二区三区视频| 26uuu久久天堂性欧美| 久久精品一区二区三区四区| 国产精品五月天| 一区二区三区在线视频观看58| 亚洲午夜成aⅴ人片| 日韩精品一级二级| 国产一区二区精品久久| 99久久er热在这里只有精品66| 婷婷久久综合九色国产成人 | 欧美大片拔萝卜| 欧美va在线播放| 国产午夜亚洲精品羞羞网站| 国产精品人人做人人爽人人添| 亚洲精品欧美专区| 欧美aaa在线| 国产成人鲁色资源国产91色综| 99re这里只有精品首页| 欧美日韩国产首页在线观看| 精品欧美久久久| 亚洲视频精选在线| 日本午夜一本久久久综合| 国产精品1区2区| 欧美午夜在线一二页| 精品久久国产97色综合| 国产精品久久久久7777按摩| 香蕉乱码成人久久天堂爱免费| 久久99精品一区二区三区三区| 成人免费观看视频| 91精品国产综合久久婷婷香蕉| 国产精品理论片在线观看| 午夜精品久久久| 粉嫩蜜臀av国产精品网站| 欧美另类z0zxhd电影| 日本一区二区免费在线| 午夜精品福利一区二区三区av| 国产1区2区3区精品美女| 欧美三级日韩在线| 欧美激情资源网| 蜜臀av在线播放一区二区三区| 白白色 亚洲乱淫| 日韩欧美国产午夜精品| 一区二区三区高清在线| 国产盗摄女厕一区二区三区| 欧美日韩成人一区二区| 中文字幕中文字幕一区二区| 美腿丝袜在线亚洲一区| 欧美性猛交xxxx乱大交退制版| 国产欧美精品日韩区二区麻豆天美| 日韩中文字幕1| 91影院在线观看| 日本一区二区三区视频视频| 久久www免费人成看片高清| 欧美图区在线视频| 成人欧美一区二区三区视频网页| 美女脱光内衣内裤视频久久影院| 色噜噜狠狠色综合中国| 中文字幕电影一区| 国产剧情一区在线| 日韩一级片在线观看| 香港成人在线视频| 日本道色综合久久| 国产精品国产三级国产aⅴ入口| 国产制服丝袜一区| 欧美一区二区日韩一区二区| 亚洲 欧美综合在线网络| 91行情网站电视在线观看高清版| 亚洲国产经典视频| 国产精品一区二区三区网站| 精品国产一区久久| 精品亚洲成av人在线观看| 欧美一区二区三区在线观看视频| 亚洲香蕉伊在人在线观| 色狠狠av一区二区三区| 亚洲精品视频观看| 91国内精品野花午夜精品| 一区二区三区不卡在线观看| 色呦呦国产精品| 樱花草国产18久久久久| 91成人在线免费观看| 亚洲在线观看免费视频| 欧美性videosxxxxx| 亚洲第一福利一区| 欧美伦理电影网| 视频一区二区三区入口| 91精品黄色片免费大全| 久久精品国产免费| 久久久午夜精品理论片中文字幕| 国产在线观看免费一区| 久久影院电视剧免费观看| 国产精品一区二区男女羞羞无遮挡| 国产亚洲一本大道中文在线| 成人免费视频国产在线观看| 国产精品久久二区二区| 91精彩视频在线| 日韩国产在线观看一区| 精品少妇一区二区三区视频免付费 | 欧美精品日韩一本| 日韩高清电影一区| 精品国产精品一区二区夜夜嗨| 国产乱妇无码大片在线观看| 国产精品久久久久久亚洲伦| 一本一道综合狠狠老| 性欧美疯狂xxxxbbbb| 精品国产三级电影在线观看| 丁香激情综合五月| 一区二区三区色| 91精品国产一区二区三区蜜臀| 国产在线乱码一区二区三区| 国产精品欧美一区二区三区| 欧美中文字幕一区二区三区亚洲| 日韩精品福利网| 国产欧美日韩亚州综合| 欧美吞精做爰啪啪高潮| 精品一区二区三区香蕉蜜桃| 国产精品国产成人国产三级| 欧美日韩一区不卡| 国产精品一品视频| 一区二区三区高清不卡| 欧美精品一区二| 色婷婷综合中文久久一本| 日韩av在线发布| 17c精品麻豆一区二区免费| 欧美色视频在线| 国产剧情一区二区| 亚洲国产日日夜夜| 久久精品男人的天堂| 欧美日韩在线免费视频| 国产成人在线免费观看| 午夜影视日本亚洲欧洲精品| 久久久精品免费观看| 欧美三级三级三级| 国产成人8x视频一区二区| 婷婷开心久久网| 亚洲欧美在线高清| 日韩精品一区二区三区四区| 色狠狠综合天天综合综合| 国产毛片精品国产一区二区三区| 亚洲国产色一区| 国产精品不卡一区| 26uuu亚洲综合色| 欧美日韩激情一区| 91啦中文在线观看| 国产精品亚洲一区二区三区妖精| 亚洲一区在线观看免费| 国产精品久久久久久久久免费桃花| 日韩免费观看高清完整版在线观看|