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

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

?? dvb_net.c

?? linux環境下的dvb驅動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
	dvb_net_feed_stop(dev);	priv->rx_mode = RX_MODE_UNI;		if(dev->flags & IFF_PROMISC) {		dprintk("%s: promiscuous mode\n", dev->name);		priv->rx_mode = RX_MODE_PROMISC;	} else if ((dev->flags & IFF_ALLMULTI)) {		dprintk("%s: allmulti mode\n", dev->name);		priv->rx_mode = RX_MODE_ALL_MULTI;	} else if (dev->mc_count) {		int mci;		struct dev_mc_list *mc;		dprintk("%s: set_mc_list, %d entries\n",			dev->name, dev->mc_count);		priv->rx_mode = RX_MODE_MULTI;		priv->multi_num = 0;		for (mci = 0, mc=dev->mc_list; 		     mci < dev->mc_count;		     mc = mc->next, mci++) {			dvb_set_mc_filter(dev, mc);		}	}		dvb_net_feed_start(dev);	}static void dvb_net_set_multicast_list (struct net_device *dev){	struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;	schedule_work(&priv->set_multicast_list_wq);}static int dvb_net_set_config(struct net_device *dev, struct ifmap *map){	if (netif_running(dev))		return -EBUSY;	return 0;}static void wq_restart_net_feed (void *data){	struct net_device *dev = data;	if (netif_running(dev)) {		dvb_net_feed_stop(dev);		dvb_net_feed_start(dev);	}}static int dvb_net_set_mac (struct net_device *dev, void *p){	struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;	struct sockaddr *addr=p;	memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);	if (netif_running(dev))		schedule_work(&priv->restart_net_feed_wq);	return 0;}static int dvb_net_open(struct net_device *dev){	struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;	priv->in_use++;	dvb_net_feed_start(dev);	return 0;}static int dvb_net_stop(struct net_device *dev){	struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;	priv->in_use--;        dvb_net_feed_stop(dev);	return 0;}static struct net_device_stats * dvb_net_get_stats(struct net_device *dev){        return &((struct dvb_net_priv*) dev->priv)->stats;}#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)static int dvb_net_init_dev (struct net_device *dev)#elsestatic void dvb_net_setup(struct net_device *dev)#endif{	ether_setup(dev);	dev->open		= dvb_net_open;	dev->stop		= dvb_net_stop;	dev->hard_start_xmit	= dvb_net_tx;	dev->get_stats		= dvb_net_get_stats;	dev->set_multicast_list = dvb_net_set_multicast_list;	dev->set_config         = dvb_net_set_config;	dev->set_mac_address    = dvb_net_set_mac;	dev->mtu		= 4096;	dev->mc_count           = 0;	dev->hard_header_cache  = NULL;	dev->flags |= IFF_NOARP;#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)	return 0;#endif}static int get_if(struct dvb_net *dvbnet){	int i;	for (i=0; i<DVB_NET_DEVICES_MAX; i++)		if (!dvbnet->state[i])			break;	if (i == DVB_NET_DEVICES_MAX)		return -1;	dvbnet->state[i]=1;	return i;}#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)static int dvb_net_add_if(struct dvb_net *dvbnet, u16 pid){        struct net_device *net;	struct dmx_demux *demux;	struct dvb_net_priv *priv;	int result;	int if_num; 	if ((if_num = get_if(dvbnet)) < 0)		return -EINVAL;	net = &dvbnet->device[if_num];	demux = dvbnet->demux;		memset(net, 0, sizeof(struct net_device));	memcpy(net->name, "dvb0_0", 7);	net->name[3]   = dvbnet->dvbdev->adapter->num + '0';	net->name[5]   = if_num + '0';	net->addr_len  		= 6;	memcpy(net->dev_addr, dvbnet->dvbdev->adapter->proposed_mac, 6);	net->next      = NULL;	net->init      = dvb_net_init_dev;	if (!(net->priv = kmalloc(sizeof(struct dvb_net_priv), GFP_KERNEL)))		return -ENOMEM;		priv = net->priv;	memset(priv, 0, sizeof(struct dvb_net_priv));	priv->demux = demux;        priv->pid = pid;	priv->rx_mode = RX_MODE_UNI;	INIT_WORK(&priv->set_multicast_list_wq, wq_set_multicast_list, net);	INIT_WORK(&priv->restart_net_feed_wq, wq_restart_net_feed, net);        net->base_addr = pid;                	if ((result = register_netdev(net)) < 0) {		return result;	}        return if_num;}#elsestatic int dvb_net_add_if(struct dvb_net *dvbnet, u16 pid){        struct net_device *net;	struct dvb_net_priv *priv;	int result;	int if_num; 	if ((if_num = get_if(dvbnet)) < 0)		return -EINVAL;	net = alloc_netdev(sizeof(struct dvb_net_priv), "dvb",			   dvb_net_setup);	if (!net)		return -ENOMEM;		sprintf(net->name, "dvb%d_%d", dvbnet->dvbdev->adapter->num, if_num);	net->addr_len  		= 6;	memcpy(net->dev_addr, dvbnet->dvbdev->adapter->proposed_mac, 6);	dvbnet->device[if_num] = net;		priv = net->priv;        priv->demux = dvbnet->demux;        priv->pid = pid;	priv->rx_mode = RX_MODE_UNI;	INIT_WORK(&priv->set_multicast_list_wq, wq_set_multicast_list, net);	INIT_WORK(&priv->restart_net_feed_wq, wq_restart_net_feed, net);        net->base_addr = pid;                	if ((result = register_netdev(net)) < 0) {		dvbnet->device[if_num] = NULL;		free_netdev(net);		return result;	}        return if_num;}#endif#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)static int dvb_net_remove_if(struct dvb_net *dvbnet, int num){	struct dvb_net_priv *priv = dvbnet->device[num].priv;	if (!dvbnet->state[num])		return -EINVAL;	if (priv->in_use)		return -EBUSY;	dvb_net_stop(&dvbnet->device[num]);	flush_scheduled_work();	kfree(priv);	unregister_netdev(&dvbnet->device[num]);	dvbnet->state[num]=0;	return 0;}#elsestatic int dvb_net_remove_if(struct dvb_net *dvbnet, int num){	struct net_device *net = dvbnet->device[num];	struct dvb_net_priv *priv = net->priv;	if (!dvbnet->state[num])		return -EINVAL;	if (priv->in_use)		return -EBUSY;	dvb_net_stop(net);	flush_scheduled_work();        unregister_netdev(net);	dvbnet->state[num]=0;	dvbnet->device[num] = NULL;	free_netdev(net);	return 0;}#endifstatic int dvb_net_do_ioctl(struct inode *inode, struct file *file,		  unsigned int cmd, void *parg){	struct dvb_device *dvbdev = (struct dvb_device *) file->private_data;	struct dvb_net *dvbnet = (struct dvb_net *) dvbdev->priv;	if (((file->f_flags&O_ACCMODE)==O_RDONLY))		return -EPERM;		switch (cmd) {	case NET_ADD_IF:	{		struct dvb_net_if *dvbnetif=(struct dvb_net_if *)parg;		int result;				if (!capable(CAP_SYS_ADMIN))			return -EPERM;		result=dvb_net_add_if(dvbnet, dvbnetif->pid);		if (result<0)			return result;		dvbnetif->if_num=result;		break;	}	case NET_GET_IF:	{		struct net_device *netdev;		struct dvb_net_priv *priv_data;		struct dvb_net_if *dvbnetif=(struct dvb_net_if *)parg;		if (dvbnetif->if_num >= DVB_NET_DEVICES_MAX ||		    !dvbnet->state[dvbnetif->if_num])			return -EINVAL;#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)		netdev = &dvbnet->device[dvbnetif->if_num];#else		netdev = dvbnet->device[dvbnetif->if_num];#endif		priv_data=(struct dvb_net_priv*)netdev->priv;		dvbnetif->pid=priv_data->pid;		break;	}	case NET_REMOVE_IF:		if (!capable(CAP_SYS_ADMIN))			return -EPERM;		return dvb_net_remove_if(dvbnet, (int) (long) parg);	default:		return -ENOTTY;	}	return 0;}static int dvb_net_ioctl(struct inode *inode, struct file *file,	      unsigned int cmd, unsigned long arg){	return dvb_usercopy(inode, file, cmd, arg, dvb_net_do_ioctl);}static struct file_operations dvb_net_fops = {	.owner = THIS_MODULE,        .read =	0,	.write = 0,	.ioctl = dvb_net_ioctl,	.open =	dvb_generic_open,	.release = dvb_generic_release,	.poll =	0,};static struct dvb_device dvbdev_net = {        .priv = 0,        .users = 1,        .writers = 1,        .fops = &dvb_net_fops,};void dvb_net_release (struct dvb_net *dvbnet){	int i;	dvb_unregister_device(dvbnet->dvbdev);	for (i=0; i<DVB_NET_DEVICES_MAX; i++) {		if (!dvbnet->state[i])			continue;		dvb_net_remove_if(dvbnet, i);	}}int dvb_net_init (struct dvb_adapter *adap, struct dvb_net *dvbnet,		  struct dmx_demux *dmx){	int i;			dvbnet->demux = dmx;	for (i=0; i<DVB_NET_DEVICES_MAX; i++)		dvbnet->state[i] = 0;	dvb_register_device (adap, &dvbnet->dvbdev, &dvbdev_net,			     dvbnet, DVB_DEVICE_NET);	return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91福利视频网站| 欧美精品一区二区三区很污很色的 | 亚洲精品国产视频| 日本sm残虐另类| 91蜜桃传媒精品久久久一区二区| 4438成人网| 一区二区三区自拍| 成人午夜伦理影院| 欧美videos大乳护士334| 亚洲欧洲日韩在线| 国产中文字幕精品| 666欧美在线视频| 亚洲精品乱码久久久久| 成人一区二区三区在线观看| 日韩一二三区视频| 亚洲国产乱码最新视频| 91久久线看在观草草青青| 久久久久久97三级| 国内不卡的二区三区中文字幕| 欧美午夜精品一区二区蜜桃| 亚洲欧美在线视频观看| 丁香婷婷综合激情五月色| 精品国产乱码久久久久久图片 | 91视视频在线观看入口直接观看www| 欧美一区二区观看视频| 中文字幕av一区二区三区| 精品一区精品二区高清| 欧美一区二区精品久久911| 午夜视黄欧洲亚洲| 在线免费观看日本一区| 亚洲欧美视频在线观看视频| 不卡的av在线| 亚洲欧美日韩精品久久久久| av一二三不卡影片| 亚洲视频在线观看三级| www.激情成人| 亚洲精品伦理在线| 色婷婷综合在线| 樱花草国产18久久久久| 欧美在线观看视频在线| 亚洲一区在线观看免费观看电影高清| 色妹子一区二区| 夜夜嗨av一区二区三区四季av| 色婷婷精品大视频在线蜜桃视频| 1024成人网| 在线一区二区三区四区| 午夜国产精品一区| 日韩视频在线你懂得| 精品一区二区三区欧美| 国产午夜亚洲精品理论片色戒| 国产东北露脸精品视频| 亚洲私人影院在线观看| 欧美亚洲日本一区| 日本成人在线看| 久久麻豆一区二区| 91在线码无精品| 亚洲成a人片综合在线| 欧美一区二区在线免费播放| 国产综合一区二区| 亚洲视频免费在线| 欧美高清hd18日本| 国产盗摄一区二区| 综合精品久久久| 91精品国产欧美日韩| 国产精品 欧美精品| 一区二区三区蜜桃| 欧美电影免费观看高清完整版在 | 一本色道久久综合亚洲91| 亚洲国产成人tv| 精品国产91洋老外米糕| 91麻豆国产香蕉久久精品| 视频在线观看一区二区三区| 久久久亚洲精品石原莉奈| 99视频超级精品| 青椒成人免费视频| 中文字幕在线播放不卡一区| 欧美日韩精品免费| 不卡视频免费播放| 日本美女一区二区三区视频| 国产精品久久久久一区二区三区共 | 久久99精品久久久久婷婷| 亚洲天堂2014| 久久夜色精品一区| 欧美日韩二区三区| 不卡av在线网| 国产一区二区三区四区五区美女| 亚洲精品成人a在线观看| 亚洲精品一区二区三区福利| 欧美色精品天天在线观看视频| 国产91色综合久久免费分享| 日本人妖一区二区| 亚洲三级在线观看| 国产日韩欧美高清在线| 欧美一区二区三区免费视频| 91社区在线播放| 大陆成人av片| 国产一区二区三区在线观看免费 | 狠狠色丁香婷综合久久| 亚洲 欧美综合在线网络| 中文字幕中文乱码欧美一区二区 | 日韩欧美电影一二三| 日本精品免费观看高清观看| 成人小视频免费在线观看| 美女视频黄 久久| 日韩 欧美一区二区三区| 亚洲国产视频在线| 一区二区理论电影在线观看| 亚洲视频一区二区在线观看| 国产日韩欧美一区二区三区综合| 欧美sm美女调教| 日韩一区二区麻豆国产| 欧美一区二区三区视频免费| 欧美一区二区三区思思人| 正在播放一区二区| 91精品国产乱码| 日韩午夜小视频| 日韩欧美中文一区| 日韩免费看的电影| 日韩免费成人网| 亚洲精品一区二区三区影院| 欧美成人精品二区三区99精品| 日韩精品一区二区三区视频播放| 日韩欧美国产综合一区| 久久一区二区三区四区| 日本一区二区在线不卡| 亚洲欧洲在线观看av| 亚洲欧洲综合另类在线| 亚洲狠狠爱一区二区三区| 一区二区三区精品在线| 日韩在线卡一卡二| 蜜臀av亚洲一区中文字幕| 极品美女销魂一区二区三区免费 | 久久亚洲综合色一区二区三区| 精品国精品自拍自在线| 国产亚洲一区二区三区在线观看| 国产日本欧美一区二区| 亚洲色图都市小说| 亚洲123区在线观看| 免费高清成人在线| 成人自拍视频在线观看| 91蜜桃婷婷狠狠久久综合9色| 欧美日韩一区高清| 欧美成人一区二区三区片免费| 久久精品夜色噜噜亚洲aⅴ| 亚洲三级电影全部在线观看高清| 一区二区三区成人在线视频| 蜜臀精品一区二区三区在线观看| 国产二区国产一区在线观看| 欧美中文字幕一区二区三区| 欧美成人video| 国产精品久久久久久福利一牛影视 | 亚洲欧洲无码一区二区三区| 午夜久久久久久久久| 国产伦精品一区二区三区免费 | 国产一区二区在线看| 91丨九色丨国产丨porny| 91精品黄色片免费大全| 国产精品免费视频一区| 天天操天天干天天综合网| 国产99久久久久久免费看农村| 91激情在线视频| 国产亚洲短视频| 亚洲国产欧美日韩另类综合| 国产精品一区二区91| 欧美日韩日本视频| 国产精品毛片大码女人| 日日骚欧美日韩| 91网上在线视频| wwwwxxxxx欧美| 肉丝袜脚交视频一区二区| 成人精品国产一区二区4080| 欧美一区二区女人| 亚洲激情在线激情| 国产福利91精品一区| 91精品国产欧美一区二区成人| 亚洲天堂免费在线观看视频| 国产一区二区导航在线播放| 欧美顶级少妇做爰| 亚洲一区二区三区四区五区中文| 国产盗摄女厕一区二区三区| 日韩欧美黄色影院| 丝袜美腿亚洲色图| 色88888久久久久久影院按摩| 国产视频一区二区在线| 久久超碰97人人做人人爱| 欧美日韩一区视频| 一区二区三区日韩在线观看| av高清不卡在线| 亚洲国产精品成人综合色在线婷婷| 免费观看成人鲁鲁鲁鲁鲁视频| 精品视频免费在线| 亚洲综合激情小说| 色婷婷av一区二区| 亚洲欧美偷拍三级| 91香蕉视频污| 亚洲精品欧美专区| 欧洲视频一区二区| 一区二区三区免费| 欧美午夜视频网站| 亚洲高清免费观看高清完整版在线观看|