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

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

?? setup.c

?? can bus driver code.
?? C
字號:
/* setup.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 */ #include <linux/autoconf.h>#if defined (CONFIG_MODVERSIONS) && !defined (MODVERSIONS)#define MODVERSIONS#endif#if defined (MODVERSIONS)#include <linux/modversions.h>#endif#include <linux/malloc.h>#include <linux/fs.h>#include "../.support"#include "../include/main.h"#include "../include/setup.h"#include "../include/pip.h"#include "../include/pccan.h"#include "../include/smartcan.h"#include "../include/pc-i03.h"#include "../include/pcm3680.h"#include "../include/m437.h"#include "../include/template.h"#include "../include/i82527.h"#include "../include/aim104.h"#include "../include/pcccan.h"extern int sja1000_register(struct chipspecops_t *chipspecops);extern int sja1000p_register(struct chipspecops_t *chipspecops);extern int i82527_register(struct chipspecops_t *chipspecops);extern int template_register(struct hwspecops_t *hwspecops);extern int pip5_register(struct hwspecops_t *hwspecops);extern int pip6_register(struct hwspecops_t *hwspecops);extern int smartcan_register(struct hwspecops_t *hwspecops);extern int pccanf_register(struct hwspecops_t *hwspecops);extern int pccand_register(struct hwspecops_t *hwspecops);extern int pccanq_register(struct hwspecops_t *hwspecops);extern int nsi_register(struct hwspecops_t *hwspecops);extern int cc104_register(struct hwspecops_t *hwspecops);extern int pci03_register(struct hwspecops_t *hwspecops);extern int pcm3680_register(struct hwspecops_t *hwspecops);extern int aim104_register(struct hwspecops_t *hwspecops);extern int pcccan_register(struct hwspecops_t *hwspecops);extern int ssv_register(struct hwspecops_t *hwspecops);int init_device_struct(int card);int init_hwspecops(int card);int init_chip_struct(int card);int init_obj_struct(int card, int chip);int init_chipspecops(int card, int chipnr);int add_mem_to_list(void *address_p){	struct mem_addr *mem_new;#ifdef DEBUG_MEM	DEBUGMSG("add_mem_to_list %p, mem_head=%p\n",address_p, mem_head);	return 0;#endif	mem_new=(struct mem_addr *)kmalloc(sizeof(struct mem_addr),GFP_KERNEL);	if (mem_new == NULL) {		CANMSG("Memory list error.\n");		return -ENOMEM;	}	mem_new->next=mem_head;	mem_new->address=address_p;	mem_head=mem_new;	return 0;}int del_mem_from_list(void *address_p){	struct mem_addr *mem_search=NULL;	struct mem_addr *mem_delete=NULL;#ifdef DEBUG_MEM	DEBUGMSG("del_mem_from_list %p, mem_head=%p\n", address_p, mem_head);	return 0;#endif		mem_search = mem_head;	if (mem_head->address == address_p) {		kfree(mem_head->address);		mem_head=mem_head->next;		kfree(mem_search);	}	else {		while (mem_search->next->address != address_p)			mem_search=mem_search->next;		kfree(mem_search->next->address);				mem_delete=mem_search->next;		mem_search->next=mem_search->next->next;		kfree(mem_delete);	}	return 0;}int del_mem_list(void){	struct mem_addr *mem_old;#ifdef DEBUG_MEM	DEBUGMSG("del_mem_list, mem_head=%p\n", mem_head);	return 0;#endif	while (mem_head->next != NULL) {		mem_old=mem_head;		kfree(mem_old->address);		mem_head=mem_old->next;		kfree(mem_old);	}		return 0;}/* The function init_hw_struct is used to initialize the hardware structure. */int init_hw_struct(void){	int i=0;	hardware_p->nr_boards=0;	while ( (hw[i] != NULL) & (i < MAX_HW_CARDS) ) {		hardware_p->nr_boards++;		if (init_device_struct(i)) {			CANMSG("Error initializing candevice_t structures.\n");			return -ENODEV;		}		i++;	}	return 0;}/* The function init_device_struct is used to initialize a single device  * structure. */int init_device_struct(int card){	hardware_p->candevice[card]=(struct candevice_t *)kmalloc(sizeof(struct candevice_t),GFP_KERNEL);	if (hardware_p->candevice[card]==NULL)		return -ENOMEM;	else		if ( add_mem_to_list(hardware_p->candevice[card]) )			return -ENOMEM;	candevices_p[card]=hardware_p->candevice[card];	hardware_p->candevice[card]->hwname=hw[card];	hardware_p->candevice[card]->io_addr=io[card];	hardware_p->candevice[card]->hwspecops=(struct hwspecops_t *)kmalloc(sizeof(struct hwspecops_t),GFP_KERNEL);	if (hardware_p->candevice[card]->hwspecops==NULL)		return -ENOMEM;	else		if ( add_mem_to_list(hardware_p->candevice[card]->hwspecops) )			return -ENOMEM;	if (init_hwspecops(card))		return -ENODEV;	if (candevices_p[card]->hwspecops->init_hw_data(card))		return -ENODEV;	if (init_chip_struct(card))		return -ENODEV;	return 0;}/* The function init_chip_struct is used to initialize all chip_t structures * on one hardware board. */int init_chip_struct(int card){	static int irq_count=0;	int i=0;	/* Alocate and initialize the chip structures */	for (i=0; i < candevices_p[card]->nr_82527_chips+candevices_p[card]->nr_sja1000_chips; i++) {		candevices_p[card]->chip[i]=(struct chip_t *)kmalloc(sizeof(struct chip_t),GFP_KERNEL);		if (candevices_p[card]->chip[i]==NULL)			return -ENOMEM;		else			if ( add_mem_to_list(candevices_p[card]->chip[i]) )				return -ENOMEM;		candevices_p[card]->chip[i]->chipspecops=(struct chipspecops_t *)kmalloc(sizeof(struct chipspecops_t),GFP_KERNEL);		if (candevices_p[card]->chip[i]->chipspecops==NULL)			return -ENOMEM;		else			if ( add_mem_to_list(candevices_p[card]->chip[i]->chipspecops) )				return -ENOMEM;		chips_p[irq_count]=candevices_p[card]->chip[i];		candevices_p[card]->chip[i]->hostdevice=candevices_p[card];		candevices_p[card]->chip[i]->chip_irq=irq[irq_count];		candevices_p[card]->chip[i]->flags=0x0;		candevices_p[card]->hwspecops->init_chip_data(card,i);		if (init_chipspecops(card,i))			return -ENODEV;		init_obj_struct(card, irq_count);		irq_count++;	} 	return 0;}int init_obj_struct(int card, int chip){	static int obj_count=0;	int i=0,max_objects=0;	if (!strcmp(chips_p[chip]->chip_type,"i82527")) 		max_objects=15;	else		max_objects=1;	for (i=0; i<max_objects; i++) {		chips_p[chip]->msgobj[i]=(struct msgobj_t *)kmalloc(sizeof(struct msgobj_t),GFP_KERNEL);		if (chips_p[chip]->msgobj[i] == NULL) 			return -ENOMEM;		else			if ( add_mem_to_list(chips_p[chip]->msgobj[i]) )				return -ENOMEM;		chips_p[chip]->msgobj[i]->fifo=(struct canfifo_t *)kmalloc(sizeof(struct canfifo_t),GFP_KERNEL);		if (chips_p[chip]->msgobj[i]->fifo == NULL)			return -ENOMEM;		else			if ( add_mem_to_list(chips_p[chip]->msgobj[i]->fifo) )				return -ENOMEM;				if (minor[0] == -1) {			objects_p[obj_count]=chips_p[chip]->msgobj[i];			objects_p[obj_count]->hostchip=chips_p[chip];			objects_p[obj_count]->object=i+1;			objects_p[obj_count]->minor=obj_count;		}		else {			objects_p[minor[chip]+i]=chips_p[chip]->msgobj[i];			objects_p[minor[chip]+i]->hostchip=chips_p[chip];			objects_p[minor[chip]+i]->object=i+1;			objects_p[minor[chip]+i]->minor=minor[chip]+i;		}		chips_p[chip]->msgobj[i]->flags = 0x0;			candevices_p[card]->hwspecops->init_obj_data(chip,i);		obj_count++;	}	return 0;}int init_hwspecops(int card){	#ifdef TEMPLATE	if (!strcmp(candevices_p[card]->hwname,"template")) {		template_register(candevices_p[card]->hwspecops);	}	#endif	#ifdef PIP	if (!strcmp(candevices_p[card]->hwname,"pip5")) {		pip5_register(candevices_p[card]->hwspecops);	}	else if (!strcmp(candevices_p[card]->hwname,"pip6")) {		pip6_register(candevices_p[card]->hwspecops);	}	#endif	#ifdef SMARTCAN	if (!strcmp(candevices_p[card]->hwname,"smartcan")) {		smartcan_register(candevices_p[card]->hwspecops);	}	#endif	#ifdef NSI	if (!strcmp(candevices_p[card]->hwname,"nsican")) {		nsi_register(candevices_p[card]->hwspecops);	}	#endif	#ifdef CC104	if (!strcmp(candevices_p[card]->hwname,"cc104")) {		cc104_register(candevices_p[card]->hwspecops);	}	#endif	#ifdef AIM104	if (!strcmp(candevices_p[card]->hwname,"aim104")) {		aim104_register(candevices_p[card]->hwspecops);	}	#endif	#ifdef PCI03	if (!strcmp(candevices_p[card]->hwname,"pc-i03")) {		pci03_register(candevices_p[card]->hwspecops);	}	#endif	#ifdef PCM3680	if (!strcmp(candevices_p[card]->hwname,"pcm3680")) {		pcm3680_register(candevices_p[card]->hwspecops);	}	#endif	#ifdef PCCAN	if (!strcmp(candevices_p[card]->hwname,"pccan-f") |		 !strcmp(candevices_p[card]->hwname,"pccan-s") ) {		pccanf_register(candevices_p[card]->hwspecops);	}	if (!strcmp(candevices_p[card]->hwname,"pccan-d")) {		pccand_register(candevices_p[card]->hwspecops);	}	if (!strcmp(candevices_p[card]->hwname,"pccan-q")) {		pccanq_register(candevices_p[card]->hwspecops);	}	#endif	#ifdef M437	if (!strcmp(candevices_p[card]->hwname,"m437")) {		m437_register(candevices_p[card]->hwspecops);	}	#endif	#ifdef PCCCAN	if (!strcmp(candevices_p[card]->hwname,"pcccan")) {		pcccan_register(candevices_p[card]->hwspecops);	}	#endif	#ifdef SSV	if (!strcmp(candevices_p[card]->hwname,"ssv")) {		ssv_register(candevices_p[card]->hwspecops);	}	#endif	return 0;}int init_chipspecops(int card, int chipnr){	if (!strcmp(candevices_p[card]->chip[chipnr]->chip_type,"i82527")) {		i82527_register(candevices_p[card]->chip[chipnr]->chipspecops);	} 	if (!strcmp(candevices_p[card]->chip[chipnr]->chip_type,"sja1000")) {		sja1000_register(candevices_p[card]->chip[chipnr]->chipspecops);	}	if (!strcmp(candevices_p[card]->chip[chipnr]->chip_type,"sja1000p")) {		sja1000p_register(candevices_p[card]->chip[chipnr]->chipspecops);	}	return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成a人v欧美综合天堂下载| 久久精品人人做| 亚洲va在线va天堂| 欧美自拍丝袜亚洲| 五月婷婷激情综合网| 欧美一级片在线看| 国产一区二区精品久久91| 国产农村妇女毛片精品久久麻豆| 国产成人免费9x9x人网站视频| 亚洲欧美一区二区在线观看| 91久久精品一区二区三区| 日韩在线一二三区| 精品国产亚洲在线| av成人老司机| 亚洲成人在线观看视频| 欧美成人猛片aaaaaaa| 丁香天五香天堂综合| 一区二区三区在线免费视频| 88在线观看91蜜桃国自产| 国产一区二区福利视频| 亚洲免费观看高清| 日韩欧美精品在线| av电影天堂一区二区在线 | 在线观看视频一区二区欧美日韩| 亚洲va韩国va欧美va| 欧美变态tickling挠脚心| 成人动漫一区二区三区| 午夜欧美一区二区三区在线播放| 欧美精品一区二区三区高清aⅴ| 成人高清在线视频| 日本三级亚洲精品| 一区精品在线播放| 日韩免费高清电影| 色婷婷综合久久久久中文一区二区| 日韩高清欧美激情| 亚洲天堂av一区| 精品久久久久av影院 | 日韩中文字幕麻豆| 欧美国产丝袜视频| 7777精品伊人久久久大香线蕉经典版下载 | 不卡欧美aaaaa| 日韩va欧美va亚洲va久久| 国产精品久久久久9999吃药| 日韩欧美中文字幕制服| 在线观看亚洲a| 成人黄色电影在线| 久久疯狂做爰流白浆xx| 亚洲午夜私人影院| 中文字幕av一区二区三区免费看 | 欧美一卡二卡三卡| 欧美性大战久久| av色综合久久天堂av综合| 精品一区二区三区在线播放视频 | 国产午夜一区二区三区| 日韩一区二区三区观看| 欧美日韩国产片| 91欧美一区二区| 国产老妇另类xxxxx| 美日韩黄色大片| 日韩av一区二区在线影视| 亚洲国产欧美在线人成| 亚洲猫色日本管| 136国产福利精品导航| 国产色综合久久| 久久综合久久久久88| 欧美一区二区国产| 欧美久久久久免费| 欧美天天综合网| 欧美亚洲动漫精品| 色视频成人在线观看免| 色中色一区二区| 在线视频你懂得一区二区三区| 北岛玲一区二区三区四区| 国产大陆a不卡| 国产激情一区二区三区| 国产乱子伦视频一区二区三区| 美女爽到高潮91| 国产真实精品久久二三区| 国产精品中文有码| 国产馆精品极品| 成人不卡免费av| 色诱亚洲精品久久久久久| 色综合久久中文综合久久牛| 日本韩国一区二区三区视频| 欧美性极品少妇| 日韩一区二区三免费高清| 欧美大片日本大片免费观看| 2022国产精品视频| 中文字幕欧美激情| 亚洲天堂中文字幕| 亚洲高清免费观看| 青娱乐精品在线视频| 国产综合久久久久久久久久久久| 国产精品一卡二卡在线观看| 成人污视频在线观看| 色综合久久久久| 欧美高清视频在线高清观看mv色露露十八 | 午夜在线成人av| 青椒成人免费视频| 国产成人在线视频网站| 91欧美一区二区| 51精品国自产在线| 久久久不卡网国产精品二区| 国产精品久久777777| 一区二区三区毛片| 免费观看一级欧美片| 国产精品一二三四| 欧美综合视频在线观看| 精品福利二区三区| 亚洲特级片在线| 免费观看一级欧美片| youjizz国产精品| 在线不卡免费欧美| 国产欧美一区二区精品久导航| 综合精品久久久| 青青国产91久久久久久| eeuss鲁一区二区三区| 欧美日韩精品免费观看视频 | 国产精品激情偷乱一区二区∴| 亚洲欧美偷拍另类a∨色屁股| 青青草成人在线观看| 91网站最新网址| 精品女同一区二区| 亚洲线精品一区二区三区八戒| 国产乱子轮精品视频| 欧美性欧美巨大黑白大战| 久久精品日韩一区二区三区| 亚洲女同一区二区| 国产精品一区2区| 91精品午夜视频| 亚洲人午夜精品天堂一二香蕉| 七七婷婷婷婷精品国产| 一本到不卡免费一区二区| 亚洲精品国产品国语在线app| 日本不卡的三区四区五区| 91麻豆国产自产在线观看| 久久久久久99精品| 日本在线播放一区二区三区| 97国产一区二区| 中文幕一区二区三区久久蜜桃| 日韩国产欧美视频| 在线欧美一区二区| 国产精品不卡视频| 国产aⅴ综合色| 久久久亚洲欧洲日产国码αv| 日韩精品乱码免费| 在线视频欧美精品| 综合激情成人伊人| 懂色中文一区二区在线播放| 欧美成人一区二区三区| 日本91福利区| 884aa四虎影成人精品一区| 亚洲国产精品久久一线不卡| 色偷偷88欧美精品久久久 | 专区另类欧美日韩| 成人免费av网站| 国产精品乱人伦一区二区| 成人午夜私人影院| 久久久.com| 国产精品99久| 久久老女人爱爱| 国产成人亚洲综合a∨婷婷| 精品久久久久久久人人人人传媒| 日韩 欧美一区二区三区| 这里只有精品免费| 日本不卡的三区四区五区| 欧美二区乱c少妇| 天天操天天干天天综合网| 91国偷自产一区二区开放时间| 亚洲日本va午夜在线影院| 91玉足脚交白嫩脚丫在线播放| 亚洲欧洲精品一区二区三区不卡| eeuss鲁一区二区三区| 亚洲免费观看在线观看| 欧美日韩中文字幕一区二区| 亚洲二区在线观看| 制服丝袜亚洲色图| 日本女人一区二区三区| 日韩欧美国产午夜精品| 国产一区二区三区不卡在线观看 | 一本在线高清不卡dvd| 亚洲综合丝袜美腿| 91麻豆精品国产91久久久久久 | 五月婷婷久久综合| 日韩欧美在线影院| 国产在线播精品第三| 国产精品另类一区| 在线精品视频小说1| 日韩激情视频在线观看| 精品久久一二三区| 99国产欧美另类久久久精品 | 理论电影国产精品| 亚洲第一搞黄网站| 6080日韩午夜伦伦午夜伦| 激情偷乱视频一区二区三区| 国产精品久久久久久久午夜片| 欧美亚男人的天堂| 极品销魂美女一区二区三区| 亚洲色欲色欲www在线观看| 欧美精品一级二级|