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

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

?? imm.c

?? 講述linux的初始化過程
?? C
?? 第 1 頁 / 共 3 頁
字號:
	/* 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;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产激情一区二区三区四区| 91精品一区二区三区久久久久久 | 国产视频911| 麻豆精品在线播放| 欧美日韩国产123区| ...中文天堂在线一区| 国产成人精品免费一区二区| 日韩欧美123| 极品瑜伽女神91| 久久综合久久综合久久综合| 日本成人在线视频网站| 8x福利精品第一导航| 亚洲国产乱码最新视频 | 成人av免费观看| 国产午夜精品一区二区| 波多野结衣的一区二区三区| 国产午夜久久久久| 99久久精品国产麻豆演员表| 国产精品福利一区二区| 91丨九色丨蝌蚪富婆spa| 亚洲欧美日韩久久精品| 欧美视频在线播放| 日韩精品午夜视频| 久久久久久99久久久精品网站| 国产成人综合精品三级| 成人免费小视频| 在线观看欧美黄色| 日本一不卡视频| 国产精品网曝门| 欧美三级视频在线观看| 激情五月激情综合网| 亚洲日本免费电影| 欧美成人综合网站| 91视视频在线直接观看在线看网页在线看| 综合久久国产九一剧情麻豆| 日韩一级二级三级精品视频| 成人激情综合网站| 日本免费新一区视频| 亚洲色图一区二区三区| 日韩欧美精品在线视频| av亚洲产国偷v产偷v自拍| 日产欧产美韩系列久久99| 日本一区二区三区电影| 欧美精品成人一区二区三区四区| 国产精品综合在线视频| 五月天激情综合| 亚洲同性gay激情无套| 久久久久综合网| 日韩一区二区免费在线观看| 欧美图片一区二区三区| 成人动漫精品一区二区| 国产美女娇喘av呻吟久久| 日韩精品亚洲专区| 日韩精品欧美成人高清一区二区| 亚洲视频一二三区| 亚洲乱码国产乱码精品精98午夜| 国产亚洲一区字幕| 久久亚洲捆绑美女| 久久亚洲精精品中文字幕早川悠里| 91精品国模一区二区三区| 一本到不卡免费一区二区| 99久久精品国产毛片| 成人小视频在线| 91福利国产精品| 欧美日韩在线三区| 欧美精品vⅰdeose4hd| 91精品啪在线观看国产60岁| 欧美男女性生活在线直播观看| 欧美精品丝袜中出| 精品久久久久久久久久久久久久久 | 色欧美88888久久久久久影院| 福利一区在线观看| 99视频精品全部免费在线| 99热这里都是精品| 精品视频999| 久久久精品国产免大香伊| 中文字幕一区二区三| 亚洲最大色网站| 久久激情五月激情| 成人免费毛片app| 欧美男同性恋视频网站| 国产精品视频线看| 秋霞午夜鲁丝一区二区老狼| 成人国产精品免费观看视频| 欧美性受xxxx黑人xyx性爽| 精品国产一二三| 亚洲黄色片在线观看| 久久国产精品第一页| 色一情一乱一乱一91av| 精品999久久久| 亚洲丰满少妇videoshd| 国产精品夜夜嗨| 日韩精品中文字幕在线一区| 国产精品成人免费在线| 欧美aaaaaa午夜精品| 91看片淫黄大片一级在线观看| 日韩视频在线观看一区二区| 亚洲影院久久精品| 国产一区二区三区高清播放| 欧美视频在线播放| 一区二区在线免费观看| 国产成人av电影在线播放| 欧美日韩国产123区| 亚洲精品乱码久久久久| 成人自拍视频在线| 精品裸体舞一区二区三区| 亚洲国产精品一区二区www| av在线不卡电影| 国产日产亚洲精品系列| 国产在线视频一区二区| 在线播放/欧美激情| 日韩精品电影一区亚洲| 欧美视频一区二区三区在线观看| 中文字幕一区二区三| 99视频有精品| 中文字幕在线不卡一区| 91视频一区二区| 亚洲一区二区欧美激情| 欧美丰满少妇xxxbbb| 捆绑调教美女网站视频一区| 日韩三级在线免费观看| 蜜臀91精品一区二区三区| 欧美精品一区二区蜜臀亚洲| 国产精品亚洲一区二区三区在线| 日本一区二区三区国色天香 | 免费精品99久久国产综合精品| 91精品国产欧美日韩| 狠狠久久亚洲欧美| 亚洲欧美另类图片小说| 欧美天堂一区二区三区| 九九九精品视频| 亚洲国产精品成人综合色在线婷婷 | 日韩高清在线不卡| 久久蜜桃av一区二区天堂 | 中文字幕中文字幕中文字幕亚洲无线| 成人18精品视频| 亚洲成在人线免费| 久久久精品综合| 欧亚一区二区三区| 国产精品12区| 亚洲影院理伦片| 国产精品天干天干在观线| 在线一区二区三区四区| 老司机免费视频一区二区| 亚洲码国产岛国毛片在线| 日韩一区二区三区四区五区六区| 成年人国产精品| 麻豆极品一区二区三区| 亚洲精品精品亚洲| 精品精品国产高清a毛片牛牛 | 日本不卡123| 亚洲人成影院在线观看| 久久精品一区四区| 91精品国产综合久久香蕉的特点| 99久久er热在这里只有精品66| 日韩精品乱码免费| 亚洲1区2区3区视频| 中文字幕一区日韩精品欧美| 久久久精品影视| 日韩免费看网站| 欧美一区二区三区色| 日本韩国一区二区三区视频| 色综合天天综合在线视频| 国产精品一区专区| 国产成人免费在线观看不卡| 日韩不卡一区二区三区| 麻豆中文一区二区| 日韩电影免费在线看| 日本美女一区二区| 久久精工是国产品牌吗| 国产福利一区在线| 国内精品免费**视频| 国产精品自产自拍| 国产麻豆精品一区二区| 成人v精品蜜桃久久一区| 国产91精品一区二区麻豆网站 | 国产精品一区二区在线看| 国产suv一区二区三区88区| 国产一区二区三区精品欧美日韩一区二区三区| 麻豆成人在线观看| 国产在线日韩欧美| 99久久夜色精品国产网站| 色综合久久中文字幕| 69堂成人精品免费视频| 久久久久久影视| 一区二区三区精品视频在线| 天堂影院一区二区| 国产精品99久久久久久宅男| 不卡av在线免费观看| 欧美日韩精品一区二区三区| 精品日韩在线观看| 中文字幕日韩欧美一区二区三区| 亚洲视频免费观看| 精品一区二区三区免费毛片爱| 国产成人免费视频网站 | 色哟哟一区二区在线观看| 91精品国产麻豆国产自产在线 | 中文字幕一区二| 男女性色大片免费观看一区二区| jvid福利写真一区二区三区|