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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? proc.c

?? can bus driver code.
?? C
字號(hào):
/* proc.c * Linux CAN-bus device driver. * Written by Arnaud Westenberg email:arnaud@wanadoo.nl * This software is released under the GPL-License. * Version 0.7  6 Aug 2001 */ #define __NO_VERSION__#include <linux/module.h>#include <linux/autoconf.h>#if defined (CONFIG_MODVERSIONS) && !defined (MODVERSIONS)#define MODVERSIONS#endif#if defined (MODVERSIONS)#include <linux/modversions.h>#endif#include <linux/kernel.h>#include <linux/malloc.h>#include <linux/proc_fs.h>#include <linux/version.h>#include "../include/main.h"#include "../include/proc.h"#include "../include/setup.h"int add_channel_to_procdir(void);int remove_channel_from_procdir(void);int add_object_to_procdir(void);int remove_object_from_procdir(void);#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,2,19))static int candev_readlink(struct proc_dir_entry *de, char *page);#endifstatic int bc=0; /* static counter for each hardware board */static int cc=0; /* static counter for each CAN chip */static int oc=0; /* static counter for each message object */struct canproc_t can_proc_base;struct canproc_t *base=&can_proc_base;/* The following functions are needed only for kernel version 2.2. Kernel * version 2.4 already defines them for us. */#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,2,19))static void can_fill_inode(struct inode *inode, int fill){	if (fill)		MOD_INC_USE_COUNT;	else		MOD_DEC_USE_COUNT;}static struct proc_dir_entry * new_can_proc_entry(unsigned short inode,    const char *name, mode_t mode, nlink_t nlink, struct proc_dir_entry *parent){	struct proc_dir_entry *new_entry = NULL;	new_entry = (struct proc_dir_entry *) kmalloc(sizeof(struct 						proc_dir_entry), GFP_KERNEL);	if (new_entry == NULL)		return NULL;	memset(new_entry, 0, sizeof(struct proc_dir_entry));	new_entry->low_ino = inode;	new_entry->namelen = strlen(name);	new_entry->name = name;	new_entry->mode = mode;	new_entry->nlink = nlink;	new_entry->fill_inode = can_fill_inode;	new_entry->parent = parent;	proc_register(parent, new_entry);	return new_entry;}int can_remove_proc_entry(struct proc_dir_entry *del, struct proc_dir_entry *parent){	if (del != NULL) {		proc_unregister(parent, del->low_ino);		kfree(del);		del = NULL;		return 0;	}	else return -ENODEV;}#endif // Functions required for kernel 2.2/* can_init_procdir registers the entire CAN directory tree recursively at * the proc system. */int can_init_procdir(void){#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,2,19))	base->can_proc_entry = new_can_proc_entry(0, "can", S_IFDIR | S_IRUGO | 					S_IXUGO, 0, &proc_root);#else	base->can_proc_entry = create_proc_entry("can", S_IFDIR | S_IRUGO | 					S_IXUGO, &proc_root);#endif	if (base->can_proc_entry == NULL)		return -ENODEV;	for (bc=0; bc<hardware_p->nr_boards; bc++) {		add_channel_to_procdir();	} 	return 0;}/* can_delete_procdir removes the entire CAN tree from the proc system */int can_delete_procdir(void){	if (remove_channel_from_procdir()) 		return -ENODEV;#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,2,19))	if (can_remove_proc_entry(base->can_proc_entry, &proc_root)) 		return -ENODEV;#else	remove_proc_entry("can", &proc_root);#endif	return 0;}int add_channel_to_procdir(void){	int i=0;	for (i=0; i < candevices_p[bc]->nr_82527_chips + 			candevices_p[bc]->nr_sja1000_chips; i++) {		base->channel[cc] = (struct channelproc_t *)			kmalloc(sizeof(struct channelproc_t), GFP_KERNEL);		if (base->channel[cc] == NULL)			return -ENOMEM;		else if (add_mem_to_list(base->channel[cc]))			return -ENOMEM;		sprintf(base->channel[cc]->ch_name, "channel%d",cc);						#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,2,19))		base->channel[cc]->ch_entry = new_can_proc_entry(0, 						base->channel[cc]->ch_name,						S_IFDIR | S_IRUGO | S_IXUGO, 0, 						base->can_proc_entry);#else		base->channel[cc]->ch_entry = create_proc_entry(						base->channel[cc]->ch_name,						S_IFDIR | S_IRUGO |S_IXUGO,						base->can_proc_entry);#endif		if (base->channel[cc]->ch_entry == NULL)			return -ENODEV;		add_object_to_procdir();		cc++;	} 	return 0;}int remove_channel_from_procdir(void){		while (cc != 0) {		cc--;#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,2,19))		if (can_remove_proc_entry(base->channel[cc]->ch_entry,							base->can_proc_entry))			return -ENODEV;#else		remove_proc_entry(base->channel[cc]->ch_name,							base->can_proc_entry);#endif		if (remove_object_from_procdir())			return -ENODEV; 	}	return 0;}int add_object_to_procdir(void){	int i=0, obj=0;	if (!strcmp(chips_p[cc]->chip_type,"i82527"))		obj=15;	if (!strcmp(chips_p[cc]->chip_type,"sja1000"))		obj=1;	for (i=0; i<obj; i++) {		oc=i;		base->channel[cc]->object[i] = (struct objectproc_t *)			kmalloc(sizeof(struct objectproc_t),GFP_KERNEL);										if (base->channel[cc]->object[i] == NULL)			return -ENOMEM;		else if (add_mem_to_list( base->channel[cc]->object[i]))			return -ENOMEM;		sprintf(base->channel[cc]->object[i]->obj_name,"object%d",i);		sprintf(base->channel[cc]->object[i]->lnk_name,"dev");								#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,2,19))		base->channel[cc]->object[i]->obj_entry=new_can_proc_entry(				0, base->channel[cc]->object[i]->obj_name,				S_IFDIR | S_IRUGO | S_IXUGO, 0, 				base->channel[cc]->ch_entry);		if (base->channel[cc]->object[i]->obj_entry == NULL)			return -ENODEV;		base->channel[cc]->object[i]->lnk = new_can_proc_entry(				0, base->channel[cc]->object[i]->lnk_name, 				S_IFLNK | S_IRUGO | S_IWUGO | S_IXUGO,				0, base->channel[cc]->object[i]->obj_entry);		if (base->channel[cc]->object[i]->lnk == NULL)			return -ENODEV;		sprintf(base->channel[cc]->object[i]->lnk_dev,"/dev/can");		base->channel[cc]->object[i]->lnk->readlink_proc =								candev_readlink;#else		base->channel[cc]->object[i]->obj_entry = create_proc_entry(				base->channel[cc]->object[i]->obj_name,				S_IFDIR | S_IRUGO | S_IXUGO,				base->channel[cc]->ch_entry);		if (base->channel[cc]->object[i]->obj_entry == NULL)			return -ENODEV;		sprintf(base->channel[cc]->object[i]->lnk_dev,"/dev/can%d",			chips_p[cc]->msgobj[i]->minor);		base->channel[cc]->object[i]->lnk = proc_symlink(				base->channel[cc]->object[i]->lnk_name,				base->channel[cc]->object[i]->obj_entry,				base->channel[cc]->object[i]->lnk_dev);		if (base->channel[cc]->object[i]->lnk == NULL)			return -ENODEV;#endif	}	return 0;} int remove_object_from_procdir(void){	int i=0, obj=0;	if (!strcmp(chips_p[cc]->chip_type,"i82527"))		obj=15;	if (!strcmp(chips_p[cc]->chip_type,"sja1000"))		obj=1;	for (i=0; i<obj; i++) {#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,2,19))		if (can_remove_proc_entry( base->channel[cc]->object[i]->lnk,				base->channel[cc]->object[i]->obj_entry))				return -ENODEV;		if (can_remove_proc_entry(				base->channel[cc]->object[i]->obj_entry,				base->channel[cc]->ch_entry))			return -ENODEV;#else		remove_proc_entry(base->channel[cc]->object[i]->lnk_name,				base->channel[cc]->object[i]->obj_entry);		remove_proc_entry(base->channel[cc]->object[i]->obj_name,					base->channel[cc]->ch_entry);#endif			}	return 0;}#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,2,19))static int candev_readlink(struct proc_dir_entry *de, char *page){	int i=0, nchip=0, nobj=0;	char chip[20], object[20], tmp[6];	sprintf(chip, de->parent->parent->name+7);	sprintf(object, de->parent->name+6);	for (i=0; i<MAX_TOT_CHIPS; i++) {		sprintf(tmp,"%d",i);		if (!strcmp(chip,tmp)) {			nchip=i;			break;		}		}	for (i=0; i<MAX_MSGOBJS; i++) {		sprintf(tmp,"%d",i);		if (!strcmp(object,tmp)) {			nobj=i;			break;		}	}	return sprintf(page,"/dev/can%d",chips_p[nchip]->msgobj[nobj]->minor );}#endif //End of candev_readlink for kernel 2.2

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩片之四级片| 午夜欧美视频在线观看 | 91美女在线看| 国产一区二区三区日韩| 午夜伊人狠狠久久| 一区二区三区蜜桃| 亚洲色图都市小说| 国产精品无人区| 国产日韩v精品一区二区| wwwwww.欧美系列| 欧美sm极限捆绑bd| 日韩欧美激情在线| 日韩免费观看高清完整版在线观看| 欧美伊人精品成人久久综合97| 波多野结衣在线aⅴ中文字幕不卡| 国产一区中文字幕| 国产在线精品一区二区三区不卡| 卡一卡二国产精品 | 国产成人久久精品77777最新版本| 激情文学综合插| 蜜桃av一区二区三区| 五月婷婷久久丁香| 免费观看久久久4p| 美国欧美日韩国产在线播放| 蜜桃av噜噜一区| 久久97超碰国产精品超碰| 久久av老司机精品网站导航| 久久国产夜色精品鲁鲁99| 久久99精品久久久久久国产越南 | 日本大胆欧美人术艺术动态 | 成人高清视频在线| 国产麻豆精品95视频| 国产一区二区免费看| 高清国产一区二区| 99久久精品免费看| 欧美偷拍一区二区| 欧美一区二区国产| 久久精品日韩一区二区三区| 国产日韩精品一区二区三区| 国产精品美日韩| 一区二区三区在线观看网站| 亚洲成人综合在线| 美女国产一区二区| 盗摄精品av一区二区三区| 99视频精品免费视频| 日本电影亚洲天堂一区| 精品视频色一区| 精品久久久久久久久久久久久久久 | 99久久国产综合精品色伊| 欧美最猛性xxxxx直播| 正在播放一区二区| 久久综合九色综合久久久精品综合| 国产视频911| 一区二区三区四区乱视频| 亚洲欧美aⅴ...| 亚洲自拍偷拍网站| 国产一区二区视频在线| 91丨九色丨蝌蚪富婆spa| 欧美精品18+| 欧美国产精品一区二区三区| 亚洲午夜精品17c| 狠狠色综合日日| 91蜜桃视频在线| 精品国产91久久久久久久妲己| 日韩毛片在线免费观看| 日本欧美一区二区| 91香蕉视频黄| 欧美变态凌虐bdsm| 有坂深雪av一区二区精品| 久久成人精品无人区| 色欧美88888久久久久久影院| 日韩精品一区二区三区蜜臀| 亚洲色图欧洲色图婷婷| 国产专区综合网| 欧美亚洲图片小说| 国产亚洲污的网站| 视频一区二区三区中文字幕| 成人国产在线观看| 欧美日韩国产天堂| 中文字幕精品三区| 麻豆精品国产91久久久久久| 色网综合在线观看| 国产色综合一区| 蜜桃精品视频在线观看| 在线观看成人小视频| 中文字幕欧美三区| 国产在线观看一区二区| 911精品国产一区二区在线| 国产精品久久久久久久久免费丝袜| 麻豆精品视频在线观看视频| 在线精品亚洲一区二区不卡| 欧美激情在线一区二区三区| 免费不卡在线观看| 欧美视频在线一区二区三区| 国产精品久久久久久亚洲伦| 国产在线视频一区二区三区| 色婷婷综合激情| 欧美精品一区二区高清在线观看| 亚洲电影在线免费观看| 色婷婷国产精品| 国产精品视频观看| 国产麻豆精品theporn| 欧美一区二区高清| 日韩影院免费视频| 欧洲精品视频在线观看| 国产精品乱码一区二区三区软件| 国产一区二区美女诱惑| 欧美不卡视频一区| 久久91精品久久久久久秒播| 777奇米成人网| 日韩国产欧美在线视频| 欧美日韩国产不卡| 亚洲人成在线播放网站岛国| 粉嫩绯色av一区二区在线观看 | 国内精品第一页| 精品精品国产高清一毛片一天堂| 日本欧美一区二区| 91精品国产欧美一区二区| 日日摸夜夜添夜夜添国产精品 | 国产999精品久久| 国产日韩欧美电影| 成人免费三级在线| 国产精品久久久一本精品| 成人av午夜电影| 日韩一区在线看| 99国产精品一区| 一区二区在线免费| 欧美三级欧美一级| 香蕉久久一区二区不卡无毒影院 | 久久精品国产一区二区| 日韩精品一区二区三区中文精品 | 欧亚洲嫩模精品一区三区| 亚洲综合无码一区二区| 欧美综合一区二区三区| 一区二区三区精品在线| 欧美日精品一区视频| 亚洲黄色性网站| 欧美午夜一区二区三区| 亚洲国产精品一区二区www| 51精品国自产在线| 激情丁香综合五月| 国产精品色在线| 欧美性色黄大片手机版| 国产成人综合视频| 美女性感视频久久| 亚洲一级二级三级| 一区二区三区日韩欧美| 亚洲一区二区三区在线| 久久影视一区二区| 丝袜美腿亚洲一区| 夜夜嗨av一区二区三区| 欧美国产激情一区二区三区蜜月| 亚洲三级久久久| 久草热8精品视频在线观看| 91在线观看美女| 亚洲综合一区二区三区| 欧美一区二区三区在线视频| 成人污污视频在线观看| 爽爽淫人综合网网站| 国产精品美女久久久久久久久久久 | 东方aⅴ免费观看久久av| 亚洲成人中文在线| 欧美高清在线一区| 精品日韩一区二区| 欧美色涩在线第一页| 成人小视频在线观看| 午夜欧美一区二区三区在线播放| 久久综合狠狠综合| 欧美日韩极品在线观看一区| 成av人片一区二区| 韩国v欧美v日本v亚洲v| 午夜精品一区二区三区免费视频| 国产精品久久久久久久岛一牛影视 | 国产白丝网站精品污在线入口| 日韩国产在线观看一区| 亚洲人成精品久久久久久| 精品国产百合女同互慰| 欧美午夜一区二区| 色欧美日韩亚洲| 成人av手机在线观看| 国产在线一区二区综合免费视频| 日韩高清在线不卡| 亚洲第一福利一区| 亚洲一线二线三线久久久| 国产精品日产欧美久久久久| 欧美精品一区二区高清在线观看| 欧美一级在线视频| 欧美日韩国产高清一区| 欧美亚洲日本一区| 色久综合一二码| 91视视频在线观看入口直接观看www| 丰满亚洲少妇av| 大胆欧美人体老妇| 国产精品99久久久久久久女警| 激情综合网天天干| 久久99最新地址| 国内外成人在线视频| 精品午夜久久福利影院| 美腿丝袜亚洲三区| 蜜桃精品视频在线观看|