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

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

?? atmel.c

?? Linux Kernel 2.6.9 for OMAP1710
?? C
?? 第 1 頁 / 共 5 頁
字號:
		return 1;	}		frame_ctl = IEEE802_11_FTYPE_DATA;	header.duration_id = 0;	header.seq_ctl = 0;	if (priv->wep_is_on)		frame_ctl |= IEEE802_11_FCTL_WEP;	if (priv->operating_mode == IW_MODE_ADHOC) {		memcpy(&header.addr1, skb->data, 6);		memcpy(&header.addr2, dev->dev_addr, 6);		memcpy(&header.addr3, priv->BSSID, 6);	} else {		frame_ctl |= IEEE802_11_FCTL_TODS;		memcpy(&header.addr1, priv->CurrentBSSID, 6);		memcpy(&header.addr2, dev->dev_addr, 6);		memcpy(&header.addr3, skb->data, 6);	}		if (priv->use_wpa)		memcpy(&header.addr4, SNAP_RFC1024, 6);	header.frame_ctl = cpu_to_le16(frame_ctl);	/* Copy the wireless header into the card */	atmel_copy_to_card(dev, buff, (unsigned char *)&header, DATA_FRAME_WS_HEADER_SIZE);	/* Copy the packet sans its 802.3 header addresses which have been replaced */	atmel_copy_to_card(dev, buff + DATA_FRAME_WS_HEADER_SIZE, skb->data + 12, len - 12);	priv->tx_buff_tail += len - 12 + DATA_FRAME_WS_HEADER_SIZE;		/* low bit of first byte of destination tells us if broadcast */	tx_update_descriptor(priv, *(skb->data) & 0x01, len + 18, buff, TX_PACKET_TYPE_DATA);	dev->trans_start = jiffies;	priv->stats.tx_bytes += len;		spin_unlock_irqrestore(&priv->irqlock, flags);	spin_unlock_bh(&priv->timerlock);	dev_kfree_skb(skb);		return 0;	}static void atmel_transmit_management_frame(struct atmel_private *priv, 					    struct ieee802_11_hdr *header,					    u8 *body, int body_len){	u16 buff;	int len =  MGMT_FRAME_BODY_OFFSET + body_len;		if (!(buff = find_tx_buff(priv, len))) 		return;	atmel_copy_to_card(priv->dev, buff, (u8 *)header, MGMT_FRAME_BODY_OFFSET);	atmel_copy_to_card(priv->dev, buff + MGMT_FRAME_BODY_OFFSET, body, body_len);	priv->tx_buff_tail += len;	tx_update_descriptor(priv, header->addr1[0] & 0x01, len, buff, TX_PACKET_TYPE_MGMT);}	static void fast_rx_path(struct atmel_private *priv, struct ieee802_11_hdr *header, 			 u16 msdu_size, u16 rx_packet_loc, u32 crc){	/* fast path: unfragmented packet copy directly into skbuf */	u8 mac4[6]; 	struct sk_buff 	*skb;	unsigned char *skbp;		/* get the final, mac 4 header field, this tells us encapsulation */	atmel_copy_to_host(priv->dev, mac4, rx_packet_loc + 24, 6);	msdu_size -= 6;		if (priv->do_rx_crc) {		crc = crc32_le(crc, mac4, 6);		msdu_size -= 4;	}		if (!(skb = dev_alloc_skb(msdu_size + 14))) {		priv->stats.rx_dropped++;		return;	}	skb_reserve(skb, 2);	skbp = skb_put(skb, msdu_size + 12);	atmel_copy_to_host(priv->dev, skbp + 12, rx_packet_loc + 30, msdu_size);		if (priv->do_rx_crc) {		u32 netcrc;		crc = crc32_le(crc, skbp + 12, msdu_size);		atmel_copy_to_host(priv->dev, (void *)&netcrc, rx_packet_loc + 30 + msdu_size, 4);		if ((crc ^ 0xffffffff) != netcrc) {			priv->stats.rx_crc_errors++;			dev_kfree_skb(skb);			return;		}	}		memcpy(skbp, header->addr1, 6); /* destination address */	if (le16_to_cpu(header->frame_ctl) & IEEE802_11_FCTL_FROMDS) 		memcpy(&skbp[6], header->addr3, 6);	else		memcpy(&skbp[6], header->addr2, 6); /* source address */		priv->dev->last_rx=jiffies;	skb->dev = priv->dev;	skb->protocol = eth_type_trans(skb, priv->dev);	skb->ip_summed = CHECKSUM_NONE;		netif_rx(skb);	priv->stats.rx_bytes += 12 + msdu_size;	priv->stats.rx_packets++;}/* Test to see if the packet in card memory at packet_loc has a valid CRC   It doesn't matter that this is slow: it is only used to proble the first few packets. */static int probe_crc(struct atmel_private *priv, u16 packet_loc, u16 msdu_size){	int i = msdu_size - 4;	u32 netcrc, crc = 0xffffffff;	if (msdu_size < 4)		return 0;	atmel_copy_to_host(priv->dev, (void *)&netcrc, packet_loc + i, 4);		atmel_writeAR(priv->dev, packet_loc);	while (i--) {		u8 octet = atmel_read8(priv->dev, DR);		crc = crc32_le(crc, &octet, 1);	}	return (crc ^ 0xffffffff) == netcrc;}static void frag_rx_path(struct atmel_private *priv, struct ieee802_11_hdr *header, 			 u16 msdu_size, u16 rx_packet_loc, u32 crc, u16 seq_no, u8 frag_no, int more_frags){	u8 mac4[6]; 	u8 source[6];	struct sk_buff *skb;	if (le16_to_cpu(header->frame_ctl) & IEEE802_11_FCTL_FROMDS) 		memcpy(source, header->addr3, 6);	else		memcpy(source, header->addr2, 6); 		rx_packet_loc += 24; /* skip header */		if (priv->do_rx_crc)		msdu_size -= 4;	if (frag_no == 0) { /* first fragment */		atmel_copy_to_host(priv->dev, mac4, rx_packet_loc, 6);		msdu_size -= 6;		rx_packet_loc += 6;		if (priv->do_rx_crc) 			crc = crc32_le(crc, mac4, 6);	       		priv->frag_seq = seq_no;		priv->frag_no = 1;		priv->frag_len = msdu_size;		memcpy(priv->frag_source, source, 6); 		memcpy(&priv->rx_buf[6], source, 6);		memcpy(priv->rx_buf, header->addr1, 6);						atmel_copy_to_host(priv->dev, &priv->rx_buf[12], rx_packet_loc, msdu_size);		if (priv->do_rx_crc) {			u32 netcrc;			crc = crc32_le(crc, &priv->rx_buf[12], msdu_size);			atmel_copy_to_host(priv->dev, (void *)&netcrc, rx_packet_loc + msdu_size, 4);			if ((crc ^ 0xffffffff) != netcrc) {				priv->stats.rx_crc_errors++;				memset(priv->frag_source, 0xff, 6);			}		}			} else if (priv->frag_no == frag_no &&		   priv->frag_seq == seq_no &&		   memcmp(priv->frag_source, source, 6) == 0) {				atmel_copy_to_host(priv->dev, &priv->rx_buf[12 + priv->frag_len], 				   rx_packet_loc, msdu_size);		if (priv->do_rx_crc) {			u32 netcrc;			crc = crc32_le(crc, 				       &priv->rx_buf[12 + priv->frag_len], 				       msdu_size);			atmel_copy_to_host(priv->dev, (void *)&netcrc, rx_packet_loc + msdu_size, 4);			if ((crc ^ 0xffffffff) != netcrc) {				priv->stats.rx_crc_errors++;				memset(priv->frag_source, 0xff, 6);				more_frags = 1; /* don't send broken assembly */			}		}				priv->frag_len += msdu_size;		priv->frag_no++;		if (!more_frags) { /* last one */			memset(priv->frag_source, 0xff, 6);			if (!(skb = dev_alloc_skb(priv->frag_len + 14))) {				priv->stats.rx_dropped++;			} else {				skb_reserve(skb, 2);				memcpy(skb_put(skb, priv->frag_len + 12), 				       priv->rx_buf,				       priv->frag_len + 12);				priv->dev->last_rx = jiffies;				skb->dev = priv->dev;				skb->protocol = eth_type_trans(skb, priv->dev);				skb->ip_summed = CHECKSUM_NONE;					netif_rx(skb);				priv->stats.rx_bytes += priv->frag_len + 12;				priv->stats.rx_packets++;			}		}			} else		priv->wstats.discard.fragment++;}		static void rx_done_irq(struct atmel_private *priv){	int i;	struct ieee802_11_hdr header;		for (i = 0; 	     atmel_rmem8(priv, atmel_rx(priv, RX_DESC_FLAGS_OFFSET, priv->rx_desc_head)) == RX_DESC_FLAG_VALID &&		     i < priv->host_info.rx_desc_count;	     i++) {						u16 msdu_size, rx_packet_loc, frame_ctl, seq_control;		u8 status = atmel_rmem8(priv, atmel_rx(priv, RX_DESC_STATUS_OFFSET, priv->rx_desc_head));		u32 crc = 0xffffffff;				if (status != RX_STATUS_SUCCESS) {			if (status == 0xc1) /* determined by experiment */				priv->wstats.discard.nwid++;			else				priv->stats.rx_errors++; 			goto next;		}		msdu_size = atmel_rmem16(priv, atmel_rx(priv, RX_DESC_MSDU_SIZE_OFFSET, priv->rx_desc_head));		rx_packet_loc = atmel_rmem16(priv, atmel_rx(priv, RX_DESC_MSDU_POS_OFFSET, priv->rx_desc_head));				if (msdu_size < 30) {			priv->stats.rx_errors++; 			goto next;		}				/* Get header as far as end of seq_ctl */		atmel_copy_to_host(priv->dev, (char *)&header, rx_packet_loc, 24);		frame_ctl = le16_to_cpu(header.frame_ctl);		seq_control = le16_to_cpu(header.seq_ctl);		/* probe for CRC use here if needed  once five packets have arrived with		   the same crc status, we assume we know what's happening and stop probing */		if (priv->probe_crc) {			if (!priv->wep_is_on || !(frame_ctl & IEEE802_11_FCTL_WEP)) {				priv->do_rx_crc = probe_crc(priv, rx_packet_loc, msdu_size);			} else {				priv->do_rx_crc = probe_crc(priv, rx_packet_loc + 24, msdu_size - 24);			}			if (priv->do_rx_crc) {				if (priv->crc_ok_cnt++ > 5)					priv->probe_crc = 0;			} else {				if (priv->crc_ko_cnt++ > 5)					priv->probe_crc = 0;			}		}		    		/* don't CRC header when WEP in use */		if (priv->do_rx_crc && (!priv->wep_is_on || !(frame_ctl & IEEE802_11_FCTL_WEP))) {			crc = crc32_le(0xffffffff, (unsigned char *)&header, 24);		}		msdu_size -= 24; /* header */		if ((frame_ctl & IEEE802_11_FCTL_FTYPE) == IEEE802_11_FTYPE_DATA) { 						int more_fragments = frame_ctl & IEEE802_11_FCTL_MOREFRAGS;			u8 packet_fragment_no = seq_control & IEEE802_11_SCTL_FRAG;			u16 packet_sequence_no = (seq_control & IEEE802_11_SCTL_SEQ) >> 4;						if (!more_fragments && packet_fragment_no == 0 ) {				fast_rx_path(priv, &header, msdu_size, rx_packet_loc, crc);			} else {				frag_rx_path(priv, &header, msdu_size, rx_packet_loc, crc,					     packet_sequence_no, packet_fragment_no, more_fragments);			}		}				if ((frame_ctl & IEEE802_11_FCTL_FTYPE) == IEEE802_11_FTYPE_MGMT) {			/* copy rest of packet into buffer */			atmel_copy_to_host(priv->dev, (unsigned char *)&priv->rx_buf, rx_packet_loc + 24, msdu_size);						/* we use the same buffer for frag reassembly and control packets */			memset(priv->frag_source, 0xff, 6);						if (priv->do_rx_crc) {				/* last 4 octets is crc */				msdu_size -= 4;				crc = crc32_le(crc, (unsigned char *)&priv->rx_buf, msdu_size);				if ((crc ^ 0xffffffff) != (*((u32 *)&priv->rx_buf[msdu_size]))) {					priv->stats.rx_crc_errors++;					goto next;				}			}			atmel_management_frame(priv, &header, msdu_size,					       atmel_rmem8(priv, atmel_rx(priv, RX_DESC_RSSI_OFFSET, priv->rx_desc_head)));		} 	next:		/* release descriptor */		atmel_wmem8(priv, atmel_rx(priv, RX_DESC_FLAGS_OFFSET, priv->rx_desc_head), RX_DESC_FLAG_CONSUMED);  				if (priv->rx_desc_head < (priv->host_info.rx_desc_count - 1))			priv->rx_desc_head++;							else			priv->rx_desc_head = 0;	}}	static irqreturn_t service_interrupt(int irq, void *dev_id, struct pt_regs *regs){	struct net_device *dev = (struct net_device *) dev_id;	struct atmel_private *priv = netdev_priv(dev);	u8 isr;	int i = -1;	static u8 irq_order[] = { 		ISR_OUT_OF_RANGE,		ISR_RxCOMPLETE,		ISR_TxCOMPLETE,		ISR_RxFRAMELOST,		ISR_FATAL_ERROR,		ISR_COMMAND_COMPLETE,		ISR_IBSS_MERGE,		ISR_GENERIC_IRQ	};			if (priv->card && priv->present_callback && 	    !(*priv->present_callback)(priv->card))		return IRQ_HANDLED;	/* In this state upper-level code assumes it can mess with	   the card unhampered by interrupts which may change register state.	   Note that even though the card shouldn't generate interrupts	   the inturrupt line may be shared. This allows card setup 	   to go on without disabling interrupts for a long time. */	if (priv->station_state == STATION_STATE_DOWN)		return IRQ_NONE;     		atmel_clear_gcr(dev, GCR_ENINT); /* disable interrupts */	while (1) {		if (!atmel_lock_mac(priv)) {			/* failed to contact card */			printk(KERN_ALERT "%s: failed to contact MAC.\n", dev->name);			return IRQ_HANDLED;		}				isr = atmel_rmem8(priv, atmel_hi(priv, IFACE_INT_STATUS_OFFSET));		atmel_wmem8(priv, atmel_hi(priv, IFACE_LOCKOUT_MAC_OFFSET), 0);				if (!isr) {			atmel_set_gcr(dev, GCR_ENINT); /* enable interrupts */			return i == -1 ? IRQ_NONE : IRQ_HANDLED;		}				atmel_set_gcr(dev, GCR_ACKINT); /* acknowledge interrupt */				for (i = 0; i < sizeof(irq_order)/sizeof(u8); i++)			if (isr & irq_order[i])				break;				if (!atmel_lock_mac(priv)) {			/* failed to contact card */			printk(KERN_ALERT "%s: failed to contact MAC.\n", dev->name);			return IRQ_HANDLED;		}				isr = atmel_rmem8(priv, atmel_hi(priv, IFACE_INT_STATUS_OFFSET));		isr ^= irq_order[i];		atmel_wmem8(priv, atmel_hi(priv, IFACE_INT_STATUS_OFFSET), isr);		atmel_wmem8(priv, atmel_hi(priv, IFACE_LOCKOUT_MAC_OFFSET), 0);				switch (irq_order[i]) {					case ISR_OUT_OF_RANGE: 			if (priv->operating_mode == IW_MODE_INFRA && 			    priv->station_state == STATION_STATE_READY) {				priv->station_is_associated = 0;				atmel_scan(priv, 1);			}			break;		case ISR_RxFRAMELOST:			priv->wstats.discard.misc++;			/* fall through */		case ISR_RxCOMPLETE:			rx_done_irq(priv); 			break;					case ISR_TxCOMPLETE:			tx_done_irq(priv); 			break;					case ISR_FATAL_ERROR:			printk(KERN_ALERT "%s: *** FATAL error interrupt ***\n", dev->name);			atmel_enter_state(priv, STATION_STATE_MGMT_ERROR);			break;					case ISR_COMMAND_COMPLETE: 			atmel_command_irq(priv);			break;		case ISR_IBSS_MERGE:			atmel_get_mib(priv, Mac_Mgmt_Mib_Type, MAC_MGMT_MIB_CUR_BSSID_POS, 				      priv->CurrentBSSID, 6);			/* The WPA stuff cares about the current AP address */			if (priv->use_wpa)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人欧美一区二区三区白人 | 日韩一区二区免费在线电影| 亚洲激情成人在线| 色呦呦网站一区| 一区二区免费在线| 欧美日韩欧美一区二区| 日韩福利视频网| 精品国产亚洲在线| 成人丝袜视频网| 国产精品福利av| 色8久久人人97超碰香蕉987| 午夜电影网一区| 欧美第一区第二区| 懂色一区二区三区免费观看| 亚洲欧美日韩国产中文在线| 欧美天堂一区二区三区| 狠狠色丁香九九婷婷综合五月 | 中文字幕一区二区三区在线播放 | 国产欧美日韩在线视频| 9人人澡人人爽人人精品| 一区二区三区国产精品| 日韩欧美一区二区久久婷婷| 国产九色sp调教91| 亚洲一二三四久久| 欧美本精品男人aⅴ天堂| a亚洲天堂av| 日韩成人av影视| 中文字幕制服丝袜一区二区三区 | 不卡视频免费播放| 天天色天天操综合| 欧美国产禁国产网站cc| 欧美日韩在线观看一区二区| 国模娜娜一区二区三区| 夜夜嗨av一区二区三区网页| 精品久久久久久久久久久久久久久 | 在线视频国内自拍亚洲视频| 麻豆极品一区二区三区| 亚洲免费观看视频| 久久久噜噜噜久久人人看| 色又黄又爽网站www久久| 国产美女精品人人做人人爽| 亚洲国产精品久久人人爱| 久久久精品中文字幕麻豆发布| 欧美性生活大片视频| 国产精品 日产精品 欧美精品| 亚洲高清一区二区三区| 国产精品久久久久久久久晋中 | 欧美在线免费观看亚洲| 夫妻av一区二区| 久久黄色级2电影| 亚洲美女淫视频| 欧美高清在线一区| 久久综合久久综合久久综合| 欧美疯狂做受xxxx富婆| 91免费小视频| 国产成人99久久亚洲综合精品| 老司机免费视频一区二区三区| 亚洲一区二区免费视频| 成人免费视频在线观看| 久久久久高清精品| 日韩美女视频在线| 7777女厕盗摄久久久| 色噜噜狠狠色综合欧洲selulu| 国产精品538一区二区在线| 麻豆国产精品777777在线| 婷婷亚洲久悠悠色悠在线播放 | 日韩一区二区麻豆国产| 欧美色精品天天在线观看视频| 99re成人精品视频| 国产成人午夜高潮毛片| 国产精一品亚洲二区在线视频| 狠狠色综合色综合网络| 九色综合国产一区二区三区| 久久精品国产精品亚洲精品| 日韩精品免费视频人成| 天天色图综合网| 琪琪久久久久日韩精品| 蜜桃av一区二区在线观看| 全国精品久久少妇| 全部av―极品视觉盛宴亚洲| 久久精品99久久久| 国产一区三区三区| 国产精品一二三区| 99久久国产免费看| 色一区在线观看| 欧美性受xxxx| 欧美一区二区三区免费| 日韩一区二区在线看片| 精品剧情v国产在线观看在线| 久久久久久久综合狠狠综合| 国产视频一区二区在线| 中文字幕一区二区在线播放| 亚洲自拍偷拍网站| 亚洲1区2区3区视频| 免费亚洲电影在线| 国产成人在线免费观看| av电影天堂一区二区在线观看| 91麻豆swag| 欧美精品粉嫩高潮一区二区| 欧美成人aa大片| 中文成人综合网| 亚洲精品欧美激情| 免费看黄色91| 国产成人精品一区二区三区四区 | 亚洲一区在线观看免费观看电影高清 | 日本丰满少妇一区二区三区| 欧美日韩在线直播| 精品国产乱码久久久久久夜甘婷婷| 久久精品一级爱片| 一区二区三区在线视频观看58| 日韩一区欧美二区| 国产精品66部| 欧美中文字幕久久| 久久久精品中文字幕麻豆发布| 亚洲视频一区二区在线| 蜜桃一区二区三区在线| 99久久99久久免费精品蜜臀| 欧美精品久久久久久久多人混战| 日本一区二区视频在线观看| 一区二区三区免费| 蜜臀久久久久久久| 色综合久久天天| 久久先锋影音av| 亚洲一区二区综合| 国产成人精品一区二区三区四区 | 亚欧色一区w666天堂| 国产精品一区二区久久不卡| 91久久精品网| 国产亚洲综合在线| 性做久久久久久久久| 国产成人高清视频| 欧美乱妇15p| 最近日韩中文字幕| 国产成人一区二区精品非洲| 制服.丝袜.亚洲.中文.综合| 亚洲激情中文1区| 国产69精品久久777的优势| 宅男噜噜噜66一区二区66| 一区免费观看视频| 国产成人亚洲综合a∨猫咪| 日韩欧美国产麻豆| 亚洲超丰满肉感bbw| 97国产一区二区| 国产女同互慰高潮91漫画| 日韩国产一二三区| 欧美性xxxxxx少妇| 亚洲精品成人悠悠色影视| 国产成人精品亚洲777人妖| 欧美一区在线视频| 亚洲成人免费在线| 99久精品国产| 国产精品美女久久久久久久久| 精彩视频一区二区三区| 欧美一区二区精美| 日本一不卡视频| 欧美美女一区二区在线观看| 夜夜夜精品看看| 色婷婷久久久综合中文字幕| 综合中文字幕亚洲| 91蝌蚪porny九色| 亚洲乱码一区二区三区在线观看| 成人sese在线| 国产精品美女久久久久高潮| 国产精品一区二区在线观看不卡 | 洋洋成人永久网站入口| 成人白浆超碰人人人人| 中文字幕在线观看不卡视频| 波多野结衣一区二区三区| 欧美韩国日本综合| 成人性视频网站| **欧美大码日韩| 91久久精品一区二区二区| 亚洲激情六月丁香| 欧美精品第1页| 日本麻豆一区二区三区视频| 91精品国产综合久久久久久漫画| 美腿丝袜亚洲色图| 精品电影一区二区三区| 国产老女人精品毛片久久| 欧美激情一区二区在线| 99久久亚洲一区二区三区青草| 成人欧美一区二区三区黑人麻豆 | 97精品国产露脸对白| 亚洲影视在线观看| 555夜色666亚洲国产免| 亚洲大片免费看| 欧美激情一区不卡| 99麻豆久久久国产精品免费优播| 国产精品成人一区二区三区夜夜夜| 色美美综合视频| 午夜久久久久久电影| 精品美女一区二区三区| 国产传媒久久文化传媒| 一区二区三区四区五区视频在线观看| 欧美综合在线视频| 经典一区二区三区| 亚洲免费观看高清完整版在线观看 | 亚洲一区二区在线免费看| 欧美日韩在线观看一区二区 | 欧美三日本三级三级在线播放|