diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2000-02-18 00:24:27 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2000-02-18 00:24:27 +0000 |
commit | b9558d5f86c471a125abf1fb3a3882fb053b1f8c (patch) | |
tree | 707b53ec64e740a7da87d5f36485e3cd9b1c794e /drivers/scsi/gdth_proc.c | |
parent | b3ac367c7a3e6047abe74817db27e34e759f279f (diff) |
Merge with Linux 2.3.41.
Diffstat (limited to 'drivers/scsi/gdth_proc.c')
-rw-r--r-- | drivers/scsi/gdth_proc.c | 86 |
1 files changed, 42 insertions, 44 deletions
diff --git a/drivers/scsi/gdth_proc.c b/drivers/scsi/gdth_proc.c index 6d0112aba..24861d034 100644 --- a/drivers/scsi/gdth_proc.c +++ b/drivers/scsi/gdth_proc.c @@ -31,22 +31,17 @@ int gdth_proc_info(char *buffer,char **start,off_t offset,int length, static int gdth_set_info(char *buffer,int length,int vh,int hanum,int busnum) { int ret_val; - Scsi_Cmnd scp; - Scsi_Device sdev; + Scsi_Cmnd * scp; + Scsi_Device * sdev; gdth_iowr_str *piowr; TRACE2(("gdth_set_info() ha %d bus %d\n",hanum,busnum)); piowr = (gdth_iowr_str *)buffer; - memset(&sdev,0,sizeof(Scsi_Device)); - memset(&scp, 0,sizeof(Scsi_Cmnd)); - sdev.host = gdth_ctr_vtab[vh]; - sdev.id = sdev.host->this_id; - scp.cmd_len = 12; - scp.host = gdth_ctr_vtab[vh]; - scp.target = sdev.host->this_id; - scp.device = &sdev; - scp.use_sg = 0; + sdev = scsi_get_host_dev(gdth_ctr_vtab[vh]); + scp = scsi_allocate_device(sdev, 1, FALSE); + scp->cmd_len = 12; + scp->use_sg = 0; if (length >= 4) { if (strncmp(buffer,"gdth",4) == 0) { @@ -62,10 +57,14 @@ static int gdth_set_info(char *buffer,int length,int vh,int hanum,int busnum) } else { ret_val = -EINVAL; } + + scsi_release_command(scp); + scsi_free_host_dev(sdev); + return ret_val; } -static int gdth_set_asc_info(char *buffer,int length,int hanum,Scsi_Cmnd scp) +static int gdth_set_asc_info(char *buffer,int length,int hanum,Scsi_Cmnd * scp) { int orig_length, drive, wb_mode; int i, found; @@ -105,7 +104,7 @@ static int gdth_set_asc_info(char *buffer,int length,int hanum,Scsi_Cmnd scp) gdtcmd.u.cache.DeviceNo = i; gdtcmd.u.cache.BlockNo = 1; gdtcmd.u.cache.sg_canz = 0; - gdth_do_cmd(&scp, &gdtcmd, 30); + gdth_do_cmd(scp, &gdtcmd, 30); } } if (!found) @@ -158,7 +157,7 @@ static int gdth_set_asc_info(char *buffer,int length,int hanum,Scsi_Cmnd scp) gdtcmd.u.ioctl.subfunc = CACHE_CONFIG; gdtcmd.u.ioctl.channel = INVALID_CHANNEL; pcpar->write_back = wb_mode==1 ? 0:1; - gdth_do_cmd(&scp, &gdtcmd, 30); + gdth_do_cmd(scp, &gdtcmd, 30); gdth_ioctl_free(hanum); printk("Done.\n"); return(orig_length); @@ -168,7 +167,7 @@ static int gdth_set_asc_info(char *buffer,int length,int hanum,Scsi_Cmnd scp) return(-EINVAL); } -static int gdth_set_bin_info(char *buffer,int length,int hanum,Scsi_Cmnd scp) +static int gdth_set_bin_info(char *buffer,int length,int hanum,Scsi_Cmnd * scp) { unchar i, j; gdth_ha_str *ha; @@ -241,8 +240,8 @@ static int gdth_set_bin_info(char *buffer,int length,int hanum,Scsi_Cmnd scp) *ppadd2 = virt_to_bus(piord->iu.general.data+add_size); } /* do IOCTL */ - gdth_do_cmd(&scp, pcmd, piowr->timeout); - piord->status = (ulong32)scp.SCp.Message; + gdth_do_cmd(scp, pcmd, piowr->timeout); + piord->status = (ulong32)scp->SCp.Message; break; case GDTIOCTL_DRVERS: @@ -401,8 +400,8 @@ static int gdth_get_info(char *buffer,char **start,off_t offset, gdth_cmd_str gdtcmd; gdth_evt_str estr; - Scsi_Cmnd scp; - Scsi_Device sdev; + Scsi_Cmnd * scp; + Scsi_Device *sdev; char hrec[161]; struct timeval tv; @@ -417,15 +416,10 @@ static int gdth_get_info(char *buffer,char **start,off_t offset, ha = HADATA(gdth_ctr_tab[hanum]); id = length; - memset(&sdev,0,sizeof(Scsi_Device)); - memset(&scp, 0,sizeof(Scsi_Cmnd)); - sdev.host = gdth_ctr_vtab[vh]; - sdev.id = sdev.host->this_id; - scp.cmd_len = 12; - scp.host = gdth_ctr_vtab[vh]; - scp.target = sdev.host->this_id; - scp.device = &sdev; - scp.use_sg = 0; + sdev = scsi_get_host_dev(gdth_ctr_vtab[vh]); + scp = scsi_allocate_device(sdev, 1, FALSE); + scp->cmd_len = 12; + scp->use_sg = 0; /* look for buffer ID in length */ if (id > 1) { @@ -531,11 +525,11 @@ static int gdth_get_info(char *buffer,char **start,off_t offset, sizeof(pds->list[0]); if (pds->entries > cnt) pds->entries = cnt; - gdth_do_cmd(&scp, &gdtcmd, 30); - if (scp.SCp.Message != S_OK) + gdth_do_cmd(scp, &gdtcmd, 30); + if (scp->SCp.Message != S_OK) pds->count = 0; TRACE2(("pdr_statistics() entries %d status %d\n", - pds->count, scp.SCp.Message)); + pds->count, scp->SCp.Message)); /* other IOCTLs must fit into area GDTH_SCRATCH/4 */ for (j = 0; j < ha->raw[i].pdev_cnt; ++j) { @@ -551,8 +545,8 @@ static int gdth_get_info(char *buffer,char **start,off_t offset, gdtcmd.u.ioctl.subfunc = SCSI_DR_INFO | L_CTRL_PATTERN; gdtcmd.u.ioctl.channel = ha->raw[i].address | ha->raw[i].id_list[j]; - gdth_do_cmd(&scp, &gdtcmd, 30); - if (scp.SCp.Message == S_OK) { + gdth_do_cmd(scp, &gdtcmd, 30); + if (scp->SCp.Message == S_OK) { strncpy(hrec,pdi->vendor,8); strncpy(hrec+8,pdi->product,16); strncpy(hrec+24,pdi->revision,4); @@ -602,8 +596,8 @@ static int gdth_get_info(char *buffer,char **start,off_t offset, gdtcmd.u.ioctl.channel = ha->raw[i].address | ha->raw[i].id_list[j]; pdef->sddc_type = 0x08; - gdth_do_cmd(&scp, &gdtcmd, 30); - if (scp.SCp.Message == S_OK) { + gdth_do_cmd(scp, &gdtcmd, 30); + if (scp->SCp.Message == S_OK) { size = sprintf(buffer+len, " Grown Defects:\t%d\n", pdef->sddc_cnt); @@ -649,8 +643,8 @@ static int gdth_get_info(char *buffer,char **start,off_t offset, gdtcmd.u.ioctl.param_size = sizeof(gdth_cdrinfo_str); gdtcmd.u.ioctl.subfunc = CACHE_DRV_INFO; gdtcmd.u.ioctl.channel = drv_no; - gdth_do_cmd(&scp, &gdtcmd, 30); - if (scp.SCp.Message != S_OK) + gdth_do_cmd(scp, &gdtcmd, 30); + if (scp->SCp.Message != S_OK) break; pcdi->ld_dtype >>= 16; j++; @@ -746,8 +740,8 @@ static int gdth_get_info(char *buffer,char **start,off_t offset, gdtcmd.u.ioctl.param_size = sizeof(gdth_arrayinf_str); gdtcmd.u.ioctl.subfunc = ARRAY_INFO | LA_CTRL_PATTERN; gdtcmd.u.ioctl.channel = i; - gdth_do_cmd(&scp, &gdtcmd, 30); - if (scp.SCp.Message == S_OK) { + gdth_do_cmd(scp, &gdtcmd, 30); + if (scp->SCp.Message == S_OK) { if (pai->ai_state == 0) strcpy(hrec, "idle"); else if (pai->ai_state == 2) @@ -821,8 +815,8 @@ static int gdth_get_info(char *buffer,char **start,off_t offset, gdtcmd.u.ioctl.channel = i; phg->entries = MAX_HDRIVES; phg->offset = GDTOFFSOF(gdth_hget_str, entry[0]); - gdth_do_cmd(&scp, &gdtcmd, 30); - if (scp.SCp.Message != S_OK) { + gdth_do_cmd(scp, &gdtcmd, 30); + if (scp->SCp.Message != S_OK) { ha->hdr[i].ldr_no = i; ha->hdr[i].rw_attribs = 0; ha->hdr[i].start_sec = 0; @@ -837,7 +831,7 @@ static int gdth_get_info(char *buffer,char **start,off_t offset, } } TRACE2(("host_get entries %d status %d\n", - phg->entries, scp.SCp.Message)); + phg->entries, scp->SCp.Message)); } gdth_ioctl_free(hanum); @@ -915,6 +909,10 @@ static int gdth_get_info(char *buffer,char **start,off_t offset, } stop_output: + + scsi_release_command(scp); + scsi_free_host_dev(sdev); + *start = buffer +(offset-begin); len -= (offset-begin); if (len > length) @@ -926,11 +924,11 @@ stop_output: static void gdth_do_cmd(Scsi_Cmnd *scp,gdth_cmd_str *gdtcmd,int timeout) { - char cmnd[12]; + char cmnd[MAX_COMMAND_SIZE]; DECLARE_MUTEX_LOCKED(sem); TRACE2(("gdth_do_cmd()\n")); - memset(cmnd, 0, 12); + memset(cmnd, 0, MAX_COMMAND_SIZE); scp->request.rq_status = RQ_SCSI_BUSY; scp->request.sem = &sem; scp->SCp.this_residual = IOCTL_PRI; |