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

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

?? epia.c

?? 自己根據lkd和情境分析
?? C
字號:
/*         epia.c    (c) 1997-8  Grant R. Guenther <grant@torque.net>                              Under the terms of the GNU General Public License.        epia.c is a low-level protocol driver for Shuttle Technologies 	EPIA parallel to IDE adapter chip.  This device is now obsolete	and has been replaced with the EPAT chip, which is supported	by epat.c, however, some devices based on EPIA are still	available.*//* Changes:        1.01    GRG 1998.05.06 init_proto, release_proto	1.02    GRG 1998.06.17 support older versions of EPIA*/#define EPIA_VERSION      "1.02"#include <linux/module.h>#include <linux/delay.h>#include <linux/kernel.h>#include <linux/types.h>#include <linux/wait.h>#include <asm/io.h>#include "paride.h"/* mode codes:  0  nybble reads on port 1, 8-bit writes                1  5/3 reads on ports 1 & 2, 8-bit writes                2  8-bit reads and writes                3  8-bit EPP mode		4  16-bit EPP		5  32-bit EPP*/#define j44(a,b)                (((a>>4)&0x0f)+(b&0xf0))#define j53(a,b)                (((a>>3)&0x1f)+((b<<4)&0xe0))/* cont =  0   IDE register file   cont =  1   IDE control registers*/static int cont_map[2] = { 0, 0x80 };static int epia_read_regr( PIA *pi, int cont, int regr ){       int     a, b, r;	regr += cont_map[cont];        switch (pi->mode)  {        case 0: r = regr^0x39;                w0(r); w2(1); w2(3); w0(r);                a = r1(); w2(1); b = r1(); w2(4);                return j44(a,b);        case 1: r = regr^0x31;                w0(r); w2(1); w0(r&0x37);                 w2(3); w2(5); w0(r|0xf0);                a = r1(); b = r2(); w2(4);                return j53(a,b);        case 2: r = regr^0x29;                w0(r); w2(1); w2(0X21); w2(0x23);                 a = r0(); w2(4);                return a;	case 3:	case 4:        case 5: w3(regr); w2(0x24); a = r4(); w2(4);                return a;        }        return -1;}       static void epia_write_regr( PIA *pi, int cont, int regr, int val){       int  r;	regr += cont_map[cont];        switch (pi->mode)  {        case 0:        case 1:        case 2: r = regr^0x19;                w0(r); w2(1); w0(val); w2(3); w2(4);                break;	case 3:	case 4:        case 5: r = regr^0x40;                w3(r); w4(val); w2(4);                break;        }}#define WR(r,v)         epia_write_regr(pi,0,r,v)#define RR(r)           (epia_read_regr(pi,0,r))/* The use of register 0x84 is entirely unclear - it seems to control   some EPP counters ...  currently we know about 3 different block   sizes:  the standard 512 byte reads and writes, 12 byte writes and    2048 byte reads (the last two being used in the CDrom drivers.*/static void epia_connect ( PIA *pi  ){       pi->saved_r0 = r0();        pi->saved_r2 = r2();        w2(4); w0(0xa0); w0(0x50); w0(0xc0); w0(0x30); w0(0xa0); w0(0);        w2(1); w2(4);        if (pi->mode >= 3) {                 w0(0xa); w2(1); w2(4); w0(0x82); w2(4); w2(0xc); w2(4);                w2(0x24); w2(0x26); w2(4);        }        WR(0x86,8);  }static void epia_disconnect ( PIA *pi ){       /* WR(0x84,0x10); */        w0(pi->saved_r0);        w2(1); w2(4);        w0(pi->saved_r0);        w2(pi->saved_r2);} static void epia_read_block( PIA *pi, char * buf, int count ){       int     k, ph, a, b;        switch (pi->mode) {        case 0: w0(0x81); w2(1); w2(3); w0(0xc1);                ph = 1;                for (k=0;k<count;k++) {                        w2(2+ph); a = r1();                        w2(4+ph); b = r1();                        buf[k] = j44(a,b);                        ph = 1 - ph;                }                 w0(0); w2(4);                break;        case 1: w0(0x91); w2(1); w0(0x10); w2(3);                 w0(0x51); w2(5); w0(0xd1);                 ph = 1;                for (k=0;k<count;k++) {                        w2(4+ph);                        a = r1(); b = r2();                        buf[k] = j53(a,b);                        ph = 1 - ph;                }                w0(0); w2(4);                break;        case 2: w0(0x89); w2(1); w2(0x23); w2(0x21);                 ph = 1;                for (k=0;k<count;k++) {                        w2(0x24+ph);                        buf[k] = r0();                        ph = 1 - ph;                }                w2(6); w2(4);                break;        case 3: if (count > 512) WR(0x84,3);		w3(0); w2(0x24);                for (k=0;k<count;k++) buf[k] = r4();                w2(4); WR(0x84,0);                break;        case 4: if (count > 512) WR(0x84,3);		w3(0); w2(0x24);		for (k=0;k<count/2;k++) ((u16 *)buf)[k] = r4w();                w2(4); WR(0x84,0);                break;        case 5: if (count > 512) WR(0x84,3);		w3(0); w2(0x24);                for (k=0;k<count/4;k++) ((u32 *)buf)[k] = r4l();                w2(4); WR(0x84,0);                break;        }}static void epia_write_block( PIA *pi, char * buf, int count ){       int     ph, k, last, d;        switch (pi->mode) {        case 0:        case 1:        case 2: w0(0xa1); w2(1); w2(3); w2(1); w2(5);                ph = 0;  last = 0x8000;                for (k=0;k<count;k++) {                        d = buf[k];                        if (d != last) { last = d; w0(d); }                        w2(4+ph);                        ph = 1 - ph;                }                w2(7); w2(4);                break;        case 3: if (count < 512) WR(0x84,1);		w3(0x40);                for (k=0;k<count;k++) w4(buf[k]);		if (count < 512) WR(0x84,0);                break;        case 4: if (count < 512) WR(0x84,1);		w3(0x40);                for (k=0;k<count/2;k++) w4w(((u16 *)buf)[k]);		if (count < 512) WR(0x84,0);                break;        case 5: if (count < 512) WR(0x84,1);		w3(0x40);                for (k=0;k<count/4;k++) w4l(((u32 *)buf)[k]);		if (count < 512) WR(0x84,0);                break;        }}static int epia_test_proto( PIA *pi, char * scratch, int verbose ){       int     j, k, f;	int	e[2] = {0,0};        epia_connect(pi);        for (j=0;j<2;j++) {            WR(6,0xa0+j*0x10);            for (k=0;k<256;k++) {                WR(2,k^0xaa);                WR(3,k^0x55);                if (RR(2) != (k^0xaa)) e[j]++;                }	    WR(2,1); WR(3,1);            }        epia_disconnect(pi);        f = 0;        epia_connect(pi);        WR(0x84,8);        epia_read_block(pi,scratch,512);        for (k=0;k<256;k++) {            if ((scratch[2*k] & 0xff) != ((k+1) & 0xff)) f++;            if ((scratch[2*k+1] & 0xff) != ((-2-k) & 0xff)) f++;        }        WR(0x84,0);        epia_disconnect(pi);        if (verbose)  {            printk("%s: epia: port 0x%x, mode %d, test=(%d,%d,%d)\n",                   pi->device,pi->port,pi->mode,e[0],e[1],f);        }                return (e[0] && e[1]) || f;}static void epia_log_adapter( PIA *pi, char * scratch, int verbose ){       char    *mode_string[6] = {"4-bit","5/3","8-bit",				   "EPP-8","EPP-16","EPP-32"};        printk("%s: epia %s, Shuttle EPIA at 0x%x, ",                pi->device,EPIA_VERSION,pi->port);        printk("mode %d (%s), delay %d\n",pi->mode,		mode_string[pi->mode],pi->delay);}static void epia_init_proto( PIA *pi){       MOD_INC_USE_COUNT;}static void epia_release_proto( PIA *pi){       MOD_DEC_USE_COUNT;}struct pi_protocol epia = {"epia",0,6,3,1,1,                           epia_write_regr,                           epia_read_regr,                           epia_write_block,                           epia_read_block,                           epia_connect,                           epia_disconnect,                           0,                           0,                           epia_test_proto,                           epia_log_adapter,                           epia_init_proto,                           epia_release_proto                          };#ifdef MODULEint     init_module(void){       return pi_register( &epia ) - 1;}void    cleanup_module(void){       pi_unregister( &epia );}#endif/* end of epia.c */MODULE_LICENSE("GPL");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品少妇一区二区三区日产乱码| 久草在线在线精品观看| 91在线精品一区二区三区| 亚洲综合色噜噜狠狠| 日韩欧美一区二区在线视频| 99久久综合国产精品| 福利一区二区在线观看| 水野朝阳av一区二区三区| 亚洲欧美另类久久久精品2019| 日韩一卡二卡三卡国产欧美| 欧美三级中文字幕在线观看| 成人综合婷婷国产精品久久 | 91在线国内视频| 亚洲免费观看在线视频| 国产情人综合久久777777| 欧美男女性生活在线直播观看| 色综合久久久网| 91麻豆精东视频| 色香蕉成人二区免费| 91免费观看视频在线| 午夜一区二区三区在线观看| 亚洲欧美激情插 | 欧美videos大乳护士334| 欧美日韩一区二区三区四区| 欧美久久一二三四区| 在线观看欧美日本| 日韩精品一区二区三区四区| 日韩欧美国产综合| 国产精品欧美经典| 91精品国产入口| 亚洲国产精品传媒在线观看| 中文字幕综合网| 蜜臀av性久久久久av蜜臀妖精| 国产精品中文字幕日韩精品| 日韩中文字幕亚洲一区二区va在线| 日韩视频一区二区在线观看| 国产亚洲成aⅴ人片在线观看| 亚洲欧美影音先锋| 免费一级片91| 国产在线精品一区二区| av高清不卡在线| 久久午夜老司机| 亚洲伦理在线免费看| 欧美亚一区二区| 另类小说综合欧美亚洲| 久久精品一区二区三区不卡| 不卡的电影网站| 日韩精彩视频在线观看| 国产亚洲成aⅴ人片在线观看| www.亚洲在线| 亚洲国产精品尤物yw在线观看| 欧美视频在线不卡| 国产精品亚洲午夜一区二区三区 | 日本人妖一区二区| 日本一区二区在线不卡| 欧美日韩三级一区| 99综合影院在线| 日韩av一级电影| 久久精品夜夜夜夜久久| 日本黄色一区二区| 成人免费视频caoporn| 欧美aaa在线| 亚洲乱码国产乱码精品精可以看 | 久久免费偷拍视频| 欧美一区二区在线免费观看| 成人性生交大片免费看视频在线 | 欧美哺乳videos| 欧美日韩性生活| 日韩一区二区精品葵司在线 | 欧美老肥妇做.爰bbww| 国产黄色精品视频| 韩国女主播成人在线| 久久精品国产精品亚洲红杏| 日韩电影免费在线看| 奇米影视一区二区三区| 奇米综合一区二区三区精品视频 | 国产成人精品亚洲日本在线桃色| 专区另类欧美日韩| 国产精品欧美久久久久一区二区| 91麻豆精品国产91久久久久| 91精品一区二区三区久久久久久| 777奇米成人网| 久久久99久久| 一区二区三区在线免费观看| 五月婷婷综合在线| 精品亚洲成a人在线观看| 国产中文一区二区三区| 91福利小视频| 欧美变态口味重另类| 亚洲欧美日韩中文播放| 日本不卡视频在线观看| 国模冰冰炮一区二区| 91蜜桃免费观看视频| 欧美电影免费观看高清完整版在线| 久久蜜臀中文字幕| 污片在线观看一区二区| 成人精品在线视频观看| 日韩一区二区三区av| 综合久久久久久| 成人激情视频网站| 久久久91精品国产一区二区三区| 亚洲国产三级在线| 91丝袜国产在线播放| 国产欧美日韩综合| 日本不卡一区二区| 欧美亚洲一区二区在线观看| 中文字幕av一区二区三区| 精品一区二区在线看| 精品国产一区二区亚洲人成毛片| 亚洲成人动漫在线观看| 精品国产制服丝袜高跟| 奇米影视一区二区三区小说| 欧美视频你懂的| 肉肉av福利一精品导航| 欧美一区二区三区视频在线观看| 日韩精品免费专区| 欧美一区二区三区免费观看视频| 日韩成人dvd| 久久久久久久久一| 99视频超级精品| 亚洲综合成人在线| 91精品国产91久久久久久最新毛片 | 亚洲一区视频在线| 欧美情侣在线播放| 蜜桃久久久久久久| 日韩一区二区三| 色综合天天综合色综合av| 亚洲在线观看免费视频| 欧美日韩在线电影| 免费在线成人网| 欧美国产激情一区二区三区蜜月 | 亚洲图片欧美一区| 91久久精品一区二区三| 久久99久久99| 亚洲欧美日韩国产综合| 日韩视频一区二区三区在线播放 | 亚洲人成在线播放网站岛国| 欧美午夜影院一区| www.性欧美| 国产99精品国产| 精品一区二区免费在线观看| 亚洲美女电影在线| 中文字幕在线一区免费| 欧美色图片你懂的| 欧美亚洲丝袜传媒另类| 欧美日韩国产一级二级| 99久久婷婷国产精品综合| 久久丁香综合五月国产三级网站 | 奇米一区二区三区| 日本色综合中文字幕| 久久精品国产久精国产爱| 秋霞电影一区二区| 久久综合综合久久综合| 精油按摩中文字幕久久| 久久99九九99精品| 成人视屏免费看| 在线日韩av片| 欧美性色aⅴ视频一区日韩精品| 99精品久久免费看蜜臀剧情介绍| 成人午夜视频福利| 欧美羞羞免费网站| 在线播放日韩导航| 日韩精品一区二区在线| 久久精品人人做人人爽人人| 久久久www免费人成精品| 成人av免费在线观看| 国产一区二区三区电影在线观看| 国产一区三区三区| 欧美精品 日韩| 久久伊人中文字幕| 亚洲国产另类av| 韩国三级在线一区| 欧美电影一区二区| 亚洲精品视频一区二区| 国产乱码精品一区二区三区av| 9人人澡人人爽人人精品| 日韩欧美一区在线| 亚洲va欧美va天堂v国产综合| 国产一区二三区| 欧美男女性生活在线直播观看| 久久精品一区二区| 伦理电影国产精品| 日韩视频一区在线观看| 亚洲电影你懂得| 日本二三区不卡| 欧美激情综合在线| 国产一区二区三区香蕉| 欧美日韩国产小视频在线观看| 亚洲精品伦理在线| 色综合久久综合网欧美综合网| 精品不卡在线视频| 亚洲一区国产视频| 99精品黄色片免费大全| 亚洲美女电影在线| 7878成人国产在线观看| 久久精品国产99久久6| 精品日韩在线观看| 成人动漫视频在线| 亚洲成人资源在线| 欧美电影精品一区二区|