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

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

?? rtl_fifo.c

?? fsmlabs的real time linux的內核
?? C
?? 第 1 頁 / 共 2 頁
字號:
	if (RTF_USER_OPEN(minor)) {		fifo_wake_sleepers(minor);	}	return read;}/* these are RTL-FIFO internal functions */static int rtf_ioctl (struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg){	unsigned int minor = MINOR(inode->i_rdev);	int val;	if (RTF_USER_IOCTL(minor)) {		return (*RTF_USER_IOCTL(minor)) (minor, cmd, arg);	} else {		switch (cmd) {			case FIONREAD:				val = RTF_LEN(minor);				put_user(val, (int *) arg);				break;			default:				break;		}		return 0;	}}static void fifo_setup_sleep(unsigned int minor){/* 	clear_bit(0,&rtl_fifo_to_wakeup[minor]); */}static void fifo_wake_sleepers(int minor){	if (waitqueue_active(&RTF_WAIT(minor))) {		set_bit(0, &rtl_fifo_to_wakeup[minor]);		if (rtl_fifo_irq > 0) {			rtl_global_pend_irq(rtl_fifo_irq);		}	}}static void fifo_irq_handler (int irq, void *dev_id, struct pt_regs *p){	int minor;	for(minor=0; minor < RTF_MAX_FIFO; minor++) {		if (test_and_clear_bit(0,&rtl_fifo_to_wakeup[minor])) {			rtf_wake_up(RTF_ADDR(minor));		}	}}/*  * these are file_operations functions * called by user tasks via the fops structure  */static int rtf_open(struct inode *inode, struct file *filp){	unsigned int minor = MINOR(inode->i_rdev);	if (minor >= RTF_MAX_FIFO)		return -ENODEV;	if (!RTF_ALLOCATED(minor)) {		return -ENODEV;	}	if (RTF_USER_OPEN(minor) && current != RTF_OPENER(minor)) {		return -EACCES;	}	RTF_OPENER(minor) = current;	RTF_USER_OPEN(minor)++;	if (RTF_ADDR(minor)->creator) {		__MOD_INC_USE_COUNT(RTF_ADDR(minor)->creator);	}	return 0;}static int rtf_release(struct inode *inode, struct file *file){	unsigned int minor = MINOR(inode->i_rdev);#if 0	if (!RTF_USER_OPEN(minor)) {		printk("rtf: release on a not opened descriptor inode=%d\n",(int)inode->i_ino);		return 0;  /* that was just a warning */	}#endif	RTF_USER_OPEN(minor)--;	if (RTF_ADDR(minor)->creator) {		__MOD_DEC_USE_COUNT(RTF_ADDR(minor)->creator);	}	return 0;}static loff_t rtf_llseek(struct file *file, loff_t offset, int origin){	return -ESPIPE;}#define RTL_FIFO_TIMEOUT (HZ/10)static ssize_t rtf_read(struct file *filp, char *buf, size_t count, loff_t* ppos){	struct inode* inode = filp->f_dentry->d_inode;	unsigned int minor = MINOR(inode->i_rdev);	rtl_irqstate_t interrupt_state;	int result;	int chars = 0, size = 0, read = 0;	char *pipebuf;	minor = minor + RTF_BI(minor);	if (filp->f_flags & O_NONBLOCK) {		/*      if (RTF_LOCK(minor))		   return -EAGAIN;		 */		if (RTF_EMPTY(minor))			return 0;	} else		while (RTF_EMPTY(minor)  ) {			if (signal_pending(current))				return -ERESTARTSYS;			fifo_setup_sleep(minor);			interruptible_sleep_on_timeout(&RTF_WAIT(minor),					RTL_FIFO_TIMEOUT);		}/*      RTF_LOCK(minor)++; */	while (count > 0 && (size = RTF_LEN(minor))) {		chars = RTF_MAX_RCHUNK(minor);		if (chars > count)			chars = count;		if (chars > size)			chars = size;		read += chars;		pipebuf = RTF_BASE(minor) + RTF_START(minor);		count -= chars;		copy_to_user(buf, pipebuf, chars); 		rtl_spin_lock_irqsave(&RTF_SPIN(minor), interrupt_state);		RTF_START(minor) += chars;		RTF_START(minor) = RTF_WRAP(minor, RTF_START(minor));		RTF_LEN(minor) -= chars;		rtl_spin_unlock_irqrestore(&RTF_SPIN(minor), interrupt_state);		buf += chars;	}/*      RTF_LOCK(minor)--; */	if (read) {		inode->i_atime = CURRENT_TIME;		if ((result = (*RTF_HANDLER(minor)) (minor)) < 0) {			return result;		}		return read;	}	return 0;}static ssize_t rtf_write(struct file *filp, const char *buf, size_t count, loff_t* ppos){	struct inode* inode = filp->f_dentry->d_inode;	unsigned int minor = MINOR(inode->i_rdev);	rtl_irqstate_t interrupt_state;	int chars = 0, free = 0, written = 0;	char *pipebuf;	int result;	if (count <= RTF_BUF(minor))		free = count;	else		free = 1;	while (count > 0) {		while (RTF_FREE(minor) < free)  {			if (signal_pending(current))				return written ? : -ERESTARTSYS;			if (filp->f_flags & O_NONBLOCK)				return written ? : -EAGAIN;			fifo_setup_sleep(minor);			interruptible_sleep_on_timeout(&RTF_WAIT(minor),					RTL_FIFO_TIMEOUT);		}		/*      RTF_LOCK(minor)++; */		while (count > 0 && (free = RTF_FREE(minor))) {			chars = RTF_MAX_WCHUNK(minor);			if (chars > count)				chars = count;			if (chars > free)				chars = free;			rtl_spin_lock_irqsave(&RTF_SPIN(minor), interrupt_state);			pipebuf = RTF_BASE(minor) + RTF_END(minor);			rtl_spin_unlock_irqrestore(&RTF_SPIN(minor), interrupt_state);			count -= chars;			written += chars;			copy_from_user(pipebuf, buf, chars);			rtl_spin_lock_irqsave(&RTF_SPIN(minor), interrupt_state);			RTF_LEN(minor) += chars;			rtl_spin_unlock_irqrestore(&RTF_SPIN(minor), interrupt_state);			buf += chars;		}		/*      RTF_LOCK(minor)--; */		free = 1;	}	inode->i_ctime = inode->i_mtime = CURRENT_TIME;	if ((result = (*RTF_HANDLER(minor)) (minor)) < 0) {		return result;	}	return written;}static	unsigned int rtf_poll(struct file *filp, poll_table *wait){	int ret = 0;	struct inode* inode = filp->f_dentry->d_inode;	unsigned int minor = MINOR(inode->i_rdev);	fifo_setup_sleep(minor);	poll_wait(filp, &RTF_WAIT(minor), wait);	if (!RTF_EMPTY(minor + RTF_BI(minor))) {		ret |= POLLIN | POLLRDNORM;	}	if (!RTF_FULL(minor)) {		ret |= POLLOUT | POLLWRNORM;	}	return ret;}static struct file_operations rtf_fops ={llseek: rtf_llseek,read: rtf_read,write: rtf_write,poll: rtf_poll,ioctl: rtf_ioctl,open: rtf_open,release: rtf_release,};int rtf_init (void){	int irq = -1;	int i;	if (register_chrdev (RTF_MAJOR, "rtf", &rtf_fops)) {		printk ("RT-FIFO: unable to get major %d\n", RTF_MAJOR);		return -EIO;	}	for (i = 0; i < RTF_MAX_FIFO; i++) {		rtl_fifo_to_wakeup[i] = 0;	}	irq = rtl_get_soft_irq (fifo_irq_handler, "RTLinux FIFO");	if (irq > 0) {		rtl_fifo_irq = irq;	} else {		unregister_chrdev (RTF_MAJOR, "rtf");		printk ("Can't get an irq for rt fifos");		return -EIO;	/* should have a different return */	}	return 0;}		void rtf_uninit(void){	if (rtl_fifo_irq) {		rtl_free_soft_irq(rtl_fifo_irq);	}	unregister_chrdev(RTF_MAJOR, "rtf");}#ifdef CONFIG_RTL_POSIX_IO#include <rtl_posixio.h>#define RTF_DEFAULT_SIZE PREALLOC_SIZEstatic int rtl_rtf_open (struct rtl_file *filp){	if (!(filp->f_flags & O_NONBLOCK)) {		return -EACCES; /* TODO: implement blocking IO */	}	if( (filp->f_flags & O_CREAT) &&  !RTF_ALLOCATED(filp->f_minor))	{		/* better be calling from Linux and not RT mode unless		   there are preallocted fifos still */		__rtf_create(filp->f_minor, RTF_DEFAULT_SIZE, &__this_module);	}	if(!RTF_ALLOCATED(filp->f_minor)){		return -EUNATCH; // protocol driver not attached	}	return 0;}static int rtl_rtf_release (struct rtl_file *filp){	int minor = filp->f_minor;	char *old = RTF_BASE(minor);	if (RTF_ALLOCATED(minor) && old && find_prealloc(old)) {		rtf_destroy(minor);	}	return 0;}static ssize_t rtl_rtf_write(struct rtl_file *filp, const char *buf, size_t count, loff_t* ppos){	return rtf_put(RTL_MINOR_FROM_FILEPTR(filp), (char *) buf, count);	}static ssize_t rtl_rtf_read(struct rtl_file *filp, char *buf, size_t count, loff_t* ppos){	return rtf_get(RTL_MINOR_FROM_FILEPTR(filp), buf, count);	}static int rtl_rtf_ioctl (struct rtl_file *filp, unsigned int req, unsigned long arg){	int minor = RTL_MINOR_FROM_FILEPTR(filp);	if (!RTF_ALLOCATED(minor)) {		return -EINVAL;	}	if (req == RTF_SETSIZE) {		if (rtf_resize(minor, arg) < 0) {			return -EINVAL;		}	} else {		return -EINVAL;	}	return 0;}static struct rtl_file_operations rtl_fifo_fops = {       	NULL,	rtl_rtf_read,	rtl_rtf_write,	rtl_rtf_ioctl,	NULL,	rtl_rtf_open,	rtl_rtf_release};#endif#ifdef MODULEint init_module(void){	int ret;	ret = rtf_init();	if (ret < 0) {		return ret;	}#ifdef CONFIG_RTL_POSIX_IO	if (rtl_register_chrdev (RTF_MAJOR, "rtf", &rtl_fifo_fops)) {		printk ("RT-FIFO: unable to get RTLinux major %d\n", RTF_MAJOR);		rtf_uninit();		return -EIO;	}#endif	return 0;}void cleanup_module(void){#ifdef CONFIG_RTL_POSIX_IO	rtl_unregister_chrdev(RTF_MAJOR, "rtf");#endif	rtf_uninit();}#endif				/* MODULE */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丝袜国产日韩另类美女| 9191成人精品久久| 4438x亚洲最大成人网| 欧美激情综合在线| 免费观看30秒视频久久| 欧洲日韩一区二区三区| 国产精品三级av在线播放| 免费在线观看不卡| 欧美日韩一区二区在线观看视频| 国产人成亚洲第一网站在线播放| 日本不卡免费在线视频| 色婷婷一区二区| 中文字幕一区不卡| 国产成人在线免费观看| 精品国产制服丝袜高跟| 午夜精品久久久久久久久久| 91麻豆福利精品推荐| 久久婷婷成人综合色| 麻豆精品视频在线观看免费| 欧美日韩日日夜夜| 亚洲国产综合人成综合网站| 97se狠狠狠综合亚洲狠狠| 国产精品嫩草影院com| 国产成人在线视频网站| 久久久国产一区二区三区四区小说| 老汉av免费一区二区三区| 欧美一区欧美二区| 日本v片在线高清不卡在线观看| 欧美三级中文字幕| 亚洲超丰满肉感bbw| 欧美日韩午夜影院| 亚洲第一二三四区| 7777精品伊人久久久大香线蕉超级流畅 | 欧美一二三区精品| 五月激情综合网| 日韩三级高清在线| 国产在线麻豆精品观看| 国产亚洲制服色| 北条麻妃一区二区三区| 亚洲婷婷综合色高清在线| 99视频在线观看一区三区| 亚洲视频你懂的| 99久久综合精品| 综合久久久久久| 欧美综合在线视频| 日韩 欧美一区二区三区| 欧美一区二区成人| 国产成人激情av| 18欧美乱大交hd1984| 欧美日韩在线免费视频| 麻豆中文一区二区| 日韩三级视频在线观看| 国产亲近乱来精品视频| 欧美一级在线免费| 国产一区二区在线观看视频| 国产亚洲自拍一区| 国产不卡高清在线观看视频| 日韩理论在线观看| 538prom精品视频线放| 国产在线一区观看| 亚洲欧美日韩国产中文在线| 制服丝袜日韩国产| 高清日韩电视剧大全免费| 一区二区三区在线免费视频| 欧美午夜一区二区三区免费大片| 麻豆国产精品777777在线| 国产精品视频一二三| 欧美性做爰猛烈叫床潮| 国产最新精品精品你懂的| 亚洲四区在线观看| 日韩欧美二区三区| 色综合久久天天综合网| 韩国欧美一区二区| 亚洲精品久久久蜜桃| 精品国产3级a| 欧美日韩免费观看一区二区三区| 久久91精品久久久久久秒播| 亚洲一区在线观看视频| 国产亚洲精品精华液| 欧美人与禽zozo性伦| 丁香一区二区三区| 蜜臀国产一区二区三区在线播放 | 精品中文字幕一区二区小辣椒 | 国产肉丝袜一区二区| 欧美日韩aaa| 91在线国产福利| 国产成人午夜电影网| 日本不卡一区二区三区高清视频| 国产精品久久久久毛片软件| 欧美刺激脚交jootjob| 在线观看日韩毛片| 91丨九色丨尤物| 国产精品影视网| 久草这里只有精品视频| 亚洲妇女屁股眼交7| 亚洲激情一二三区| 亚洲欧洲国产日韩| 国产喷白浆一区二区三区| 亚洲精品一区二区精华| 91精品在线观看入口| 在线观看视频一区二区欧美日韩| 成人av免费在线观看| 国产高清久久久| 国产一区二区三区日韩| 久99久精品视频免费观看| 日韩国产精品大片| 免费观看在线综合| 日韩av网站免费在线| 日韩精彩视频在线观看| 亚洲成av人在线观看| 亚洲成国产人片在线观看| 亚洲最大色网站| 午夜精品久久久久久久蜜桃app| 亚洲一区二区美女| 肉色丝袜一区二区| 免费人成精品欧美精品| 精品午夜久久福利影院| 经典一区二区三区| 国产精品资源在线| 成人国产一区二区三区精品| 99精品热视频| 色哟哟一区二区三区| 在线视频你懂得一区二区三区| 91福利在线免费观看| 欧美色爱综合网| 欧美一区二区黄色| 国产亚洲精品资源在线26u| 欧美激情一区二区三区不卡| 中文字幕在线免费不卡| 依依成人综合视频| 奇米888四色在线精品| 久久激情五月激情| 成人一级片网址| 欧美中文字幕一二三区视频| 91麻豆精品国产91久久久久久久久| 91精品麻豆日日躁夜夜躁| 久久婷婷综合激情| 亚洲男人的天堂网| 免费在线观看一区| 成人黄色免费短视频| 欧美日韩免费高清一区色橹橹 | 亚洲午夜在线视频| 免费看欧美女人艹b| 不卡的av在线播放| 欧美高清视频一二三区| 国产午夜精品一区二区三区视频| 亚洲欧美在线视频| 免费国产亚洲视频| 日韩一区二区在线免费观看| 国产亚洲婷婷免费| 伊人色综合久久天天人手人婷| 日韩电影在线观看一区| 国产99久久精品| 91精品国产91久久久久久一区二区| 久久日韩粉嫩一区二区三区| 一区二区三区在线免费播放| 久久超碰97中文字幕| 91在线播放网址| 精品福利视频一区二区三区| 亚洲黄色片在线观看| 国产精品影视天天线| 欧美日韩成人高清| 亚洲欧洲国产日韩| 国产一区二区视频在线播放| 欧美亚洲国产一卡| 日韩一区中文字幕| 国产剧情一区二区三区| 欧美欧美欧美欧美首页| 中文字幕中文乱码欧美一区二区| 日本不卡高清视频| 欧美三级日韩三级国产三级| 中文字幕一区三区| 国产一区不卡精品| 日韩欧美专区在线| 亚洲一区二区三区小说| 成人高清免费在线播放| 国产视频一区二区在线| 免费在线一区观看| 91精品国产综合久久小美女| 18成人在线观看| 99视频热这里只有精品免费| 久久蜜桃一区二区| 激情都市一区二区| 欧美一级二级在线观看| 午夜精品123| 欧美午夜免费电影| 亚洲一区二区三区小说| 91浏览器打开| 亚洲丝袜制服诱惑| 99国产欧美久久久精品| 国产精品乱人伦中文| 国产成人免费av在线| 久久精品在线免费观看| 黄色日韩三级电影| 欧美精品一区在线观看| 国产麻豆精品95视频| 国产欧美一区二区精品婷婷| 国产精品88av| 亚洲欧洲成人自拍| 欧美亚洲一区二区在线|