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

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

?? r8180_if.c

?? linux下無線驅動開發。類型是rtl8180
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* r8180_if.c: Part of Linux wireless lan driver for RTL8180. *//*        Written 2002-2003 by ShuChen.        This software may be used and distributed according to the terms of        the GNU General Public License (GPL), incorporated herein by reference.        Drivers based on or derived from this code fall under the GPL and must        retain the authorship, copyright and license notice.  This file is not        a complete program and may only be used when the entire operating        system is licensed under the GPL.        The original author may be reached as shuchen@realtek.com.tw		Versions:		1.0 - first release		1.1 - second release		1.2 - 2003-06-10**/#include <linux/module.h>#include <linux/kernel.h>#include <linux/config.h>#include <linux/init.h>#include <linux/ioport.h>#include <linux/sched.h>#include <linux/types.h>#include <linux/slab.h>#include <linux/netdevice.h>#include <linux/pci.h>#include <linux/etherdevice.h>#include <linux/delay.h>#include <linux/rtnetlink.h>	//for rtnl_lock()#include <linux/wireless.h>#include <linux/timer.h>#include <linux/proc_fs.h>	// Necessary because we use the proc fs#include <linux/circ_buf.h>#include <asm/uaccess.h>	//for copy_from_user#include <asm/io.h>#include "r8180_if.h"#include "r8180_type.h"#include "r8180_export.h"/****************************************************************** rtl8180 wireless lan driver debugging flag******************************************************************/char wlan_debug = RTL_DDEBUG_OUTINFO;/****************************************************************** (1)Allocate net_device and rtl8180 private area. (2)Initialize net_device******************************************************************/static struct net_device *rtl_alloc_netdev(int sizeof_priv, const char *mask, void (*setup)(struct net_device *)){	struct net_device *dev;	int alloc_size;	//-------------------------------------------------------	// ensure 32-byte alignment of the private area	//-------------------------------------------------------	alloc_size = sizeof (*dev) + sizeof_priv + 31;	//-------------------------------------------------------	// Memory-Allocate for *dev, privete_data	//-------------------------------------------------------	dev = (struct net_device *) kmalloc (alloc_size, GFP_KERNEL);	if (dev == NULL)	{		printk(KERN_ERR "alloc_dev: Unable to allocate device memory.\n");		return NULL;	}	memset(dev, 0, alloc_size);	//-------------------------------------------------------	// ensure 32-byte alignment of the private area	//-------------------------------------------------------	if (sizeof_priv){		dev->priv = (void *) (((long)(dev + 1) + 31) & ~31);	}	//-------------------------------------------------------	// Setup net_device	//-------------------------------------------------------	if( setup != NULL ){		setup(dev);	}	//-------------------------------------------------------	// Setup net_device name	//-------------------------------------------------------	strcpy(dev->name, mask);	return dev;}//end of static struct net_device *rtl8180_init_netdev()//==========================================================================================// rtl_alloc_wlandev()//    based on alloc_etherdev() - Allocates and sets up an ethernet device.//    @sizeof_priv: Size of additional driver-private structure to be allocated for this ethernet device//    Fill in the fields of the device structure with ethernet-generic values.//    Basically does everything except registering the device.//    Constructs a new net device, complete with a private data area of//    size @sizeof_priv.  A 32-byte (not bit) alignment is enforced for//    this private data area.//==========================================================================================struct net_device *rtl_alloc_wlandev(struct net_device *dev, int sizeof_priv){	DPRINTK_INFO("%s() in rtl8180_pci_probe(). \n", __FUNCTION__);	/******************************************************************	(1)Allocate net_device and rtl8180 private area.	(2)Initialize net_device	******************************************************************/#ifdef WDS{	int priv_size;	if ( dev == NULL ) // ap context		priv_size = sizeof_priv;	else		priv_size = 0;		return rtl_alloc_netdev( priv_size, "wlan%d", ether_setup );}#else	return rtl_alloc_netdev( sizeof_priv, "wlan%d", ether_setup );#endif}//==========================================================================================// rtl_register_netdev()//     Register the net device//==========================================================================================int rtl_register_netdev(struct net_device *dev){	DPRINTK_INFO("%s() in rtl8180_pci_probe() once everything initializes. (after request_irq)\n", __FUNCTION__);	return register_netdev(dev);}//==========================================================================================// rtl_unregister_netdev()//     Unregister the net device//==========================================================================================void rtl_unregister_netdev(struct net_device *dev){	DPRINTK_INFO("%s() in rtl8180_pci_remove(). \n", __FUNCTION__);	unregister_netdev(dev);}//------------------------------------------------------// Skb statistic debug//------------------------------------------------------#ifdef ENABLE_RTL_SKB_STATS    atomic_t	rtl_alloc_skb_cnt;    atomic_t	rtl_kfree_skb_cnt;    atomic_t	rtl_netif_rx_skb_cnt;#endif //end #ifdef ENABLE_RTL_SKB_STATS//==========================================================================================// rtl_dev_alloc_skb()//     Allocate net device socket buffer.//==========================================================================================struct sk_buff *rtl_dev_alloc_skb(unsigned int length){	struct sk_buff *skb = NULL;	skb = dev_alloc_skb( length );#ifdef ENABLE_RTL_SKB_STATS	rtl_skb_atomic_inc(&rtl_alloc_skb_cnt);#endif //end #ifdef ENABLE_RTL_SKB_STATS#ifdef ENABLE_RTL_SKB_TAGS_DBG	if(skb){		skb_cbinfo_set_rtag(skb,RTL_TAG_FROM_DRV|RTL_TAG_WAITFREE);		skb_cbinfo_set_rskb_structp(skb);		skb_cbinfo_set_rskb_bufhead(skb);	}#endif //end #ifdef ENABLE_RTL_SKB_TAGS_DBG	return skb;}//==========================================================================================// rtl_skb_reserve()//     Reserve the first $len bytes in net device socket buffer.//==========================================================================================void rtl_skb_reserve(struct sk_buff *skb, unsigned int len){	if ((unsigned int)skb == 0)		printk("WLAN-OUT of SKB\n");	else		skb_reserve( skb, len );}//==========================================================================================// rtl_kfree_skb()//     Free net device socket buffer.//==========================================================================================void rtl_kfree_skb(struct sk_buff *skb){#ifdef ENABLE_RTL_SKB_STATS	rtl_skb_atomic_inc(&rtl_kfree_skb_cnt);#endif //end #ifdef ENABLE_RTL_SKB_STATS#ifdef ENABLE_RTL_SKB_TAGS_DBG	if( ( (skb_cbinfo_get_rtag(skb)&RTL_TAG_SRC_MASK) != RTL_TAG_FROM_DRV )		&& ( (skb_cbinfo_get_rtag(skb)&RTL_TAG_SRC_MASK) != RTL_TAG_FROM_LLC )	)	{#ifdef ENABLE_RTL8180_TEST_MODE#else		printk("%s:Unknown skb_cbinfo_get_rtag(skb)=0x%08lx\n", __FUNCTION__, skb_cbinfo_get_rtag(skb));#endif //end #ifdef ENABLE_RTL8180_TEST_MODE	}	else{//		if( (skb_cbinfo_get_rtag(skb)==RTL_TAG_FROM_DRV) ){//			printk("%s:skb_cbinfo_get_rtag(skb)=RTL_TAG_FROM_DRV\n", __FUNCTION__);//		}//		else if( (skb_cbinfo_get_rtag(skb)==RTL_TAG_FROM_LLC) ){//			printk("%s:skb_cbinfo_get_rtag(skb)=RTL_TAG_FROM_LLC\n", __FUNCTION__);//		}		if( !(skb_cbinfo_get_rtag(skb)&RTL_TAG_WAITFREE) ){			printk("%s:Error for free skb, <skb_cbinfo_get_rtag(skb)=0x%08lx>\n", __FUNCTION__, skb_cbinfo_get_rtag(skb));		}		skb_cbinfo_set_rtag(skb,~RTL_TAG_WAITFREE);		if( skb_cbinfo_get_rskb_structp(skb) != (unsigned long)skb ){			printk("%s:Invalid skb_cbinfo_get_rskb_structp(skb)=0x%08lx, <skb=0x%08lx>\n",						__FUNCTION__, (unsigned long)skb_cbinfo_get_rskb_structp(skb), (unsigned long)skb);		}		if( skb_cbinfo_set_rskb_bufhead(skb) != (unsigned long)skb->head ){			printk("%s:Invalid skb_cbinfo_get_rskb_bufhead(skb)=0x%08lx, <skb->head=0x%08lx>\n",						__FUNCTION__, (unsigned long)skb_cbinfo_get_rskb_bufhead(skb), (unsigned long)skb->head);		}	}#endif //end #ifdef ENABLE_RTL_SKB_TAGS_DBG	dev_kfree_skb_irq(skb);	//dev_kfree_skb(skb);}int rtl_malloc_cnt = 0;/************************************************************************************************************************************/unsigned char *rtl_malloc(int size, int flags){	unsigned char *buf;	rtl_malloc_cnt ++;	buf = kmalloc( (size_t)size, flags);	return buf;}/************************************************************************************************************************************/void rtl_free( unsigned char *buf){	rtl_malloc_cnt --;	kfree ( (void *)buf );}/************************************************************************************************************************************/int rtl_netif_running(struct net_device *dev){	return netif_running(dev);}/************************************************************************************************************************************/int rtl_netif_queue_stopped(struct net_device *dev){	return netif_queue_stopped(dev);}/************************************************************************************************************************************/void rtl_netif_wake_queue(struct net_device *dev){

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
7777精品伊人久久久大香线蕉经典版下载| 久久久久久电影| 日韩一区国产二区欧美三区| 欧美欧美欧美欧美| 日韩精品一区二区三区swag| 日韩片之四级片| 国产精品大尺度| 经典一区二区三区| 日韩一区二区视频在线观看| 亚洲欧美国产77777| 国产激情偷乱视频一区二区三区| 91精品国产91久久久久久一区二区 | 日韩小视频在线观看专区| 综合中文字幕亚洲| 成人免费视频一区二区| 精品久久久久久久久久久久久久久| 亚洲国产日产av| 一本大道综合伊人精品热热| 国产精品色在线观看| 国产福利一区二区三区视频| 日韩欧美一级二级三级| 天天综合色天天综合| 欧美午夜片在线看| 亚洲资源中文字幕| 欧美色成人综合| 亚洲福中文字幕伊人影院| 色狠狠综合天天综合综合| 亚洲私人影院在线观看| 92国产精品观看| 亚洲激情欧美激情| 欧美日韩亚洲另类| 婷婷国产v国产偷v亚洲高清| 欧美精选午夜久久久乱码6080| 亚洲国产色一区| 欧美人成免费网站| 秋霞电影一区二区| 欧美电影免费观看完整版| 激情欧美日韩一区二区| 国产色产综合产在线视频 | 午夜精品久久久久| 欧美老肥妇做.爰bbww| 青青草一区二区三区| 日韩精品自拍偷拍| 成人性生交大片免费看视频在线| 国产精品伦一区| 在线免费精品视频| 青青草原综合久久大伊人精品优势| 日韩欧美亚洲另类制服综合在线| 韩国毛片一区二区三区| 国产精品国产成人国产三级| 日本丶国产丶欧美色综合| 亚洲高清视频中文字幕| 日韩一区二区三区免费看| 国产精品一区免费在线观看| 中文字幕一区在线| 欧美久久久久久久久中文字幕| 蜜桃视频第一区免费观看| 亚洲精品一区二区三区香蕉| 99久久国产综合色|国产精品| 亚洲午夜私人影院| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 中文文精品字幕一区二区| 色欧美乱欧美15图片| 日本伊人色综合网| 国产精品久久久久影视| 欧美另类高清zo欧美| 国模套图日韩精品一区二区| 亚洲精品视频观看| 精品福利视频一区二区三区| 97精品久久久久中文字幕| 美日韩一区二区| 中文字幕一区二区5566日韩| 4438成人网| 91啦中文在线观看| 国产九九视频一区二区三区| 亚洲国产aⅴ成人精品无吗| 国产色综合久久| 欧美一卡二卡三卡| 色综合中文字幕| 国产一区二区三区不卡在线观看 | 国产精品主播直播| 日日夜夜一区二区| 自拍偷拍国产亚洲| 久久免费视频色| 日韩欧美在线影院| 欧美在线啊v一区| www.爱久久.com| 国产福利一区在线| 蜜桃传媒麻豆第一区在线观看| 亚洲日本在线a| 国产亚洲一区字幕| 日韩欧美国产电影| 欧美精品一级二级三级| 在线观看亚洲a| 91美女片黄在线观看| 成人深夜在线观看| 国产成人午夜精品5599| 美腿丝袜在线亚洲一区| 日韩精品成人一区二区三区| 亚洲视频一区在线观看| 中文字幕中文字幕一区| 中文字幕 久热精品 视频在线 | 欧美日韩在线电影| 不卡视频免费播放| 成人国产在线观看| 丁香五精品蜜臀久久久久99网站 | 日韩**一区毛片| 亚洲成人1区2区| 亚洲 欧美综合在线网络| 亚洲一二三四在线| 亚洲一区二区免费视频| 亚洲国产日韩精品| 亚洲综合色在线| 一区二区三区四区蜜桃 | 日本成人超碰在线观看| 午夜精品一区二区三区三上悠亚| 亚洲精品日韩综合观看成人91| 中文字幕中文在线不卡住| 欧美性xxxxx极品少妇| 成人av在线播放网址| 成人18视频日本| 99视频一区二区三区| 一本一道久久a久久精品| 在线亚洲免费视频| 欧美日本一道本| 欧美一级日韩免费不卡| 精品三级在线看| 国产精品天美传媒| 亚洲主播在线观看| 日韩精品亚洲专区| 精品伊人久久久久7777人| 国产精选一区二区三区| 不卡一区在线观看| 在线观看国产91| 日韩一区国产二区欧美三区| 久久在线免费观看| 亚洲婷婷综合色高清在线| 亚洲一级在线观看| 韩国女主播成人在线| 成人h版在线观看| 欧美性三三影院| 91精品国产综合久久香蕉麻豆| 久久综合色综合88| 怡红院av一区二区三区| 蜜乳av一区二区三区| gogogo免费视频观看亚洲一| 欧美日韩电影在线| 欧美激情一区二区三区不卡| 亚洲视频在线观看一区| 日本不卡一区二区| 99视频精品免费视频| 欧美高清一级片在线| 国产精品少妇自拍| 日韩国产欧美在线播放| 国产成人高清视频| 欧美美女喷水视频| 国产视频一区在线观看| 天天做天天摸天天爽国产一区| 国产1区2区3区精品美女| 欧美视频中文一区二区三区在线观看| 26uuu国产日韩综合| 亚洲一区在线观看网站| 麻豆精品在线看| 色综合视频在线观看| 久久中文字幕电影| 日韩精品一级中文字幕精品视频免费观看 | 久久嫩草精品久久久精品| 艳妇臀荡乳欲伦亚洲一区| 国产一区二区免费视频| 欧美日韩国产三级| 中文字幕一区二| 国产精品77777| 日韩一区二区免费在线电影| 亚洲欧美日韩中文字幕一区二区三区| 麻豆成人久久精品二区三区小说| 99亚偷拍自图区亚洲| 久久婷婷国产综合精品青草| 亚洲福利视频导航| 成人app软件下载大全免费| 亚洲精品一区二区三区福利| 亚洲图片欧美一区| 97精品电影院| 综合久久综合久久| 高清不卡一区二区| 精品国产91乱码一区二区三区| 青青草国产成人av片免费| 欧洲精品在线观看| 亚洲人成小说网站色在线| 国产成人高清视频| 国产视频在线观看一区二区三区| 久久精品国产999大香线蕉| 欧美日韩国产不卡| 亚洲午夜精品网| 在线精品视频免费观看| 亚洲精品免费看| 一本高清dvd不卡在线观看| 1区2区3区欧美| 色av综合在线| 一区二区在线电影| 欧美午夜电影网|