Loading drivers/scsi/ips.c +80 −152 Original line number Diff line number Diff line Loading @@ -326,10 +326,9 @@ static void ips_scmd_buf_write(struct scsi_cmnd * scmd, void *data, static void ips_scmd_buf_read(struct scsi_cmnd * scmd, void *data, unsigned int count); static int ips_proc_info(struct Scsi_Host *, char *, char **, off_t, int, int); static int ips_host_info(ips_ha_t *, char *, off_t, int); static void copy_mem_info(IPS_INFOSTR *, char *, int); static int copy_info(IPS_INFOSTR *, char *, ...); static int ips_write_info(struct Scsi_Host *, char *, int); static int ips_show_info(struct seq_file *, struct Scsi_Host *); static int ips_host_info(ips_ha_t *, struct seq_file *); static int ips_abort_init(ips_ha_t * ha, int index); static int ips_init_phase2(int index); Loading Loading @@ -367,7 +366,8 @@ static struct scsi_host_template ips_driver_template = { .eh_abort_handler = ips_eh_abort, .eh_host_reset_handler = ips_eh_reset, .proc_name = "ips", .proc_info = ips_proc_info, .show_info = ips_show_info, .write_info = ips_write_info, .slave_configure = ips_slave_configure, .bios_param = ips_biosparam, .this_id = -1, Loading Loading @@ -1433,25 +1433,12 @@ ips_info(struct Scsi_Host *SH) return (bp); } /****************************************************************************/ /* */ /* Routine Name: ips_proc_info */ /* */ /* Routine Description: */ /* */ /* The passthru interface for the driver */ /* */ /****************************************************************************/ static int ips_proc_info(struct Scsi_Host *host, char *buffer, char **start, off_t offset, int length, int func) ips_write_info(struct Scsi_Host *host, char *buffer, int length) { int i; int ret; ips_ha_t *ha = NULL; METHOD_TRACE("ips_proc_info", 1); /* Find our host structure */ for (i = 0; i < ips_next_controller; i++) { if (ips_sh[i]) { Loading @@ -1465,20 +1452,31 @@ ips_proc_info(struct Scsi_Host *host, char *buffer, char **start, off_t offset, if (!ha) return (-EINVAL); if (func) { /* write */ return (0); } else { /* read */ if (start) *start = buffer; return 0; } ret = ips_host_info(ha, buffer, offset, length); static int ips_show_info(struct seq_file *m, struct Scsi_Host *host) { int i; ips_ha_t *ha = NULL; return (ret); /* Find our host structure */ for (i = 0; i < ips_next_controller; i++) { if (ips_sh[i]) { if (ips_sh[i] == host) { ha = (ips_ha_t *) ips_sh[i]->hostdata; break; } } } if (!ha) return (-EINVAL); return ips_host_info(ha, m); } /*--------------------------------------------------------------------------*/ /* Helper Functions */ /*--------------------------------------------------------------------------*/ Loading Loading @@ -2035,50 +2033,42 @@ ips_cleanup_passthru(ips_ha_t * ha, ips_scb_t * scb) /* */ /****************************************************************************/ static int ips_host_info(ips_ha_t * ha, char *ptr, off_t offset, int len) ips_host_info(ips_ha_t *ha, struct seq_file *m) { IPS_INFOSTR info; METHOD_TRACE("ips_host_info", 1); info.buffer = ptr; info.length = len; info.offset = offset; info.pos = 0; info.localpos = 0; copy_info(&info, "\nIBM ServeRAID General Information:\n\n"); seq_printf(m, "\nIBM ServeRAID General Information:\n\n"); if ((le32_to_cpu(ha->nvram->signature) == IPS_NVRAM_P5_SIG) && (le16_to_cpu(ha->nvram->adapter_type) != 0)) copy_info(&info, "\tController Type : %s\n", seq_printf(m, "\tController Type : %s\n", ips_adapter_name[ha->ad_type - 1]); else copy_info(&info, seq_printf(m, "\tController Type : Unknown\n"); if (ha->io_addr) copy_info(&info, seq_printf(m, "\tIO region : 0x%lx (%d bytes)\n", ha->io_addr, ha->io_len); if (ha->mem_addr) { copy_info(&info, seq_printf(m, "\tMemory region : 0x%lx (%d bytes)\n", ha->mem_addr, ha->mem_len); copy_info(&info, seq_printf(m, "\tShared memory address : 0x%lx\n", ha->mem_ptr); } copy_info(&info, "\tIRQ number : %d\n", ha->pcidev->irq); seq_printf(m, "\tIRQ number : %d\n", ha->pcidev->irq); /* For the Next 3 lines Check for Binary 0 at the end and don't include it if it's there. */ /* That keeps everything happy for "text" operations on the proc file. */ if (le32_to_cpu(ha->nvram->signature) == IPS_NVRAM_P5_SIG) { if (ha->nvram->bios_low[3] == 0) { copy_info(&info, seq_printf(m, "\tBIOS Version : %c%c%c%c%c%c%c\n", ha->nvram->bios_high[0], ha->nvram->bios_high[1], ha->nvram->bios_high[2], ha->nvram->bios_high[3], Loading @@ -2086,7 +2076,7 @@ ips_host_info(ips_ha_t * ha, char *ptr, off_t offset, int len) ha->nvram->bios_low[2]); } else { copy_info(&info, seq_printf(m, "\tBIOS Version : %c%c%c%c%c%c%c%c\n", ha->nvram->bios_high[0], ha->nvram->bios_high[1], ha->nvram->bios_high[2], ha->nvram->bios_high[3], Loading @@ -2097,14 +2087,14 @@ ips_host_info(ips_ha_t * ha, char *ptr, off_t offset, int len) } if (ha->enq->CodeBlkVersion[7] == 0) { copy_info(&info, seq_printf(m, "\tFirmware Version : %c%c%c%c%c%c%c\n", ha->enq->CodeBlkVersion[0], ha->enq->CodeBlkVersion[1], ha->enq->CodeBlkVersion[2], ha->enq->CodeBlkVersion[3], ha->enq->CodeBlkVersion[4], ha->enq->CodeBlkVersion[5], ha->enq->CodeBlkVersion[6]); } else { copy_info(&info, seq_printf(m, "\tFirmware Version : %c%c%c%c%c%c%c%c\n", ha->enq->CodeBlkVersion[0], ha->enq->CodeBlkVersion[1], ha->enq->CodeBlkVersion[2], ha->enq->CodeBlkVersion[3], Loading @@ -2113,14 +2103,14 @@ ips_host_info(ips_ha_t * ha, char *ptr, off_t offset, int len) } if (ha->enq->BootBlkVersion[7] == 0) { copy_info(&info, seq_printf(m, "\tBoot Block Version : %c%c%c%c%c%c%c\n", ha->enq->BootBlkVersion[0], ha->enq->BootBlkVersion[1], ha->enq->BootBlkVersion[2], ha->enq->BootBlkVersion[3], ha->enq->BootBlkVersion[4], ha->enq->BootBlkVersion[5], ha->enq->BootBlkVersion[6]); } else { copy_info(&info, seq_printf(m, "\tBoot Block Version : %c%c%c%c%c%c%c%c\n", ha->enq->BootBlkVersion[0], ha->enq->BootBlkVersion[1], ha->enq->BootBlkVersion[2], ha->enq->BootBlkVersion[3], Loading @@ -2128,90 +2118,28 @@ ips_host_info(ips_ha_t * ha, char *ptr, off_t offset, int len) ha->enq->BootBlkVersion[6], ha->enq->BootBlkVersion[7]); } copy_info(&info, "\tDriver Version : %s%s\n", seq_printf(m, "\tDriver Version : %s%s\n", IPS_VERSION_HIGH, IPS_VERSION_LOW); copy_info(&info, "\tDriver Build : %d\n", seq_printf(m, "\tDriver Build : %d\n", IPS_BUILD_IDENT); copy_info(&info, "\tMax Physical Devices : %d\n", seq_printf(m, "\tMax Physical Devices : %d\n", ha->enq->ucMaxPhysicalDevices); copy_info(&info, "\tMax Active Commands : %d\n", seq_printf(m, "\tMax Active Commands : %d\n", ha->max_cmds); copy_info(&info, "\tCurrent Queued Commands : %d\n", seq_printf(m, "\tCurrent Queued Commands : %d\n", ha->scb_waitlist.count); copy_info(&info, "\tCurrent Active Commands : %d\n", seq_printf(m, "\tCurrent Active Commands : %d\n", ha->scb_activelist.count - ha->num_ioctl); copy_info(&info, "\tCurrent Queued PT Commands : %d\n", seq_printf(m, "\tCurrent Queued PT Commands : %d\n", ha->copp_waitlist.count); copy_info(&info, "\tCurrent Active PT Commands : %d\n", seq_printf(m, "\tCurrent Active PT Commands : %d\n", ha->num_ioctl); copy_info(&info, "\n"); return (info.localpos); } /****************************************************************************/ /* */ /* Routine Name: copy_mem_info */ /* */ /* Routine Description: */ /* */ /* Copy data into an IPS_INFOSTR structure */ /* */ /****************************************************************************/ static void copy_mem_info(IPS_INFOSTR * info, char *data, int len) { METHOD_TRACE("copy_mem_info", 1); if (info->pos + len < info->offset) { info->pos += len; return; } if (info->pos < info->offset) { data += (info->offset - info->pos); len -= (info->offset - info->pos); info->pos += (info->offset - info->pos); } if (info->localpos + len > info->length) len = info->length - info->localpos; seq_printf(m, "\n"); if (len > 0) { memcpy(info->buffer + info->localpos, data, len); info->pos += len; info->localpos += len; } } /****************************************************************************/ /* */ /* Routine Name: copy_info */ /* */ /* Routine Description: */ /* */ /* printf style wrapper for an info structure */ /* */ /****************************************************************************/ static int copy_info(IPS_INFOSTR * info, char *fmt, ...) { va_list args; char buf[128]; int len; METHOD_TRACE("copy_info", 1); va_start(args, fmt); len = vsprintf(buf, fmt, args); va_end(args); copy_mem_info(info, buf, len); return (len); return 0; } /****************************************************************************/ Loading drivers/scsi/ips.h +0 −9 Original line number Diff line number Diff line Loading @@ -416,7 +416,6 @@ /* * Scsi_Host Template */ static int ips_proc_info(struct Scsi_Host *, char *, char **, off_t, int, int); static int ips_biosparam(struct scsi_device *sdev, struct block_device *bdev, sector_t capacity, int geom[]); static int ips_slave_configure(struct scsi_device *SDptr); Loading Loading @@ -959,14 +958,6 @@ typedef union { IPS_ENH_SG_LIST *enh_list; } IPS_SG_LIST; typedef struct _IPS_INFOSTR { char *buffer; int length; int offset; int pos; int localpos; } IPS_INFOSTR; typedef struct { char *option_name; int *option_flag; Loading Loading
drivers/scsi/ips.c +80 −152 Original line number Diff line number Diff line Loading @@ -326,10 +326,9 @@ static void ips_scmd_buf_write(struct scsi_cmnd * scmd, void *data, static void ips_scmd_buf_read(struct scsi_cmnd * scmd, void *data, unsigned int count); static int ips_proc_info(struct Scsi_Host *, char *, char **, off_t, int, int); static int ips_host_info(ips_ha_t *, char *, off_t, int); static void copy_mem_info(IPS_INFOSTR *, char *, int); static int copy_info(IPS_INFOSTR *, char *, ...); static int ips_write_info(struct Scsi_Host *, char *, int); static int ips_show_info(struct seq_file *, struct Scsi_Host *); static int ips_host_info(ips_ha_t *, struct seq_file *); static int ips_abort_init(ips_ha_t * ha, int index); static int ips_init_phase2(int index); Loading Loading @@ -367,7 +366,8 @@ static struct scsi_host_template ips_driver_template = { .eh_abort_handler = ips_eh_abort, .eh_host_reset_handler = ips_eh_reset, .proc_name = "ips", .proc_info = ips_proc_info, .show_info = ips_show_info, .write_info = ips_write_info, .slave_configure = ips_slave_configure, .bios_param = ips_biosparam, .this_id = -1, Loading Loading @@ -1433,25 +1433,12 @@ ips_info(struct Scsi_Host *SH) return (bp); } /****************************************************************************/ /* */ /* Routine Name: ips_proc_info */ /* */ /* Routine Description: */ /* */ /* The passthru interface for the driver */ /* */ /****************************************************************************/ static int ips_proc_info(struct Scsi_Host *host, char *buffer, char **start, off_t offset, int length, int func) ips_write_info(struct Scsi_Host *host, char *buffer, int length) { int i; int ret; ips_ha_t *ha = NULL; METHOD_TRACE("ips_proc_info", 1); /* Find our host structure */ for (i = 0; i < ips_next_controller; i++) { if (ips_sh[i]) { Loading @@ -1465,20 +1452,31 @@ ips_proc_info(struct Scsi_Host *host, char *buffer, char **start, off_t offset, if (!ha) return (-EINVAL); if (func) { /* write */ return (0); } else { /* read */ if (start) *start = buffer; return 0; } ret = ips_host_info(ha, buffer, offset, length); static int ips_show_info(struct seq_file *m, struct Scsi_Host *host) { int i; ips_ha_t *ha = NULL; return (ret); /* Find our host structure */ for (i = 0; i < ips_next_controller; i++) { if (ips_sh[i]) { if (ips_sh[i] == host) { ha = (ips_ha_t *) ips_sh[i]->hostdata; break; } } } if (!ha) return (-EINVAL); return ips_host_info(ha, m); } /*--------------------------------------------------------------------------*/ /* Helper Functions */ /*--------------------------------------------------------------------------*/ Loading Loading @@ -2035,50 +2033,42 @@ ips_cleanup_passthru(ips_ha_t * ha, ips_scb_t * scb) /* */ /****************************************************************************/ static int ips_host_info(ips_ha_t * ha, char *ptr, off_t offset, int len) ips_host_info(ips_ha_t *ha, struct seq_file *m) { IPS_INFOSTR info; METHOD_TRACE("ips_host_info", 1); info.buffer = ptr; info.length = len; info.offset = offset; info.pos = 0; info.localpos = 0; copy_info(&info, "\nIBM ServeRAID General Information:\n\n"); seq_printf(m, "\nIBM ServeRAID General Information:\n\n"); if ((le32_to_cpu(ha->nvram->signature) == IPS_NVRAM_P5_SIG) && (le16_to_cpu(ha->nvram->adapter_type) != 0)) copy_info(&info, "\tController Type : %s\n", seq_printf(m, "\tController Type : %s\n", ips_adapter_name[ha->ad_type - 1]); else copy_info(&info, seq_printf(m, "\tController Type : Unknown\n"); if (ha->io_addr) copy_info(&info, seq_printf(m, "\tIO region : 0x%lx (%d bytes)\n", ha->io_addr, ha->io_len); if (ha->mem_addr) { copy_info(&info, seq_printf(m, "\tMemory region : 0x%lx (%d bytes)\n", ha->mem_addr, ha->mem_len); copy_info(&info, seq_printf(m, "\tShared memory address : 0x%lx\n", ha->mem_ptr); } copy_info(&info, "\tIRQ number : %d\n", ha->pcidev->irq); seq_printf(m, "\tIRQ number : %d\n", ha->pcidev->irq); /* For the Next 3 lines Check for Binary 0 at the end and don't include it if it's there. */ /* That keeps everything happy for "text" operations on the proc file. */ if (le32_to_cpu(ha->nvram->signature) == IPS_NVRAM_P5_SIG) { if (ha->nvram->bios_low[3] == 0) { copy_info(&info, seq_printf(m, "\tBIOS Version : %c%c%c%c%c%c%c\n", ha->nvram->bios_high[0], ha->nvram->bios_high[1], ha->nvram->bios_high[2], ha->nvram->bios_high[3], Loading @@ -2086,7 +2076,7 @@ ips_host_info(ips_ha_t * ha, char *ptr, off_t offset, int len) ha->nvram->bios_low[2]); } else { copy_info(&info, seq_printf(m, "\tBIOS Version : %c%c%c%c%c%c%c%c\n", ha->nvram->bios_high[0], ha->nvram->bios_high[1], ha->nvram->bios_high[2], ha->nvram->bios_high[3], Loading @@ -2097,14 +2087,14 @@ ips_host_info(ips_ha_t * ha, char *ptr, off_t offset, int len) } if (ha->enq->CodeBlkVersion[7] == 0) { copy_info(&info, seq_printf(m, "\tFirmware Version : %c%c%c%c%c%c%c\n", ha->enq->CodeBlkVersion[0], ha->enq->CodeBlkVersion[1], ha->enq->CodeBlkVersion[2], ha->enq->CodeBlkVersion[3], ha->enq->CodeBlkVersion[4], ha->enq->CodeBlkVersion[5], ha->enq->CodeBlkVersion[6]); } else { copy_info(&info, seq_printf(m, "\tFirmware Version : %c%c%c%c%c%c%c%c\n", ha->enq->CodeBlkVersion[0], ha->enq->CodeBlkVersion[1], ha->enq->CodeBlkVersion[2], ha->enq->CodeBlkVersion[3], Loading @@ -2113,14 +2103,14 @@ ips_host_info(ips_ha_t * ha, char *ptr, off_t offset, int len) } if (ha->enq->BootBlkVersion[7] == 0) { copy_info(&info, seq_printf(m, "\tBoot Block Version : %c%c%c%c%c%c%c\n", ha->enq->BootBlkVersion[0], ha->enq->BootBlkVersion[1], ha->enq->BootBlkVersion[2], ha->enq->BootBlkVersion[3], ha->enq->BootBlkVersion[4], ha->enq->BootBlkVersion[5], ha->enq->BootBlkVersion[6]); } else { copy_info(&info, seq_printf(m, "\tBoot Block Version : %c%c%c%c%c%c%c%c\n", ha->enq->BootBlkVersion[0], ha->enq->BootBlkVersion[1], ha->enq->BootBlkVersion[2], ha->enq->BootBlkVersion[3], Loading @@ -2128,90 +2118,28 @@ ips_host_info(ips_ha_t * ha, char *ptr, off_t offset, int len) ha->enq->BootBlkVersion[6], ha->enq->BootBlkVersion[7]); } copy_info(&info, "\tDriver Version : %s%s\n", seq_printf(m, "\tDriver Version : %s%s\n", IPS_VERSION_HIGH, IPS_VERSION_LOW); copy_info(&info, "\tDriver Build : %d\n", seq_printf(m, "\tDriver Build : %d\n", IPS_BUILD_IDENT); copy_info(&info, "\tMax Physical Devices : %d\n", seq_printf(m, "\tMax Physical Devices : %d\n", ha->enq->ucMaxPhysicalDevices); copy_info(&info, "\tMax Active Commands : %d\n", seq_printf(m, "\tMax Active Commands : %d\n", ha->max_cmds); copy_info(&info, "\tCurrent Queued Commands : %d\n", seq_printf(m, "\tCurrent Queued Commands : %d\n", ha->scb_waitlist.count); copy_info(&info, "\tCurrent Active Commands : %d\n", seq_printf(m, "\tCurrent Active Commands : %d\n", ha->scb_activelist.count - ha->num_ioctl); copy_info(&info, "\tCurrent Queued PT Commands : %d\n", seq_printf(m, "\tCurrent Queued PT Commands : %d\n", ha->copp_waitlist.count); copy_info(&info, "\tCurrent Active PT Commands : %d\n", seq_printf(m, "\tCurrent Active PT Commands : %d\n", ha->num_ioctl); copy_info(&info, "\n"); return (info.localpos); } /****************************************************************************/ /* */ /* Routine Name: copy_mem_info */ /* */ /* Routine Description: */ /* */ /* Copy data into an IPS_INFOSTR structure */ /* */ /****************************************************************************/ static void copy_mem_info(IPS_INFOSTR * info, char *data, int len) { METHOD_TRACE("copy_mem_info", 1); if (info->pos + len < info->offset) { info->pos += len; return; } if (info->pos < info->offset) { data += (info->offset - info->pos); len -= (info->offset - info->pos); info->pos += (info->offset - info->pos); } if (info->localpos + len > info->length) len = info->length - info->localpos; seq_printf(m, "\n"); if (len > 0) { memcpy(info->buffer + info->localpos, data, len); info->pos += len; info->localpos += len; } } /****************************************************************************/ /* */ /* Routine Name: copy_info */ /* */ /* Routine Description: */ /* */ /* printf style wrapper for an info structure */ /* */ /****************************************************************************/ static int copy_info(IPS_INFOSTR * info, char *fmt, ...) { va_list args; char buf[128]; int len; METHOD_TRACE("copy_info", 1); va_start(args, fmt); len = vsprintf(buf, fmt, args); va_end(args); copy_mem_info(info, buf, len); return (len); return 0; } /****************************************************************************/ Loading
drivers/scsi/ips.h +0 −9 Original line number Diff line number Diff line Loading @@ -416,7 +416,6 @@ /* * Scsi_Host Template */ static int ips_proc_info(struct Scsi_Host *, char *, char **, off_t, int, int); static int ips_biosparam(struct scsi_device *sdev, struct block_device *bdev, sector_t capacity, int geom[]); static int ips_slave_configure(struct scsi_device *SDptr); Loading Loading @@ -959,14 +958,6 @@ typedef union { IPS_ENH_SG_LIST *enh_list; } IPS_SG_LIST; typedef struct _IPS_INFOSTR { char *buffer; int length; int offset; int pos; int localpos; } IPS_INFOSTR; typedef struct { char *option_name; int *option_flag; Loading