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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? short.c

?? LINUX設(shè)備驅(qū)動(dòng)2源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
    short_head += sprintf((char *)short_head,"bh after %6i\n",savecount);    if (short_head == short_buffer + PAGE_SIZE)        short_head = short_buffer; /* wrap */    /*     * Then, write the time values. Write exactly 16 bytes at a time,     * so it aligns with PAGE_SIZE     */    do {        short_head += sprintf((char *)short_head,"%08u.%06u\n",                              (int)(tv_tail->tv_sec % 100000000),                              (int)(tv_tail->tv_usec));        if (short_head == short_buffer + PAGE_SIZE)            short_head = short_buffer; /* wrap */                tv_tail++;        if (tv_tail == (tv_data + NR_TIMEVAL) )             tv_tail = tv_data; /* wrap */            } while (tv_tail != tv_head);    wake_up_interruptible(&short_queue); /* awake any reading process */}/* * use two implementations: before version 1.3.70 you couldn't * re-enqueue tasks, and "dev_id" was missing. I like re-enqueueing, * so I'd better keep the modern version clean */#if LINUX_VERSION_CODE < VERSION_CODE(1,3,70) /* old */void short_bh_interrupt(int irq, struct pt_regs *regs){    do_gettimeofday(tv_head);    tv_head++;    if (tv_head == (tv_data + NR_TIMEVAL) )         tv_head = tv_data; /* wrap */    /* Queue the bh. Don't re-enqueue */    if (!short_bh_count)        queue_task_irq_off(&short_task, &tq_immediate);    mark_bh(IMMEDIATE_BH);    short_bh_count++; /* record that an interrupt arrived */}#else /* recent */void short_bh_interrupt(int irq, void *dev_id, struct pt_regs *regs){    do_gettimeofday(tv_head);    tv_head++;    if (tv_head == (tv_data + NR_TIMEVAL) )         tv_head = tv_data; /* wrap */    /* Queue the bh. Don't care for multiple enqueueing */    queue_task_irq_off(&short_task, &tq_immediate);    mark_bh(IMMEDIATE_BH);    short_bh_count++; /* record that an interrupt arrived */}#endif#if LINUX_VERSION_CODE < VERSION_CODE(1,3,70)void short_sh_interrupt(int irq, struct pt_regs *regs){    void *dev_id = NULL;#elsevoid short_sh_interrupt(int irq, void *dev_id, struct pt_regs *regs){#endif    int value;    struct timeval tv;    /* If it wasn't short, return immediately */    value = inb(short_base);    if (!(value & 0x80)) return;            /* clear the interrupting bit */    outb(value & 0x7F, short_base);    /* the rest is unchanged */    do_gettimeofday(&tv);    short_head += sprintf((char *)short_head,"%08u.%06u\n",                          (int)(tv.tv_sec % 100000000), (int)(tv.tv_usec));    if (short_head == short_buffer + PAGE_SIZE)        short_head = short_buffer; /* wrap */    wake_up_interruptible(&short_queue); /* awake any reading process */}#if LINUX_VERSION_CODE >= VERSION_CODE(1,3,30)void short_kernelprobe(void){    int count = 0;    do {        unsigned long mask;        mask = probe_irq_on();        outb_p(0x10,short_base+2); /* enable reporting */        outb_p(0x00,short_base);   /* clear the bit */        outb_p(0xFF,short_base);   /* set the bit: interrupt! */        outb_p(0x00,short_base+2); /* disable reporting */        short_irq = probe_irq_off(mask);        if (short_irq == 0) { /* none of them? */            printk(KERN_INFO "short: no irq reported by probe\n");            short_irq = -1;        }        /*         * if more than one line has been activated, the result is         * negative. We should service the interrupt (no need for lpt port)         * and loop over again. Loop at most five times, then give up         */    } while (short_irq < 0 && count++ < 5);    if (short_irq < 0)        printk("short: probe failed %i times, giving up\n", count);}#elsevoid short_kernelprobe(void){    printk(KERN_WARNING "short: kernel probing not available before 1.3.30\n");}#endif /* 1.3.30 */#if LINUX_VERSION_CODE < VERSION_CODE(1,3,70)void short_probing(int irq, struct pt_regs *regs)#elsevoid short_probing(int irq, void *dev_id, struct pt_regs *regs)#endif{    if (short_irq == 0) short_irq = irq;    /* found */    if (short_irq != irq) short_irq = -irq; /* ambiguous */}void short_selfprobe(void){    int trials[] = {3, 5, 7, 9, 0};    int tried[]  = {0, 0, 0, 0, 0};    int i, count = 0;     /*      * install the probing handler for all possible lines. Remember      * the result (0 for success, or -EBUSY) in order to only free      * what has been acquired      */    for (i=0; trials[i]; i++)        tried[i] = request_irq(trials[i], short_probing,                               SA_INTERRUPT, "short probe", NULL);    do {        short_irq = 0; /* none got, yet */        outb_p(0x10,short_base+2); /* enable */        outb_p(0x00,short_base);        outb_p(0xFF,short_base); /* toggle the bit */        outb_p(0x10,short_base+2); /* disable */        /* the value has been set by the handler */        if (short_irq == 0) { /* none of them? */            printk(KERN_INFO "short: no irq reported by probe\n");        }        /*         * If more than one line has been activated, the result is         * negative. We should service the interrupt (but the lpt port         * doesn't need it) and loop over again. Do it at most 5 times         */    } while (short_irq <=0 && count++ < 5);    /* end of loop, uninstall the handler */    for (i=0; trials[i]; i++)        if (tried[i] == 0)            free_irq(trials[i], NULL);    if (short_irq < 0)        printk("short: probe failed %i times, giving up\n", count);}int init_module(void){    int result = check_region(short_base,4);    if (result) {        printk(KERN_INFO "short: can't get I/O address 0x%x\n",short_base);        return result;    }    request_region(short_base,4,"short");    result = register_chrdev(short_major, "short", &short_fops);    if (result < 0) {        printk(KERN_INFO "short: can't get major number\n");        release_region(short_base,4);        return result;    }    if (short_major == 0) short_major = result; /* dynamic */    short_buffer = __get_free_page(GFP_KERNEL); /* never fails */    short_head = short_tail = short_buffer;    /*     * Fill the short_task structure, used for the bottom half handler     */    short_task.routine = short_bottom_half;    short_task.data = NULL; /* unused */    /*     * Now we deal with the interrupt: either kernel-based     * autodetection, DIY detection or default number     */    if (short_irq < 0 && probe == 1)        short_kernelprobe();    if (short_irq < 0 && probe == 2)        short_selfprobe();    if (short_irq < 0) /* not yet specified: force the default on */        switch(short_base) {          case 0x378: short_irq = 7; break;          case 0x278: short_irq = 2; break;          case 0x3bc: short_irq = 5; break;        }    /*     * If shared has been specified, installed the shared handler     * instead of the normal one. Do it first, before a -EBUSY will     * force short_irq to -1.     */    if (short_irq >= 0 && share > 0) {        free_irq(short_irq,NULL);        result = request_irq(short_irq, short_sh_interrupt,                             SA_SHIRQ | SA_INTERRUPT,"short",                             short_sh_interrupt);        if (result) {            printk(KERN_INFO "short: can't get assigned irq %i\n", short_irq);            short_irq = -1;        }        else { /* actually enable it -- assume this *is* a parallel port */            outb(0x10,short_base+2);        }        return 0; /* the rest of the function only installs handlers */    }    if (short_irq >= 0) {        result = request_irq(short_irq, short_interrupt,                             SA_INTERRUPT, "short", NULL);        if (result) {            printk(KERN_INFO "short: can't get assigned irq %i\n",                   short_irq);            short_irq = -1;        }        else { /* actually enable it -- assume this *is* a parallel port */            outb(0x10,short_base+2);        }    }    /*     * Ok, now change the interrupt handler if using top/bottom halves     * has been requested     */    if (short_irq >= 0 && bh > 0) {        free_irq(short_irq,NULL);        result = request_irq(short_irq, short_bh_interrupt,                             SA_INTERRUPT,"short-bh", NULL);        if (result) {            printk(KERN_INFO "short-bh: can't get assigned irq %i\n",                   short_irq);            short_irq = -1;        }    }    return 0;}void cleanup_module(void){    if (short_irq >= 0) {        if (!share) free_irq(short_irq, NULL);        else free_irq(short_irq, short_sh_interrupt);    }            unregister_chrdev(short_major, "short");    release_region(short_base,4);    if (short_buffer) free_page(short_buffer);}#endif /* __sparc__ */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91网站黄www| 美女爽到高潮91| 94-欧美-setu| 亚洲精品日韩综合观看成人91| www.在线欧美| 亚洲视频图片小说| 欧美在线三级电影| 日韩一区精品字幕| 欧美一区二区三区视频| 日韩在线一区二区| 精品福利二区三区| 成人一道本在线| 一区二区三区中文字幕| 欧美日韩国产在线观看| 蜜臀av性久久久久蜜臀av麻豆| 26uuu久久天堂性欧美| 精品系列免费在线观看| 中文字幕中文字幕一区二区 | 美女视频一区在线观看| 日韩一区二区三区四区五区六区 | 亚洲福利视频一区| 3d动漫精品啪啪1区2区免费| 国产原创一区二区三区| 最好看的中文字幕久久| 欧美日韩国产精选| 成人性视频免费网站| 亚洲精品一二三四区| 91麻豆精品国产无毒不卡在线观看| 精一区二区三区| 亚洲天堂2016| 日韩一区二区三区在线| av成人动漫在线观看| 日韩福利电影在线观看| 国产日韩欧美综合一区| 在线中文字幕一区二区| 久久国产综合精品| 亚洲精品亚洲人成人网在线播放| 精品国产免费视频| 色播五月激情综合网| 国内精品在线播放| 亚洲一区免费观看| 国产精品欧美一级免费| 7777精品伊人久久久大香线蕉的| 白白色 亚洲乱淫| 免费精品视频在线| 亚洲精品高清视频在线观看| 久久久久久久久久久久久夜| 欧美区一区二区三区| 成人精品视频网站| 久久精品免费观看| 亚洲精品亚洲人成人网在线播放| 欧美xfplay| 91精品国产aⅴ一区二区| 99精品久久久久久| 国产综合色精品一区二区三区| 午夜精品久久久久| 中文字幕一区二区三区四区| 精品国产三级a在线观看| 欧美日韩精品欧美日韩精品一 | 一卡二卡三卡日韩欧美| 欧美国产精品v| 2020国产成人综合网| 欧美日韩激情在线| 色婷婷综合中文久久一本| 成人午夜免费视频| 国产盗摄女厕一区二区三区| 黄色日韩网站视频| 久久精品国产77777蜜臀| 国产精品日韩成人| 美国十次综合导航| 日韩免费观看高清完整版在线观看 | 久久不见久久见中文字幕免费| 日本一区二区三区国色天香| 狠狠色综合播放一区二区| 欧美一区二区大片| 免费xxxx性欧美18vr| 7777精品久久久大香线蕉| 天天影视色香欲综合网老头| 欧美群妇大交群中文字幕| 亚洲成a人v欧美综合天堂下载 | 国产精品美女久久久久久久久 | 中文字幕一区二区三区av| 国产成人在线影院| 久久精品欧美一区二区三区不卡 | 中文字幕精品综合| 懂色av中文一区二区三区| 国产肉丝袜一区二区| 国产suv精品一区二区883| 奇米色一区二区三区四区| 亚洲女同一区二区| 亚洲午夜免费视频| 欧美亚洲国产怡红院影院| 亚洲线精品一区二区三区| 欧美日韩一区二区在线观看| 亚洲线精品一区二区三区| 欧美日本在线播放| 日本色综合中文字幕| 精品国产亚洲在线| 成人午夜激情影院| 国产精品盗摄一区二区三区| 日本高清不卡一区| 三级在线观看一区二区 | 国产一区二区三区观看| 国产精品一二三| 不卡电影免费在线播放一区| 91免费精品国自产拍在线不卡| 欧美亚日韩国产aⅴ精品中极品| 91精品国产一区二区三区香蕉| 久久影视一区二区| 中文字幕一区二区三区精华液 | 亚洲男帅同性gay1069| 亚洲国产成人av网| 精品一区免费av| 成人黄色在线看| 色综合欧美在线视频区| 欧美一区中文字幕| 中文字幕第一区| 亚洲综合男人的天堂| 美女一区二区三区在线观看| 不卡av免费在线观看| 在线播放中文字幕一区| 久久久久久免费网| 亚洲一区二区三区四区五区中文| 激情综合五月天| 色天使久久综合网天天| 精品欧美一区二区在线观看| 亚洲欧美日韩综合aⅴ视频| 麻豆精品一区二区三区| 99久久婷婷国产综合精品电影| 日韩欧美国产综合在线一区二区三区| 中文字幕一区二区视频| 视频一区二区三区中文字幕| 91网站在线观看视频| 久久品道一品道久久精品| 亚洲精品国产精华液| 国产九色sp调教91| 欧美一区二区免费| 亚洲精品视频免费观看| 国产老女人精品毛片久久| 欧美日韩精品福利| 亚洲丝袜另类动漫二区| 国产精品一区免费视频| 欧美电影在哪看比较好| 日韩伦理av电影| 国产精品香蕉一区二区三区| 日韩一区二区三区在线| 亚洲国产成人91porn| 91最新地址在线播放| 国产亚洲精品福利| 久久国内精品自在自线400部| 欧美高清性hdvideosex| 亚洲猫色日本管| 大胆欧美人体老妇| 久久精品无码一区二区三区| 美女网站一区二区| 91精品国产色综合久久不卡蜜臀 | 国产日韩欧美精品电影三级在线| 日韩主播视频在线| 欧美色综合天天久久综合精品| 中文字幕欧美一| 成人sese在线| 日本一区二区久久| 国产成人免费视频| 国产亲近乱来精品视频| 国产精品99久久久久久有的能看| 精品国产青草久久久久福利| 久久激情综合网| 2019国产精品| 国产精品一区二区久久不卡| 26uuu久久综合| 国产一区二区美女| 久久久久久久久久久99999| 国产综合色视频| 国产婷婷色一区二区三区| 国产成人自拍网| 国产精品久久久久影院色老大| 99久久婷婷国产| 亚洲美女偷拍久久| 欧美日韩日日摸| 麻豆极品一区二区三区| 精品国产乱码久久久久久久| 国产乱色国产精品免费视频| 中文字幕免费观看一区| 99视频国产精品| 亚洲一区二区综合| 日韩一级片在线播放| 精彩视频一区二区| 国产欧美日韩在线| 99热在这里有精品免费| 亚洲一区二区成人在线观看| 欧美福利一区二区| 国产精品亚洲一区二区三区妖精 | 日韩美女天天操| 国产一区二区看久久| 亚洲国产精品二十页| av综合在线播放| 午夜精品久久久久久| 久久久久综合网| 色婷婷综合在线| 蜜臂av日日欢夜夜爽一区|