Loading drivers/scsi/aic7xxx/aic79xx_osm.c +2 −7 Original line number Diff line number Diff line Loading @@ -906,7 +906,8 @@ struct scsi_host_template aic79xx_driver_template = { .module = THIS_MODULE, .name = "aic79xx", .proc_name = "aic79xx", .proc_info = ahd_linux_proc_info, .show_info = ahd_linux_show_info, .write_info = ahd_proc_write_seeprom, .info = ahd_linux_info, .queuecommand = ahd_linux_queue, .eh_abort_handler = ahd_linux_abort, Loading Loading @@ -1702,19 +1703,13 @@ ahd_send_async(struct ahd_softc *ahd, char channel, switch (code) { case AC_TRANSFER_NEG: { char buf[80]; struct scsi_target *starget; struct info_str info; struct ahd_initiator_tinfo *tinfo; struct ahd_tmode_tstate *tstate; unsigned int target_ppr_options; BUG_ON(target == CAM_TARGET_WILDCARD); info.buffer = buf; info.length = sizeof(buf); info.offset = 0; info.pos = 0; tinfo = ahd_fetch_transinfo(ahd, channel, ahd->our_id, target, &tstate); Loading drivers/scsi/aic7xxx/aic79xx_osm.h +2 −10 Original line number Diff line number Diff line Loading @@ -379,14 +379,6 @@ void ahd_insb(struct ahd_softc * ahd, long port, int ahd_linux_register_host(struct ahd_softc *, struct scsi_host_template *); /*************************** Pretty Printing **********************************/ struct info_str { char *buffer; int length; off_t offset; int pos; }; /******************************** Locking *************************************/ static inline void ahd_lockinit(struct ahd_softc *ahd) Loading Loading @@ -513,8 +505,8 @@ ahd_flush_device_writes(struct ahd_softc *ahd) } /**************************** Proc FS Support *********************************/ int ahd_linux_proc_info(struct Scsi_Host *, char *, char **, off_t, int, int); int ahd_proc_write_seeprom(struct Scsi_Host *, char *, int); int ahd_linux_show_info(struct seq_file *,struct Scsi_Host *); /*********************** Transaction Access Wrappers **************************/ static inline void ahd_cmd_set_transaction_status(struct scsi_cmnd *, uint32_t); Loading drivers/scsi/aic7xxx/aic79xx_proc.c +49 −114 Original line number Diff line number Diff line Loading @@ -42,16 +42,12 @@ #include "aic79xx_osm.h" #include "aic79xx_inline.h" static void copy_mem_info(struct info_str *info, char *data, int len); static int copy_info(struct info_str *info, char *fmt, ...); static void ahd_dump_target_state(struct ahd_softc *ahd, struct info_str *info, struct seq_file *m, u_int our_id, char channel, u_int target_id); static void ahd_dump_device_state(struct info_str *info, static void ahd_dump_device_state(struct seq_file *m, struct scsi_device *sdev); static int ahd_proc_write_seeprom(struct ahd_softc *ahd, char *buffer, int length); /* * Table of syncrates that don't follow the "divisible by 4" Loading Loading @@ -93,58 +89,15 @@ ahd_calc_syncsrate(u_int period_factor) return (10000000 / (period_factor * 4 * 10)); } static void copy_mem_info(struct info_str *info, char *data, int len) { if (info->pos + len > info->offset + info->length) len = info->offset + info->length - info->pos; if (info->pos + len < info->offset) { info->pos += len; return; } if (info->pos < info->offset) { off_t partial; partial = info->offset - info->pos; data += partial; info->pos += partial; len -= partial; } if (len > 0) { memcpy(info->buffer, data, len); info->pos += len; info->buffer += len; } } static int copy_info(struct info_str *info, char *fmt, ...) { va_list args; char buf[256]; int len; va_start(args, fmt); len = vsprintf(buf, fmt, args); va_end(args); copy_mem_info(info, buf, len); return (len); } static void ahd_format_transinfo(struct info_str *info, struct ahd_transinfo *tinfo) ahd_format_transinfo(struct seq_file *m, struct ahd_transinfo *tinfo) { u_int speed; u_int freq; u_int mb; if (tinfo->period == AHD_PERIOD_UNKNOWN) { copy_info(info, "Renegotiation Pending\n"); seq_printf(m, "Renegotiation Pending\n"); return; } speed = 3300; Loading @@ -156,34 +109,34 @@ ahd_format_transinfo(struct info_str *info, struct ahd_transinfo *tinfo) speed *= (0x01 << tinfo->width); mb = speed / 1000; if (mb > 0) copy_info(info, "%d.%03dMB/s transfers", mb, speed % 1000); seq_printf(m, "%d.%03dMB/s transfers", mb, speed % 1000); else copy_info(info, "%dKB/s transfers", speed); seq_printf(m, "%dKB/s transfers", speed); if (freq != 0) { int printed_options; printed_options = 0; copy_info(info, " (%d.%03dMHz", freq / 1000, freq % 1000); seq_printf(m, " (%d.%03dMHz", freq / 1000, freq % 1000); if ((tinfo->ppr_options & MSG_EXT_PPR_RD_STRM) != 0) { copy_info(info, " RDSTRM"); seq_printf(m, " RDSTRM"); printed_options++; } if ((tinfo->ppr_options & MSG_EXT_PPR_DT_REQ) != 0) { copy_info(info, "%s", printed_options ? "|DT" : " DT"); seq_printf(m, "%s", printed_options ? "|DT" : " DT"); printed_options++; } if ((tinfo->ppr_options & MSG_EXT_PPR_IU_REQ) != 0) { copy_info(info, "%s", printed_options ? "|IU" : " IU"); seq_printf(m, "%s", printed_options ? "|IU" : " IU"); printed_options++; } if ((tinfo->ppr_options & MSG_EXT_PPR_RTI) != 0) { copy_info(info, "%s", seq_printf(m, "%s", printed_options ? "|RTI" : " RTI"); printed_options++; } if ((tinfo->ppr_options & MSG_EXT_PPR_QAS_REQ) != 0) { copy_info(info, "%s", seq_printf(m, "%s", printed_options ? "|QAS" : " QAS"); printed_options++; } Loading @@ -191,19 +144,19 @@ ahd_format_transinfo(struct info_str *info, struct ahd_transinfo *tinfo) if (tinfo->width > 0) { if (freq != 0) { copy_info(info, ", "); seq_printf(m, ", "); } else { copy_info(info, " ("); seq_printf(m, " ("); } copy_info(info, "%dbit)", 8 * (0x01 << tinfo->width)); seq_printf(m, "%dbit)", 8 * (0x01 << tinfo->width)); } else if (freq != 0) { copy_info(info, ")"); seq_printf(m, ")"); } copy_info(info, "\n"); seq_printf(m, "\n"); } static void ahd_dump_target_state(struct ahd_softc *ahd, struct info_str *info, ahd_dump_target_state(struct ahd_softc *ahd, struct seq_file *m, u_int our_id, char channel, u_int target_id) { struct scsi_target *starget; Loading @@ -213,17 +166,17 @@ ahd_dump_target_state(struct ahd_softc *ahd, struct info_str *info, tinfo = ahd_fetch_transinfo(ahd, channel, our_id, target_id, &tstate); copy_info(info, "Target %d Negotiation Settings\n", target_id); copy_info(info, "\tUser: "); ahd_format_transinfo(info, &tinfo->user); seq_printf(m, "Target %d Negotiation Settings\n", target_id); seq_printf(m, "\tUser: "); ahd_format_transinfo(m, &tinfo->user); starget = ahd->platform_data->starget[target_id]; if (starget == NULL) return; copy_info(info, "\tGoal: "); ahd_format_transinfo(info, &tinfo->goal); copy_info(info, "\tCurr: "); ahd_format_transinfo(info, &tinfo->curr); seq_printf(m, "\tGoal: "); ahd_format_transinfo(m, &tinfo->goal); seq_printf(m, "\tCurr: "); ahd_format_transinfo(m, &tinfo->curr); for (lun = 0; lun < AHD_NUM_LUNS; lun++) { struct scsi_device *dev; Loading @@ -233,29 +186,30 @@ ahd_dump_target_state(struct ahd_softc *ahd, struct info_str *info, if (dev == NULL) continue; ahd_dump_device_state(info, dev); ahd_dump_device_state(m, dev); } } static void ahd_dump_device_state(struct info_str *info, struct scsi_device *sdev) ahd_dump_device_state(struct seq_file *m, struct scsi_device *sdev) { struct ahd_linux_device *dev = scsi_transport_device_data(sdev); copy_info(info, "\tChannel %c Target %d Lun %d Settings\n", seq_printf(m, "\tChannel %c Target %d Lun %d Settings\n", sdev->sdev_target->channel + 'A', sdev->sdev_target->id, sdev->lun); copy_info(info, "\t\tCommands Queued %ld\n", dev->commands_issued); copy_info(info, "\t\tCommands Active %d\n", dev->active); copy_info(info, "\t\tCommand Openings %d\n", dev->openings); copy_info(info, "\t\tMax Tagged Openings %d\n", dev->maxtags); copy_info(info, "\t\tDevice Queue Frozen Count %d\n", dev->qfrozen); seq_printf(m, "\t\tCommands Queued %ld\n", dev->commands_issued); seq_printf(m, "\t\tCommands Active %d\n", dev->active); seq_printf(m, "\t\tCommand Openings %d\n", dev->openings); seq_printf(m, "\t\tMax Tagged Openings %d\n", dev->maxtags); seq_printf(m, "\t\tDevice Queue Frozen Count %d\n", dev->qfrozen); } static int ahd_proc_write_seeprom(struct ahd_softc *ahd, char *buffer, int length) int ahd_proc_write_seeprom(struct Scsi_Host *shost, char *buffer, int length) { struct ahd_softc *ahd = *(struct ahd_softc **)shost->hostdata; ahd_mode_state saved_modes; int have_seeprom; u_long s; Loading Loading @@ -319,64 +273,45 @@ done: * Return information to handle /proc support for the driver. */ int ahd_linux_proc_info(struct Scsi_Host *shost, char *buffer, char **start, off_t offset, int length, int inout) ahd_linux_show_info(struct seq_file *m, struct Scsi_Host *shost) { struct ahd_softc *ahd = *(struct ahd_softc **)shost->hostdata; struct info_str info; char ahd_info[256]; u_int max_targ; u_int i; int retval; /* Has data been written to the file? */ if (inout == TRUE) { retval = ahd_proc_write_seeprom(ahd, buffer, length); goto done; } if (start) *start = buffer; info.buffer = buffer; info.length = length; info.offset = offset; info.pos = 0; copy_info(&info, "Adaptec AIC79xx driver version: %s\n", seq_printf(m, "Adaptec AIC79xx driver version: %s\n", AIC79XX_DRIVER_VERSION); copy_info(&info, "%s\n", ahd->description); seq_printf(m, "%s\n", ahd->description); ahd_controller_info(ahd, ahd_info); copy_info(&info, "%s\n", ahd_info); copy_info(&info, "Allocated SCBs: %d, SG List Length: %d\n\n", seq_printf(m, "%s\n", ahd_info); seq_printf(m, "Allocated SCBs: %d, SG List Length: %d\n\n", ahd->scb_data.numscbs, AHD_NSEG); max_targ = 16; if (ahd->seep_config == NULL) copy_info(&info, "No Serial EEPROM\n"); seq_printf(m, "No Serial EEPROM\n"); else { copy_info(&info, "Serial EEPROM:\n"); seq_printf(m, "Serial EEPROM:\n"); for (i = 0; i < sizeof(*ahd->seep_config)/2; i++) { if (((i % 8) == 0) && (i != 0)) { copy_info(&info, "\n"); seq_printf(m, "\n"); } copy_info(&info, "0x%.4x ", seq_printf(m, "0x%.4x ", ((uint16_t*)ahd->seep_config)[i]); } copy_info(&info, "\n"); seq_printf(m, "\n"); } copy_info(&info, "\n"); seq_printf(m, "\n"); if ((ahd->features & AHD_WIDE) == 0) max_targ = 8; for (i = 0; i < max_targ; i++) { ahd_dump_target_state(ahd, &info, ahd->our_id, 'A', ahd_dump_target_state(ahd, m, ahd->our_id, 'A', /*target_id*/i); } retval = info.pos > info.offset ? info.pos - info.offset : 0; done: return (retval); return 0; } Loading
drivers/scsi/aic7xxx/aic79xx_osm.c +2 −7 Original line number Diff line number Diff line Loading @@ -906,7 +906,8 @@ struct scsi_host_template aic79xx_driver_template = { .module = THIS_MODULE, .name = "aic79xx", .proc_name = "aic79xx", .proc_info = ahd_linux_proc_info, .show_info = ahd_linux_show_info, .write_info = ahd_proc_write_seeprom, .info = ahd_linux_info, .queuecommand = ahd_linux_queue, .eh_abort_handler = ahd_linux_abort, Loading Loading @@ -1702,19 +1703,13 @@ ahd_send_async(struct ahd_softc *ahd, char channel, switch (code) { case AC_TRANSFER_NEG: { char buf[80]; struct scsi_target *starget; struct info_str info; struct ahd_initiator_tinfo *tinfo; struct ahd_tmode_tstate *tstate; unsigned int target_ppr_options; BUG_ON(target == CAM_TARGET_WILDCARD); info.buffer = buf; info.length = sizeof(buf); info.offset = 0; info.pos = 0; tinfo = ahd_fetch_transinfo(ahd, channel, ahd->our_id, target, &tstate); Loading
drivers/scsi/aic7xxx/aic79xx_osm.h +2 −10 Original line number Diff line number Diff line Loading @@ -379,14 +379,6 @@ void ahd_insb(struct ahd_softc * ahd, long port, int ahd_linux_register_host(struct ahd_softc *, struct scsi_host_template *); /*************************** Pretty Printing **********************************/ struct info_str { char *buffer; int length; off_t offset; int pos; }; /******************************** Locking *************************************/ static inline void ahd_lockinit(struct ahd_softc *ahd) Loading Loading @@ -513,8 +505,8 @@ ahd_flush_device_writes(struct ahd_softc *ahd) } /**************************** Proc FS Support *********************************/ int ahd_linux_proc_info(struct Scsi_Host *, char *, char **, off_t, int, int); int ahd_proc_write_seeprom(struct Scsi_Host *, char *, int); int ahd_linux_show_info(struct seq_file *,struct Scsi_Host *); /*********************** Transaction Access Wrappers **************************/ static inline void ahd_cmd_set_transaction_status(struct scsi_cmnd *, uint32_t); Loading
drivers/scsi/aic7xxx/aic79xx_proc.c +49 −114 Original line number Diff line number Diff line Loading @@ -42,16 +42,12 @@ #include "aic79xx_osm.h" #include "aic79xx_inline.h" static void copy_mem_info(struct info_str *info, char *data, int len); static int copy_info(struct info_str *info, char *fmt, ...); static void ahd_dump_target_state(struct ahd_softc *ahd, struct info_str *info, struct seq_file *m, u_int our_id, char channel, u_int target_id); static void ahd_dump_device_state(struct info_str *info, static void ahd_dump_device_state(struct seq_file *m, struct scsi_device *sdev); static int ahd_proc_write_seeprom(struct ahd_softc *ahd, char *buffer, int length); /* * Table of syncrates that don't follow the "divisible by 4" Loading Loading @@ -93,58 +89,15 @@ ahd_calc_syncsrate(u_int period_factor) return (10000000 / (period_factor * 4 * 10)); } static void copy_mem_info(struct info_str *info, char *data, int len) { if (info->pos + len > info->offset + info->length) len = info->offset + info->length - info->pos; if (info->pos + len < info->offset) { info->pos += len; return; } if (info->pos < info->offset) { off_t partial; partial = info->offset - info->pos; data += partial; info->pos += partial; len -= partial; } if (len > 0) { memcpy(info->buffer, data, len); info->pos += len; info->buffer += len; } } static int copy_info(struct info_str *info, char *fmt, ...) { va_list args; char buf[256]; int len; va_start(args, fmt); len = vsprintf(buf, fmt, args); va_end(args); copy_mem_info(info, buf, len); return (len); } static void ahd_format_transinfo(struct info_str *info, struct ahd_transinfo *tinfo) ahd_format_transinfo(struct seq_file *m, struct ahd_transinfo *tinfo) { u_int speed; u_int freq; u_int mb; if (tinfo->period == AHD_PERIOD_UNKNOWN) { copy_info(info, "Renegotiation Pending\n"); seq_printf(m, "Renegotiation Pending\n"); return; } speed = 3300; Loading @@ -156,34 +109,34 @@ ahd_format_transinfo(struct info_str *info, struct ahd_transinfo *tinfo) speed *= (0x01 << tinfo->width); mb = speed / 1000; if (mb > 0) copy_info(info, "%d.%03dMB/s transfers", mb, speed % 1000); seq_printf(m, "%d.%03dMB/s transfers", mb, speed % 1000); else copy_info(info, "%dKB/s transfers", speed); seq_printf(m, "%dKB/s transfers", speed); if (freq != 0) { int printed_options; printed_options = 0; copy_info(info, " (%d.%03dMHz", freq / 1000, freq % 1000); seq_printf(m, " (%d.%03dMHz", freq / 1000, freq % 1000); if ((tinfo->ppr_options & MSG_EXT_PPR_RD_STRM) != 0) { copy_info(info, " RDSTRM"); seq_printf(m, " RDSTRM"); printed_options++; } if ((tinfo->ppr_options & MSG_EXT_PPR_DT_REQ) != 0) { copy_info(info, "%s", printed_options ? "|DT" : " DT"); seq_printf(m, "%s", printed_options ? "|DT" : " DT"); printed_options++; } if ((tinfo->ppr_options & MSG_EXT_PPR_IU_REQ) != 0) { copy_info(info, "%s", printed_options ? "|IU" : " IU"); seq_printf(m, "%s", printed_options ? "|IU" : " IU"); printed_options++; } if ((tinfo->ppr_options & MSG_EXT_PPR_RTI) != 0) { copy_info(info, "%s", seq_printf(m, "%s", printed_options ? "|RTI" : " RTI"); printed_options++; } if ((tinfo->ppr_options & MSG_EXT_PPR_QAS_REQ) != 0) { copy_info(info, "%s", seq_printf(m, "%s", printed_options ? "|QAS" : " QAS"); printed_options++; } Loading @@ -191,19 +144,19 @@ ahd_format_transinfo(struct info_str *info, struct ahd_transinfo *tinfo) if (tinfo->width > 0) { if (freq != 0) { copy_info(info, ", "); seq_printf(m, ", "); } else { copy_info(info, " ("); seq_printf(m, " ("); } copy_info(info, "%dbit)", 8 * (0x01 << tinfo->width)); seq_printf(m, "%dbit)", 8 * (0x01 << tinfo->width)); } else if (freq != 0) { copy_info(info, ")"); seq_printf(m, ")"); } copy_info(info, "\n"); seq_printf(m, "\n"); } static void ahd_dump_target_state(struct ahd_softc *ahd, struct info_str *info, ahd_dump_target_state(struct ahd_softc *ahd, struct seq_file *m, u_int our_id, char channel, u_int target_id) { struct scsi_target *starget; Loading @@ -213,17 +166,17 @@ ahd_dump_target_state(struct ahd_softc *ahd, struct info_str *info, tinfo = ahd_fetch_transinfo(ahd, channel, our_id, target_id, &tstate); copy_info(info, "Target %d Negotiation Settings\n", target_id); copy_info(info, "\tUser: "); ahd_format_transinfo(info, &tinfo->user); seq_printf(m, "Target %d Negotiation Settings\n", target_id); seq_printf(m, "\tUser: "); ahd_format_transinfo(m, &tinfo->user); starget = ahd->platform_data->starget[target_id]; if (starget == NULL) return; copy_info(info, "\tGoal: "); ahd_format_transinfo(info, &tinfo->goal); copy_info(info, "\tCurr: "); ahd_format_transinfo(info, &tinfo->curr); seq_printf(m, "\tGoal: "); ahd_format_transinfo(m, &tinfo->goal); seq_printf(m, "\tCurr: "); ahd_format_transinfo(m, &tinfo->curr); for (lun = 0; lun < AHD_NUM_LUNS; lun++) { struct scsi_device *dev; Loading @@ -233,29 +186,30 @@ ahd_dump_target_state(struct ahd_softc *ahd, struct info_str *info, if (dev == NULL) continue; ahd_dump_device_state(info, dev); ahd_dump_device_state(m, dev); } } static void ahd_dump_device_state(struct info_str *info, struct scsi_device *sdev) ahd_dump_device_state(struct seq_file *m, struct scsi_device *sdev) { struct ahd_linux_device *dev = scsi_transport_device_data(sdev); copy_info(info, "\tChannel %c Target %d Lun %d Settings\n", seq_printf(m, "\tChannel %c Target %d Lun %d Settings\n", sdev->sdev_target->channel + 'A', sdev->sdev_target->id, sdev->lun); copy_info(info, "\t\tCommands Queued %ld\n", dev->commands_issued); copy_info(info, "\t\tCommands Active %d\n", dev->active); copy_info(info, "\t\tCommand Openings %d\n", dev->openings); copy_info(info, "\t\tMax Tagged Openings %d\n", dev->maxtags); copy_info(info, "\t\tDevice Queue Frozen Count %d\n", dev->qfrozen); seq_printf(m, "\t\tCommands Queued %ld\n", dev->commands_issued); seq_printf(m, "\t\tCommands Active %d\n", dev->active); seq_printf(m, "\t\tCommand Openings %d\n", dev->openings); seq_printf(m, "\t\tMax Tagged Openings %d\n", dev->maxtags); seq_printf(m, "\t\tDevice Queue Frozen Count %d\n", dev->qfrozen); } static int ahd_proc_write_seeprom(struct ahd_softc *ahd, char *buffer, int length) int ahd_proc_write_seeprom(struct Scsi_Host *shost, char *buffer, int length) { struct ahd_softc *ahd = *(struct ahd_softc **)shost->hostdata; ahd_mode_state saved_modes; int have_seeprom; u_long s; Loading Loading @@ -319,64 +273,45 @@ done: * Return information to handle /proc support for the driver. */ int ahd_linux_proc_info(struct Scsi_Host *shost, char *buffer, char **start, off_t offset, int length, int inout) ahd_linux_show_info(struct seq_file *m, struct Scsi_Host *shost) { struct ahd_softc *ahd = *(struct ahd_softc **)shost->hostdata; struct info_str info; char ahd_info[256]; u_int max_targ; u_int i; int retval; /* Has data been written to the file? */ if (inout == TRUE) { retval = ahd_proc_write_seeprom(ahd, buffer, length); goto done; } if (start) *start = buffer; info.buffer = buffer; info.length = length; info.offset = offset; info.pos = 0; copy_info(&info, "Adaptec AIC79xx driver version: %s\n", seq_printf(m, "Adaptec AIC79xx driver version: %s\n", AIC79XX_DRIVER_VERSION); copy_info(&info, "%s\n", ahd->description); seq_printf(m, "%s\n", ahd->description); ahd_controller_info(ahd, ahd_info); copy_info(&info, "%s\n", ahd_info); copy_info(&info, "Allocated SCBs: %d, SG List Length: %d\n\n", seq_printf(m, "%s\n", ahd_info); seq_printf(m, "Allocated SCBs: %d, SG List Length: %d\n\n", ahd->scb_data.numscbs, AHD_NSEG); max_targ = 16; if (ahd->seep_config == NULL) copy_info(&info, "No Serial EEPROM\n"); seq_printf(m, "No Serial EEPROM\n"); else { copy_info(&info, "Serial EEPROM:\n"); seq_printf(m, "Serial EEPROM:\n"); for (i = 0; i < sizeof(*ahd->seep_config)/2; i++) { if (((i % 8) == 0) && (i != 0)) { copy_info(&info, "\n"); seq_printf(m, "\n"); } copy_info(&info, "0x%.4x ", seq_printf(m, "0x%.4x ", ((uint16_t*)ahd->seep_config)[i]); } copy_info(&info, "\n"); seq_printf(m, "\n"); } copy_info(&info, "\n"); seq_printf(m, "\n"); if ((ahd->features & AHD_WIDE) == 0) max_targ = 8; for (i = 0; i < max_targ; i++) { ahd_dump_target_state(ahd, &info, ahd->our_id, 'A', ahd_dump_target_state(ahd, m, ahd->our_id, 'A', /*target_id*/i); } retval = info.pos > info.offset ? info.pos - info.offset : 0; done: return (retval); return 0; }