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

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

?? skull_init.c

?? Linux設備驅動的經典教材, 該電子書是第三版,并附有全部配套代碼.
?? C
字號:
/* * skull.c -- sample typeless module. * * 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. * * BUGS: *   -it only runs on intel platforms. *   -readb() should be used (see short.c): skull doesn't work with 2.1 * *//* jc: cleaned up, but not yet run for anything */#include <linux/config.h>#include <linux/module.h>#include <linux/init.h>#include <linux/moduleparam.h>#include <linux/kernel.h> /* printk */#include <linux/ioport.h>#include <linux/errno.h>#include <asm/system.h> /* cli(), *_flags */#include <linux/mm.h> /* vremap (2.0) */#include <asm/io.h> /* ioremap *//* The region we look at. */#define ISA_REGION_BEGIN 0xA0000#define ISA_REGION_END   0x100000#define STEP 2048/* have three symbols to export */       void skull_fn1(void){}static void skull_fn2(void){}       int  skull_variable;EXPORT_SYMBOL (skull_fn1);EXPORT_SYMBOL (skull_fn2);EXPORT_SYMBOL (skull_variable);/* perform hardware autodetection */int skull_probe_hw(unsigned int port, unsigned int range){   /* do smart probing here */   return -1; /* not found  :-) */}/* perform hardware initalizazion */int skull_init_board(unsigned int port){  /* do smart initalization here */  return 0; /* done :-) */}/* detect the the device if the region is still free */static int skull_detect(unsigned int port, unsigned int range){    int err;    if ((err = check_region(port,range)) < 0) return err; /* busy */    if (skull_probe_hw(port,range) != 0) return -ENODEV;  /* not found */    request_region(port,range,"skull");                   /* "Can't fail" */    return 0;}/* * port ranges: the device can reside between * 0x280 and 0x300, in step of 0x10. It uses 0x10 ports. */#define SKULL_PORT_FLOOR 0x280#define SKULL_PORT_CEIL  0x300#define SKULL_PORT_RANGE  0x010/* * the following function performs autodetection, unless a specific * value was assigned by insmod to "skull_port_base" */static int skull_port_base=0; /* 0 forces autodetection */module_param(skull_port_base, int, 0);static int skull_find_hw(void) /* returns the # of devices */{    /* base is either the load-time value or the first trial */    int base = skull_port_base ? skull_port_base                              : SKULL_PORT_FLOOR;     int result = 0;    /* loop one time if value assigned, try them all if autodetecting */    do {	if (skull_detect(base, SKULL_PORT_RANGE) == 0) {	    skull_init_board(base);	    result++;	}	base += SKULL_PORT_RANGE; /* prepare for next trial */    }    while (skull_port_base == 0 && base < SKULL_PORT_CEIL);    return result;}int skull_init(void){    /*     * Print the isa region map, in blocks of 2K bytes.     * This is not the best code, as it prints too many lines,     * but it deserves to remain short to be included in the book.     * Note also that read() should be used instead of pointers.     */    unsigned char oldval, newval; /* values read from memory   */    unsigned long flags;          /* used to hold system flags */    unsigned long add, i;    void *base;        /* Use ioremap to get a handle on our region */    base = ioremap(ISA_REGION_BEGIN, ISA_REGION_END - ISA_REGION_BEGIN);    base -= ISA_REGION_BEGIN;  /* Do the offset once */        /* probe all the memory hole in 2KB steps */    for (add = ISA_REGION_BEGIN; add < ISA_REGION_END; add += STEP) {	/*	 * Check for an already allocated region.	 */	if (check_mem_region (add, 2048)) {		printk(KERN_INFO "%lx: Allocated\n", add);		continue;	}	/*	 * Read and write the beginning of the region and see what happens.	 */	save_flags(flags); 	cli();	oldval = readb (base + add);  /* Read a byte */	writeb (oldval^0xff, base + add);	mb();	newval = readb (base + add);	writeb (oldval, base + add);	restore_flags(flags);	if ((oldval^newval) == 0xff) {  /* we re-read our change: it's ram */	    printk(KERN_INFO "%lx: RAM\n", add);	    continue;	}	if ((oldval^newval) != 0) {  /* random bits changed: it's empty */	    printk(KERN_INFO "%lx: empty\n", add);	    continue;	}		/*	 * Expansion rom (executed at boot time by the bios)	 * has a signature where the first byt is 0x55, the second 0xaa,	 * and the third byte indicates the size of such rom	 */	if ( (oldval == 0x55) && (readb (base + add + 1) == 0xaa)) {	    int size = 512 * readb (base + add + 2);	    printk(KERN_INFO "%lx: Expansion ROM, %i bytes\n",                   add, size);	    add += (size & ~2048) - 2048; /* skip it */	    continue;	}		/*	 * If the tests above failed, we still don't know if it is ROM or	 * empty. Since empty memory can appear as 0x00, 0xff, or the low	 * address byte, we must probe multiple bytes: if at least one of	 * them is different from these three values, then this is rom	 * (though not boot rom).	 */	printk(KERN_INFO "%lx: ", add);	for (i=0; i<5; i++) {	    unsigned long radd = add + 57*(i+1);  /* a "random" value */	    unsigned char val = readb (base + radd);	    if (val && val != 0xFF && val != ((unsigned long) radd&0xFF))		break;	}    	printk("%s\n", i==5 ? "empty" : "ROM");    }    /*     * Find you hardware      */    skull_find_hw();    /*     * Always fail to load (or suceed).     */    return 0;}module_init(skull_init);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产中文字幕精品| 日本欧美一区二区三区| 久久久国产精华| 精品免费国产一区二区三区四区| 在线综合+亚洲+欧美中文字幕| 色综合天天综合色综合av| 97久久精品人人做人人爽 | 午夜欧美电影在线观看| 亚洲男人的天堂在线观看| 亚洲精品国产一区二区精华液| 亚洲视频精选在线| 亚洲免费观看高清在线观看| 亚洲一区二区三区在线播放| 亚洲第一狼人社区| 日韩综合小视频| 国产毛片一区二区| av中文字幕一区| 在线观看一区日韩| 欧美一区二区三区视频在线观看| 日韩欧美国产wwwww| 欧美精品一区二| 1024国产精品| 日本在线不卡一区| 九色综合狠狠综合久久| 国产mv日韩mv欧美| 在线视频中文字幕一区二区| 欧美一区二区三级| 欧美激情一区二区三区| 亚洲日本丝袜连裤袜办公室| 日韩精品一区第一页| 国产一区在线不卡| 色婷婷综合五月| 日韩欧美一二三四区| 国产精品入口麻豆九色| 亚洲国产综合在线| 国产一区在线观看视频| 91久久线看在观草草青青| 欧美sm美女调教| 有坂深雪av一区二区精品| 极品销魂美女一区二区三区| k8久久久一区二区三区| 777奇米四色成人影色区| 国产精品久久一卡二卡| 日本不卡123| 欧美午夜精品久久久久久孕妇| 精品成人a区在线观看| 亚洲精品ww久久久久久p站| 国产在线观看一区二区| 欧美人与性动xxxx| 国产精品的网站| 国产精品一区二区无线| 欧美精品 日韩| 亚洲精品一二三| 成人黄色在线看| 久久精品人人爽人人爽| 三级影片在线观看欧美日韩一区二区| 国产aⅴ精品一区二区三区色成熟| 欧美日韩国产经典色站一区二区三区| 国产精品国产三级国产普通话蜜臀| 美脚の诱脚舐め脚责91| 4438x成人网最大色成网站| 亚洲精品亚洲人成人网| 不卡一区在线观看| 久久亚洲一区二区三区明星换脸| 午夜欧美一区二区三区在线播放| 91福利在线导航| 亚洲你懂的在线视频| 97精品久久久久中文字幕| 国产婷婷色一区二区三区在线| 久久精品72免费观看| 日韩一区二区三区在线视频| 日精品一区二区| 欧美一区二区免费视频| 免费成人在线观看| 欧美日韩电影在线| 亚洲国产日韩a在线播放| 欧美亚一区二区| 亚洲高清免费观看| 欧美在线免费视屏| 亚洲资源在线观看| 欧美区一区二区三区| 亚洲一区二区三区四区在线观看 | 一区二区三区丝袜| 97久久人人超碰| 亚洲国产精品一区二区久久| 欧美网站一区二区| 日本欧美韩国一区三区| 欧美成va人片在线观看| 国产成a人无v码亚洲福利| 亚洲欧洲日产国码二区| 欧美做爰猛烈大尺度电影无法无天| 亚洲综合色自拍一区| 日韩一级片在线播放| 国产成人久久精品77777最新版本| 国产精品乱子久久久久| 欧美亚洲国产一区二区三区va| 亚洲一卡二卡三卡四卡无卡久久 | 欧洲国内综合视频| 丝袜亚洲另类欧美| 国产偷国产偷亚洲高清人白洁| 91视频免费播放| 视频一区在线播放| 国产欧美精品国产国产专区| 在线观看www91| 国产一区二区毛片| 亚洲在线成人精品| 久久免费电影网| 欧美午夜理伦三级在线观看| 久久99精品久久久| 一区二区视频免费在线观看| 日韩欧美一二三区| 色综合一个色综合亚洲| 久久成人免费网| 综合久久久久久| 欧美电视剧在线观看完整版| 91网站最新地址| 久久国产剧场电影| 一区二区三区.www| 久久久久综合网| 欧美精品在线视频| 91色综合久久久久婷婷| 激情成人午夜视频| 午夜伊人狠狠久久| 亚洲女与黑人做爰| 久久久综合网站| 欧美一级精品在线| 在线视频综合导航| 99re视频精品| 国产91清纯白嫩初高中在线观看| 视频一区在线播放| 一区二区激情视频| 中文字幕中文字幕一区二区| 久久五月婷婷丁香社区| 欧美日韩久久久一区| 9久草视频在线视频精品| 激情伊人五月天久久综合| 五月婷婷综合网| 香蕉成人伊视频在线观看| 亚洲精品久久久久久国产精华液| 国产精品视频观看| 久久久久久久久一| 久久综合九色综合欧美就去吻| 欧美日韩一级大片网址| av影院午夜一区| 99久久精品费精品国产一区二区| 激情文学综合网| 久久精品国产99国产| 久草热8精品视频在线观看| 日韩电影免费在线观看网站| 亚洲午夜视频在线观看| 性欧美疯狂xxxxbbbb| 青青草97国产精品免费观看无弹窗版| 亚洲高清免费观看高清完整版在线观看| 亚洲黄色尤物视频| 亚洲成人av一区二区三区| 亚洲国产精品嫩草影院| 亚洲va欧美va人人爽| 日韩中文欧美在线| 青娱乐精品视频| 国模冰冰炮一区二区| 国产精品77777竹菊影视小说| 国产成人自拍网| 色综合久久中文字幕| 欧美视频在线一区二区三区 | 亚洲宅男天堂在线观看无病毒 | 欧美一卡2卡三卡4卡5免费| 欧美高清性hdvideosex| 欧美www视频| 国产精品乱码久久久久久| 亚洲欧美日韩国产中文在线| 亚洲综合久久av| 日日夜夜免费精品| 国产美女精品人人做人人爽| 波多野结衣精品在线| 欧美色综合影院| 久久久亚洲欧洲日产国码αv| 国产精品第一页第二页第三页| 亚洲一区电影777| 精品一区二区国语对白| 91影视在线播放| 欧美一区二区二区| 国产精品国产成人国产三级 | 久久众筹精品私拍模特| 中文字幕欧美一| 天堂va蜜桃一区二区三区漫画版| 久久国产福利国产秒拍| 91视视频在线观看入口直接观看www | 亚洲午夜电影网| 国产一区二区三区黄视频| 色综合天天综合狠狠| 日韩一区二区三区四区五区六区| 久久久国产午夜精品| 日韩码欧中文字| 久久精品久久久精品美女| 一本大道久久a久久综合| 欧美变态凌虐bdsm| 一区二区三区.www| 成人妖精视频yjsp地址| 日韩一区二区三区三四区视频在线观看| 国产夜色精品一区二区av|