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

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

?? write.c

?? PCM9880是一塊PC/104界面的雙端口隔離CAN總線通訊卡
?? C
字號:
/* write.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#define __NO_VERSION__#include <linux/module.h>#include <linux/kernel.h>#include <linux/sched.h>#include <linux/delay.h>#include <asm/irq.h>#include <asm/uaccess.h>#include "../include/main.h"ssize_t can_write(struct file *file, const char *buffer, size_t length, loff_t *offset){	struct msgobj_t *obj;	struct chip_t *chip;	struct canmsg_t *write_msg;	struct canfifo_t *fifo;	int ret = 0;	int space = 0;	int written = 0;	int bytes_to_copy = 0;	long can_timeout = 1;	if (length < sizeof(struct canmsg_t)) {		DEBUGMSG("Trying to write less bytes than a CAN message,\n");		DEBUGMSG("this will always return 0 !\n");		return 0;	}	if (length > 8 * sizeof(struct canmsg_t)) {		CANMSG("Trying to write more than is supported.\n");		return -1;	}	if (length % sizeof(struct canmsg_t)) {		CANMSG("The number of bytes requested to be written is not a multiple of\n");		CANMSG("'sizeof(struct canmsg_t)', currently this is not allowed.\n");		return -1;	} 	/* Initialize hardware pointers */	if ( (obj = objects_p[MINOR_NR]) == NULL) {		CANMSG("Could not assign buffer structure\n");		return -1;	}	if ( (chip = obj->hostchip) == NULL) {		CANMSG("Device is not correctly configured,\n");		CANMSG("please reload the driver\n");		return -1;	}	if ( (fifo = obj->fifo) == NULL) {		CANMSG("Could not assign buffer memory\n");		return -1;	}	/* Initialize pointer to the first message to be sent */	write_msg = fifo->tx_writep;	/* Calculate free buffer space */	cli();	space = ((int)fifo->tx_writep < (int)fifo->tx_readp) ? 			((int)fifo->tx_readp - (int)fifo->tx_writep) : 			((int)fifo->tx_readp - (int)fifo->tx_writep + 							(int)fifo->tx_size);	sti();	/* If the output buffer is full, return immediately in case O_NONBLOCK	 * has been specified or loop until space becomes available.	 */	while (space < sizeof(struct canmsg_t)) {		DEBUGMSG("Buffer is full\n");		if (file->f_flags & O_NONBLOCK)			return -EAGAIN;		can_timeout = interruptible_sleep_on_timeout(&fifo->writeq, 								CANTIMEOUT);		if (signal_pending(current))			return -EINTR;		if (!can_timeout)			return -EIO;		cli();		space = ((int)fifo->tx_writep < (int)fifo->tx_readp) ? 			((int)fifo->tx_readp - (int)fifo->tx_writep) : 			((int)fifo->tx_readp - (int)fifo->tx_writep + 							(int)fifo->tx_size);		sti();	}	/* There's space available in the kernel output buffer.	 * Find out wich is smaller: 'length', the number of bytes requested to	 * be written or 'space', the number of bytes available in the kernel 	 * buffer. We copy the least of the two to kernel space.	 *///	space = space - (space % sizeof(struct canmsg_t)); // round it	bytes_to_copy = space < length ? space : length;	copy_from_user(fifo->tx_writep, buffer, bytes_to_copy);	written = bytes_to_copy;	while (bytes_to_copy > 0) {		fifo->tx_writep++;		if (fifo->tx_writep >= fifo->buf_tx_entry + MAX_BUF_LENGTH)			fifo->tx_writep = fifo->buf_tx_entry;		bytes_to_copy -= sizeof(struct canmsg_t);	}	/* Copy the data to be transmitted into the output buffer *//*	while ( (written < length) && (space >= sizeof(struct canmsg_t)) ) {		copy_from_user(fifo->tx_writep,buffer, sizeof(struct canmsg_t));		cli();		fifo->tx_writep++;		if (fifo->tx_writep >= fifo->buf_tx_entry + MAX_BUF_LENGTH)			fifo->tx_writep = fifo->buf_tx_entry;		buffer += sizeof(struct canmsg_t);		written += sizeof(struct canmsg_t);		space = ((int)fifo->tx_writep < (int)fifo->tx_readp) ?			((int)fifo->tx_readp - (int)fifo->tx_writep) :			((int)fifo->tx_readp - (int)fifo->tx_writep + 							(int)fifo->tx_size);		sti();	} */	/* Initiate transmission in case we are not already transmitting */	cli();	if (!fifo->tx_in_progress) {		fifo->tx_in_progress = 1;		sti();		if ( (ret = chip->chipspecops->pre_write_config(chip, obj, 							write_msg)) < 0) {			CANMSG("Error initializing hardware for sending\n");			return -EIO;		}		obj->ret = 0;		if ( (ret = chip->chipspecops->send_msg(chip, obj, 							write_msg)) < 0) {			CANMSG("Error sending message\n");			return -EIO;		}		/* If O_SYNC is specified wait for successfull transmission *//*		while (1) {			cli();			if ( (!file->f_flags & O_SYNC) || 						(!fifo->tx_in_progress)) {				sti();				if (obj->ret < 0)					return obj->ret;				else					return written;			}			cli();			if (fifo->tx_in_progress) {				can_timeout = interruptible_sleep_on_timeout(						&fifo->writeq, CANTIMEOUT);			}			sti();			if (signal_pending(current))				return -EINTR;			if (!can_timeout)				return -EIO;		} */	}	sti();	return written;}	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天堂蜜桃91精品| 色综合久久久久综合体| 国产一区二区三区综合| 精品一二三四区| 久久国产精品色| 久久精品国产色蜜蜜麻豆| 麻豆精品在线视频| 国产乱一区二区| av一本久道久久综合久久鬼色| 日韩限制级电影在线观看| 亚洲电影在线播放| 日韩欧美卡一卡二| 在线观看免费成人| 91在线国产观看| 99久久99久久久精品齐齐| 欧美色手机在线观看| 51精品秘密在线观看| 久久综合色之久久综合| 国产清纯白嫩初高生在线观看91 | 亚洲精品一二三区| 亚洲欧美激情小说另类| 日韩一区精品字幕| 国产一区二区免费看| 色综合天天综合网国产成人综合天| 一本在线高清不卡dvd| 欧美精品 日韩| 久久午夜电影网| 亚洲一区欧美一区| 婷婷丁香激情综合| 美女视频免费一区| 99vv1com这只有精品| 3atv一区二区三区| 欧美国产激情二区三区| 玉足女爽爽91| 国产专区欧美精品| 在线观看中文字幕不卡| 欧美日韩国产首页| 久久久久久久久久久99999| 亚洲精品视频在线看| 久久精品国产免费| 色综合天天视频在线观看| 欧美一级高清大全免费观看| 国产精品乱子久久久久| 日本不卡视频在线观看| gogogo免费视频观看亚洲一| 欧美精品在线观看播放| 亚洲国产成人自拍| 日韩电影免费在线| 91浏览器在线视频| 国产亚洲精品bt天堂精选| 亚洲福利视频三区| 成人av在线一区二区三区| 日韩欧美国产一二三区| 亚洲综合一二三区| 国产99一区视频免费| 在线综合亚洲欧美在线视频| 国产精品久久二区二区| 亚洲h在线观看| av电影天堂一区二区在线| 日韩欧美一二三四区| 一区二区三区波多野结衣在线观看| 国内精品视频666| 欧美另类久久久品| 国产日韩精品一区二区三区在线| 亚洲伦在线观看| 国产乱妇无码大片在线观看| 3d动漫精品啪啪一区二区竹菊 | 国产精品久久三| 精久久久久久久久久久| 91精品欧美综合在线观看最新 | 日韩激情一二三区| 99在线精品观看| 久久品道一品道久久精品| 日韩高清不卡在线| 欧美影视一区在线| 亚洲免费资源在线播放| 成人国产电影网| 欧美成人性福生活免费看| 午夜亚洲国产au精品一区二区| 99久久精品国产观看| 国产精品素人一区二区| 国产精品一区一区| 久久影视一区二区| 蜜桃久久久久久| 91精品在线免费观看| 免费人成精品欧美精品| 91九色02白丝porn| 亚洲日本一区二区三区| av动漫一区二区| 中文字幕五月欧美| www.视频一区| 国产精品免费观看视频| 成人v精品蜜桃久久一区| 久久久久久毛片| 国产永久精品大片wwwapp| 精品日韩一区二区| 国产在线播放一区三区四| 精品电影一区二区三区| 国产一区二区三区免费看| 久久综合九色综合97婷婷女人| 韩国精品久久久| 久久久噜噜噜久久人人看| 国产成人精品一区二| 中文在线一区二区| av高清不卡在线| 一区二区三区中文在线观看| 日本大香伊一区二区三区| 一区二区三区.www| 欧美精品久久久久久久久老牛影院| 丝袜美腿成人在线| 欧美日韩第一区日日骚| 免费不卡在线观看| 久久一二三国产| 不卡视频在线看| 亚洲影院久久精品| 欧美日韩成人在线一区| 久久成人免费电影| 国产欧美一区二区精品性| 99视频精品免费视频| 国产精品伦一区二区三级视频| 色94色欧美sute亚洲线路一ni | 欧美成va人片在线观看| 成人aa视频在线观看| 久久久久久久久一| 一本大道久久a久久精品综合| 视频一区在线视频| 中文字幕欧美日本乱码一线二线| 日本电影亚洲天堂一区| 国产米奇在线777精品观看| 亚洲免费观看高清在线观看| 日韩你懂的电影在线观看| 99久久99久久精品国产片果冻| 午夜精品在线视频一区| 国产精品午夜在线| 欧美久久婷婷综合色| 成人国产精品免费观看视频| 日韩精品91亚洲二区在线观看| 国产精品不卡一区二区三区| 欧美成人性战久久| 99精品欧美一区| 午夜不卡av在线| 国产精品久久夜| 欧美成人福利视频| 欧美亚洲另类激情小说| 国产成人精品www牛牛影视| 婷婷中文字幕一区三区| 国产精品成人网| 欧美本精品男人aⅴ天堂| 91久久精品网| 粉嫩13p一区二区三区| 理论电影国产精品| 亚洲超丰满肉感bbw| 最新日韩av在线| 久久久久久久久蜜桃| 日韩一区二区免费在线电影| 色欧美片视频在线观看| 国产一区二区三区蝌蚪| 日韩电影免费在线| 亚洲一级在线观看| 亚洲精品视频在线观看网站| 国产精品美女久久久久久久网站| 26uuu亚洲婷婷狠狠天堂| 在线播放欧美女士性生活| 在线观看欧美黄色| 91在线视频免费观看| 成人午夜看片网址| 国产乱对白刺激视频不卡| 久久99热这里只有精品| 天堂一区二区在线| 图片区小说区区亚洲影院| 一卡二卡三卡日韩欧美| 国产精品高潮久久久久无| 久久亚洲精精品中文字幕早川悠里| 日韩一区二区三区在线观看 | 亚洲柠檬福利资源导航| 国产日韩av一区| 久久久国产精品不卡| 337p日本欧洲亚洲大胆精品| 日韩精品中文字幕一区| 欧美一区二区三区系列电影| 91精品午夜视频| 91精品欧美一区二区三区综合在 | 蜜桃视频在线观看一区二区| 三级成人在线视频| 日韩中文字幕麻豆| 日韩黄色免费网站| 日本美女一区二区三区| 日韩不卡在线观看日韩不卡视频| 日韩精品电影在线观看| 蜜乳av一区二区三区| 久久精品国产亚洲a| 精品一区二区三区在线观看| 国产一区美女在线| 国产成人综合视频| 成人一级片在线观看| 99久久久久久99| 日本韩国欧美在线| 欧美色图片你懂的| 在线电影院国产精品| 日韩欧美一卡二卡|