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

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

?? skull_init.c

?? linux device driver源碼
?? 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 * */#ifndef __KERNEL__#  define __KERNEL__#endif#ifndef MODULE#  define MODULE#endif#ifndef EXPORT_SYMTAB#  define EXPORT_SYMTAB#endif#include <linux/config.h>#include <linux/module.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 */#include "sysdep.h"/* 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;#ifndef __USE_OLD_SYMTAB__EXPORT_SYMBOL (skull_fn1);EXPORT_SYMBOL (skull_fn2);EXPORT_SYMBOL (skull_variable);#endifstatic int skull_register(void) /* and export them */{#ifdef __USE_OLD_SYMTAB__  static struct symbol_table skull_syms = {#include <linux/symtab_begin.h>        X(skull_fn1),        X(skull_fn2),        X(skull_variable),#include <linux/symtab_end.h>	};  register_symtab(&skull_syms);#endif   /* __USE_OLD_SYMTAB__ */  return 0;}/* 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_PARM (skull_port_base, "i");MODULE_PARM_DESC (skull_port_base, "Base I/O port for skull");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).     */    skull_register(); /* register your symbol table */    return 0;}module_init(skull_init);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区高清| 丝袜亚洲另类欧美综合| 国产精品一区三区| 2014亚洲片线观看视频免费| 国产精品伊人色| 亚洲欧美在线视频| 在线区一区二视频| 美女在线一区二区| 欧美激情一区二区三区在线| 91官网在线免费观看| 99久久精品费精品国产一区二区| 亚洲另类春色校园小说| 欧美日本一区二区三区四区| 国内精品伊人久久久久影院对白| 久久精品综合网| 欧洲国内综合视频| 韩国v欧美v日本v亚洲v| 亚洲欧美国产77777| 91精品国产品国语在线不卡| 国产综合色产在线精品| 亚洲美女偷拍久久| 欧美一区二区在线免费播放| 丰满亚洲少妇av| 亚洲一区二区在线观看视频 | 亚洲天堂久久久久久久| 欧美片在线播放| 国产91精品一区二区麻豆网站 | 欧美精品久久一区二区三区| 国产麻豆视频精品| 亚洲韩国精品一区| 中文字幕高清不卡| 91麻豆精品国产91久久久久久久久 | 蓝色福利精品导航| 亚洲精品五月天| 欧美岛国在线观看| 在线观看国产精品网站| 国产一区在线精品| 日韩va欧美va亚洲va久久| 国产精品区一区二区三区| 日韩欧美亚洲国产另类| 日本久久一区二区| 欧美一区二区在线不卡| 91片黄在线观看| 国产成人av福利| 蜜桃久久久久久| 午夜欧美在线一二页| 亚洲人成伊人成综合网小说| 精品国精品国产| 欧美男女性生活在线直播观看| 91小视频在线免费看| 国产精品91xxx| 久久国产人妖系列| 日韩精品免费视频人成| 亚洲国产中文字幕| 亚洲欧美成人一区二区三区| 久久理论电影网| 欧美tickle裸体挠脚心vk| 欧美二区在线观看| 欧美色视频在线| 91色综合久久久久婷婷| 成人av资源网站| 成人性色生活片| 国产麻豆精品95视频| 另类专区欧美蜜桃臀第一页| 日韩经典一区二区| 偷拍自拍另类欧美| 日韩综合在线视频| 天堂久久久久va久久久久| 午夜精品久久久久久不卡8050| 亚洲免费大片在线观看| 亚洲视频精选在线| 一区二区不卡在线视频 午夜欧美不卡在 | 精品国精品自拍自在线| 日韩精品免费视频人成| 亚洲国产裸拍裸体视频在线观看乱了| 中文字幕中文字幕在线一区| 国产精品入口麻豆原神| 亚洲私人黄色宅男| 亚洲精品国产无天堂网2021| 亚洲精品精品亚洲| 午夜伊人狠狠久久| 免费人成在线不卡| 国产一区二区三区四区五区美女| 国产在线精品一区二区三区不卡| 久久精品二区亚洲w码| 国产在线一区观看| youjizz国产精品| 91福利视频网站| 欧美一区二区三区视频在线观看| 日韩午夜激情电影| 国产视频一区二区三区在线观看| 国产精品国产自产拍高清av| 一区二区三区久久久| 五月天精品一区二区三区| 精品一区二区三区在线观看国产| 国产精品一区二区免费不卡| av网站免费线看精品| 欧美最猛性xxxxx直播| 欧美一区二区三区视频免费| 久久久国产一区二区三区四区小说| 国产精品国产三级国产普通话99| 一区二区在线观看视频| 欧美嫩在线观看| 亚洲精品一区二区三区99| 日韩伦理av电影| 视频一区中文字幕| 国产不卡视频一区| 欧美撒尿777hd撒尿| www欧美成人18+| 亚洲一区二区三区四区不卡| 韩国欧美国产1区| 日本高清无吗v一区| 26uuu国产一区二区三区| 亚洲欧美另类图片小说| 日韩av一级电影| 91小视频免费观看| 精品免费国产一区二区三区四区| 亚洲欧洲韩国日本视频| 麻豆精品视频在线| 91网上在线视频| 精品国产乱码久久久久久久 | 亚洲6080在线| 丁香一区二区三区| 91精品国产高清一区二区三区蜜臀 | 日韩国产一区二| 9久草视频在线视频精品| 日韩一区二区影院| 亚洲激情校园春色| 国产不卡视频在线观看| 日韩丝袜美女视频| 亚洲激情在线播放| 成人影视亚洲图片在线| 日韩欧美一级特黄在线播放| 怡红院av一区二区三区| 成人黄色电影在线| 久久婷婷国产综合国色天香| 亚洲小说春色综合另类电影| 懂色av中文一区二区三区| 日韩一级大片在线| 午夜影院在线观看欧美| 色久综合一二码| 国产精品久久久久桃色tv| 激情六月婷婷综合| 欧美电影在线免费观看| 樱花影视一区二区| 97久久超碰国产精品| 中文字幕乱码久久午夜不卡| 九九精品一区二区| 日韩一区二区三区四区| 午夜成人免费视频| 欧美日韩免费一区二区三区| 亚洲人成亚洲人成在线观看图片 | 欧美巨大另类极品videosbest | 亚洲第一狼人社区| 色综合咪咪久久| 亚洲私人影院在线观看| 北岛玲一区二区三区四区| 国产精品美女www爽爽爽| 国产成人精品网址| 欧美国产在线观看| 成人午夜视频在线观看| 中文字幕不卡在线| 成人av影视在线观看| 中文字幕日本不卡| 色综合色综合色综合色综合色综合| 国产精品欧美久久久久一区二区| 国产成人av一区二区三区在线| 国产日本欧洲亚洲| 成人国产免费视频| 亚洲人成网站色在线观看| 在线视频一区二区三区| 亚洲国产综合在线| 6080国产精品一区二区| 麻豆一区二区在线| 精品国产凹凸成av人导航| 激情伊人五月天久久综合| 2020国产成人综合网| 成人激情午夜影院| 亚洲你懂的在线视频| 欧美亚州韩日在线看免费版国语版| 亚洲五码中文字幕| 日韩欧美国产麻豆| 国产成人免费视频一区| 亚洲欧洲日韩综合一区二区| 91黄色免费观看| 青青青伊人色综合久久| 精品国产凹凸成av人网站| 不卡视频在线观看| 亚洲国产成人精品视频| 日韩三级在线免费观看| 国产成人午夜片在线观看高清观看| 国产精品福利在线播放| 欧美日韩免费观看一区三区| 国模一区二区三区白浆| 国产精品毛片久久久久久| 欧美猛男gaygay网站| 国产精品一区二区不卡| 亚洲裸体xxx| 日韩欧美自拍偷拍| 99综合影院在线|