cciss: switch to ->show_info()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
25daa96f2b
commit
e88b7bb002
|
@ -54,13 +54,11 @@ static CommandList_struct *cmd_special_alloc(ctlr_info_t *h);
|
|||
static void cmd_free(ctlr_info_t *h, CommandList_struct *c);
|
||||
static void cmd_special_free(ctlr_info_t *h, CommandList_struct *c);
|
||||
|
||||
static int cciss_scsi_proc_info(
|
||||
struct Scsi_Host *sh,
|
||||
static int cciss_scsi_write_info(struct Scsi_Host *sh,
|
||||
char *buffer, /* data buffer */
|
||||
char **start, /* where data in buffer starts */
|
||||
off_t offset, /* offset from start of imaginary file */
|
||||
int length, /* length of data in buffer */
|
||||
int func); /* 0 == read, 1 == write */
|
||||
int length); /* length of data in buffer */
|
||||
static int cciss_scsi_show_info(struct seq_file *m,
|
||||
struct Scsi_Host *sh);
|
||||
|
||||
static int cciss_scsi_queue_command (struct Scsi_Host *h,
|
||||
struct scsi_cmnd *cmd);
|
||||
|
@ -82,7 +80,8 @@ static struct scsi_host_template cciss_driver_template = {
|
|||
.module = THIS_MODULE,
|
||||
.name = "cciss",
|
||||
.proc_name = "cciss",
|
||||
.proc_info = cciss_scsi_proc_info,
|
||||
.write_info = cciss_scsi_write_info,
|
||||
.show_info = cciss_scsi_show_info,
|
||||
.queuecommand = cciss_scsi_queue_command,
|
||||
.this_id = 7,
|
||||
.cmd_per_lun = 1,
|
||||
|
@ -1302,60 +1301,55 @@ cciss_scsi_user_command(ctlr_info_t *h, int hostno, char *buffer, int length)
|
|||
return length;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
cciss_scsi_proc_info(struct Scsi_Host *sh,
|
||||
cciss_scsi_write_info(struct Scsi_Host *sh,
|
||||
char *buffer, /* data buffer */
|
||||
char **start, /* where data in buffer starts */
|
||||
off_t offset, /* offset from start of imaginary file */
|
||||
int length, /* length of data in buffer */
|
||||
int func) /* 0 == read, 1 == write */
|
||||
int length) /* length of data in buffer */
|
||||
{
|
||||
|
||||
int buflen, datalen;
|
||||
ctlr_info_t *h;
|
||||
int i;
|
||||
|
||||
h = (ctlr_info_t *) sh->hostdata[0];
|
||||
ctlr_info_t *h = (ctlr_info_t *) sh->hostdata[0];
|
||||
if (h == NULL) /* This really shouldn't ever happen. */
|
||||
return -EINVAL;
|
||||
|
||||
if (func == 0) { /* User is reading from /proc/scsi/ciss*?/?* */
|
||||
buflen = sprintf(buffer, "cciss%d: SCSI host: %d\n",
|
||||
h->ctlr, sh->host_no);
|
||||
|
||||
/* this information is needed by apps to know which cciss
|
||||
device corresponds to which scsi host number without
|
||||
having to open a scsi target device node. The device
|
||||
information is not a duplicate of /proc/scsi/scsi because
|
||||
the two may be out of sync due to scsi hotplug, rather
|
||||
this info is for an app to be able to use to know how to
|
||||
get them back in sync. */
|
||||
|
||||
for (i = 0; i < ccissscsi[h->ctlr].ndevices; i++) {
|
||||
struct cciss_scsi_dev_t *sd =
|
||||
&ccissscsi[h->ctlr].dev[i];
|
||||
buflen += sprintf(&buffer[buflen], "c%db%dt%dl%d %02d "
|
||||
"0x%02x%02x%02x%02x%02x%02x%02x%02x\n",
|
||||
sh->host_no, sd->bus, sd->target, sd->lun,
|
||||
sd->devtype,
|
||||
sd->scsi3addr[0], sd->scsi3addr[1],
|
||||
sd->scsi3addr[2], sd->scsi3addr[3],
|
||||
sd->scsi3addr[4], sd->scsi3addr[5],
|
||||
sd->scsi3addr[6], sd->scsi3addr[7]);
|
||||
}
|
||||
datalen = buflen - offset;
|
||||
if (datalen < 0) { /* they're reading past EOF. */
|
||||
datalen = 0;
|
||||
*start = buffer+buflen;
|
||||
} else
|
||||
*start = buffer + offset;
|
||||
return(datalen);
|
||||
} else /* User is writing to /proc/scsi/cciss*?/?* ... */
|
||||
return cciss_scsi_user_command(h, sh->host_no,
|
||||
return cciss_scsi_user_command(h, sh->host_no,
|
||||
buffer, length);
|
||||
}
|
||||
|
||||
static int
|
||||
cciss_scsi_show_info(struct seq_file *m, struct Scsi_Host *sh)
|
||||
{
|
||||
|
||||
ctlr_info_t *h = (ctlr_info_t *) sh->hostdata[0];
|
||||
int i;
|
||||
|
||||
if (h == NULL) /* This really shouldn't ever happen. */
|
||||
return -EINVAL;
|
||||
|
||||
seq_printf(m, "cciss%d: SCSI host: %d\n",
|
||||
h->ctlr, sh->host_no);
|
||||
|
||||
/* this information is needed by apps to know which cciss
|
||||
device corresponds to which scsi host number without
|
||||
having to open a scsi target device node. The device
|
||||
information is not a duplicate of /proc/scsi/scsi because
|
||||
the two may be out of sync due to scsi hotplug, rather
|
||||
this info is for an app to be able to use to know how to
|
||||
get them back in sync. */
|
||||
|
||||
for (i = 0; i < ccissscsi[h->ctlr].ndevices; i++) {
|
||||
struct cciss_scsi_dev_t *sd =
|
||||
&ccissscsi[h->ctlr].dev[i];
|
||||
seq_printf(m, "c%db%dt%dl%d %02d "
|
||||
"0x%02x%02x%02x%02x%02x%02x%02x%02x\n",
|
||||
sh->host_no, sd->bus, sd->target, sd->lun,
|
||||
sd->devtype,
|
||||
sd->scsi3addr[0], sd->scsi3addr[1],
|
||||
sd->scsi3addr[2], sd->scsi3addr[3],
|
||||
sd->scsi3addr[4], sd->scsi3addr[5],
|
||||
sd->scsi3addr[6], sd->scsi3addr[7]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* cciss_scatter_gather takes a struct scsi_cmnd, (cmd), and does the pci
|
||||
dma mapping and fills in the scatter gather entries of the
|
||||
cciss command, c. */
|
||||
|
|
Loading…
Reference in New Issue