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

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

?? lcs.c

?? 優龍2410linux2.6.8內核源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
/** * Process control frames. */static voidlcs_get_control(struct lcs_card *card, struct lcs_cmd *cmd){	LCS_DBF_TEXT(5, trace, "getctrl");	if (cmd->initiator == LCS_INITIATOR_LGW) {		switch(cmd->cmd_code) {		case LCS_CMD_STARTUP:			set_bit(0, &card->thread_mask);			schedule_work(&card->kernel_thread_starter);			break;		case LCS_CMD_STARTLAN:			set_bit(1, &card->thread_mask);			schedule_work(&card->kernel_thread_starter);			break;		case LCS_CMD_STOPLAN:			set_bit(2, &card->thread_mask);			schedule_work(&card->kernel_thread_starter);			break;		default:			PRINT_INFO("UNRECOGNIZED LGW COMMAND\n");			break;		}	} else		lcs_notify_lancmd_waiters(card, cmd);}/** * Unpack network packet. */static voidlcs_get_skb(struct lcs_card *card, char *skb_data, unsigned int skb_len){	struct sk_buff *skb;	LCS_DBF_TEXT(5, trace, "getskb");	if (card->dev == NULL ||	    card->state != DEV_STATE_UP)		/* The card isn't up. Ignore the packet. */		return;	skb = dev_alloc_skb(skb_len);	if (skb == NULL) {		PRINT_ERR("LCS: alloc_skb failed for device=%s\n",			  card->dev->name);		card->stats.rx_dropped++;		return;	}	skb->dev = card->dev;	memcpy(skb_put(skb, skb_len), skb_data, skb_len);	skb->protocol =	card->lan_type_trans(skb, card->dev);	card->stats.rx_bytes += skb_len;	card->stats.rx_packets++;	netif_rx(skb);}/** * LCS main routine to get packets and lancmd replies from the buffers */static voidlcs_get_frames_cb(struct lcs_channel *channel, struct lcs_buffer *buffer){	struct lcs_card *card;	struct lcs_header *lcs_hdr;	__u16 offset;	LCS_DBF_TEXT(5, trace, "lcsgtpkt");	lcs_hdr = (struct lcs_header *) buffer->data;	if (lcs_hdr->offset == LCS_ILLEGAL_OFFSET) {		LCS_DBF_TEXT(4, trace, "-eiogpkt");		return;	}	card = (struct lcs_card *)		((char *) channel - offsetof(struct lcs_card, read));	offset = 0;	while (lcs_hdr->offset != 0) {		if (lcs_hdr->offset <= 0 ||		    lcs_hdr->offset > LCS_IOBUFFERSIZE ||		    lcs_hdr->offset < offset) {			/* Offset invalid. */			card->stats.rx_length_errors++;			card->stats.rx_errors++;			return;		}		/* What kind of frame is it? */		if (lcs_hdr->type == LCS_FRAME_TYPE_CONTROL)			/* Control frame. */			lcs_get_control(card, (struct lcs_cmd *) lcs_hdr);		else if (lcs_hdr->type == LCS_FRAME_TYPE_ENET ||			 lcs_hdr->type == LCS_FRAME_TYPE_TR ||			 lcs_hdr->type == LCS_FRAME_TYPE_FDDI)			/* Normal network packet. */			lcs_get_skb(card, (char *)(lcs_hdr + 1),				    lcs_hdr->offset - offset -				    sizeof(struct lcs_header));		else			/* Unknown frame type. */			; // FIXME: error message ?		/* Proceed to next frame. */		offset = lcs_hdr->offset;		lcs_hdr->offset = LCS_ILLEGAL_OFFSET;		lcs_hdr = (struct lcs_header *) (buffer->data + offset);	}	/* The buffer is now empty. Make it ready again. */	lcs_ready_buffer(&card->read, buffer);}/** * get network statistics for ifconfig and other user programs */static struct net_device_stats *lcs_getstats(struct net_device *dev){	struct lcs_card *card;	LCS_DBF_TEXT(4, trace, "netstats");	card = (struct lcs_card *) dev->priv;	return &card->stats;}/** * stop lcs device * This function will be called by user doing ifconfig xxx down */static intlcs_stop_device(struct net_device *dev){	struct lcs_card *card;	int rc;	LCS_DBF_TEXT(2, trace, "stopdev");	card   = (struct lcs_card *) dev->priv;	netif_stop_queue(dev);	dev->flags &= ~IFF_UP;	rc = lcs_stopcard(card);	if (rc)		PRINT_ERR("Try it again!\n ");	return rc;}/** * start lcs device and make it runnable * This function will be called by user doing ifconfig xxx up */static intlcs_open_device(struct net_device *dev){	struct lcs_card *card;	int rc;	LCS_DBF_TEXT(2, trace, "opendev");	card = (struct lcs_card *) dev->priv;	/* initialize statistics */	rc = lcs_detect(card);	if (rc) {		PRINT_ERR("LCS:Error in opening device!\n");	} else {		dev->flags |= IFF_UP;		netif_wake_queue(dev);		card->state = DEV_STATE_UP;	}	return rc;}/** * show function for portno called by cat or similar things */static ssize_tlcs_portno_show (struct device *dev, char *buf){        struct lcs_card *card;	card = (struct lcs_card *)dev->driver_data;        if (!card)                return 0;        return sprintf(buf, "%d\n", card->portno);}/** * store the value which is piped to file portno */static ssize_tlcs_portno_store (struct device *dev, const char *buf, size_t count){        struct lcs_card *card;        int value;	card = (struct lcs_card *)dev->driver_data;        if (!card)                return 0;        sscanf(buf, "%u", &value);        /* TODO: sanity checks */        card->portno = value;        return count;}static DEVICE_ATTR(portno, 0644, lcs_portno_show, lcs_portno_store);static ssize_tlcs_type_show(struct device *dev, char *buf){	struct ccwgroup_device *cgdev;	cgdev = to_ccwgroupdev(dev);	if (!cgdev)		return -ENODEV;	return sprintf(buf, "%s\n", cu3088_type[cgdev->cdev[0]->id.driver_info]);}static DEVICE_ATTR(type, 0444, lcs_type_show, NULL);static ssize_tlcs_timeout_show(struct device *dev, char *buf){	struct lcs_card *card;	card = (struct lcs_card *)dev->driver_data;	return card ? sprintf(buf, "%u\n", card->lancmd_timeout) : 0;}static ssize_tlcs_timeout_store (struct device *dev, const char *buf, size_t count){        struct lcs_card *card;        int value;	card = (struct lcs_card *)dev->driver_data;        if (!card)                return 0;        sscanf(buf, "%u", &value);        /* TODO: sanity checks */        card->lancmd_timeout = value;        return count;}DEVICE_ATTR(lancmd_timeout, 0644, lcs_timeout_show, lcs_timeout_store);static struct attribute * lcs_attrs[] = {	&dev_attr_portno.attr,	&dev_attr_type.attr,	&dev_attr_lancmd_timeout.attr,	NULL,};static struct attribute_group lcs_attr_group = {	.attrs = lcs_attrs,};/** * lcs_probe_device is called on establishing a new ccwgroup_device. */static intlcs_probe_device(struct ccwgroup_device *ccwgdev){	struct lcs_card *card;	int ret;	if (!get_device(&ccwgdev->dev))		return -ENODEV;	LCS_DBF_TEXT(2, setup, "add_dev");        card = lcs_alloc_card();        if (!card) {                PRINT_ERR("Allocation of lcs card failed\n");		put_device(&ccwgdev->dev);                return -ENOMEM;        }	ret = sysfs_create_group(&ccwgdev->dev.kobj, &lcs_attr_group);	if (ret) {                PRINT_ERR("Creating attributes failed");		lcs_free_card(card);		put_device(&ccwgdev->dev);		return ret;        }	ccwgdev->dev.driver_data = card;	ccwgdev->cdev[0]->handler = lcs_irq;	ccwgdev->cdev[1]->handler = lcs_irq;        return 0;}static intlcs_register_netdev(struct ccwgroup_device *ccwgdev){	struct lcs_card *card;	LCS_DBF_TEXT(2, setup, "regnetdv");	card = (struct lcs_card *)ccwgdev->dev.driver_data;	if (card->dev->reg_state != NETREG_UNINITIALIZED)		return 0;	SET_NETDEV_DEV(card->dev, &ccwgdev->dev);	return register_netdev(card->dev);}/** * lcs_new_device will be called by setting the group device online. */static intlcs_new_device(struct ccwgroup_device *ccwgdev){	struct  lcs_card *card;	struct net_device *dev=NULL;	enum lcs_dev_states recover_state;	int rc;	card = (struct lcs_card *)ccwgdev->dev.driver_data;	if (!card)		return -ENODEV;	LCS_DBF_TEXT(2, setup, "newdev");	LCS_DBF_HEX(3, setup, &card, sizeof(void*));	card->read.ccwdev  = ccwgdev->cdev[0];	card->write.ccwdev = ccwgdev->cdev[1];	recover_state = card->state;	ccw_device_set_online(card->read.ccwdev);	ccw_device_set_online(card->write.ccwdev);	LCS_DBF_TEXT(3, setup, "lcsnewdv");	lcs_setup_card(card);	rc = lcs_detect(card);	if (rc) {		LCS_DBF_TEXT(2, setup, "dtctfail");		PRINT_WARN("Detection of LCS card failed with return code "			   "%d (0x%x)\n", rc, rc);		lcs_stopcard(card);		goto out;	}	if (card->dev) {		LCS_DBF_TEXT(2, setup, "samedev");		LCS_DBF_HEX(3, setup, &card, sizeof(void*));		goto netdev_out;	}	switch (card->lan_type) {#ifdef CONFIG_NET_ETHERNET	case LCS_FRAME_TYPE_ENET:		card->lan_type_trans = eth_type_trans;		dev = alloc_etherdev(0);		break;#endif#ifdef CONFIG_TR	case LCS_FRAME_TYPE_TR:		card->lan_type_trans = tr_type_trans;		dev = alloc_trdev(0);		break;#endif#ifdef CONFIG_FDDI	case LCS_FRAME_TYPE_FDDI:		card->lan_type_trans = fddi_type_trans;		dev = alloc_fddidev(0);		break;#endif	default:		LCS_DBF_TEXT(3, setup, "errinit");		PRINT_ERR("LCS: Initialization failed\n");		PRINT_ERR("LCS: No device found!\n");		goto out;	}	if (!dev)		goto out;	card->dev = dev;netdev_out:	card->dev->priv = card;	card->dev->open = lcs_open_device;	card->dev->stop = lcs_stop_device;	card->dev->hard_start_xmit = lcs_start_xmit;	card->dev->get_stats = lcs_getstats;	SET_MODULE_OWNER(dev);	if (lcs_register_netdev(ccwgdev) != 0)		goto out;	memcpy(card->dev->dev_addr, card->mac, LCS_MAC_LENGTH);#ifdef CONFIG_IP_MULTICAST	if (!lcs_check_multicast_support(card))		card->dev->set_multicast_list = lcs_set_multicast_list;#endif	netif_stop_queue(card->dev);	if (recover_state == DEV_STATE_RECOVER) {		card->dev->flags |= IFF_UP;		netif_wake_queue(card->dev);		card->state = DEV_STATE_UP;	} else		lcs_stopcard(card);	return 0;out:	ccw_device_set_offline(card->read.ccwdev);	ccw_device_set_offline(card->write.ccwdev);	return -ENODEV;}/** * lcs_shutdown_device, called when setting the group device offline. */static intlcs_shutdown_device(struct ccwgroup_device *ccwgdev){	struct lcs_card *card;	enum lcs_dev_states recover_state;	int ret;	LCS_DBF_TEXT(3, setup, "shtdndev");	card = (struct lcs_card *)ccwgdev->dev.driver_data;	if (!card)		return -ENODEV;	LCS_DBF_HEX(3, setup, &card, sizeof(void*));	recover_state = card->state;	ret = lcs_stop_device(card->dev);	ret = ccw_device_set_offline(card->read.ccwdev);	ret = ccw_device_set_offline(card->write.ccwdev);	if (recover_state == DEV_STATE_UP) {		card->state = DEV_STATE_RECOVER;	}	if (ret)		return ret;	return 0;}/** * lcs_remove_device, free buffers and card */static voidlcs_remove_device(struct ccwgroup_device *ccwgdev){	struct lcs_card *card;	card = (struct lcs_card *)ccwgdev->dev.driver_data;	if (!card)		return;	PRINT_INFO("Removing lcs group device ....\n");	LCS_DBF_TEXT(3, setup, "remdev");	LCS_DBF_HEX(3, setup, &card, sizeof(void*));	if (ccwgdev->state == CCWGROUP_ONLINE) {		lcs_shutdown_device(ccwgdev);	}	if (card->dev)		unregister_netdev(card->dev);	sysfs_remove_group(&ccwgdev->dev.kobj, &lcs_attr_group);	lcs_cleanup_card(card);	lcs_free_card(card);	put_device(&ccwgdev->dev);}/** * LCS ccwgroup driver registration */static struct ccwgroup_driver lcs_group_driver = {	.owner       = THIS_MODULE,	.name        = "lcs",	.max_slaves  = 2,	.driver_id   = 0xD3C3E2,	.probe       = lcs_probe_device,	.remove      = lcs_remove_device,	.set_online  = lcs_new_device,	.set_offline = lcs_shutdown_device,};/** *  LCS Module/Kernel initialization function */static int__init lcs_init_module(void){	int rc;	PRINT_INFO("Loading %s\n",version);	rc = lcs_register_debug_facility();	LCS_DBF_TEXT(0, setup, "lcsinit");	if (rc) {		PRINT_ERR("Initialization failed\n");		return rc;	}	rc = register_cu3088_discipline(&lcs_group_driver);	if (rc) {		PRINT_ERR("Initialization failed\n");		return rc;	}	return 0;}/** *  LCS module cleanup function */static void__exit lcs_cleanup_module(void){	PRINT_INFO("Terminating lcs module.\n");	LCS_DBF_TEXT(0, trace, "cleanup");	unregister_cu3088_discipline(&lcs_group_driver);	lcs_unregister_debug_facility();}module_init(lcs_init_module);module_exit(lcs_cleanup_module);MODULE_AUTHOR("Frank Pavlic <pavlic@de.ibm.com>");MODULE_LICENSE("GPL");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
7777精品伊人久久久大香线蕉| 国产成人在线视频网址| 欧美综合在线视频| 亚洲综合男人的天堂| 91久久精品一区二区三区| 亚洲一区二区五区| 欧美一区二区三区免费观看视频 | 欧美亚洲国产bt| 天天影视色香欲综合网老头| 欧美一级二级三级乱码| 国产乱人伦偷精品视频不卡| 中文字幕一区不卡| 欧美中文字幕一区二区三区 | 欧美一二三区在线| 国产精品一区二区久久不卡 | 久久免费偷拍视频| 99久久精品免费精品国产| 亚洲成人免费视| 亚洲精品一区二区三区99| 成人18精品视频| 天堂久久久久va久久久久| 久久久不卡网国产精品一区| 色综合中文字幕国产| 亚洲国产精品久久久久婷婷884| 日韩一级大片在线| 99久久精品费精品国产一区二区| 婷婷综合在线观看| 久久精品亚洲乱码伦伦中文| 色丁香久综合在线久综合在线观看| 日韩精品乱码免费| 国产精品久久久久三级| 欧美精品久久久久久久多人混战| 国产一区二区导航在线播放| 97成人超碰视| 日韩电影在线观看网站| 国产三级久久久| 欧美日韩在线播放一区| 国产酒店精品激情| 午夜精品一区二区三区三上悠亚| 久久视频一区二区| 欧美日韩精品一区二区天天拍小说 | 亚洲成人av福利| 国产性色一区二区| 7777精品伊人久久久大香线蕉的 | 99久久国产综合精品麻豆| 日本不卡一区二区| 一区二区三区在线视频播放| 久久蜜臀精品av| 欧美一区二区三区啪啪| 在线免费观看一区| www.欧美亚洲| 国模一区二区三区白浆| 亚洲综合在线五月| 国产精品初高中害羞小美女文| 欧美大胆一级视频| 欧美日韩免费高清一区色橹橹| 不卡高清视频专区| 国产激情视频一区二区在线观看 | 极品美女销魂一区二区三区免费| 午夜精品久久久久久久| 亚洲激情自拍视频| 亚洲欧美日韩成人高清在线一区| 国产日韩综合av| 精品国产乱码久久| 精品久久久久av影院| 欧美精选一区二区| 欧美日高清视频| 欧美日韩在线三区| 欧美午夜在线一二页| 欧亚洲嫩模精品一区三区| 91网上在线视频| 99热国产精品| 成人动漫在线一区| 99re热这里只有精品免费视频| 国产mv日韩mv欧美| 成人午夜私人影院| k8久久久一区二区三区 | 国产一区二区三区四区在线观看| 免费的成人av| 日本美女一区二区| 紧缚奴在线一区二区三区| 国产中文字幕精品| 国产精品99久久久久久久vr| 国产一区 二区| 国产成人午夜99999| 国产成人av电影免费在线观看| 懂色av噜噜一区二区三区av| 成人永久aaa| 91久久线看在观草草青青| 精品视频在线免费| 91麻豆精品国产91久久久更新时间| 91精品午夜视频| 日韩美一区二区三区| 一区二区三区日韩精品| 国产一区二区三区在线观看免费视频| 久久精品99久久久| 国产一区二区三区最好精华液| 国产成人av电影在线观看| 成人激情免费视频| 色婷婷久久久亚洲一区二区三区 | 日韩精品一区二区三区三区免费 | 综合电影一区二区三区 | 日本高清无吗v一区| 欧美精品免费视频| 久久欧美一区二区| 中文字幕亚洲在| 香蕉影视欧美成人| 国产综合色产在线精品| a级精品国产片在线观看| 色屁屁一区二区| 日韩欧美色综合| 中文字幕一区二区三区不卡| 天天综合天天综合色| 亚洲va国产va欧美va观看| 久久精品国产亚洲5555| 成人精品在线视频观看| 欧美精品第1页| 久久香蕉国产线看观看99| 亚洲色图视频免费播放| 毛片一区二区三区| 99国产精品国产精品毛片| 在线不卡中文字幕播放| 亚洲国产高清aⅴ视频| 日韩中文字幕不卡| 成人精品在线视频观看| 欧美高清你懂得| 中文字幕在线不卡| 精品亚洲国内自在自线福利| 一本一本大道香蕉久在线精品| 精品成人一区二区| 亚洲成人自拍偷拍| 波多野结衣中文字幕一区| 91精品国产综合久久久久| 中文字幕在线一区二区三区| 裸体一区二区三区| 欧洲精品一区二区三区在线观看| 久久久欧美精品sm网站| 日本女优在线视频一区二区| 色综合天天综合狠狠| 久久人人爽人人爽| 免费观看一级欧美片| 欧美亚洲尤物久久| 亚洲欧洲国产日本综合| 久久99精品久久久久久动态图| 欧美三级中文字| 一区二区在线观看免费| av一区二区三区在线| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 欧美tickle裸体挠脚心vk| 午夜精品福利久久久| 色综合久久88色综合天天免费| 国产精品色噜噜| 成人毛片老司机大片| 久久久久久久精| 国产主播一区二区| 欧美tickling挠脚心丨vk| 日韩精品午夜视频| 91精品国产综合久久久久| 亚洲成av人综合在线观看| 色嗨嗨av一区二区三区| 亚洲美腿欧美偷拍| 99vv1com这只有精品| 亚洲欧美成人一区二区三区| 99国产麻豆精品| 亚洲美女视频在线| 色综合久久久久久久| 一区二区三区日本| 欧美日韩精品一区二区三区四区 | 美女在线一区二区| 日韩亚洲欧美中文三级| 日韩电影免费一区| 日韩一本二本av| 国产一本一道久久香蕉| 久久一区二区三区四区| 国产麻豆91精品| 国产精品美女视频| 91丝袜国产在线播放| 亚洲男女一区二区三区| 91福利资源站| 日本免费在线视频不卡一不卡二| 日韩欧美一级二级| 国产aⅴ精品一区二区三区色成熟| 国产欧美中文在线| 91在线播放网址| 亚洲一区二区三区小说| 欧美群妇大交群的观看方式| 免费成人你懂的| 久久久五月婷婷| 色婷婷久久综合| 蜜臀av国产精品久久久久| 2017欧美狠狠色| 99久久精品免费| 亚洲电影在线播放| 欧美大度的电影原声| 成人福利视频在线看| 天天综合网 天天综合色| 久久综合九色综合97婷婷| 97精品电影院| 美女在线观看视频一区二区| 国产性天天综合网|