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

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

?? imm.c

?? linux和2410結合開發 用他可以生成2410所需的zImage文件
?? C
?? 第 1 頁 / 共 3 頁
字號:
static int imm_byte_out(unsigned short base, const char *buffer, int len){    int i;    w_ctr(base, 0x4);		/* apparently a sane mode */    for (i = len >> 1; i; i--) {	w_dtr(base, *buffer++);	w_ctr(base, 0x5);	/* Drop STROBE low */	w_dtr(base, *buffer++);	w_ctr(base, 0x0);	/* STROBE high + INIT low */    }    w_ctr(base, 0x4);		/* apparently a sane mode */    return 1;			/* All went well - we hope! */}static int imm_nibble_in(unsigned short base, char *buffer, int len){    unsigned char l;    int i;    /*     * The following is based on documented timing signals     */    w_ctr(base, 0x4);    for (i = len; i; i--) {	w_ctr(base, 0x6);	l = (r_str(base) & 0xf0) >> 4;	w_ctr(base, 0x5);	*buffer++ = (r_str(base) & 0xf0) | l;	w_ctr(base, 0x4);    }    return 1;			/* All went well - we hope! */}static int imm_byte_in(unsigned short base, char *buffer, int len){    int i;    /*     * The following is based on documented timing signals     */    w_ctr(base, 0x4);    for (i = len; i; i--) {	w_ctr(base, 0x26);	*buffer++ = r_dtr(base);	w_ctr(base, 0x25);    }    return 1;			/* All went well - we hope! */}static int imm_out(int host_no, char *buffer, int len){    int r;    unsigned short ppb = IMM_BASE(host_no);    r = imm_wait(host_no);    /*     * Make sure that:     * a) the SCSI bus is BUSY (device still listening)     * b) the device is listening     */    if ((r & 0x18) != 0x08) {	imm_fail(host_no, DID_ERROR);	printk("IMM: returned SCSI status %2x\n", r);	return 0;    }    switch (imm_hosts[host_no].mode) {    case IMM_EPP_32:    case IMM_EPP_16:    case IMM_EPP_8:	epp_reset(ppb);	w_ctr(ppb, 0x4);#ifdef CONFIG_SCSI_IZIP_EPP16	if (!(((long) buffer | len) & 0x01))	    outsw(ppb + 4, buffer, len >> 1);#else	if (!(((long) buffer | len) & 0x03))	    outsl(ppb + 4, buffer, len >> 2);#endif	else	    outsb(ppb + 4, buffer, len);	w_ctr(ppb, 0xc);	r = !(r_str(ppb) & 0x01);	w_ctr(ppb, 0xc);	ecp_sync(host_no);	break;    case IMM_NIBBLE:    case IMM_PS2:	/* 8 bit output, with a loop */	r = imm_byte_out(ppb, buffer, len);	break;    default:	printk("IMM: bug in imm_out()\n");	r = 0;    }    return r;}static int imm_in(int host_no, char *buffer, int len){    int r;    unsigned short ppb = IMM_BASE(host_no);    r = imm_wait(host_no);    /*     * Make sure that:     * a) the SCSI bus is BUSY (device still listening)     * b) the device is sending data     */    if ((r & 0x18) != 0x18) {	imm_fail(host_no, DID_ERROR);	return 0;    }    switch (imm_hosts[host_no].mode) {    case IMM_NIBBLE:	/* 4 bit input, with a loop */	r = imm_nibble_in(ppb, buffer, len);	w_ctr(ppb, 0xc);	break;    case IMM_PS2:	/* 8 bit input, with a loop */	r = imm_byte_in(ppb, buffer, len);	w_ctr(ppb, 0xc);	break;    case IMM_EPP_32:    case IMM_EPP_16:    case IMM_EPP_8:	epp_reset(ppb);	w_ctr(ppb, 0x24);#ifdef CONFIG_SCSI_IZIP_EPP16	if (!(((long) buffer | len) & 0x01))	    insw(ppb + 4, buffer, len >> 1);#else	if (!(((long) buffer | len) & 0x03))	    insl(ppb + 4, buffer, len >> 2);#endif	else	    insb(ppb + 4, buffer, len);	w_ctr(ppb, 0x2c);	r = !(r_str(ppb) & 0x01);	w_ctr(ppb, 0x2c);	ecp_sync(host_no);	break;    default:	printk("IMM: bug in imm_ins()\n");	r = 0;	break;    }    return r;}static int imm_cpp(unsigned short ppb, unsigned char b){    /*     * Comments on udelay values refer to the     * Command Packet Protocol (CPP) timing diagram.     */    unsigned char s1, s2, s3;    w_ctr(ppb, 0x0c);    udelay(2);			/* 1 usec - infinite */    w_dtr(ppb, 0xaa);    udelay(10);			/* 7 usec - infinite */    w_dtr(ppb, 0x55);    udelay(10);			/* 7 usec - infinite */    w_dtr(ppb, 0x00);    udelay(10);			/* 7 usec - infinite */    w_dtr(ppb, 0xff);    udelay(10);			/* 7 usec - infinite */    s1 = r_str(ppb) & 0xb8;    w_dtr(ppb, 0x87);    udelay(10);			/* 7 usec - infinite */    s2 = r_str(ppb) & 0xb8;    w_dtr(ppb, 0x78);    udelay(10);			/* 7 usec - infinite */    s3 = r_str(ppb) & 0x38;    /*     * Values for b are:     * 0000 00aa    Assign address aa to current device     * 0010 00aa    Select device aa in EPP Winbond mode     * 0010 10aa    Select device aa in EPP mode     * 0011 xxxx    Deselect all devices     * 0110 00aa    Test device aa     * 1101 00aa    Select device aa in ECP mode     * 1110 00aa    Select device aa in Compatible mode     */    w_dtr(ppb, b);    udelay(2);			/* 1 usec - infinite */    w_ctr(ppb, 0x0c);    udelay(10);			/* 7 usec - infinite */    w_ctr(ppb, 0x0d);    udelay(2);			/* 1 usec - infinite */    w_ctr(ppb, 0x0c);    udelay(10);			/* 7 usec - infinite */    w_dtr(ppb, 0xff);    udelay(10);			/* 7 usec - infinite */    /*     * The following table is electrical pin values.     * (BSY is inverted at the CTR register)     *     *       BSY  ACK  POut SEL  Fault     * S1    0    X    1    1    1     * S2    1    X    0    1    1     * S3    L    X    1    1    S     *     * L => Last device in chain     * S => Selected     *     * Observered values for S1,S2,S3 are:     * Disconnect => f8/58/78     * Connect    => f8/58/70     */    if ((s1 == 0xb8) && (s2 == 0x18) && (s3 == 0x30))	return 1;		/* Connected */    if ((s1 == 0xb8) && (s2 == 0x18) && (s3 == 0x38))	return 0;		/* Disconnected */    return -1;			/* No device present */}static inline int imm_connect(int host_no, int flag){    unsigned short ppb = IMM_BASE(host_no);    imm_cpp(ppb, 0xe0);		/* Select device 0 in compatible mode */    imm_cpp(ppb, 0x30);		/* Disconnect all devices */    if ((imm_hosts[host_no].mode == IMM_EPP_8) ||	(imm_hosts[host_no].mode == IMM_EPP_16) ||	(imm_hosts[host_no].mode == IMM_EPP_32))	return imm_cpp(ppb, 0x28);	/* Select device 0 in EPP mode */    return imm_cpp(ppb, 0xe0);	/* Select device 0 in compatible mode */}static void imm_disconnect(int host_no){    unsigned short ppb = IMM_BASE(host_no);    imm_cpp(ppb, 0x30);		/* Disconnect all devices */}static int imm_select(int host_no, int target){    int k;    unsigned short ppb = IMM_BASE(host_no);    /*     * Firstly we want to make sure there is nothing     * holding onto the SCSI bus.     */    w_ctr(ppb, 0xc);    k = IMM_SELECT_TMO;    do {	k--;    } while ((r_str(ppb) & 0x08) && (k));    if (!k)	return 0;    /*     * Now assert the SCSI ID (HOST and TARGET) on the data bus     */    w_ctr(ppb, 0x4);    w_dtr(ppb, 0x80 | (1 << target));    udelay(1);    /*     * Deassert SELIN first followed by STROBE     */    w_ctr(ppb, 0xc);    w_ctr(ppb, 0xd);    /*     * ACK should drop low while SELIN is deasserted.     * FAULT should drop low when the SCSI device latches the bus.     */    k = IMM_SELECT_TMO;    do {	k--;    }    while (!(r_str(ppb) & 0x08) && (k));    /*     * Place the interface back into a sane state (status mode)     */    w_ctr(ppb, 0xc);    return (k) ? 1 : 0;}static int imm_init(int host_no){    int retv;#if defined(CONFIG_PARPORT) || defined(CONFIG_PARPORT_MODULE)    if (imm_pb_claim(host_no))	while (imm_hosts[host_no].p_busy)	    schedule();		/* We can safe schedule here */#endif    retv = imm_connect(host_no, 0);    if (retv == 1) {	imm_reset_pulse(IMM_BASE(host_no));	udelay(1000);		/* Delay to allow devices to settle */	imm_disconnect(host_no);	udelay(1000);		/* Another delay to allow devices to settle */	retv = device_check(host_no);	imm_pb_release(host_no);	return retv;    }    imm_pb_release(host_no);    return 1;}static inline int imm_send_command(Scsi_Cmnd * cmd){    int host_no = cmd->host->unique_id;    int k;    /* NOTE: IMM uses byte pairs */    for (k = 0; k < cmd->cmd_len; k += 2)	if (!imm_out(host_no, &cmd->cmnd[k], 2))	    return 0;    return 1;}/* * The bulk flag enables some optimisations in the data transfer loops, * it should be true for any command that transfers data in integral * numbers of sectors. *  * The driver appears to remain stable if we speed up the parallel port * i/o in this function, but not elsewhere. */static int imm_completion(Scsi_Cmnd * cmd){    /* Return codes:     * -1     Error     *  0     Told to schedule     *  1     Finished data transfer     */    int host_no = cmd->host->unique_id;    unsigned short ppb = IMM_BASE(host_no);    unsigned long start_jiffies = jiffies;    unsigned char r, v;    int fast, bulk, status;    v = cmd->cmnd[0];    bulk = ((v == READ_6) ||	    (v == READ_10) ||	    (v == WRITE_6) ||	    (v == WRITE_10));    /*     * We only get here if the drive is ready to comunicate,     * hence no need for a full imm_wait.     */    w_ctr(ppb, 0x0c);    r = (r_str(ppb) & 0xb8);    /*     * while (device is not ready to send status byte)     *     loop;     */    while (r != (unsigned char) 0xb8) {	/*	 * If we have been running for more than a full timer tick	 * then take a rest.	 */	if (time_after(jiffies, start_jiffies + 1))	    return 0;	/*	 * FAIL if:	 * a) Drive status is screwy (!ready && !present)	 * b) Drive is requesting/sending more data than expected	 */	if (((r & 0x88) != 0x88) || (cmd->SCp.this_residual <= 0)) {	    imm_fail(host_no, DID_ERROR);	    return -1;		/* ERROR_RETURN */	}	/* determine if we should use burst I/O */	if (imm_hosts[host_no].rd == 0) {	    fast = (bulk && (cmd->SCp.this_residual >= IMM_BURST_SIZE)) ? IMM_BURST_SIZE : 2;	    status = imm_out(host_no, cmd->SCp.ptr, fast);	} else {	    fast = (bulk && (cmd->SCp.this_residual >= IMM_BURST_SIZE)) ? IMM_BURST_SIZE : 1;	    status = imm_in(host_no, cmd->SCp.ptr, fast);	}	cmd->SCp.ptr += fast;	cmd->SCp.this_residual -= fast;	if (!status) {	    imm_fail(host_no, DID_BUS_BUSY);	    return -1;		/* ERROR_RETURN */	}	if (cmd->SCp.buffer && !cmd->SCp.this_residual) {	    /* if scatter/gather, advance to the next segment */	    if (cmd->SCp.buffers_residual--) {		cmd->SCp.buffer++;		cmd->SCp.this_residual = cmd->SCp.buffer->length;		cmd->SCp.ptr = cmd->SCp.buffer->address;		/*		 * Make sure that we transfer even number of bytes		 * otherwise it makes imm_byte_out() messy.		 */		if (cmd->SCp.this_residual & 0x01)		    cmd->SCp.this_residual++;	    }	}	/* Now check to see if the drive is ready to comunicate */	w_ctr(ppb, 0x0c);	r = (r_str(ppb) & 0xb8);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av不卡在线观看| 亚洲天堂福利av| 欧美日韩国产小视频| 色久综合一二码| 在线视频欧美精品| 欧美色倩网站大全免费| 欧美日韩一区二区在线观看| 欧美视频一区二区三区四区| 欧美日韩三级视频| 欧美日韩高清一区二区不卡| 7777精品伊人久久久大香线蕉经典版下载 | 国产美女av一区二区三区| 免费看日韩精品| 精品亚洲免费视频| 国产酒店精品激情| 99久久久无码国产精品| 91福利在线看| 精品三级在线看| 中文久久乱码一区二区| 亚洲一二三区不卡| 美女视频黄频大全不卡视频在线播放| 久久精品国产秦先生| 国产一区 二区 三区一级| av亚洲精华国产精华精| 在线观看91av| 最新热久久免费视频| 亚洲成人av电影在线| 久久99这里只有精品| 99精品视频在线免费观看| 欧美日韩小视频| 久久久99精品久久| 亚洲午夜久久久久| 国产一区二区三区免费看 | 欧美日韩黄视频| 欧美刺激脚交jootjob| 中文字幕在线一区二区三区| 亚洲国产欧美在线| 国产精品18久久久久久久网站| 色偷偷88欧美精品久久久| 日韩亚洲欧美在线观看| 亚洲欧美偷拍另类a∨色屁股| 琪琪一区二区三区| 色94色欧美sute亚洲13| 国产欧美日韩不卡免费| 日本亚洲电影天堂| 99国产精品久久久久久久久久久| 日韩视频在线你懂得| 一区二区三区四区不卡视频| 国产精品一区二区不卡| 91精品国产综合久久久蜜臀粉嫩| 国产无遮挡一区二区三区毛片日本| 亚洲一区免费视频| 色综合天天做天天爱| 国产性做久久久久久| 美女精品一区二区| 欧美高清精品3d| 亚洲一区二区五区| 日本高清视频一区二区| 久久久另类综合| 久久国产精品第一页| 欧美日韩一本到| 一区二区三区蜜桃| zzijzzij亚洲日本少妇熟睡| 久久精品一区蜜桃臀影院| 九九视频精品免费| 欧美刺激脚交jootjob| 婷婷开心激情综合| 欧美日韩高清在线播放| 亚洲va欧美va人人爽| 97久久精品人人做人人爽| 欧美极品美女视频| 成人动漫av在线| 国产精品第一页第二页第三页| 成人爽a毛片一区二区免费| 国产亚洲精品7777| 成人av网站在线| 中文字幕中文乱码欧美一区二区| 成人黄页毛片网站| 成人免费在线观看入口| 91丨porny丨国产入口| 亚洲乱码中文字幕| 欧美影片第一页| 首页国产丝袜综合| 久久久久久久久久美女| 国产成人av一区二区三区在线| 国产视频一区在线播放| 成人亚洲精品久久久久软件| 中文字幕制服丝袜一区二区三区| 色婷婷综合久久久久中文一区二区| 自拍偷拍亚洲激情| 欧美视频第二页| 美女网站在线免费欧美精品| 国产婷婷色一区二区三区| www.欧美.com| 亚洲成人久久影院| 国产午夜亚洲精品理论片色戒| 99在线精品观看| 日韩经典中文字幕一区| 久久先锋影音av| 色呦呦国产精品| 开心九九激情九九欧美日韩精美视频电影| 精品欧美一区二区在线观看| 国产成人av电影免费在线观看| 亚洲欧美日韩在线播放| 日韩一级免费观看| 91在线丨porny丨国产| 午夜精品影院在线观看| 国产欧美日韩亚州综合| 欧美性大战久久| 国产成人av电影免费在线观看| 亚洲香肠在线观看| 久久精品日产第一区二区三区高清版| 91在线视频18| 免费观看在线综合| 亚洲精品日韩一| 久久免费午夜影院| 欧美精品国产精品| 91视频你懂的| 国产乱国产乱300精品| 亚洲二区在线观看| 久久久不卡影院| 日韩一区二区电影在线| 欧日韩精品视频| 国产91精品一区二区麻豆亚洲| 亚洲高清视频在线| 中文字幕一区免费在线观看| 精品成人a区在线观看| 欧美专区日韩专区| 99久久久国产精品| 国产高清精品久久久久| 热久久一区二区| 日韩在线a电影| 亚洲图片欧美视频| 亚洲精品国久久99热| 国产日韩成人精品| 久久亚区不卡日本| 日韩欧美中文字幕公布| 欧美午夜精品电影| 色噜噜久久综合| 99re视频精品| 99国产精品久久久久久久久久 | 精品国产亚洲在线| 欧美二区三区91| 欧美日韩激情在线| 67194成人在线观看| 欧美午夜一区二区| 欧美日韩在线电影| 在线不卡a资源高清| 欧美日韩精品欧美日韩精品一| 欧美影片第一页| 在线播放一区二区三区| 欧美日韩国产高清一区二区| 欧美视频在线一区| 欧美精品乱人伦久久久久久| 欧美一区二区三区日韩| 欧美一级二级三级乱码| 欧美大片国产精品| 久久久久久久久久久久久女国产乱 | 亚洲美女视频在线观看| 亚洲女同ⅹxx女同tv| 亚洲精品国产a久久久久久| 亚洲色大成网站www久久九九| 国产精品理论片在线观看| 亚洲欧洲日产国码二区| 亚洲欧美一区二区三区极速播放| 亚洲情趣在线观看| 亚洲观看高清完整版在线观看 | 91精品91久久久中77777| 91丨国产丨九色丨pron| 欧美伊人精品成人久久综合97| 欧美调教femdomvk| 欧美www视频| 国产精品久线观看视频| 一区二区高清免费观看影视大全 | 日韩久久精品一区| 日本一二三四高清不卡| 亚洲综合一区二区| 麻豆成人av在线| 丁香婷婷综合网| 在线观看国产91| 久久久久久99久久久精品网站| 亚洲图片你懂的| 精品制服美女丁香| 99久久99久久精品免费观看| 欧美日韩国产综合一区二区三区| 精品久久久久久久人人人人传媒 | 欧美a一区二区| 不卡电影一区二区三区| 欧美日韩在线直播| 国产日韩欧美麻豆| 午夜精品福利在线| www.激情成人| 欧美电影精品一区二区| 亚洲一二三专区| 成人性生交大片免费看中文网站| 欧美性大战久久久| 亚洲私人影院在线观看| 激情综合网最新| 欧美区一区二区三区| 日韩一区欧美一区|