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

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

?? imm.c

?? linux和2410結(jié)合開發(fā) 用他可以生成2410所需的zImage文件
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
	/* If not, drop back down to the scheduler and wait a timer tick */	if (!(r & 0x80))	    return 0;    }    return 1;			/* FINISH_RETURN */}/* deprecated synchronous interface */int imm_command(Scsi_Cmnd * cmd){    static int first_pass = 1;    int host_no = cmd->host->unique_id;    if (first_pass) {	printk("imm: using non-queuing interface\n");	first_pass = 0;    }    if (imm_hosts[host_no].cur_cmd) {	printk("IMM: bug in imm_command\n");	return 0;    }    imm_hosts[host_no].failed = 0;    imm_hosts[host_no].jstart = jiffies;    imm_hosts[host_no].cur_cmd = cmd;    cmd->result = DID_ERROR << 16;	/* default return code */    cmd->SCp.phase = 0;    imm_pb_claim(host_no);    while (imm_engine(&imm_hosts[host_no], cmd))	schedule();    if (cmd->SCp.phase)		/* Only disconnect if we have connected */	imm_disconnect(cmd->host->unique_id);    imm_pb_release(host_no);    imm_hosts[host_no].cur_cmd = 0;    return cmd->result;}/* * Since the IMM itself doesn't generate interrupts, we use * the scheduler's task queue to generate a stream of call-backs and * complete the request when the drive is ready. */static void imm_interrupt(void *data){    imm_struct *tmp = (imm_struct *) data;    Scsi_Cmnd *cmd = tmp->cur_cmd;    unsigned long flags;    if (!cmd) {	printk("IMM: bug in imm_interrupt\n");	return;    }    if (imm_engine(tmp, cmd)) {	tmp->imm_tq.data = (void *) tmp;	tmp->imm_tq.sync = 0;	queue_task(&tmp->imm_tq, &tq_timer);	return;    }    /* Command must of completed hence it is safe to let go... */#if IMM_DEBUG > 0    switch ((cmd->result >> 16) & 0xff) {    case DID_OK:	break;    case DID_NO_CONNECT:	printk("imm: no device at SCSI ID %i\n", cmd->target);	break;    case DID_BUS_BUSY:	printk("imm: BUS BUSY - EPP timeout detected\n");	break;    case DID_TIME_OUT:	printk("imm: unknown timeout\n");	break;    case DID_ABORT:	printk("imm: told to abort\n");	break;    case DID_PARITY:	printk("imm: parity error (???)\n");	break;    case DID_ERROR:	printk("imm: internal driver error\n");	break;    case DID_RESET:	printk("imm: told to reset device\n");	break;    case DID_BAD_INTR:	printk("imm: bad interrupt (???)\n");	break;    default:	printk("imm: bad return code (%02x)\n", (cmd->result >> 16) & 0xff);    }#endif    if (cmd->SCp.phase > 1)	imm_disconnect(cmd->host->unique_id);    if (cmd->SCp.phase > 0)	imm_pb_release(cmd->host->unique_id);    spin_lock_irqsave(&io_request_lock, flags);    tmp->cur_cmd = 0;    cmd->scsi_done(cmd);    spin_unlock_irqrestore(&io_request_lock, flags);    return;}static int imm_engine(imm_struct * tmp, Scsi_Cmnd * cmd){    int host_no = cmd->host->unique_id;    unsigned short ppb = IMM_BASE(host_no);    unsigned char l = 0, h = 0;    int retv, x;    /* First check for any errors that may of occurred     * Here we check for internal errors     */    if (tmp->failed)	return 0;    switch (cmd->SCp.phase) {    case 0:			/* Phase 0 - Waiting for parport */	if ((jiffies - tmp->jstart) > HZ) {	    /*	     * We waited more than a second	     * for parport to call us	     */	    imm_fail(host_no, DID_BUS_BUSY);	    return 0;	}	return 1;		/* wait until imm_wakeup claims parport */	/* Phase 1 - Connected */    case 1:	imm_connect(host_no, CONNECT_EPP_MAYBE);	cmd->SCp.phase++;	/* Phase 2 - We are now talking to the scsi bus */    case 2:	if (!imm_select(host_no, cmd->target)) {	    imm_fail(host_no, DID_NO_CONNECT);	    return 0;	}	cmd->SCp.phase++;	/* Phase 3 - Ready to accept a command */    case 3:	w_ctr(ppb, 0x0c);	if (!(r_str(ppb) & 0x80))	    return 1;	if (!imm_send_command(cmd))	    return 0;	cmd->SCp.phase++;	/* Phase 4 - Setup scatter/gather buffers */    case 4:	if (cmd->use_sg) {	    /* if many buffers are available, start filling the first */	    cmd->SCp.buffer = (struct scatterlist *) cmd->request_buffer;	    cmd->SCp.this_residual = cmd->SCp.buffer->length;	    cmd->SCp.ptr = cmd->SCp.buffer->address;	} else {	    /* else fill the only available buffer */	    cmd->SCp.buffer = NULL;	    cmd->SCp.this_residual = cmd->request_bufflen;	    cmd->SCp.ptr = cmd->request_buffer;	}	cmd->SCp.buffers_residual = cmd->use_sg;	cmd->SCp.phase++;	if (cmd->SCp.this_residual & 0x01)	    cmd->SCp.this_residual++;	/* Phase 5 - Pre-Data transfer stage */    case 5:	/* Spin lock for BUSY */	w_ctr(ppb, 0x0c);	if (!(r_str(ppb) & 0x80))	    return 1;	/* Require negotiation for read requests */	x = (r_str(ppb) & 0xb8);	tmp->rd = (x & 0x10) ? 1 : 0;	tmp->dp = (x & 0x20) ? 0 : 1;	if ((tmp->dp) && (tmp->rd))	    if (imm_negotiate(tmp))		return 0;	cmd->SCp.phase++;	/* Phase 6 - Data transfer stage */    case 6:	/* Spin lock for BUSY */	w_ctr(ppb, 0x0c);	if (!(r_str(ppb) & 0x80))	    return 1;	if (tmp->dp) {	    retv = imm_completion(cmd);	    if (retv == -1)		return 0;	    if (retv == 0)		return 1;	}	cmd->SCp.phase++;	/* Phase 7 - Post data transfer stage */    case 7:	if ((tmp->dp) && (tmp->rd)) {	    if ((tmp->mode == IMM_NIBBLE) || (tmp->mode == IMM_PS2)) {		w_ctr(ppb, 0x4);		w_ctr(ppb, 0xc);		w_ctr(ppb, 0xe);		w_ctr(ppb, 0x4);	    }	}	cmd->SCp.phase++;	/* Phase 8 - Read status/message */    case 8:	/* Check for data overrun */	if (imm_wait(host_no) != (unsigned char) 0xb8) {	    imm_fail(host_no, DID_ERROR);	    return 0;	}	if (imm_negotiate(tmp))	    return 0;	if (imm_in(host_no, &l, 1)) {	/* read status byte */	    /* Check for optional message byte */	    if (imm_wait(host_no) == (unsigned char) 0xb8)		imm_in(host_no, &h, 1);	    cmd->result = (DID_OK << 16) + (l & STATUS_MASK);	}	if ((tmp->mode == IMM_NIBBLE) || (tmp->mode == IMM_PS2)) {	    w_ctr(ppb, 0x4);	    w_ctr(ppb, 0xc);	    w_ctr(ppb, 0xe);	    w_ctr(ppb, 0x4);	}	return 0;		/* Finished */	break;    default:	printk("imm: Invalid scsi phase\n");    }    return 0;}int imm_queuecommand(Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *)){    int host_no = cmd->host->unique_id;    if (imm_hosts[host_no].cur_cmd) {	printk("IMM: bug in imm_queuecommand\n");	return 0;    }    imm_hosts[host_no].failed = 0;    imm_hosts[host_no].jstart = jiffies;    imm_hosts[host_no].cur_cmd = cmd;    cmd->scsi_done = done;    cmd->result = DID_ERROR << 16;	/* default return code */    cmd->SCp.phase = 0;		/* bus free */    imm_pb_claim(host_no);    imm_hosts[host_no].imm_tq.data = imm_hosts + host_no;    imm_hosts[host_no].imm_tq.sync = 0;    queue_task(&imm_hosts[host_no].imm_tq, &tq_immediate);    mark_bh(IMMEDIATE_BH);    return 0;}/* * Apparently the the disk->capacity attribute is off by 1 sector  * for all disk drives.  We add the one here, but it should really * be done in sd.c.  Even if it gets fixed there, this will still * work. */int imm_biosparam(Disk * disk, kdev_t dev, int ip[]){    ip[0] = 0x40;    ip[1] = 0x20;    ip[2] = (disk->capacity + 1) / (ip[0] * ip[1]);    if (ip[2] > 1024) {	ip[0] = 0xff;	ip[1] = 0x3f;	ip[2] = (disk->capacity + 1) / (ip[0] * ip[1]);    }    return 0;}int imm_abort(Scsi_Cmnd * cmd){    int host_no = cmd->host->unique_id;    /*     * There is no method for aborting commands since Iomega     * have tied the SCSI_MESSAGE line high in the interface     */    switch (cmd->SCp.phase) {    case 0:			/* Do not have access to parport */    case 1:			/* Have not connected to interface */	imm_hosts[host_no].cur_cmd = NULL;	/* Forget the problem */	return SUCCESS;	break;    default:			/* SCSI command sent, can not abort */	return FAILED;	break;    }}void imm_reset_pulse(unsigned int base){    w_ctr(base, 0x04);    w_dtr(base, 0x40);    udelay(1);    w_ctr(base, 0x0c);    w_ctr(base, 0x0d);    udelay(50);    w_ctr(base, 0x0c);    w_ctr(base, 0x04);}int imm_reset(Scsi_Cmnd * cmd){    int host_no = cmd->host->unique_id;    if (cmd->SCp.phase)	imm_disconnect(host_no);    imm_hosts[host_no].cur_cmd = NULL;	/* Forget the problem */    imm_connect(host_no, CONNECT_NORMAL);    imm_reset_pulse(IMM_BASE(host_no));    udelay(1000);		/* device settle delay */    imm_disconnect(host_no);    udelay(1000);		/* device settle delay */    return SUCCESS;}static int device_check(int host_no){    /* This routine looks for a device and then attempts to use EPP       to send a command. If all goes as planned then EPP is available. */    static char cmd[6] =    {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};    int loop, old_mode, status, k, ppb = IMM_BASE(host_no);    unsigned char l;    old_mode = imm_hosts[host_no].mode;    for (loop = 0; loop < 8; loop++) {	/* Attempt to use EPP for Test Unit Ready */	if ((ppb & 0x0007) == 0x0000)	    imm_hosts[host_no].mode = IMM_EPP_32;      second_pass:	imm_connect(host_no, CONNECT_EPP_MAYBE);	/* Select SCSI device */	if (!imm_select(host_no, loop)) {	    imm_disconnect(host_no);	    continue;	}	printk("imm: Found device at ID %i, Attempting to use %s\n", loop,	       IMM_MODE_STRING[imm_hosts[host_no].mode]);	/* Send SCSI command */	status = 1;	w_ctr(ppb, 0x0c);	for (l = 0; (l < 3) && (status); l++)	    status = imm_out(host_no, &cmd[l << 1], 2);	if (!status) {            imm_disconnect(host_no);            imm_connect(host_no, CONNECT_EPP_MAYBE);            imm_reset_pulse(IMM_BASE(host_no));            udelay(1000);            imm_disconnect(host_no);            udelay(1000);            if (imm_hosts[host_no].mode == IMM_EPP_32) {                imm_hosts[host_no].mode = old_mode;                goto second_pass;            }	    printk("imm: Unable to establish communication, aborting driver load.\n");	    return 1;	}	w_ctr(ppb, 0x0c);	k = 1000000;		/* 1 Second */	do {	    l = r_str(ppb);	    k--;	    udelay(1);	} while (!(l & 0x80) && (k));	l &= 0xb8;	if (l != 0xb8) {	    imm_disconnect(host_no);	    imm_connect(host_no, CONNECT_EPP_MAYBE);	    imm_reset_pulse(IMM_BASE(host_no));	    udelay(1000);	    imm_disconnect(host_no);	    udelay(1000);	    if (imm_hosts[host_no].mode == IMM_EPP_32) {		imm_hosts[host_no].mode = old_mode;		goto second_pass;	    }	    printk("imm: Unable to establish communication, aborting driver load.\n");	    return 1;	}	imm_disconnect(host_no);	printk("imm: Communication established at 0x%x with ID %i using %s\n", ppb, loop,	       IMM_MODE_STRING[imm_hosts[host_no].mode]);	imm_connect(host_no, CONNECT_EPP_MAYBE);	imm_reset_pulse(IMM_BASE(host_no));	udelay(1000);	imm_disconnect(host_no);	udelay(1000);	return 0;    }    printk("imm: No devices found, aborting driver load.\n");    return 1;}MODULE_LICENSE("GPL");

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕中文字幕在线一区 | 亚洲免费观看视频| 成人综合激情网| 国产农村妇女毛片精品久久麻豆| 国产一区二区三区最好精华液 | 久久综合999| 国产高清久久久久| 欧美高清在线一区| 91亚洲精品久久久蜜桃网站| 一级日本不卡的影视| 欧美日韩成人一区二区| 青青草国产成人av片免费 | 日本一区二区视频在线观看| fc2成人免费人成在线观看播放| 成人免费在线视频观看| 欧美中文字幕不卡| 免费视频一区二区| 国产精品免费免费| 欧美欧美午夜aⅴ在线观看| 久久91精品久久久久久秒播| 国产精品另类一区| 欧美日韩综合不卡| 国产剧情一区二区| 一区二区三区中文字幕精品精品| 正在播放一区二区| 成人黄色小视频| 日韩国产一二三区| 中文一区在线播放| 欧美特级限制片免费在线观看| 久久疯狂做爰流白浆xx| 亚洲色图制服诱惑| 日韩欧美视频在线| 色网站国产精品| 狠狠色狠狠色综合系列| 一区二区三区欧美激情| www国产精品av| 欧美网站一区二区| 成人激情开心网| 精品中文字幕一区二区小辣椒| 亚洲品质自拍视频| 久久嫩草精品久久久精品一| 欧美视频一区在线观看| 懂色中文一区二区在线播放| 日韩国产高清在线| 一区二区三区日本| 欧美激情一区二区三区四区| 日韩三级在线免费观看| 在线视频一区二区三区| 国产成人综合网站| 免费成人在线观看| 亚洲一区二区在线视频| 欧美国产一区视频在线观看| 日韩精品一区二区三区视频在线观看| 色八戒一区二区三区| 懂色一区二区三区免费观看| 另类中文字幕网| 五月天视频一区| 亚洲一级二级三级在线免费观看| 中文幕一区二区三区久久蜜桃| 91精品国产欧美一区二区18| 日本高清成人免费播放| 成人黄色777网| 粉嫩绯色av一区二区在线观看 | 播五月开心婷婷综合| 久色婷婷小香蕉久久| 亚洲aaa精品| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲欧洲三级电影| 国产日韩欧美一区二区三区乱码| 精品少妇一区二区三区免费观看 | 国产精品亚洲成人| 麻豆精品在线视频| 蜜臀av性久久久久蜜臀av麻豆| 五月天中文字幕一区二区| 亚洲一区二区四区蜜桃| 一个色综合av| 亚洲不卡av一区二区三区| 亚洲成人精品一区二区| 一区二区三区91| 亚洲一卡二卡三卡四卡五卡| 亚洲午夜久久久久久久久电影网| 亚洲精品久久7777| 亚洲综合一二区| 三级在线观看一区二区| 人人爽香蕉精品| 久久se精品一区精品二区| 国内久久精品视频| 成人avav影音| 色综合天天综合色综合av | 久久精品国产澳门| 狠狠色丁香久久婷婷综合_中 | 国产精品青草久久| 中文字幕一区二区三区色视频| 综合久久久久久| 一区二区三区国产精华| 亚洲国产精品久久人人爱蜜臀| 亚洲最新视频在线观看| 五月婷婷欧美视频| 国产在线视频精品一区| 成人午夜激情在线| 在线一区二区三区四区五区| 欧美日韩欧美一区二区| 日韩欧美在线一区二区三区| 久久精品一区二区三区不卡牛牛| 亚洲国产电影在线观看| 一区二区三区精品视频| 日本一区中文字幕 | 极品少妇xxxx精品少妇偷拍| 国产一区二区美女诱惑| 91一区二区在线| 欧美日韩精品一区二区三区四区 | 国产午夜亚洲精品午夜鲁丝片| 亚洲欧洲成人自拍| 首页国产丝袜综合| 国产一区二区中文字幕| 91国内精品野花午夜精品| 日韩一级黄色片| 国产精品少妇自拍| 日本一道高清亚洲日美韩| 不卡一二三区首页| 日韩欧美精品三级| 一区二区三区久久| 国产成人亚洲精品狼色在线| 欧美日韩一区国产| 国产精品久久午夜夜伦鲁鲁| 视频一区二区不卡| 99久久久免费精品国产一区二区| 91精品欧美一区二区三区综合在| 国产精品女同一区二区三区| 日韩1区2区3区| 在线观看精品一区| 国产亚洲va综合人人澡精品 | 樱桃视频在线观看一区| 极品少妇一区二区三区精品视频| 在线日韩一区二区| 欧美极品少妇xxxxⅹ高跟鞋| 男女性色大片免费观看一区二区| 91免费看片在线观看| 久久综合久久综合九色| 亚洲成av人**亚洲成av**| 成人av电影免费观看| 久久蜜臀精品av| 免费视频一区二区| 精品1区2区3区| 亚洲欧美日本在线| 成人永久aaa| 国产日韩av一区二区| 人禽交欧美网站| 欧美理论在线播放| 一区二区三区四区在线| 91在线国内视频| 中文字幕免费观看一区| 国产精品1区2区3区在线观看| 欧美一区二区三区视频在线观看| 亚洲一区二区三区视频在线| 在线视频你懂得一区| 亚洲另类在线制服丝袜| 99久久精品国产精品久久| 久久久精品免费网站| 久久99国产精品免费网站| 91精品欧美一区二区三区综合在 | 亚洲黄色小说网站| 99久久久久久99| 亚洲精品日日夜夜| 91亚洲国产成人精品一区二区三| 欧美激情综合五月色丁香| 国产成人免费xxxxxxxx| 久久久精品国产99久久精品芒果| 国产精品一区不卡| 久久精品亚洲精品国产欧美| 国产麻豆91精品| 国产午夜精品一区二区| 成人精品电影在线观看| 亚洲视频免费看| 色老头久久综合| 亚洲午夜激情av| 91精品麻豆日日躁夜夜躁| 免费的成人av| 国产偷国产偷精品高清尤物| 成人午夜短视频| 亚洲免费观看高清完整版在线观看 | 亚洲最大色网站| 欧美电影一区二区| 久久国产精品色婷婷| 日本一区二区不卡视频| 91亚洲精品久久久蜜桃网站| 亚洲国产aⅴ天堂久久| 欧美一激情一区二区三区| 国内成人精品2018免费看| 日本一区二区三级电影在线观看| 成人激情午夜影院| 亚洲一区成人在线| 欧美大片一区二区| 成人激情开心网| 亚洲成人黄色影院| 精品国产一区二区三区久久影院| 国产+成+人+亚洲欧洲自线| 亚洲天天做日日做天天谢日日欢| 欧美少妇性性性| 国产一区二区在线观看视频|