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

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

?? silly.c

?? Linux設備驅動的經典教材, 該電子書是第三版,并附有全部配套代碼.
?? C
字號:
/* * silly.c -- Simple Tool for Unloading and Printing ISA Data * * Copyright (C) 2001 Alessandro Rubini and Jonathan Corbet * Copyright (C) 2001 O'Reilly & Associates * * The source code in this file can be freely used, adapted, * and redistributed in source or binary form, so long as an * acknowledgment appears in derived source files.  The citation * should list that the code comes from the book "Linux Device * Drivers" by Alessandro Rubini and Jonathan Corbet, published * by O'Reilly & Associates.   No warranty is attached; * we cannot take responsibility for errors or fitness for use. * * $Id: silly.c,v 1.3 2004/09/26 07:02:43 gregkh Exp $ *//* =========================> BIG FAT WARNING: * This will only work on architectures with an ISA memory range. * It won't work on other computers. */#include <linux/module.h>#include <linux/init.h>#include <linux/moduleparam.h>#include <linux/version.h>#include <linux/sched.h>#include <linux/kernel.h> /* printk() */#include <linux/fs.h>	  /* everything... */#include <linux/errno.h>  /* error codes */#include <linux/slab.h>#include <linux/mm.h>#include <linux/ioport.h>#include <linux/poll.h>#include <asm/io.h>#include <asm/uaccess.h>int silly_major = 0;module_param(silly_major, int, 0);MODULE_AUTHOR("Alessandro Rubini");MODULE_LICENSE("Dual BSD/GPL");/* * The devices access the 640k-1M memory. * minor 0 uses ioread8/iowrite8 * minor 1 uses ioread16/iowrite16 * minor 2 uses ioread32/iowrite32 * minor 3 uses memcpy_fromio()/memcpy_toio() *//* * Here's our address range, and a place to store the ioremap'd base. */#define ISA_BASE	0xA0000#define ISA_MAX		0x100000  /* for general memory access */#define VIDEO_MAX	0xC0000  /* for vga access */#define VGA_BASE	0xb8000static void __iomem *io_base;int silly_open(struct inode *inode, struct file *filp){	return 0;}int silly_release(struct inode *inode, struct file *filp){	return 0;}enum silly_modes {M_8=0, M_16, M_32, M_memcpy};ssize_t silly_read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos){	int retval;	int mode = iminor(filp->f_dentry->d_inode);	void __iomem *add;	unsigned long isa_addr = ISA_BASE + *f_pos;	unsigned char *kbuf, *ptr;	if (isa_addr + count > ISA_MAX) /* range: 0xA0000-0x100000 */		count = ISA_MAX - isa_addr;	/*	 * too big an f_pos (caused by a malicious lseek())	 * would result in a negative count	 */	if (count < 0)		return 0;	kbuf = kmalloc(count, GFP_KERNEL);	if (!kbuf)		return -ENOMEM;	ptr = kbuf;	retval = count;	/*	 * Convert our address into our remapped area.	 */	add = (void __iomem *)(io_base + (isa_addr - ISA_BASE));	/*	 * kbuf is aligned, but the reads might not. In order not to	 * drive me mad with unaligned leading and trailing bytes,	 * I downgrade the `mode' if unaligned xfers are requested.	 */	if (mode == M_32 && ((isa_addr | count) & 3))		mode = M_16;	if (mode == M_16 && ((isa_addr | count) & 1))		mode = M_8;	switch(mode) {	  case M_32: 		while (count >= 4) {			*(u32 *)ptr = ioread32(add);			add += 4;			count -= 4;			ptr += 4;		}		break;	    	  case M_16: 		while (count >= 2) {			*(u16 *)ptr = ioread16(add);			add+=2;			count-=2;			ptr+=2;		}		break;	    	  case M_8: 		while (count) {			*ptr = ioread8(add);			add++;			count--;			ptr++;		}		break;	  case M_memcpy:		memcpy_fromio(ptr, add, count);		break;	    default:		return -EINVAL;	}	if ((retval > 0) && copy_to_user(buf, kbuf, retval))		retval = -EFAULT;	kfree(kbuf);	*f_pos += retval;	return retval;}ssize_t silly_write(struct file *filp, const char __user *buf, size_t count,		    loff_t *f_pos){	int retval;	int mode = iminor(filp->f_dentry->d_inode);	unsigned long isa_addr = ISA_BASE + *f_pos;	unsigned char *kbuf, *ptr;	void __iomem *add;	/*	 * Writing is dangerous.	 * Allow root-only, independently of device permissions	 */	if (!capable(CAP_SYS_RAWIO))		return -EPERM;	if (isa_addr + count > ISA_MAX) /* range: 0xA0000-0x100000 */		count = ISA_MAX - isa_addr;	/*	 * too big an f_pos (caused by a malicious lseek())	 * results in a negative count	 */	if (count < 0)		return 0;	kbuf = kmalloc(count, GFP_KERNEL);	if (!kbuf)		return -ENOMEM;	ptr = kbuf;	retval=count;	/*	 * kbuf is aligned, but the writes might not. In order not to	 * drive me mad with unaligned leading and trailing bytes,	 * I downgrade the `mode' if unaligned xfers are requested.	 */	if (mode == M_32 && ((isa_addr | count) & 3))		mode = M_16;	if (mode == M_16 && ((isa_addr | count) & 1))		mode = M_8;	if (copy_from_user(kbuf, buf, count)) {		kfree(kbuf);		return -EFAULT;	}	ptr = kbuf;	/*	 * Switch over to our remapped address space.	 */	add = (void __iomem *)(io_base + (isa_addr - ISA_BASE));	switch(mode) {	  case M_32: 		while (count >= 4) {			iowrite8(*(u32 *)ptr, add);			add += 4;			count -= 4;			ptr += 4;		}		break;	    	  case M_16: 		while (count >= 2) {			iowrite8(*(u16 *)ptr, add);			add += 2;			count -= 2;			ptr += 2;		}		break;	    	  case M_8: 		while (count) {			iowrite8(*ptr, add);			add++;			count--;			ptr++;		}		break;	  case M_memcpy:		memcpy_toio(add, ptr, count);		break;	  default:		return -EINVAL;	}	*f_pos += retval;	kfree(kbuf);	return retval;}unsigned int silly_poll(struct file *filp, poll_table *wait){    return POLLIN | POLLRDNORM | POLLOUT | POLLWRNORM;}struct file_operations silly_fops = {	.read =	    silly_read,	.write =    silly_write,	.poll =	    silly_poll,	.open =	    silly_open,	.release =  silly_release,	.owner =    THIS_MODULE};int silly_init(void){	int result = register_chrdev(silly_major, "silly", &silly_fops);	if (result < 0) {		printk(KERN_INFO "silly: can't get major number\n");		return result;	}	if (silly_major == 0)		silly_major = result; /* dynamic */	/*	 * Set up our I/O range.	 */	/* this line appears in silly_init */	io_base = ioremap(ISA_BASE, ISA_MAX - ISA_BASE);	return 0;}void silly_cleanup(void){	iounmap(io_base);	unregister_chrdev(silly_major, "silly");}module_init(silly_init);module_exit(silly_cleanup);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色图在线看| 国产精品美女一区二区在线观看| 不卡欧美aaaaa| 国产东北露脸精品视频| 国产激情偷乱视频一区二区三区| 老司机精品视频导航| 六月丁香婷婷色狠狠久久| 午夜精品久久久久久久99水蜜桃| 五月婷婷欧美视频| 五月婷婷欧美视频| 青青草一区二区三区| 久久精品国产99久久6| 国产精品综合二区| 成人免费视频国产在线观看| 99久久er热在这里只有精品15| 成人国产电影网| 欧美在线观看你懂的| 4438成人网| 国产亚洲精品bt天堂精选| 国产日韩欧美一区二区三区乱码 | 欧美影视一区在线| 3atv一区二区三区| 久久久另类综合| 自拍偷拍国产精品| 天天综合网 天天综合色| 国内欧美视频一区二区| 成人黄色综合网站| 欧美色视频在线| 日韩区在线观看| 国产精品久久看| 日韩精品亚洲一区| 国产黄色成人av| 欧美日韩在线播放三区| 欧美成人vps| 亚洲男人天堂av| 国内久久精品视频| 欧美日韩性生活| 欧美激情艳妇裸体舞| 午夜日韩在线观看| 波波电影院一区二区三区| 欧美三级韩国三级日本一级| 久久精品在线观看| 天天av天天翘天天综合网| 国产美女娇喘av呻吟久久| 色美美综合视频| 国产精品美女视频| 久久福利资源站| 欧美日韩一区二区三区免费看| 26uuu亚洲综合色欧美| 亚洲一卡二卡三卡四卡无卡久久| 久久97超碰国产精品超碰| 色88888久久久久久影院野外| 精品av综合导航| 午夜久久久久久久久| 91视视频在线观看入口直接观看www | 亚洲成精国产精品女| 国产成人在线视频网址| 51久久夜色精品国产麻豆| 亚洲免费在线电影| 国产99久久久精品| 精品毛片乱码1区2区3区| 一级特黄大欧美久久久| 丁香亚洲综合激情啪啪综合| 日韩欧美一二三| 午夜成人免费视频| 91成人免费在线视频| 中文字幕在线播放不卡一区| 国产麻豆精品久久一二三| 51精品秘密在线观看| 亚洲国产成人高清精品| 91社区在线播放| 亚洲欧美日韩国产一区二区三区 | 亚洲色图欧美在线| 成人国产精品免费网站| 中文字幕第一区二区| 国产美女久久久久| 久久久99精品免费观看| 激情综合网激情| www久久久久| 国产精品亚洲一区二区三区在线| 日韩一区二区免费电影| 蜜臀精品久久久久久蜜臀| 777精品伊人久久久久大香线蕉| 亚洲电影激情视频网站| 欧美伊人久久久久久午夜久久久久| 亚洲三级在线观看| 色偷偷成人一区二区三区91| 一区二区免费在线| 欧美精品久久99| 久久精品国产网站| 久久久国产精品麻豆| www.欧美色图| 一区二区三区成人| 91精品国产美女浴室洗澡无遮挡| 日本不卡一二三| 久久久亚洲国产美女国产盗摄 | 国产精品系列在线| 成人免费看片app下载| 亚洲自拍另类综合| 日韩片之四级片| 高清免费成人av| 亚洲精品福利视频网站| 欧美一级午夜免费电影| 国产成人av网站| 韩日精品视频一区| 国产精品色一区二区三区| 色婷婷精品大在线视频| 日本视频一区二区| 中文字幕免费一区| 欧美日韩一区二区三区免费看| 美女视频一区二区| 国产精品久久毛片av大全日韩| 在线看不卡av| 国产精品自拍网站| 亚洲国产精品久久人人爱蜜臀| 日韩欧美一区二区在线视频| 成人午夜激情影院| 视频一区在线视频| 国产婷婷精品av在线| 麻豆一区二区三区| 久久久91精品国产一区二区精品 | 一本色道综合亚洲| 日韩中文字幕不卡| 国产亚洲精品7777| 色视频成人在线观看免| 亚洲精品久久久蜜桃| 国产日韩精品一区二区浪潮av| 国产成人欧美日韩在线电影| 亚洲日本丝袜连裤袜办公室| 91精品欧美一区二区三区综合在| 免费成人深夜小野草| 亚洲国产成人av| 欧美国产激情一区二区三区蜜月| 在线免费精品视频| 国产mv日韩mv欧美| 亚洲二区视频在线| 亚洲免费在线观看视频| 久久久亚洲高清| 欧美剧情片在线观看| 99久久99久久久精品齐齐| 日韩黄色一级片| 亚洲精品免费一二三区| 2023国产精品自拍| 欧美日韩中文精品| 成人av在线观| 久久99精品一区二区三区| 亚洲不卡一区二区三区| 国产精品欧美一级免费| www国产精品av| 日韩视频一区二区在线观看| 69堂亚洲精品首页| 欧美在线免费观看视频| 91亚洲精品久久久蜜桃| 国产一区二区久久| 紧缚捆绑精品一区二区| 国内精品久久久久影院一蜜桃| 亚洲成av人片| 亚洲综合在线第一页| 精品少妇一区二区三区免费观看| 欧美人与性动xxxx| 色狠狠av一区二区三区| 99国产精品久久久久久久久久久| 日本欧美一区二区在线观看| 成人欧美一区二区三区视频网页| 久久精品一区八戒影视| 精品久久久久久久人人人人传媒 | 毛片一区二区三区| 婷婷夜色潮精品综合在线| 亚洲综合一区二区精品导航| 亚洲自拍偷拍九九九| 青青草国产成人99久久| 日日夜夜精品免费视频| 视频一区视频二区中文| 日本视频一区二区三区| 午夜精品一区在线观看| 激情五月播播久久久精品| 麻豆91在线看| 国产乱国产乱300精品| 韩国一区二区视频| 99久久婷婷国产精品综合| 99vv1com这只有精品| 91在线视频网址| 欧美专区在线观看一区| 精品乱码亚洲一区二区不卡| 欧美精品一区二区三区高清aⅴ | 国产日韩欧美综合在线| 久久久久久97三级| 亚洲伦理在线精品| 亚洲日本中文字幕区| 毛片av一区二区| 国产成人午夜精品影院观看视频| 大白屁股一区二区视频| 91一区二区三区在线观看| 欧美一卡2卡3卡4卡| 久久这里只有精品视频网| 国产精品妹子av| 偷拍一区二区三区| 成人app网站| 91.com在线观看| 国产人成一区二区三区影院|