亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
精品粉嫩aⅴ一区二区三区四区| 激情都市一区二区| 91精品国产综合久久香蕉麻豆 | 亚洲乱码一区二区三区在线观看| 亚洲欧美日韩国产综合在线| 亚洲品质自拍视频| 欧美日韩另类一区| 亚洲精品老司机| 国产激情一区二区三区| 日韩三级精品电影久久久 | 不卡av电影在线播放| 婷婷久久综合九色综合伊人色| 91精品国产乱码| 国产三级精品视频| 亚洲人成网站色在线观看| 日韩中文字幕亚洲一区二区va在线 | 亚洲国产精品天堂| 国产日韩欧美在线一区| 91丝袜呻吟高潮美腿白嫩在线观看| 色婷婷狠狠综合| 美国av一区二区| 91麻豆精品国产91久久久久久久久 | 99久久精品国产观看| 国产精品免费丝袜| 色综合久久精品| 亚洲免费伊人电影| 欧洲精品一区二区| 亚洲一区中文日韩| 欧美一级日韩免费不卡| 国产999精品久久久久久| 一区二区三区四区不卡在线| 日韩色在线观看| 欧美影片第一页| www.综合网.com| 亚洲成人动漫一区| 国产一区二区视频在线| 制服丝袜成人动漫| 一二三区精品福利视频| av在线不卡免费看| 国产精品色婷婷| 国产成+人+日韩+欧美+亚洲| 日韩理论电影院| 人禽交欧美网站| 国产精品天美传媒沈樵| 在线看国产一区| 国产成人免费av在线| 亚洲国产中文字幕| 久久综合久久鬼色| 色八戒一区二区三区| 奇米影视在线99精品| 国产女主播一区| 色综合久久88色综合天天6| 丝袜a∨在线一区二区三区不卡| 中文成人av在线| 91麻豆精品国产91久久久资源速度| 99久久精品国产一区二区三区| 亚洲精品中文在线影院| 91女厕偷拍女厕偷拍高清| 日韩欧美亚洲一区二区| 成人免费黄色在线| 午夜精品免费在线观看| 欧美激情自拍偷拍| 欧美一区二区三区四区久久| 国精产品一区一区三区mba视频| 精品国产一区a| 国产揄拍国内精品对白| 亚洲一区二区三区国产| 亚洲精品在线三区| 91国产福利在线| 国产精品69久久久久水密桃 | 国产不卡在线视频| 日本成人在线网站| 亚洲国产乱码最新视频| 在线影视一区二区三区| 日本电影欧美片| 欧美日免费三级在线| 97久久超碰国产精品| 成人av电影免费在线播放| 国产精品综合av一区二区国产馆| 视频一区欧美日韩| 日韩不卡在线观看日韩不卡视频| 欧美国产成人精品| 久久蜜桃一区二区| 久久精品在线免费观看| 欧美三级日韩三级国产三级| 成人高清视频在线观看| 黄色小说综合网站| 亚洲日本一区二区| 在线国产亚洲欧美| 欧美在线free| 91久久精品一区二区三区| 激情亚洲综合在线| 另类小说欧美激情| 日本麻豆一区二区三区视频| 九九热在线视频观看这里只有精品| 亚洲一区二区三区四区在线 | 国产精品国产自产拍高清av王其| 欧美一区欧美二区| 成人sese在线| 95精品视频在线| 国产一区二区三区黄视频| 国产精华液一区二区三区| 99精品一区二区三区| 欧美性猛交xxxxxxxx| 欧美亚洲国产一区在线观看网站| 欧美日韩亚洲不卡| 成人av片在线观看| 成人性生交大合| 一区二区视频在线| 美女在线一区二区| 亚洲精品高清在线| 亚洲第一电影网| 亚洲第一主播视频| 国产69精品久久久久毛片| 激情综合网激情| 国产一区免费电影| 色乱码一区二区三区88| 欧美丰满嫩嫩电影| 久久一区二区三区四区| 国产欧美日韩精品在线| 亚洲一区二区高清| 性欧美疯狂xxxxbbbb| 夜夜嗨av一区二区三区| 国产精品第一页第二页第三页| 欧美日韩另类国产亚洲欧美一级| 久久综合九色综合97婷婷女人| 欧美日韩国产美| 色狠狠桃花综合| 欧美日韩综合不卡| 精品国精品自拍自在线| 国产精品情趣视频| 免费在线观看一区二区三区| 99久久国产综合精品色伊| www.亚洲色图| 色av成人天堂桃色av| 26uuu亚洲| 精品动漫一区二区三区在线观看| 中文欧美字幕免费| 日本美女一区二区三区视频| 成人美女视频在线观看18| 91国产成人在线| 久久综合中文字幕| 日韩高清一区在线| 国产精品性做久久久久久| 欧美久久高跟鞋激| 久久丝袜美腿综合| 一区二区三区欧美日| 国产999精品久久久久久绿帽| 欧美在线一区二区| 国产清纯美女被跳蛋高潮一区二区久久w | 91激情五月电影| 一区二区三区日本| 国产精品一区二区免费不卡| 欧美成人a视频| 一个色在线综合| 成人性视频免费网站| 老司机精品视频一区二区三区| 色国产综合视频| 久久综合网色—综合色88| 日日夜夜免费精品| 欧美在线免费播放| 亚洲欧美日韩国产成人精品影院| 日韩精品久久理论片| 日本三级亚洲精品| 国产成人午夜精品影院观看视频| 亚洲你懂的在线视频| 亚洲国产精品久久久久秋霞影院 | 欧美日韩一区二区电影| 久久久久久久综合色一本| 一区二区三区在线观看欧美| 精品一区免费av| 欧美午夜理伦三级在线观看| 久久久国际精品| 亚洲精品亚洲人成人网 | 欧美一级精品大片| 亚洲欧美色综合| 成人av资源网站| 91激情五月电影| 亚洲欧洲另类国产综合| 麻豆一区二区在线| 国产日韩欧美在线一区| 国产日韩精品久久久| 成人v精品蜜桃久久一区| 国产成a人亚洲| 久久只精品国产| 国产九色sp调教91| 亚洲国产sm捆绑调教视频| www欧美成人18+| 一本大道综合伊人精品热热| 国产三级精品在线| 成人福利视频网站| 亚洲另类色综合网站| 91九色最新地址| 视频一区二区三区入口| 69堂国产成人免费视频| 亚洲精品国产a| 欧洲一区二区三区在线| 亚洲美女视频在线观看| 一本色道a无线码一区v| 亚洲成av人综合在线观看|