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

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

?? rtmp_main.c

?? r73模塊的無線網卡在Linux下的驅動程序
?? C
?? 第 1 頁 / 共 5 頁
字號:
	if (i == rtusb_usb_id_len) {		KPRINT(KERN_CRIT, "Device Descriptor not matching\n");		goto out_noalloc;	}	/* RTMP_ADAPTER is too big with 64-bit pointers, and using the	   builtin net_device private area causes the allocation to	   exceed 128KB and fail.  So we allocate it separately. */	pAd = kzalloc(sizeof (*pAd), GFP_KERNEL);	if (!pAd) {		KPRINT(KERN_CRIT, "couldn't allocate RTMP_ADAPTER\n");		goto out_noalloc;	}	netdev = alloc_etherdev(0);	if (!netdev) {		KPRINT(KERN_CRIT, "alloc_etherdev failed\n");		goto out_nonetdev;	}	netdev->priv = pAd;	pAd->net_dev = netdev;	netif_stop_queue(netdev);	pAd->config = dev->config;	pAd->pUsb_Dev= dev;	SET_MODULE_OWNER(netdev);	ether_setup(netdev);	netdev->open = usb_rtusb_open;	netdev->hard_start_xmit = RTMPSendPackets;	netdev->stop = usb_rtusb_close;	netdev->get_stats = rt73_get_ether_stats;#if WIRELESS_EXT >= 12#if WIRELESS_EXT < 17	netdev->get_wireless_stats = rt73_get_wireless_stats;#endif	netdev->wireless_handlers = (struct iw_handler_def *) &rt73_iw_handler_def;#endif	netdev->do_ioctl = rt73_ioctl;	netdev->hard_header_len = 14;	netdev->mtu = 1500;	netdev->addr_len = 6;#if WIRELESS_EXT >= 15	netdev->weight = 64;#endif	OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED);	pAd->MLMEThr_pid= -1;	pAd->RTUSBCmdThr_pid= -1;	SET_NETDEV_DEV(netdev, &intf->dev);	{// find available		int 	i=0;		char	slot_name[IFNAMSIZ];		struct  net_device	*device;		struct  usb_interface *ifp= &dev->actconfig->interface[interface];  // get interface from system        struct  usb_interface_descriptor *as;        struct  usb_endpoint_descriptor *ep;    	if (ifname == NULL)			strcpy(netdev->name, "wlan%d");    	else			strncpy(netdev->name, ifname, IFNAMSIZ);		for (i = 0; i < 8; i++)		{			sprintf(slot_name, netdev->name, i);			read_lock_bh(&dev_base_lock); // avoid multiple init			for (device = first_net_device(); device != NULL;					device = next_net_device(device))			{				if (strncmp(device->name, slot_name, IFNAMSIZ) == 0)				{					break;				}			}			read_unlock_bh(&dev_base_lock);			if(device == NULL)	break;		}		if(i == 8)		{			DBGPRINT(RT_DEBUG_ERROR, "No available slot name\n");			KPRINT(KERN_CRIT, "No available slot name\n");			goto out;		}		sprintf(netdev->name, slot_name, i);		DBGPRINT(RT_DEBUG_INFO, "usb device name %s\n",netdev->name);        /* get Max Packet Size from usb_dev endpoint *///        ifp = dev->actconfig->interface + i;        as = ifp->altsetting + ifp->act_altsetting;        ep = as->endpoint;        pAd->BulkOutMaxPacketSize = le16_to_cpu(ep[i].wMaxPacketSize);		// Workaround for EDIMAX 7318USg suggested by Ivo in forum		if (pAd->BulkOutMaxPacketSize == 0) {			pAd->BulkOutMaxPacketSize = 1;			DBGPRINT(RT_DEBUG_WARN,					"-  %s: Device reports zero length wMaxPacketSize. "					"Using workaround.\n",					__FUNCTION__);			KPRINT(KERN_WARNING, "Device reports zero length wMaxPacketSize. "					"Using workaround.\n");		}        DBGPRINT(RT_DEBUG_INFO, "BulkOutMaxPacketSize %d\n",				pAd->BulkOutMaxPacketSize);	}	res = register_netdev(netdev);	if (res) {		KPRINT(KERN_CRIT, "register_netdev failed err=%d\n",res);		goto out;	}	res = common_probe(pAd);	if (res) goto out;#ifdef CONFIG_PM	/* register power management */	pAd->pmdev = pm_register(PM_USB_DEV, 0, rt73_pm_callback);	if (pAd->pmdev) {		pAd->pmdev->data = pAd;	}#endif	DBGPRINT(RT_DEBUG_TRACE, "<-- %s: adapter present\n", __FUNCTION__);	return pAd;out:	free_netdev(netdev);out_nonetdev:	kfree(pAd);out_noalloc:	usb_put_dev(dev);	DBGPRINT(RT_DEBUG_TRACE, "<-- %s: adapter=NULL\n", __FUNCTION__);	return NULL;}//Disconnect function is called within exit routinestatic void usb_rtusb_disconnect(struct usb_device *dev, void *ptr){	PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) ptr;	DBGPRINT(RT_DEBUG_TRACE,"--> %s\n", __FUNCTION__);	if (!pAd) {		DBGPRINT(RT_DEBUG_ERROR, "- (%s) NULL adapter ptr!\n", __FUNCTION__);		return;	}	netif_device_detach(pAd->net_dev);	RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST);	// for debug, wait to show some messages to /proc system	udelay(1);	//After Add Thread implementation, Upon exec there, pAd->net_dev seems becomes NULL,	//need to check why???	//assert(pAd->net_dev != NULL)	// Can call close function - bb	if(pAd->net_dev != NULL)	{		DBGPRINT(RT_DEBUG_INFO, "unregister_netdev\n");		unregister_netdev (pAd->net_dev);	}	udelay(1);	udelay(1);	tasklet_kill(&pAd->rx_bh);	tasklet_kill(&pAd->rx_bk);	KillThreads(pAd);	ReleaseAdapter(pAd, TRUE, FALSE);	// Free URB and transfer buffer memory.	MlmeFreeMemoryHandler(pAd);	free_netdev(pAd->net_dev);	kfree(pAd);	usb_put_dev(dev);	DBGPRINT(RT_DEBUG_TRACE,"<-- %s\n", __FUNCTION__);	KPRINT(KERN_INFO, "disconnected\n");}#else	// Kernel version > 2.5.0#ifdef CONFIG_PMstatic int rt73_suspend(struct usb_interface *intf, pm_message_t state){	DBGPRINT(RT_DEBUG_TRACE,"---> rt73_suspend()\n");	return common_suspend((PRTMP_ADAPTER)usb_get_intfdata(intf));}static int rt73_resume(struct usb_interface *intf){	DBGPRINT(RT_DEBUG_TRACE,"---> rt73_resume()\n");	return common_resume((PRTMP_ADAPTER)usb_get_intfdata(intf));}#endifstatic int usb_rtusb_probe (struct usb_interface *intf,					  const struct usb_device_id *id){	struct usb_device   *dev = interface_to_usbdev(intf);	PRTMP_ADAPTER       pAd;	int                 i;	struct net_device   *netdev;	int                 res = -ENOMEM;	DBGPRINT(RT_DEBUG_TRACE,"--> %s (2.6)\n", __FUNCTION__);	usb_get_dev(dev);	for (i = 0; i < rtusb_usb_id_len; i++)	{		if (le16_to_cpu(dev->descriptor.idVendor) == rtusb_usb_id[i].idVendor &&			le16_to_cpu(dev->descriptor.idProduct) == rtusb_usb_id[i].idProduct)		{			KPRINT(KERN_INFO, "idVendor = 0x%x, idProduct = 0x%x \n",					le16_to_cpu(dev->descriptor.idVendor),					le16_to_cpu(dev->descriptor.idProduct));			break;		}	}	if (i == rtusb_usb_id_len) {		KPRINT(KERN_CRIT, "Device Descriptor not matching\n");		goto out_noalloc;	}	/* RTMP_ADAPTER is too big with 64-bit pointers, and using the	   builtin net_device private area causes the allocation to	   exceed 128KB and fail.  So we allocate it separately. */	pAd = kzalloc(sizeof (*pAd), GFP_KERNEL);	if (!pAd) {		KPRINT(KERN_CRIT, "couldn't allocate RTMP_ADAPTER\n");		goto out_noalloc;	}	netdev = alloc_etherdev(0);	if (!netdev) {		KPRINT(KERN_CRIT, "alloc_etherdev failed\n");		goto out_nonetdev;	}	netdev->priv = pAd;	pAd->net_dev = netdev;	netif_stop_queue(netdev);	pAd->config = &dev->config->desc;	pAd->pUsb_Dev = dev;	SET_MODULE_OWNER(netdev);	ether_setup(netdev);	netdev->open = usb_rtusb_open;	netdev->stop = usb_rtusb_close;	netdev->hard_start_xmit = RTMPSendPackets;	netdev->get_stats = rt73_get_ether_stats;#if WIRELESS_EXT >= 12#if WIRELESS_EXT < 17	netdev->get_wireless_stats = rt73_get_wireless_stats;#endif	netdev->wireless_handlers = (struct iw_handler_def *) &rt73_iw_handler_def;#endif	netdev->do_ioctl = rt73_ioctl;	netdev->hard_header_len = 14;	netdev->mtu = 1500;	netdev->addr_len = 6;	//netdev->weight = 64;	// Used only for poll. N/A in 2.6.24 - bb	OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED);	pAd->MLMEThr_pid= -1;	pAd->RTUSBCmdThr_pid= -1;	SET_NETDEV_DEV(netdev, &intf->dev);	{// find available		int 	i=0;		char	slot_name[IFNAMSIZ];		//struct  net_device	*device;        struct  usb_host_interface *iface_desc;        struct  usb_endpoint_descriptor *endpoint;    	if (ifname == NULL)			strcpy(pAd->net_dev->name, "wlan%d");    	else			strncpy(pAd->net_dev->name, ifname, IFNAMSIZ);		for (i = 0; i < 8; i++)		{			sprintf(slot_name, pAd->net_dev->name, i);#if 1			if(dev_get_by_name(slot_name)==NULL)				break;#else			read_lock_bh(&dev_base_lock); // avoid multiple init			for (device = first_net_device(); device != NULL;					device = next_net_device(device))			{				if (strncmp(device->name, slot_name, IFNAMSIZ) == 0)				{					break;				}			}			read_unlock_bh(&dev_base_lock);			if(device == NULL)	break;#endif		}		if(i == 8)		{			DBGPRINT(RT_DEBUG_ERROR, "No available slot name\n");			KPRINT(KERN_CRIT, "No available slot name\n");			goto out;		}		sprintf(pAd->net_dev->name, slot_name, i);		DBGPRINT(RT_DEBUG_INFO, "usb device name %s\n", pAd->net_dev->name);        /* get the active interface descriptor */        iface_desc = intf->cur_altsetting;        /* check out the endpoint: it has to be Interrupt & IN */        endpoint = &iface_desc->endpoint[i].desc;        /* get Max Packet Size from endpoint */        pAd->BulkOutMaxPacketSize = le16_to_cpu(endpoint->wMaxPacketSize);		// Workaround for EDIMAX 7318USg suggested by Ivo in forum		if (pAd->BulkOutMaxPacketSize == 0) {			pAd->BulkOutMaxPacketSize = 1;			DBGPRINT(RT_DEBUG_WARN,					"-  %s: Device reports zero length wMaxPacketSize. "					"Using workaround.\n",					__FUNCTION__);			KPRINT(KERN_WARNING, "Device reports zero length wMaxPacketSize. "					"Using workaround.\n");		}        DBGPRINT(RT_DEBUG_INFO, "BulkOutMaxPacketSize  %d\n",				pAd->BulkOutMaxPacketSize);	}	res = register_netdev(netdev);	if (res) {		KPRINT(KERN_CRIT, "register_netdev failed err=%d\n",res);		goto out;	}	usb_set_intfdata(intf, pAd);	rt73usb_open_debugfs(pAd);	res = common_probe(pAd);	if (res) goto out;	DBGPRINT(RT_DEBUG_TRACE, "<-- %s: res=%d\n", __FUNCTION__, res);	return 0;out:	free_netdev(netdev);out_nonetdev:	kfree(pAd);out_noalloc:	usb_put_dev(dev);	DBGPRINT(RT_DEBUG_TRACE, "<-- %s: res=%d\n", __FUNCTION__, res);	return res;}static void usb_rtusb_disconnect(struct usb_interface *intf){	struct usb_device   *dev = interface_to_usbdev(intf);	PRTMP_ADAPTER       pAd = (PRTMP_ADAPTER)NULL;	DBGPRINT(RT_DEBUG_TRACE,"--> %s\n", __FUNCTION__);	pAd = usb_get_intfdata(intf);	if (!pAd) {		DBGPRINT(RT_DEBUG_ERROR, "- (%s) NULL adapter ptr!\n", __FUNCTION__);		return;	}	netif_device_detach(pAd->net_dev);	usb_set_intfdata(intf, NULL);	RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST);	DBGPRINT(RT_DEBUG_INFO,"disconnect usbnet usb-%s-%s\n",		dev->bus->bus_name, dev->devpath);	rt73usb_close_debugfs(pAd);	// for debug, wait to show some messages to /proc system	udelay(1);	//After Add Thread implementation, Upon exec there, pAd->net_dev seems becomes NULL,	//need to check why???	//assert(pAd->net_dev != NULL)	// Can call close function - bb	if(pAd->net_dev!= NULL)	{		DBGPRINT(RT_DEBUG_INFO, "unregister_netdev\n");		unregister_netdev (pAd->net_dev);	}	udelay(1);	tasklet_kill(&pAd->rx_bh);	tasklet_kill(&pAd->rx_bk);	KillThreads(pAd);    // Free the entire adapter object	ReleaseAdapter(pAd, TRUE, FALSE);	MlmeFreeMemoryHandler(pAd); //Free MLME memory handler	free_netdev(pAd->net_dev);	kfree(pAd);	usb_put_dev(dev);	DBGPRINT(RT_DEBUG_TRACE,"<-- %s\n", __FUNCTION__);	KPRINT(KERN_INFO, "disconnected\n");}#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) *///// Driver module load function//INT __init usb_rtusb_init(void){    KPRINT(KERN_INFO, "init\n");	#ifdef DBG    RTDebugLevel = debug;	#else	if (debug) {}	// keep compiler from complaining	#endif	if ( strlen(firmName)  > FIRMWARE_NAME_MAX ) {		DBGPRINT(RT_DEBUG_ERROR,"Firmware name too long\n");		return -E2BIG;	}	return usb_register(&rtusb_driver);}//// Driver module unload function//VOID __exit usb_rtusb_exit(void){	udelay(1);	udelay(1);	usb_deregister(&rtusb_driver);	KPRINT(KERN_INFO, "exit\n");}/**************************************/module_init(usb_rtusb_init);module_exit(usb_rtusb_exit);/**************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆精品国产传媒mv男同 | 亚洲欧美一区二区在线观看| 国产农村妇女毛片精品久久麻豆| 国产精品免费免费| 亚洲成人av在线电影| 美女视频免费一区| 成人av第一页| 欧美日韩成人综合在线一区二区| 日韩一区二区三区免费看| 欧美激情一区二区在线| 亚洲成人综合视频| 懂色中文一区二区在线播放| 欧美日韩高清一区| 久久久久99精品国产片| 亚洲国产美国国产综合一区二区| 国产一区二区视频在线播放| 欧美系列在线观看| 精品成人免费观看| 亚洲一区二区三区四区五区中文| 国产剧情一区二区| 欧美亚洲综合网| 国产亚洲精品福利| 天天做天天摸天天爽国产一区 | 欧美精品一区二区三区四区| 亚洲欧美日韩人成在线播放| 日本vs亚洲vs韩国一区三区 | 亚洲免费观看在线视频| 久久97超碰色| 在线观看不卡视频| 欧美激情在线一区二区| 免费一级欧美片在线观看| 91麻豆国产福利精品| 欧美大片拔萝卜| 亚洲影院久久精品| 成人午夜av在线| 日韩欧美123| 亚洲国产日韩a在线播放性色| 国产99久久久精品| 欧美一级一区二区| 亚洲aⅴ怡春院| 一本大道久久a久久综合婷婷| 2017欧美狠狠色| 日韩制服丝袜先锋影音| 色婷婷久久99综合精品jk白丝| 国产亚洲综合性久久久影院| 日韩高清不卡在线| 精品视频一区二区三区免费| 亚洲青青青在线视频| 国产麻豆精品95视频| 欧美一区二区精美| 亚洲成av人片在www色猫咪| 一本在线高清不卡dvd| 亚洲国产精品99久久久久久久久| 久久草av在线| 欧美成人性福生活免费看| 日本欧美韩国一区三区| 欧美日韩在线观看一区二区 | 91美女在线观看| 国产午夜精品一区二区| 国内成+人亚洲+欧美+综合在线| 在线不卡欧美精品一区二区三区| 亚洲美女视频一区| 一本大道久久精品懂色aⅴ| 日韩美女视频一区| 不卡视频免费播放| 国产欧美日韩中文久久| 国产不卡视频在线播放| 久久精品欧美日韩| 国产成人av自拍| 国产亚洲成av人在线观看导航| 精东粉嫩av免费一区二区三区| 日韩亚洲欧美在线| 老司机一区二区| 日韩欧美在线影院| 捆绑变态av一区二区三区| 精品久久久久久无| 国内精品视频一区二区三区八戒| 久久亚洲私人国产精品va媚药| 国产一区二区三区最好精华液| 国产蜜臀av在线一区二区三区| 懂色av一区二区三区免费观看| 国产欧美日韩激情| 不卡一区二区三区四区| 亚洲激情一二三区| 欧美日韩在线免费视频| 日本成人在线电影网| 欧美电视剧免费观看| 国产在线精品国自产拍免费| 亚洲国产高清aⅴ视频| 成人午夜av影视| 一区二区三区精品在线观看| 欧美亚男人的天堂| 日韩电影免费一区| 精品成人佐山爱一区二区| 国产在线国偷精品产拍免费yy| 国产精品素人一区二区| 99精品偷自拍| 天天亚洲美女在线视频| 精品久久久久久无| www.亚洲色图| 亚洲一二三区在线观看| 日韩一级大片在线观看| 粉嫩13p一区二区三区| 亚洲激情图片一区| 91精品国产手机| 国产一区二区三区观看| 亚洲色欲色欲www| 制服丝袜国产精品| 处破女av一区二区| 亚洲影视在线播放| 2020国产精品自拍| 色婷婷综合久色| 美国av一区二区| 国产精品久久久久久久第一福利| 欧美日韩精品一区二区三区四区 | 久久久99精品免费观看不卡| 成人国产精品免费| 午夜一区二区三区在线观看| 久久久91精品国产一区二区三区| 91最新地址在线播放| 青青草原综合久久大伊人精品优势| 久久九九国产精品| 欧美军同video69gay| 国产精品综合av一区二区国产馆| 亚洲三级电影网站| 欧美精品一区二区三| 91久久精品一区二区三区| 国产最新精品免费| 一区二区三区精品久久久| 亚洲精品在线免费播放| 欧美优质美女网站| 国产河南妇女毛片精品久久久| 午夜精品久久久久久不卡8050| 久久蜜臀精品av| 91精品啪在线观看国产60岁| yourporn久久国产精品| 六月婷婷色综合| 亚洲国产日韩综合久久精品| 亚洲国产成人午夜在线一区| 91精品国产美女浴室洗澡无遮挡| 成年人午夜久久久| 国产美女精品在线| 男女视频一区二区| 一区二区高清在线| 国产精品免费人成网站| 欧美精品一区二区三区一线天视频| 欧美三级一区二区| 成人精品国产一区二区4080 | 国产日韩欧美电影| 欧美一区二区三区免费视频| 色综合咪咪久久| 国产精品自在在线| 久久91精品国产91久久小草| 亚洲成人av一区二区三区| 亚洲色图欧洲色图| 国产精品美日韩| 久久午夜国产精品| 亚洲精品在线免费观看视频| 欧美一级一区二区| 欧美精品v国产精品v日韩精品| 欧美影片第一页| 91麻豆自制传媒国产之光| 成人午夜视频在线观看| 国产米奇在线777精品观看| 久久精品国产99国产| 日韩精品一卡二卡三卡四卡无卡| 一区二区三区不卡视频在线观看 | 一本色道久久加勒比精品| 成人少妇影院yyyy| 国产成人在线影院 | 国产精品久久久久一区| 国产亚洲视频系列| 久久嫩草精品久久久精品| 精品sm在线观看| 精品日产卡一卡二卡麻豆| 日韩欧美国产不卡| 日韩三级中文字幕| 日韩午夜在线观看视频| 日韩精品一区二区三区蜜臀 | 精品午夜久久福利影院| 紧缚奴在线一区二区三区| 理论电影国产精品| 久久99久久精品| 久久se这里有精品| 精品一区二区三区免费| 久久福利视频一区二区| 精品系列免费在线观看| 国产一区视频网站| 岛国av在线一区| 91网址在线看| 精品视频一区 二区 三区| 91精品一区二区三区久久久久久 | 日日夜夜免费精品| 日韩激情视频网站| 美腿丝袜亚洲一区| 国产剧情一区二区| 99久久99久久久精品齐齐| 在线欧美日韩国产| 欧美日韩精品久久久| 日韩免费视频一区二区|