|
@@ -2178,22 +2178,6 @@ do { \
|
|
|
|
|
|
#define ASC_INFO_SIZE 128 /* advansys_info() line size */
|
|
|
|
|
|
-#ifdef CONFIG_PROC_FS
|
|
|
-/* /proc/scsi/advansys/[0...] related definitions */
|
|
|
-#define ASC_PRTBUF_SIZE 2048
|
|
|
-#define ASC_PRTLINE_SIZE 160
|
|
|
-
|
|
|
-#define ASC_PRT_NEXT() \
|
|
|
- if (cp) { \
|
|
|
- totlen += len; \
|
|
|
- leftlen -= len; \
|
|
|
- if (leftlen == 0) { \
|
|
|
- return totlen; \
|
|
|
- } \
|
|
|
- cp += len; \
|
|
|
- }
|
|
|
-#endif /* CONFIG_PROC_FS */
|
|
|
-
|
|
|
/* Asc Library return codes */
|
|
|
#define ASC_TRUE 1
|
|
|
#define ASC_FALSE 0
|
|
@@ -2384,7 +2368,6 @@ struct asc_board {
|
|
|
} eep_config;
|
|
|
ulong last_reset; /* Saved last reset time */
|
|
|
/* /proc/scsi/advansys/[0...] */
|
|
|
- char *prtbuf; /* /proc print buffer */
|
|
|
#ifdef ADVANSYS_STATS
|
|
|
struct asc_stats asc_stats; /* Board statistics */
|
|
|
#endif /* ADVANSYS_STATS */
|
|
@@ -2875,64 +2858,21 @@ static const char *advansys_info(struct Scsi_Host *shost)
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_PROC_FS
|
|
|
-/*
|
|
|
- * asc_prt_line()
|
|
|
- *
|
|
|
- * If 'cp' is NULL print to the console, otherwise print to a buffer.
|
|
|
- *
|
|
|
- * Return 0 if printing to the console, otherwise return the number of
|
|
|
- * bytes written to the buffer.
|
|
|
- *
|
|
|
- * Note: If any single line is greater than ASC_PRTLINE_SIZE bytes the stack
|
|
|
- * will be corrupted. 's[]' is defined to be ASC_PRTLINE_SIZE bytes.
|
|
|
- */
|
|
|
-static int asc_prt_line(char *buf, int buflen, char *fmt, ...)
|
|
|
-{
|
|
|
- va_list args;
|
|
|
- int ret;
|
|
|
- char s[ASC_PRTLINE_SIZE];
|
|
|
-
|
|
|
- va_start(args, fmt);
|
|
|
- ret = vsprintf(s, fmt, args);
|
|
|
- BUG_ON(ret >= ASC_PRTLINE_SIZE);
|
|
|
- if (buf == NULL) {
|
|
|
- (void)printk(s);
|
|
|
- ret = 0;
|
|
|
- } else {
|
|
|
- ret = min(buflen, ret);
|
|
|
- memcpy(buf, s, ret);
|
|
|
- }
|
|
|
- va_end(args);
|
|
|
- return ret;
|
|
|
-}
|
|
|
|
|
|
/*
|
|
|
* asc_prt_board_devices()
|
|
|
*
|
|
|
* Print driver information for devices attached to the board.
|
|
|
- *
|
|
|
- * Note: no single line should be greater than ASC_PRTLINE_SIZE,
|
|
|
- * cf. asc_prt_line().
|
|
|
- *
|
|
|
- * Return the number of characters copied into 'cp'. No more than
|
|
|
- * 'cplen' characters will be copied to 'cp'.
|
|
|
*/
|
|
|
-static int asc_prt_board_devices(struct Scsi_Host *shost, char *cp, int cplen)
|
|
|
+static void asc_prt_board_devices(struct seq_file *m, struct Scsi_Host *shost)
|
|
|
{
|
|
|
struct asc_board *boardp = shost_priv(shost);
|
|
|
- int leftlen;
|
|
|
- int totlen;
|
|
|
- int len;
|
|
|
int chip_scsi_id;
|
|
|
int i;
|
|
|
|
|
|
- leftlen = cplen;
|
|
|
- totlen = len = 0;
|
|
|
-
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- "\nDevice Information for AdvanSys SCSI Host %d:\n",
|
|
|
- shost->host_no);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m,
|
|
|
+ "\nDevice Information for AdvanSys SCSI Host %d:\n",
|
|
|
+ shost->host_no);
|
|
|
|
|
|
if (ASC_NARROW_BOARD(boardp)) {
|
|
|
chip_scsi_id = boardp->dvc_cfg.asc_dvc_cfg.chip_scsi_id;
|
|
@@ -2940,60 +2880,42 @@ static int asc_prt_board_devices(struct Scsi_Host *shost, char *cp, int cplen)
|
|
|
chip_scsi_id = boardp->dvc_var.adv_dvc_var.chip_scsi_id;
|
|
|
}
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen, "Target IDs Detected:");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "Target IDs Detected:");
|
|
|
for (i = 0; i <= ADV_MAX_TID; i++) {
|
|
|
- if (boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) {
|
|
|
- len = asc_prt_line(cp, leftlen, " %X,", i);
|
|
|
- ASC_PRT_NEXT();
|
|
|
- }
|
|
|
+ if (boardp->init_tidmask & ADV_TID_TO_TIDMASK(i))
|
|
|
+ seq_printf(m, " %X,", i);
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, " (%X=Host Adapter)\n", chip_scsi_id);
|
|
|
- ASC_PRT_NEXT();
|
|
|
-
|
|
|
- return totlen;
|
|
|
+ seq_printf(m, " (%X=Host Adapter)\n", chip_scsi_id);
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Display Wide Board BIOS Information.
|
|
|
*/
|
|
|
-static int asc_prt_adv_bios(struct Scsi_Host *shost, char *cp, int cplen)
|
|
|
+static void asc_prt_adv_bios(struct seq_file *m, struct Scsi_Host *shost)
|
|
|
{
|
|
|
struct asc_board *boardp = shost_priv(shost);
|
|
|
- int leftlen;
|
|
|
- int totlen;
|
|
|
- int len;
|
|
|
ushort major, minor, letter;
|
|
|
|
|
|
- leftlen = cplen;
|
|
|
- totlen = len = 0;
|
|
|
-
|
|
|
- len = asc_prt_line(cp, leftlen, "\nROM BIOS Version: ");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "\nROM BIOS Version: ");
|
|
|
|
|
|
/*
|
|
|
* If the BIOS saved a valid signature, then fill in
|
|
|
* the BIOS code segment base address.
|
|
|
*/
|
|
|
if (boardp->bios_signature != 0x55AA) {
|
|
|
- len = asc_prt_line(cp, leftlen, "Disabled or Pre-3.1\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- "BIOS either disabled or Pre-3.1. If it is pre-3.1, then a newer version\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- "can be found at the ConnectCom FTP site: ftp://ftp.connectcom.net/pub\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "Disabled or Pre-3.1\n");
|
|
|
+ seq_printf(m,
|
|
|
+ "BIOS either disabled or Pre-3.1. If it is pre-3.1, then a newer version\n");
|
|
|
+ seq_printf(m,
|
|
|
+ "can be found at the ConnectCom FTP site: ftp://ftp.connectcom.net/pub\n");
|
|
|
} else {
|
|
|
major = (boardp->bios_version >> 12) & 0xF;
|
|
|
minor = (boardp->bios_version >> 8) & 0xF;
|
|
|
letter = (boardp->bios_version & 0xFF);
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen, "%d.%d%c\n",
|
|
|
+ seq_printf(m, "%d.%d%c\n",
|
|
|
major, minor,
|
|
|
letter >= 26 ? '?' : letter + 'A');
|
|
|
- ASC_PRT_NEXT();
|
|
|
-
|
|
|
/*
|
|
|
* Current available ROM BIOS release is 3.1I for UW
|
|
|
* and 3.2I for U2W. This code doesn't differentiate
|
|
@@ -3001,16 +2923,12 @@ static int asc_prt_adv_bios(struct Scsi_Host *shost, char *cp, int cplen)
|
|
|
*/
|
|
|
if (major < 3 || (major <= 3 && minor < 1) ||
|
|
|
(major <= 3 && minor <= 1 && letter < ('I' - 'A'))) {
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- "Newer version of ROM BIOS is available at the ConnectCom FTP site:\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- "ftp://ftp.connectcom.net/pub\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m,
|
|
|
+ "Newer version of ROM BIOS is available at the ConnectCom FTP site:\n");
|
|
|
+ seq_printf(m,
|
|
|
+ "ftp://ftp.connectcom.net/pub\n");
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- return totlen;
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -3115,20 +3033,11 @@ static int asc_get_eeprom_string(ushort *serialnum, uchar *cp)
|
|
|
* asc_prt_asc_board_eeprom()
|
|
|
*
|
|
|
* Print board EEPROM configuration.
|
|
|
- *
|
|
|
- * Note: no single line should be greater than ASC_PRTLINE_SIZE,
|
|
|
- * cf. asc_prt_line().
|
|
|
- *
|
|
|
- * Return the number of characters copied into 'cp'. No more than
|
|
|
- * 'cplen' characters will be copied to 'cp'.
|
|
|
*/
|
|
|
-static int asc_prt_asc_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen)
|
|
|
+static void asc_prt_asc_board_eeprom(struct seq_file *m, struct Scsi_Host *shost)
|
|
|
{
|
|
|
struct asc_board *boardp = shost_priv(shost);
|
|
|
ASC_DVC_VAR *asc_dvc_varp;
|
|
|
- int leftlen;
|
|
|
- int totlen;
|
|
|
- int len;
|
|
|
ASCEEP_CONFIG *ep;
|
|
|
int i;
|
|
|
#ifdef CONFIG_ISA
|
|
@@ -3139,129 +3048,75 @@ static int asc_prt_asc_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen
|
|
|
asc_dvc_varp = &boardp->dvc_var.asc_dvc_var;
|
|
|
ep = &boardp->eep_config.asc_eep;
|
|
|
|
|
|
- leftlen = cplen;
|
|
|
- totlen = len = 0;
|
|
|
-
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- "\nEEPROM Settings for AdvanSys SCSI Host %d:\n",
|
|
|
- shost->host_no);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m,
|
|
|
+ "\nEEPROM Settings for AdvanSys SCSI Host %d:\n",
|
|
|
+ shost->host_no);
|
|
|
|
|
|
if (asc_get_eeprom_string((ushort *)&ep->adapter_info[0], serialstr)
|
|
|
- == ASC_TRUE) {
|
|
|
- len =
|
|
|
- asc_prt_line(cp, leftlen, " Serial Number: %s\n",
|
|
|
- serialstr);
|
|
|
- ASC_PRT_NEXT();
|
|
|
- } else {
|
|
|
- if (ep->adapter_info[5] == 0xBB) {
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " Default Settings Used for EEPROM-less Adapter.\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
- } else {
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " Serial Number Signature Not Present.\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u\n",
|
|
|
- ASC_EEP_GET_CHIP_ID(ep), ep->max_total_qng,
|
|
|
- ep->max_tag_qng);
|
|
|
- ASC_PRT_NEXT();
|
|
|
-
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " cntl 0x%x, no_scam 0x%x\n", ep->cntl, ep->no_scam);
|
|
|
- ASC_PRT_NEXT();
|
|
|
-
|
|
|
- len = asc_prt_line(cp, leftlen, " Target ID: ");
|
|
|
- ASC_PRT_NEXT();
|
|
|
- for (i = 0; i <= ASC_MAX_TID; i++) {
|
|
|
- len = asc_prt_line(cp, leftlen, " %d", i);
|
|
|
- ASC_PRT_NEXT();
|
|
|
- }
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
-
|
|
|
- len = asc_prt_line(cp, leftlen, " Disconnects: ");
|
|
|
- ASC_PRT_NEXT();
|
|
|
- for (i = 0; i <= ASC_MAX_TID; i++) {
|
|
|
- len = asc_prt_line(cp, leftlen, " %c",
|
|
|
- (ep->
|
|
|
- disc_enable & ADV_TID_TO_TIDMASK(i)) ? 'Y' :
|
|
|
- 'N');
|
|
|
- ASC_PRT_NEXT();
|
|
|
- }
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
-
|
|
|
- len = asc_prt_line(cp, leftlen, " Command Queuing: ");
|
|
|
- ASC_PRT_NEXT();
|
|
|
- for (i = 0; i <= ASC_MAX_TID; i++) {
|
|
|
- len = asc_prt_line(cp, leftlen, " %c",
|
|
|
- (ep->
|
|
|
- use_cmd_qng & ADV_TID_TO_TIDMASK(i)) ? 'Y' :
|
|
|
- 'N');
|
|
|
- ASC_PRT_NEXT();
|
|
|
- }
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
-
|
|
|
- len = asc_prt_line(cp, leftlen, " Start Motor: ");
|
|
|
- ASC_PRT_NEXT();
|
|
|
- for (i = 0; i <= ASC_MAX_TID; i++) {
|
|
|
- len = asc_prt_line(cp, leftlen, " %c",
|
|
|
- (ep->
|
|
|
- start_motor & ADV_TID_TO_TIDMASK(i)) ? 'Y' :
|
|
|
- 'N');
|
|
|
- ASC_PRT_NEXT();
|
|
|
- }
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
-
|
|
|
- len = asc_prt_line(cp, leftlen, " Synchronous Transfer:");
|
|
|
- ASC_PRT_NEXT();
|
|
|
- for (i = 0; i <= ASC_MAX_TID; i++) {
|
|
|
- len = asc_prt_line(cp, leftlen, " %c",
|
|
|
- (ep->
|
|
|
- init_sdtr & ADV_TID_TO_TIDMASK(i)) ? 'Y' :
|
|
|
- 'N');
|
|
|
- ASC_PRT_NEXT();
|
|
|
- }
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ == ASC_TRUE)
|
|
|
+ seq_printf(m, " Serial Number: %s\n", serialstr);
|
|
|
+ else if (ep->adapter_info[5] == 0xBB)
|
|
|
+ seq_printf(m,
|
|
|
+ " Default Settings Used for EEPROM-less Adapter.\n");
|
|
|
+ else
|
|
|
+ seq_printf(m,
|
|
|
+ " Serial Number Signature Not Present.\n");
|
|
|
+
|
|
|
+ seq_printf(m,
|
|
|
+ " Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u\n",
|
|
|
+ ASC_EEP_GET_CHIP_ID(ep), ep->max_total_qng,
|
|
|
+ ep->max_tag_qng);
|
|
|
+
|
|
|
+ seq_printf(m,
|
|
|
+ " cntl 0x%x, no_scam 0x%x\n", ep->cntl, ep->no_scam);
|
|
|
+
|
|
|
+ seq_printf(m, " Target ID: ");
|
|
|
+ for (i = 0; i <= ASC_MAX_TID; i++)
|
|
|
+ seq_printf(m, " %d", i);
|
|
|
+ seq_printf(m, "\n");
|
|
|
+
|
|
|
+ seq_printf(m, " Disconnects: ");
|
|
|
+ for (i = 0; i <= ASC_MAX_TID; i++)
|
|
|
+ seq_printf(m, " %c",
|
|
|
+ (ep->disc_enable & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N');
|
|
|
+ seq_printf(m, "\n");
|
|
|
+
|
|
|
+ seq_printf(m, " Command Queuing: ");
|
|
|
+ for (i = 0; i <= ASC_MAX_TID; i++)
|
|
|
+ seq_printf(m, " %c",
|
|
|
+ (ep->use_cmd_qng & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N');
|
|
|
+ seq_printf(m, "\n");
|
|
|
+
|
|
|
+ seq_printf(m, " Start Motor: ");
|
|
|
+ for (i = 0; i <= ASC_MAX_TID; i++)
|
|
|
+ seq_printf(m, " %c",
|
|
|
+ (ep->start_motor & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N');
|
|
|
+ seq_printf(m, "\n");
|
|
|
+
|
|
|
+ seq_printf(m, " Synchronous Transfer:");
|
|
|
+ for (i = 0; i <= ASC_MAX_TID; i++)
|
|
|
+ seq_printf(m, " %c",
|
|
|
+ (ep->init_sdtr & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N');
|
|
|
+ seq_printf(m, "\n");
|
|
|
|
|
|
#ifdef CONFIG_ISA
|
|
|
if (asc_dvc_varp->bus_type & ASC_IS_ISA) {
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " Host ISA DMA speed: %d MB/S\n",
|
|
|
- isa_dma_speed[ASC_EEP_GET_DMA_SPD(ep)]);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m,
|
|
|
+ " Host ISA DMA speed: %d MB/S\n",
|
|
|
+ isa_dma_speed[ASC_EEP_GET_DMA_SPD(ep)]);
|
|
|
}
|
|
|
#endif /* CONFIG_ISA */
|
|
|
-
|
|
|
- return totlen;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* asc_prt_adv_board_eeprom()
|
|
|
*
|
|
|
* Print board EEPROM configuration.
|
|
|
- *
|
|
|
- * Note: no single line should be greater than ASC_PRTLINE_SIZE,
|
|
|
- * cf. asc_prt_line().
|
|
|
- *
|
|
|
- * Return the number of characters copied into 'cp'. No more than
|
|
|
- * 'cplen' characters will be copied to 'cp'.
|
|
|
*/
|
|
|
-static int asc_prt_adv_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen)
|
|
|
+static void asc_prt_adv_board_eeprom(struct seq_file *m, struct Scsi_Host *shost)
|
|
|
{
|
|
|
struct asc_board *boardp = shost_priv(shost);
|
|
|
ADV_DVC_VAR *adv_dvc_varp;
|
|
|
- int leftlen;
|
|
|
- int totlen;
|
|
|
- int len;
|
|
|
int i;
|
|
|
char *termstr;
|
|
|
uchar serialstr[13];
|
|
@@ -3281,13 +3136,9 @@ static int asc_prt_adv_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen
|
|
|
ep_38C1600 = &boardp->eep_config.adv_38C1600_eep;
|
|
|
}
|
|
|
|
|
|
- leftlen = cplen;
|
|
|
- totlen = len = 0;
|
|
|
-
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- "\nEEPROM Settings for AdvanSys SCSI Host %d:\n",
|
|
|
- shost->host_no);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m,
|
|
|
+ "\nEEPROM Settings for AdvanSys SCSI Host %d:\n",
|
|
|
+ shost->host_no);
|
|
|
|
|
|
if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) {
|
|
|
wordp = &ep_3550->serial_number_word1;
|
|
@@ -3297,38 +3148,28 @@ static int asc_prt_adv_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen
|
|
|
wordp = &ep_38C1600->serial_number_word1;
|
|
|
}
|
|
|
|
|
|
- if (asc_get_eeprom_string(wordp, serialstr) == ASC_TRUE) {
|
|
|
- len =
|
|
|
- asc_prt_line(cp, leftlen, " Serial Number: %s\n",
|
|
|
- serialstr);
|
|
|
- ASC_PRT_NEXT();
|
|
|
- } else {
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " Serial Number Signature Not Present.\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
- }
|
|
|
+ if (asc_get_eeprom_string(wordp, serialstr) == ASC_TRUE)
|
|
|
+ seq_printf(m, " Serial Number: %s\n", serialstr);
|
|
|
+ else
|
|
|
+ seq_printf(m, " Serial Number Signature Not Present.\n");
|
|
|
|
|
|
- if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) {
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u\n",
|
|
|
- ep_3550->adapter_scsi_id,
|
|
|
- ep_3550->max_host_qng, ep_3550->max_dvc_qng);
|
|
|
- ASC_PRT_NEXT();
|
|
|
- } else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800) {
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u\n",
|
|
|
- ep_38C0800->adapter_scsi_id,
|
|
|
- ep_38C0800->max_host_qng,
|
|
|
- ep_38C0800->max_dvc_qng);
|
|
|
- ASC_PRT_NEXT();
|
|
|
- } else {
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u\n",
|
|
|
- ep_38C1600->adapter_scsi_id,
|
|
|
- ep_38C1600->max_host_qng,
|
|
|
- ep_38C1600->max_dvc_qng);
|
|
|
- ASC_PRT_NEXT();
|
|
|
- }
|
|
|
+ if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550)
|
|
|
+ seq_printf(m,
|
|
|
+ " Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u\n",
|
|
|
+ ep_3550->adapter_scsi_id,
|
|
|
+ ep_3550->max_host_qng, ep_3550->max_dvc_qng);
|
|
|
+ else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800)
|
|
|
+ seq_printf(m,
|
|
|
+ " Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u\n",
|
|
|
+ ep_38C0800->adapter_scsi_id,
|
|
|
+ ep_38C0800->max_host_qng,
|
|
|
+ ep_38C0800->max_dvc_qng);
|
|
|
+ else
|
|
|
+ seq_printf(m,
|
|
|
+ " Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u\n",
|
|
|
+ ep_38C1600->adapter_scsi_id,
|
|
|
+ ep_38C1600->max_host_qng,
|
|
|
+ ep_38C1600->max_dvc_qng);
|
|
|
if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) {
|
|
|
word = ep_3550->termination;
|
|
|
} else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800) {
|
|
@@ -3352,34 +3193,26 @@ static int asc_prt_adv_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) {
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " termination: %u (%s), bios_ctrl: 0x%x\n",
|
|
|
- ep_3550->termination, termstr,
|
|
|
- ep_3550->bios_ctrl);
|
|
|
- ASC_PRT_NEXT();
|
|
|
- } else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800) {
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " termination: %u (%s), bios_ctrl: 0x%x\n",
|
|
|
- ep_38C0800->termination_lvd, termstr,
|
|
|
- ep_38C0800->bios_ctrl);
|
|
|
- ASC_PRT_NEXT();
|
|
|
- } else {
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " termination: %u (%s), bios_ctrl: 0x%x\n",
|
|
|
- ep_38C1600->termination_lvd, termstr,
|
|
|
- ep_38C1600->bios_ctrl);
|
|
|
- ASC_PRT_NEXT();
|
|
|
- }
|
|
|
+ if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550)
|
|
|
+ seq_printf(m,
|
|
|
+ " termination: %u (%s), bios_ctrl: 0x%x\n",
|
|
|
+ ep_3550->termination, termstr,
|
|
|
+ ep_3550->bios_ctrl);
|
|
|
+ else if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800)
|
|
|
+ seq_printf(m,
|
|
|
+ " termination: %u (%s), bios_ctrl: 0x%x\n",
|
|
|
+ ep_38C0800->termination_lvd, termstr,
|
|
|
+ ep_38C0800->bios_ctrl);
|
|
|
+ else
|
|
|
+ seq_printf(m,
|
|
|
+ " termination: %u (%s), bios_ctrl: 0x%x\n",
|
|
|
+ ep_38C1600->termination_lvd, termstr,
|
|
|
+ ep_38C1600->bios_ctrl);
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen, " Target ID: ");
|
|
|
- ASC_PRT_NEXT();
|
|
|
- for (i = 0; i <= ADV_MAX_TID; i++) {
|
|
|
- len = asc_prt_line(cp, leftlen, " %X", i);
|
|
|
- ASC_PRT_NEXT();
|
|
|
- }
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " Target ID: ");
|
|
|
+ for (i = 0; i <= ADV_MAX_TID; i++)
|
|
|
+ seq_printf(m, " %X", i);
|
|
|
+ seq_printf(m, "\n");
|
|
|
|
|
|
if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) {
|
|
|
word = ep_3550->disc_enable;
|
|
@@ -3388,15 +3221,11 @@ static int asc_prt_adv_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen
|
|
|
} else {
|
|
|
word = ep_38C1600->disc_enable;
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, " Disconnects: ");
|
|
|
- ASC_PRT_NEXT();
|
|
|
- for (i = 0; i <= ADV_MAX_TID; i++) {
|
|
|
- len = asc_prt_line(cp, leftlen, " %c",
|
|
|
- (word & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N');
|
|
|
- ASC_PRT_NEXT();
|
|
|
- }
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " Disconnects: ");
|
|
|
+ for (i = 0; i <= ADV_MAX_TID; i++)
|
|
|
+ seq_printf(m, " %c",
|
|
|
+ (word & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N');
|
|
|
+ seq_printf(m, "\n");
|
|
|
|
|
|
if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) {
|
|
|
word = ep_3550->tagqng_able;
|
|
@@ -3405,15 +3234,11 @@ static int asc_prt_adv_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen
|
|
|
} else {
|
|
|
word = ep_38C1600->tagqng_able;
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, " Command Queuing: ");
|
|
|
- ASC_PRT_NEXT();
|
|
|
- for (i = 0; i <= ADV_MAX_TID; i++) {
|
|
|
- len = asc_prt_line(cp, leftlen, " %c",
|
|
|
- (word & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N');
|
|
|
- ASC_PRT_NEXT();
|
|
|
- }
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " Command Queuing: ");
|
|
|
+ for (i = 0; i <= ADV_MAX_TID; i++)
|
|
|
+ seq_printf(m, " %c",
|
|
|
+ (word & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N');
|
|
|
+ seq_printf(m, "\n");
|
|
|
|
|
|
if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) {
|
|
|
word = ep_3550->start_motor;
|
|
@@ -3422,42 +3247,28 @@ static int asc_prt_adv_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen
|
|
|
} else {
|
|
|
word = ep_38C1600->start_motor;
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, " Start Motor: ");
|
|
|
- ASC_PRT_NEXT();
|
|
|
- for (i = 0; i <= ADV_MAX_TID; i++) {
|
|
|
- len = asc_prt_line(cp, leftlen, " %c",
|
|
|
- (word & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N');
|
|
|
- ASC_PRT_NEXT();
|
|
|
- }
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " Start Motor: ");
|
|
|
+ for (i = 0; i <= ADV_MAX_TID; i++)
|
|
|
+ seq_printf(m, " %c",
|
|
|
+ (word & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N');
|
|
|
+ seq_printf(m, "\n");
|
|
|
|
|
|
if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) {
|
|
|
- len = asc_prt_line(cp, leftlen, " Synchronous Transfer:");
|
|
|
- ASC_PRT_NEXT();
|
|
|
- for (i = 0; i <= ADV_MAX_TID; i++) {
|
|
|
- len = asc_prt_line(cp, leftlen, " %c",
|
|
|
- (ep_3550->
|
|
|
- sdtr_able & ADV_TID_TO_TIDMASK(i)) ?
|
|
|
- 'Y' : 'N');
|
|
|
- ASC_PRT_NEXT();
|
|
|
- }
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " Synchronous Transfer:");
|
|
|
+ for (i = 0; i <= ADV_MAX_TID; i++)
|
|
|
+ seq_printf(m, " %c",
|
|
|
+ (ep_3550->sdtr_able & ADV_TID_TO_TIDMASK(i)) ?
|
|
|
+ 'Y' : 'N');
|
|
|
+ seq_printf(m, "\n");
|
|
|
}
|
|
|
|
|
|
if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) {
|
|
|
- len = asc_prt_line(cp, leftlen, " Ultra Transfer: ");
|
|
|
- ASC_PRT_NEXT();
|
|
|
- for (i = 0; i <= ADV_MAX_TID; i++) {
|
|
|
- len = asc_prt_line(cp, leftlen, " %c",
|
|
|
- (ep_3550->
|
|
|
- ultra_able & ADV_TID_TO_TIDMASK(i))
|
|
|
- ? 'Y' : 'N');
|
|
|
- ASC_PRT_NEXT();
|
|
|
- }
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " Ultra Transfer: ");
|
|
|
+ for (i = 0; i <= ADV_MAX_TID; i++)
|
|
|
+ seq_printf(m, " %c",
|
|
|
+ (ep_3550->ultra_able & ADV_TID_TO_TIDMASK(i))
|
|
|
+ ? 'Y' : 'N');
|
|
|
+ seq_printf(m, "\n");
|
|
|
}
|
|
|
|
|
|
if (adv_dvc_varp->chip_type == ADV_CHIP_ASC3550) {
|
|
@@ -3467,21 +3278,16 @@ static int asc_prt_adv_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen
|
|
|
} else {
|
|
|
word = ep_38C1600->wdtr_able;
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, " Wide Transfer: ");
|
|
|
- ASC_PRT_NEXT();
|
|
|
- for (i = 0; i <= ADV_MAX_TID; i++) {
|
|
|
- len = asc_prt_line(cp, leftlen, " %c",
|
|
|
- (word & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N');
|
|
|
- ASC_PRT_NEXT();
|
|
|
- }
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " Wide Transfer: ");
|
|
|
+ for (i = 0; i <= ADV_MAX_TID; i++)
|
|
|
+ seq_printf(m, " %c",
|
|
|
+ (word & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N');
|
|
|
+ seq_printf(m, "\n");
|
|
|
|
|
|
if (adv_dvc_varp->chip_type == ADV_CHIP_ASC38C0800 ||
|
|
|
adv_dvc_varp->chip_type == ADV_CHIP_ASC38C1600) {
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " Synchronous Transfer Speed (Mhz):\n ");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m,
|
|
|
+ " Synchronous Transfer Speed (Mhz):\n ");
|
|
|
for (i = 0; i <= ADV_MAX_TID; i++) {
|
|
|
char *speed_str;
|
|
|
|
|
@@ -3517,99 +3323,64 @@ static int asc_prt_adv_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen
|
|
|
speed_str = "Unk";
|
|
|
break;
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, "%X:%s ", i, speed_str);
|
|
|
- ASC_PRT_NEXT();
|
|
|
- if (i == 7) {
|
|
|
- len = asc_prt_line(cp, leftlen, "\n ");
|
|
|
- ASC_PRT_NEXT();
|
|
|
- }
|
|
|
+ seq_printf(m, "%X:%s ", i, speed_str);
|
|
|
+ if (i == 7)
|
|
|
+ seq_printf(m, "\n ");
|
|
|
sdtr_speed >>= 4;
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "\n");
|
|
|
}
|
|
|
-
|
|
|
- return totlen;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* asc_prt_driver_conf()
|
|
|
- *
|
|
|
- * Note: no single line should be greater than ASC_PRTLINE_SIZE,
|
|
|
- * cf. asc_prt_line().
|
|
|
- *
|
|
|
- * Return the number of characters copied into 'cp'. No more than
|
|
|
- * 'cplen' characters will be copied to 'cp'.
|
|
|
*/
|
|
|
-static int asc_prt_driver_conf(struct Scsi_Host *shost, char *cp, int cplen)
|
|
|
+static void asc_prt_driver_conf(struct seq_file *m, struct Scsi_Host *shost)
|
|
|
{
|
|
|
struct asc_board *boardp = shost_priv(shost);
|
|
|
- int leftlen;
|
|
|
- int totlen;
|
|
|
- int len;
|
|
|
int chip_scsi_id;
|
|
|
|
|
|
- leftlen = cplen;
|
|
|
- totlen = len = 0;
|
|
|
+ seq_printf(m,
|
|
|
+ "\nLinux Driver Configuration and Information for AdvanSys SCSI Host %d:\n",
|
|
|
+ shost->host_no);
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- "\nLinux Driver Configuration and Information for AdvanSys SCSI Host %d:\n",
|
|
|
- shost->host_no);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m,
|
|
|
+ " host_busy %u, last_reset %u, max_id %u, max_lun %u, max_channel %u\n",
|
|
|
+ shost->host_busy, shost->last_reset, shost->max_id,
|
|
|
+ shost->max_lun, shost->max_channel);
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " host_busy %u, last_reset %u, max_id %u, max_lun %u, max_channel %u\n",
|
|
|
- shost->host_busy, shost->last_reset, shost->max_id,
|
|
|
- shost->max_lun, shost->max_channel);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m,
|
|
|
+ " unique_id %d, can_queue %d, this_id %d, sg_tablesize %u, cmd_per_lun %u\n",
|
|
|
+ shost->unique_id, shost->can_queue, shost->this_id,
|
|
|
+ shost->sg_tablesize, shost->cmd_per_lun);
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " unique_id %d, can_queue %d, this_id %d, sg_tablesize %u, cmd_per_lun %u\n",
|
|
|
- shost->unique_id, shost->can_queue, shost->this_id,
|
|
|
- shost->sg_tablesize, shost->cmd_per_lun);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m,
|
|
|
+ " unchecked_isa_dma %d, use_clustering %d\n",
|
|
|
+ shost->unchecked_isa_dma, shost->use_clustering);
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " unchecked_isa_dma %d, use_clustering %d\n",
|
|
|
- shost->unchecked_isa_dma, shost->use_clustering);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m,
|
|
|
+ " flags 0x%x, last_reset 0x%x, jiffies 0x%x, asc_n_io_port 0x%x\n",
|
|
|
+ boardp->flags, boardp->last_reset, jiffies,
|
|
|
+ boardp->asc_n_io_port);
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " flags 0x%x, last_reset 0x%x, jiffies 0x%x, asc_n_io_port 0x%x\n",
|
|
|
- boardp->flags, boardp->last_reset, jiffies,
|
|
|
- boardp->asc_n_io_port);
|
|
|
- ASC_PRT_NEXT();
|
|
|
-
|
|
|
- len = asc_prt_line(cp, leftlen, " io_port 0x%x\n", shost->io_port);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " io_port 0x%x\n", shost->io_port);
|
|
|
|
|
|
if (ASC_NARROW_BOARD(boardp)) {
|
|
|
chip_scsi_id = boardp->dvc_cfg.asc_dvc_cfg.chip_scsi_id;
|
|
|
} else {
|
|
|
chip_scsi_id = boardp->dvc_var.adv_dvc_var.chip_scsi_id;
|
|
|
}
|
|
|
-
|
|
|
- return totlen;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* asc_prt_asc_board_info()
|
|
|
*
|
|
|
* Print dynamic board configuration information.
|
|
|
- *
|
|
|
- * Note: no single line should be greater than ASC_PRTLINE_SIZE,
|
|
|
- * cf. asc_prt_line().
|
|
|
- *
|
|
|
- * Return the number of characters copied into 'cp'. No more than
|
|
|
- * 'cplen' characters will be copied to 'cp'.
|
|
|
*/
|
|
|
-static int asc_prt_asc_board_info(struct Scsi_Host *shost, char *cp, int cplen)
|
|
|
+static void asc_prt_asc_board_info(struct seq_file *m, struct Scsi_Host *shost)
|
|
|
{
|
|
|
struct asc_board *boardp = shost_priv(shost);
|
|
|
int chip_scsi_id;
|
|
|
- int leftlen;
|
|
|
- int totlen;
|
|
|
- int len;
|
|
|
ASC_DVC_VAR *v;
|
|
|
ASC_DVC_CFG *c;
|
|
|
int i;
|
|
@@ -3619,105 +3390,79 @@ static int asc_prt_asc_board_info(struct Scsi_Host *shost, char *cp, int cplen)
|
|
|
c = &boardp->dvc_cfg.asc_dvc_cfg;
|
|
|
chip_scsi_id = c->chip_scsi_id;
|
|
|
|
|
|
- leftlen = cplen;
|
|
|
- totlen = len = 0;
|
|
|
+ seq_printf(m,
|
|
|
+ "\nAsc Library Configuration and Statistics for AdvanSys SCSI Host %d:\n",
|
|
|
+ shost->host_no);
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- "\nAsc Library Configuration and Statistics for AdvanSys SCSI Host %d:\n",
|
|
|
- shost->host_no);
|
|
|
- ASC_PRT_NEXT();
|
|
|
-
|
|
|
- len = asc_prt_line(cp, leftlen, " chip_version %u, mcode_date 0x%x, "
|
|
|
- "mcode_version 0x%x, err_code %u\n",
|
|
|
- c->chip_version, c->mcode_date, c->mcode_version,
|
|
|
- v->err_code);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " chip_version %u, mcode_date 0x%x, "
|
|
|
+ "mcode_version 0x%x, err_code %u\n",
|
|
|
+ c->chip_version, c->mcode_date, c->mcode_version,
|
|
|
+ v->err_code);
|
|
|
|
|
|
/* Current number of commands waiting for the host. */
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " Total Command Pending: %d\n", v->cur_total_qng);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m,
|
|
|
+ " Total Command Pending: %d\n", v->cur_total_qng);
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen, " Command Queuing:");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " Command Queuing:");
|
|
|
for (i = 0; i <= ASC_MAX_TID; i++) {
|
|
|
if ((chip_scsi_id == i) ||
|
|
|
((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) {
|
|
|
continue;
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, " %X:%c",
|
|
|
- i,
|
|
|
- (v->
|
|
|
- use_tagged_qng & ADV_TID_TO_TIDMASK(i)) ?
|
|
|
- 'Y' : 'N');
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " %X:%c",
|
|
|
+ i,
|
|
|
+ (v->use_tagged_qng & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N');
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "\n");
|
|
|
|
|
|
/* Current number of commands waiting for a device. */
|
|
|
- len = asc_prt_line(cp, leftlen, " Command Queue Pending:");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " Command Queue Pending:");
|
|
|
for (i = 0; i <= ASC_MAX_TID; i++) {
|
|
|
if ((chip_scsi_id == i) ||
|
|
|
((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) {
|
|
|
continue;
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, " %X:%u", i, v->cur_dvc_qng[i]);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " %X:%u", i, v->cur_dvc_qng[i]);
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "\n");
|
|
|
|
|
|
/* Current limit on number of commands that can be sent to a device. */
|
|
|
- len = asc_prt_line(cp, leftlen, " Command Queue Limit:");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " Command Queue Limit:");
|
|
|
for (i = 0; i <= ASC_MAX_TID; i++) {
|
|
|
if ((chip_scsi_id == i) ||
|
|
|
((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) {
|
|
|
continue;
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, " %X:%u", i, v->max_dvc_qng[i]);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " %X:%u", i, v->max_dvc_qng[i]);
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "\n");
|
|
|
|
|
|
/* Indicate whether the device has returned queue full status. */
|
|
|
- len = asc_prt_line(cp, leftlen, " Command Queue Full:");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " Command Queue Full:");
|
|
|
for (i = 0; i <= ASC_MAX_TID; i++) {
|
|
|
if ((chip_scsi_id == i) ||
|
|
|
((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) {
|
|
|
continue;
|
|
|
}
|
|
|
- if (boardp->queue_full & ADV_TID_TO_TIDMASK(i)) {
|
|
|
- len = asc_prt_line(cp, leftlen, " %X:Y-%d",
|
|
|
- i, boardp->queue_full_cnt[i]);
|
|
|
- } else {
|
|
|
- len = asc_prt_line(cp, leftlen, " %X:N", i);
|
|
|
- }
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ if (boardp->queue_full & ADV_TID_TO_TIDMASK(i))
|
|
|
+ seq_printf(m, " %X:Y-%d",
|
|
|
+ i, boardp->queue_full_cnt[i]);
|
|
|
+ else
|
|
|
+ seq_printf(m, " %X:N", i);
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "\n");
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen, " Synchronous Transfer:");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " Synchronous Transfer:");
|
|
|
for (i = 0; i <= ASC_MAX_TID; i++) {
|
|
|
if ((chip_scsi_id == i) ||
|
|
|
((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) {
|
|
|
continue;
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, " %X:%c",
|
|
|
- i,
|
|
|
- (v->
|
|
|
- sdtr_done & ADV_TID_TO_TIDMASK(i)) ? 'Y' :
|
|
|
- 'N');
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " %X:%c",
|
|
|
+ i,
|
|
|
+ (v->sdtr_done & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N');
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "\n");
|
|
|
|
|
|
for (i = 0; i <= ASC_MAX_TID; i++) {
|
|
|
uchar syn_period_ix;
|
|
@@ -3728,69 +3473,48 @@ static int asc_prt_asc_board_info(struct Scsi_Host *shost, char *cp, int cplen)
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen, " %X:", i);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " %X:", i);
|
|
|
|
|
|
if ((boardp->sdtr_data[i] & ASC_SYN_MAX_OFFSET) == 0) {
|
|
|
- len = asc_prt_line(cp, leftlen, " Asynchronous");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " Asynchronous");
|
|
|
} else {
|
|
|
syn_period_ix =
|
|
|
(boardp->sdtr_data[i] >> 4) & (v->max_sdtr_index -
|
|
|
1);
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " Transfer Period Factor: %d (%d.%d Mhz),",
|
|
|
- v->sdtr_period_tbl[syn_period_ix],
|
|
|
- 250 /
|
|
|
- v->sdtr_period_tbl[syn_period_ix],
|
|
|
- ASC_TENTHS(250,
|
|
|
- v->
|
|
|
- sdtr_period_tbl
|
|
|
- [syn_period_ix]));
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m,
|
|
|
+ " Transfer Period Factor: %d (%d.%d Mhz),",
|
|
|
+ v->sdtr_period_tbl[syn_period_ix],
|
|
|
+ 250 / v->sdtr_period_tbl[syn_period_ix],
|
|
|
+ ASC_TENTHS(250,
|
|
|
+ v->sdtr_period_tbl[syn_period_ix]));
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen, " REQ/ACK Offset: %d",
|
|
|
- boardp->
|
|
|
- sdtr_data[i] & ASC_SYN_MAX_OFFSET);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " REQ/ACK Offset: %d",
|
|
|
+ boardp->sdtr_data[i] & ASC_SYN_MAX_OFFSET);
|
|
|
}
|
|
|
|
|
|
if ((v->sdtr_done & ADV_TID_TO_TIDMASK(i)) == 0) {
|
|
|
- len = asc_prt_line(cp, leftlen, "*\n");
|
|
|
+ seq_printf(m, "*\n");
|
|
|
renegotiate = 1;
|
|
|
} else {
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
+ seq_printf(m, "\n");
|
|
|
}
|
|
|
- ASC_PRT_NEXT();
|
|
|
}
|
|
|
|
|
|
if (renegotiate) {
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " * = Re-negotiation pending before next command.\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m,
|
|
|
+ " * = Re-negotiation pending before next command.\n");
|
|
|
}
|
|
|
-
|
|
|
- return totlen;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* asc_prt_adv_board_info()
|
|
|
*
|
|
|
* Print dynamic board configuration information.
|
|
|
- *
|
|
|
- * Note: no single line should be greater than ASC_PRTLINE_SIZE,
|
|
|
- * cf. asc_prt_line().
|
|
|
- *
|
|
|
- * Return the number of characters copied into 'cp'. No more than
|
|
|
- * 'cplen' characters will be copied to 'cp'.
|
|
|
*/
|
|
|
-static int asc_prt_adv_board_info(struct Scsi_Host *shost, char *cp, int cplen)
|
|
|
+static void asc_prt_adv_board_info(struct seq_file *m, struct Scsi_Host *shost)
|
|
|
{
|
|
|
struct asc_board *boardp = shost_priv(shost);
|
|
|
- int leftlen;
|
|
|
- int totlen;
|
|
|
- int len;
|
|
|
int i;
|
|
|
ADV_DVC_VAR *v;
|
|
|
ADV_DVC_CFG *c;
|
|
@@ -3809,47 +3533,35 @@ static int asc_prt_adv_board_info(struct Scsi_Host *shost, char *cp, int cplen)
|
|
|
iop_base = v->iop_base;
|
|
|
chip_scsi_id = v->chip_scsi_id;
|
|
|
|
|
|
- leftlen = cplen;
|
|
|
- totlen = len = 0;
|
|
|
-
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- "\nAdv Library Configuration and Statistics for AdvanSys SCSI Host %d:\n",
|
|
|
- shost->host_no);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m,
|
|
|
+ "\nAdv Library Configuration and Statistics for AdvanSys SCSI Host %d:\n",
|
|
|
+ shost->host_no);
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " iop_base 0x%lx, cable_detect: %X, err_code %u\n",
|
|
|
- v->iop_base,
|
|
|
- AdvReadWordRegister(iop_base,
|
|
|
- IOPW_SCSI_CFG1) & CABLE_DETECT,
|
|
|
- v->err_code);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m,
|
|
|
+ " iop_base 0x%lx, cable_detect: %X, err_code %u\n",
|
|
|
+ v->iop_base,
|
|
|
+ AdvReadWordRegister(iop_base,IOPW_SCSI_CFG1) & CABLE_DETECT,
|
|
|
+ v->err_code);
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen, " chip_version %u, mcode_date 0x%x, "
|
|
|
- "mcode_version 0x%x\n", c->chip_version,
|
|
|
- c->mcode_date, c->mcode_version);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " chip_version %u, mcode_date 0x%x, "
|
|
|
+ "mcode_version 0x%x\n", c->chip_version,
|
|
|
+ c->mcode_date, c->mcode_version);
|
|
|
|
|
|
AdvReadWordLram(iop_base, ASC_MC_TAGQNG_ABLE, tagqng_able);
|
|
|
- len = asc_prt_line(cp, leftlen, " Queuing Enabled:");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " Queuing Enabled:");
|
|
|
for (i = 0; i <= ADV_MAX_TID; i++) {
|
|
|
if ((chip_scsi_id == i) ||
|
|
|
((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen, " %X:%c",
|
|
|
- i,
|
|
|
- (tagqng_able & ADV_TID_TO_TIDMASK(i)) ? 'Y' :
|
|
|
- 'N');
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " %X:%c",
|
|
|
+ i,
|
|
|
+ (tagqng_able & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N');
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "\n");
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen, " Queue Limit:");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " Queue Limit:");
|
|
|
for (i = 0; i <= ADV_MAX_TID; i++) {
|
|
|
if ((chip_scsi_id == i) ||
|
|
|
((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) {
|
|
@@ -3859,14 +3571,11 @@ static int asc_prt_adv_board_info(struct Scsi_Host *shost, char *cp, int cplen)
|
|
|
AdvReadByteLram(iop_base, ASC_MC_NUMBER_OF_MAX_CMD + i,
|
|
|
lrambyte);
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen, " %X:%d", i, lrambyte);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " %X:%d", i, lrambyte);
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "\n");
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen, " Command Pending:");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " Command Pending:");
|
|
|
for (i = 0; i <= ADV_MAX_TID; i++) {
|
|
|
if ((chip_scsi_id == i) ||
|
|
|
((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) {
|
|
@@ -3876,33 +3585,26 @@ static int asc_prt_adv_board_info(struct Scsi_Host *shost, char *cp, int cplen)
|
|
|
AdvReadByteLram(iop_base, ASC_MC_NUMBER_OF_QUEUED_CMD + i,
|
|
|
lrambyte);
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen, " %X:%d", i, lrambyte);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " %X:%d", i, lrambyte);
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "\n");
|
|
|
|
|
|
AdvReadWordLram(iop_base, ASC_MC_WDTR_ABLE, wdtr_able);
|
|
|
- len = asc_prt_line(cp, leftlen, " Wide Enabled:");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " Wide Enabled:");
|
|
|
for (i = 0; i <= ADV_MAX_TID; i++) {
|
|
|
if ((chip_scsi_id == i) ||
|
|
|
((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen, " %X:%c",
|
|
|
- i,
|
|
|
- (wdtr_able & ADV_TID_TO_TIDMASK(i)) ? 'Y' :
|
|
|
- 'N');
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " %X:%c",
|
|
|
+ i,
|
|
|
+ (wdtr_able & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N');
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "\n");
|
|
|
|
|
|
AdvReadWordLram(iop_base, ASC_MC_WDTR_DONE, wdtr_done);
|
|
|
- len = asc_prt_line(cp, leftlen, " Transfer Bit Width:");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " Transfer Bit Width:");
|
|
|
for (i = 0; i <= ADV_MAX_TID; i++) {
|
|
|
if ((chip_scsi_id == i) ||
|
|
|
((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) {
|
|
@@ -3913,37 +3615,30 @@ static int asc_prt_adv_board_info(struct Scsi_Host *shost, char *cp, int cplen)
|
|
|
ASC_MC_DEVICE_HSHK_CFG_TABLE + (2 * i),
|
|
|
lramword);
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen, " %X:%d",
|
|
|
- i, (lramword & 0x8000) ? 16 : 8);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " %X:%d",
|
|
|
+ i, (lramword & 0x8000) ? 16 : 8);
|
|
|
|
|
|
if ((wdtr_able & ADV_TID_TO_TIDMASK(i)) &&
|
|
|
(wdtr_done & ADV_TID_TO_TIDMASK(i)) == 0) {
|
|
|
- len = asc_prt_line(cp, leftlen, "*");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "*");
|
|
|
renegotiate = 1;
|
|
|
}
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "\n");
|
|
|
|
|
|
AdvReadWordLram(iop_base, ASC_MC_SDTR_ABLE, sdtr_able);
|
|
|
- len = asc_prt_line(cp, leftlen, " Synchronous Enabled:");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " Synchronous Enabled:");
|
|
|
for (i = 0; i <= ADV_MAX_TID; i++) {
|
|
|
if ((chip_scsi_id == i) ||
|
|
|
((boardp->init_tidmask & ADV_TID_TO_TIDMASK(i)) == 0)) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen, " %X:%c",
|
|
|
- i,
|
|
|
- (sdtr_able & ADV_TID_TO_TIDMASK(i)) ? 'Y' :
|
|
|
- 'N');
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " %X:%c",
|
|
|
+ i,
|
|
|
+ (sdtr_able & ADV_TID_TO_TIDMASK(i)) ? 'Y' : 'N');
|
|
|
}
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "\n");
|
|
|
|
|
|
AdvReadWordLram(iop_base, ASC_MC_SDTR_DONE, sdtr_done);
|
|
|
for (i = 0; i <= ADV_MAX_TID; i++) {
|
|
@@ -3959,358 +3654,170 @@ static int asc_prt_adv_board_info(struct Scsi_Host *shost, char *cp, int cplen)
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen, " %X:", i);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " %X:", i);
|
|
|
|
|
|
if ((lramword & 0x1F) == 0) { /* Check for REQ/ACK Offset 0. */
|
|
|
- len = asc_prt_line(cp, leftlen, " Asynchronous");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " Asynchronous");
|
|
|
} else {
|
|
|
- len =
|
|
|
- asc_prt_line(cp, leftlen,
|
|
|
- " Transfer Period Factor: ");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " Transfer Period Factor: ");
|
|
|
|
|
|
if ((lramword & 0x1F00) == 0x1100) { /* 80 Mhz */
|
|
|
- len =
|
|
|
- asc_prt_line(cp, leftlen, "9 (80.0 Mhz),");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "9 (80.0 Mhz),");
|
|
|
} else if ((lramword & 0x1F00) == 0x1000) { /* 40 Mhz */
|
|
|
- len =
|
|
|
- asc_prt_line(cp, leftlen, "10 (40.0 Mhz),");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "10 (40.0 Mhz),");
|
|
|
} else { /* 20 Mhz or below. */
|
|
|
|
|
|
period = (((lramword >> 8) * 25) + 50) / 4;
|
|
|
|
|
|
if (period == 0) { /* Should never happen. */
|
|
|
- len =
|
|
|
- asc_prt_line(cp, leftlen,
|
|
|
- "%d (? Mhz), ");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "%d (? Mhz), ");
|
|
|
} else {
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- "%d (%d.%d Mhz),",
|
|
|
- period, 250 / period,
|
|
|
- ASC_TENTHS(250,
|
|
|
- period));
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m,
|
|
|
+ "%d (%d.%d Mhz),",
|
|
|
+ period, 250 / period,
|
|
|
+ ASC_TENTHS(250, period));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen, " REQ/ACK Offset: %d",
|
|
|
- lramword & 0x1F);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " REQ/ACK Offset: %d",
|
|
|
+ lramword & 0x1F);
|
|
|
}
|
|
|
|
|
|
if ((sdtr_done & ADV_TID_TO_TIDMASK(i)) == 0) {
|
|
|
- len = asc_prt_line(cp, leftlen, "*\n");
|
|
|
+ seq_printf(m, "*\n");
|
|
|
renegotiate = 1;
|
|
|
} else {
|
|
|
- len = asc_prt_line(cp, leftlen, "\n");
|
|
|
+ seq_printf(m, "\n");
|
|
|
}
|
|
|
- ASC_PRT_NEXT();
|
|
|
}
|
|
|
|
|
|
if (renegotiate) {
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " * = Re-negotiation pending before next command.\n");
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m,
|
|
|
+ " * = Re-negotiation pending before next command.\n");
|
|
|
}
|
|
|
-
|
|
|
- return totlen;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * asc_proc_copy()
|
|
|
- *
|
|
|
- * Copy proc information to a read buffer taking into account the current
|
|
|
- * read offset in the file and the remaining space in the read buffer.
|
|
|
- */
|
|
|
-static int
|
|
|
-asc_proc_copy(off_t advoffset, off_t offset, char *curbuf, int leftlen,
|
|
|
- char *cp, int cplen)
|
|
|
-{
|
|
|
- int cnt = 0;
|
|
|
-
|
|
|
- ASC_DBG(2, "offset %d, advoffset %d, cplen %d\n",
|
|
|
- (unsigned)offset, (unsigned)advoffset, cplen);
|
|
|
- if (offset <= advoffset) {
|
|
|
- /* Read offset below current offset, copy everything. */
|
|
|
- cnt = min(cplen, leftlen);
|
|
|
- ASC_DBG(2, "curbuf 0x%lx, cp 0x%lx, cnt %d\n",
|
|
|
- (ulong)curbuf, (ulong)cp, cnt);
|
|
|
- memcpy(curbuf, cp, cnt);
|
|
|
- } else if (offset < advoffset + cplen) {
|
|
|
- /* Read offset within current range, partial copy. */
|
|
|
- cnt = (advoffset + cplen) - offset;
|
|
|
- cp = (cp + cplen) - cnt;
|
|
|
- cnt = min(cnt, leftlen);
|
|
|
- ASC_DBG(2, "curbuf 0x%lx, cp 0x%lx, cnt %d\n",
|
|
|
- (ulong)curbuf, (ulong)cp, cnt);
|
|
|
- memcpy(curbuf, cp, cnt);
|
|
|
- }
|
|
|
- return cnt;
|
|
|
}
|
|
|
|
|
|
#ifdef ADVANSYS_STATS
|
|
|
/*
|
|
|
* asc_prt_board_stats()
|
|
|
- *
|
|
|
- * Note: no single line should be greater than ASC_PRTLINE_SIZE,
|
|
|
- * cf. asc_prt_line().
|
|
|
- *
|
|
|
- * Return the number of characters copied into 'cp'. No more than
|
|
|
- * 'cplen' characters will be copied to 'cp'.
|
|
|
*/
|
|
|
-static int asc_prt_board_stats(struct Scsi_Host *shost, char *cp, int cplen)
|
|
|
+static void asc_prt_board_stats(struct seq_file *m, struct Scsi_Host *shost)
|
|
|
{
|
|
|
struct asc_board *boardp = shost_priv(shost);
|
|
|
struct asc_stats *s = &boardp->asc_stats;
|
|
|
|
|
|
- int leftlen = cplen;
|
|
|
- int len, totlen = 0;
|
|
|
+ seq_printf(m,
|
|
|
+ "\nLinux Driver Statistics for AdvanSys SCSI Host %d:\n",
|
|
|
+ shost->host_no);
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- "\nLinux Driver Statistics for AdvanSys SCSI Host %d:\n",
|
|
|
- shost->host_no);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m,
|
|
|
+ " queuecommand %lu, reset %lu, biosparam %lu, interrupt %lu\n",
|
|
|
+ s->queuecommand, s->reset, s->biosparam,
|
|
|
+ s->interrupt);
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " queuecommand %lu, reset %lu, biosparam %lu, interrupt %lu\n",
|
|
|
- s->queuecommand, s->reset, s->biosparam,
|
|
|
- s->interrupt);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m,
|
|
|
+ " callback %lu, done %lu, build_error %lu, build_noreq %lu, build_nosg %lu\n",
|
|
|
+ s->callback, s->done, s->build_error,
|
|
|
+ s->adv_build_noreq, s->adv_build_nosg);
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " callback %lu, done %lu, build_error %lu, build_noreq %lu, build_nosg %lu\n",
|
|
|
- s->callback, s->done, s->build_error,
|
|
|
- s->adv_build_noreq, s->adv_build_nosg);
|
|
|
- ASC_PRT_NEXT();
|
|
|
-
|
|
|
- len = asc_prt_line(cp, leftlen,
|
|
|
- " exe_noerror %lu, exe_busy %lu, exe_error %lu, exe_unknown %lu\n",
|
|
|
- s->exe_noerror, s->exe_busy, s->exe_error,
|
|
|
- s->exe_unknown);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m,
|
|
|
+ " exe_noerror %lu, exe_busy %lu, exe_error %lu, exe_unknown %lu\n",
|
|
|
+ s->exe_noerror, s->exe_busy, s->exe_error,
|
|
|
+ s->exe_unknown);
|
|
|
|
|
|
/*
|
|
|
* Display data transfer statistics.
|
|
|
*/
|
|
|
if (s->xfer_cnt > 0) {
|
|
|
- len = asc_prt_line(cp, leftlen, " xfer_cnt %lu, xfer_elem %lu, ",
|
|
|
- s->xfer_cnt, s->xfer_elem);
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " xfer_cnt %lu, xfer_elem %lu, ",
|
|
|
+ s->xfer_cnt, s->xfer_elem);
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen, "xfer_bytes %lu.%01lu kb\n",
|
|
|
- s->xfer_sect / 2, ASC_TENTHS(s->xfer_sect, 2));
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "xfer_bytes %lu.%01lu kb\n",
|
|
|
+ s->xfer_sect / 2, ASC_TENTHS(s->xfer_sect, 2));
|
|
|
|
|
|
/* Scatter gather transfer statistics */
|
|
|
- len = asc_prt_line(cp, leftlen, " avg_num_elem %lu.%01lu, ",
|
|
|
- s->xfer_elem / s->xfer_cnt,
|
|
|
- ASC_TENTHS(s->xfer_elem, s->xfer_cnt));
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, " avg_num_elem %lu.%01lu, ",
|
|
|
+ s->xfer_elem / s->xfer_cnt,
|
|
|
+ ASC_TENTHS(s->xfer_elem, s->xfer_cnt));
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen, "avg_elem_size %lu.%01lu kb, ",
|
|
|
- (s->xfer_sect / 2) / s->xfer_elem,
|
|
|
- ASC_TENTHS((s->xfer_sect / 2), s->xfer_elem));
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "avg_elem_size %lu.%01lu kb, ",
|
|
|
+ (s->xfer_sect / 2) / s->xfer_elem,
|
|
|
+ ASC_TENTHS((s->xfer_sect / 2), s->xfer_elem));
|
|
|
|
|
|
- len = asc_prt_line(cp, leftlen, "avg_xfer_size %lu.%01lu kb\n",
|
|
|
- (s->xfer_sect / 2) / s->xfer_cnt,
|
|
|
- ASC_TENTHS((s->xfer_sect / 2), s->xfer_cnt));
|
|
|
- ASC_PRT_NEXT();
|
|
|
+ seq_printf(m, "avg_xfer_size %lu.%01lu kb\n",
|
|
|
+ (s->xfer_sect / 2) / s->xfer_cnt,
|
|
|
+ ASC_TENTHS((s->xfer_sect / 2), s->xfer_cnt));
|
|
|
}
|
|
|
-
|
|
|
- return totlen;
|
|
|
}
|
|
|
#endif /* ADVANSYS_STATS */
|
|
|
|
|
|
/*
|
|
|
- * advansys_proc_info() - /proc/scsi/advansys/{0,1,2,3,...}
|
|
|
+ * advansys_show_info() - /proc/scsi/advansys/{0,1,2,3,...}
|
|
|
*
|
|
|
- * *buffer: I/O buffer
|
|
|
- * **start: if inout == FALSE pointer into buffer where user read should start
|
|
|
- * offset: current offset into a /proc/scsi/advansys/[0...] file
|
|
|
- * length: length of buffer
|
|
|
- * hostno: Scsi_Host host_no
|
|
|
- * inout: TRUE - user is writing; FALSE - user is reading
|
|
|
+ * m: seq_file to print into
|
|
|
+ * shost: Scsi_Host
|
|
|
*
|
|
|
* Return the number of bytes read from or written to a
|
|
|
* /proc/scsi/advansys/[0...] file.
|
|
|
- *
|
|
|
- * Note: This function uses the per board buffer 'prtbuf' which is
|
|
|
- * allocated when the board is initialized in advansys_detect(). The
|
|
|
- * buffer is ASC_PRTBUF_SIZE bytes. The function asc_proc_copy() is
|
|
|
- * used to write to the buffer. The way asc_proc_copy() is written
|
|
|
- * if 'prtbuf' is too small it will not be overwritten. Instead the
|
|
|
- * user just won't get all the available statistics.
|
|
|
*/
|
|
|
static int
|
|
|
-advansys_proc_info(struct Scsi_Host *shost, char *buffer, char **start,
|
|
|
- off_t offset, int length, int inout)
|
|
|
+advansys_show_info(struct seq_file *m, struct Scsi_Host *shost)
|
|
|
{
|
|
|
struct asc_board *boardp = shost_priv(shost);
|
|
|
- char *cp;
|
|
|
- int cplen;
|
|
|
- int cnt;
|
|
|
- int totcnt;
|
|
|
- int leftlen;
|
|
|
- char *curbuf;
|
|
|
- off_t advoffset;
|
|
|
|
|
|
ASC_DBG(1, "begin\n");
|
|
|
|
|
|
- /*
|
|
|
- * User write not supported.
|
|
|
- */
|
|
|
- if (inout == TRUE)
|
|
|
- return -ENOSYS;
|
|
|
-
|
|
|
/*
|
|
|
* User read of /proc/scsi/advansys/[0...] file.
|
|
|
*/
|
|
|
|
|
|
- /* Copy read data starting at the beginning of the buffer. */
|
|
|
- *start = buffer;
|
|
|
- curbuf = buffer;
|
|
|
- advoffset = 0;
|
|
|
- totcnt = 0;
|
|
|
- leftlen = length;
|
|
|
-
|
|
|
/*
|
|
|
* Get board configuration information.
|
|
|
*
|
|
|
* advansys_info() returns the board string from its own static buffer.
|
|
|
*/
|
|
|
- cp = (char *)advansys_info(shost);
|
|
|
- strcat(cp, "\n");
|
|
|
- cplen = strlen(cp);
|
|
|
/* Copy board information. */
|
|
|
- cnt = asc_proc_copy(advoffset, offset, curbuf, leftlen, cp, cplen);
|
|
|
- totcnt += cnt;
|
|
|
- leftlen -= cnt;
|
|
|
- if (leftlen == 0) {
|
|
|
- ASC_DBG(1, "totcnt %d\n", totcnt);
|
|
|
- return totcnt;
|
|
|
- }
|
|
|
- advoffset += cplen;
|
|
|
- curbuf += cnt;
|
|
|
-
|
|
|
+ seq_printf(m, "%s\n", (char *)advansys_info(shost));
|
|
|
/*
|
|
|
* Display Wide Board BIOS Information.
|
|
|
*/
|
|
|
- if (!ASC_NARROW_BOARD(boardp)) {
|
|
|
- cp = boardp->prtbuf;
|
|
|
- cplen = asc_prt_adv_bios(shost, cp, ASC_PRTBUF_SIZE);
|
|
|
- BUG_ON(cplen >= ASC_PRTBUF_SIZE);
|
|
|
- cnt = asc_proc_copy(advoffset, offset, curbuf, leftlen, cp,
|
|
|
- cplen);
|
|
|
- totcnt += cnt;
|
|
|
- leftlen -= cnt;
|
|
|
- if (leftlen == 0) {
|
|
|
- ASC_DBG(1, "totcnt %d\n", totcnt);
|
|
|
- return totcnt;
|
|
|
- }
|
|
|
- advoffset += cplen;
|
|
|
- curbuf += cnt;
|
|
|
- }
|
|
|
+ if (!ASC_NARROW_BOARD(boardp))
|
|
|
+ asc_prt_adv_bios(m, shost);
|
|
|
|
|
|
/*
|
|
|
* Display driver information for each device attached to the board.
|
|
|
*/
|
|
|
- cp = boardp->prtbuf;
|
|
|
- cplen = asc_prt_board_devices(shost, cp, ASC_PRTBUF_SIZE);
|
|
|
- BUG_ON(cplen >= ASC_PRTBUF_SIZE);
|
|
|
- cnt = asc_proc_copy(advoffset, offset, curbuf, leftlen, cp, cplen);
|
|
|
- totcnt += cnt;
|
|
|
- leftlen -= cnt;
|
|
|
- if (leftlen == 0) {
|
|
|
- ASC_DBG(1, "totcnt %d\n", totcnt);
|
|
|
- return totcnt;
|
|
|
- }
|
|
|
- advoffset += cplen;
|
|
|
- curbuf += cnt;
|
|
|
+ asc_prt_board_devices(m, shost);
|
|
|
|
|
|
/*
|
|
|
* Display EEPROM configuration for the board.
|
|
|
*/
|
|
|
- cp = boardp->prtbuf;
|
|
|
- if (ASC_NARROW_BOARD(boardp)) {
|
|
|
- cplen = asc_prt_asc_board_eeprom(shost, cp, ASC_PRTBUF_SIZE);
|
|
|
- } else {
|
|
|
- cplen = asc_prt_adv_board_eeprom(shost, cp, ASC_PRTBUF_SIZE);
|
|
|
- }
|
|
|
- BUG_ON(cplen >= ASC_PRTBUF_SIZE);
|
|
|
- cnt = asc_proc_copy(advoffset, offset, curbuf, leftlen, cp, cplen);
|
|
|
- totcnt += cnt;
|
|
|
- leftlen -= cnt;
|
|
|
- if (leftlen == 0) {
|
|
|
- ASC_DBG(1, "totcnt %d\n", totcnt);
|
|
|
- return totcnt;
|
|
|
- }
|
|
|
- advoffset += cplen;
|
|
|
- curbuf += cnt;
|
|
|
+ if (ASC_NARROW_BOARD(boardp))
|
|
|
+ asc_prt_asc_board_eeprom(m, shost);
|
|
|
+ else
|
|
|
+ asc_prt_adv_board_eeprom(m, shost);
|
|
|
|
|
|
/*
|
|
|
* Display driver configuration and information for the board.
|
|
|
*/
|
|
|
- cp = boardp->prtbuf;
|
|
|
- cplen = asc_prt_driver_conf(shost, cp, ASC_PRTBUF_SIZE);
|
|
|
- BUG_ON(cplen >= ASC_PRTBUF_SIZE);
|
|
|
- cnt = asc_proc_copy(advoffset, offset, curbuf, leftlen, cp, cplen);
|
|
|
- totcnt += cnt;
|
|
|
- leftlen -= cnt;
|
|
|
- if (leftlen == 0) {
|
|
|
- ASC_DBG(1, "totcnt %d\n", totcnt);
|
|
|
- return totcnt;
|
|
|
- }
|
|
|
- advoffset += cplen;
|
|
|
- curbuf += cnt;
|
|
|
+ asc_prt_driver_conf(m, shost);
|
|
|
|
|
|
#ifdef ADVANSYS_STATS
|
|
|
/*
|
|
|
* Display driver statistics for the board.
|
|
|
*/
|
|
|
- cp = boardp->prtbuf;
|
|
|
- cplen = asc_prt_board_stats(shost, cp, ASC_PRTBUF_SIZE);
|
|
|
- BUG_ON(cplen >= ASC_PRTBUF_SIZE);
|
|
|
- cnt = asc_proc_copy(advoffset, offset, curbuf, leftlen, cp, cplen);
|
|
|
- totcnt += cnt;
|
|
|
- leftlen -= cnt;
|
|
|
- if (leftlen == 0) {
|
|
|
- ASC_DBG(1, "totcnt %d\n", totcnt);
|
|
|
- return totcnt;
|
|
|
- }
|
|
|
- advoffset += cplen;
|
|
|
- curbuf += cnt;
|
|
|
+ asc_prt_board_stats(m, shost);
|
|
|
#endif /* ADVANSYS_STATS */
|
|
|
|
|
|
/*
|
|
|
* Display Asc Library dynamic configuration information
|
|
|
* for the board.
|
|
|
*/
|
|
|
- cp = boardp->prtbuf;
|
|
|
- if (ASC_NARROW_BOARD(boardp)) {
|
|
|
- cplen = asc_prt_asc_board_info(shost, cp, ASC_PRTBUF_SIZE);
|
|
|
- } else {
|
|
|
- cplen = asc_prt_adv_board_info(shost, cp, ASC_PRTBUF_SIZE);
|
|
|
- }
|
|
|
- BUG_ON(cplen >= ASC_PRTBUF_SIZE);
|
|
|
- cnt = asc_proc_copy(advoffset, offset, curbuf, leftlen, cp, cplen);
|
|
|
- totcnt += cnt;
|
|
|
- leftlen -= cnt;
|
|
|
- if (leftlen == 0) {
|
|
|
- ASC_DBG(1, "totcnt %d\n", totcnt);
|
|
|
- return totcnt;
|
|
|
- }
|
|
|
- advoffset += cplen;
|
|
|
- curbuf += cnt;
|
|
|
-
|
|
|
- ASC_DBG(1, "totcnt %d\n", totcnt);
|
|
|
-
|
|
|
- return totcnt;
|
|
|
+ if (ASC_NARROW_BOARD(boardp))
|
|
|
+ asc_prt_asc_board_info(m, shost);
|
|
|
+ else
|
|
|
+ asc_prt_adv_board_info(m, shost);
|
|
|
+ return 0;
|
|
|
}
|
|
|
#endif /* CONFIG_PROC_FS */
|
|
|
|
|
@@ -11743,7 +11250,7 @@ static int AdvInitGetConfig(struct pci_dev *pdev, struct Scsi_Host *shost)
|
|
|
static struct scsi_host_template advansys_template = {
|
|
|
.proc_name = DRV_NAME,
|
|
|
#ifdef CONFIG_PROC_FS
|
|
|
- .proc_info = advansys_proc_info,
|
|
|
+ .show_info = advansys_show_info,
|
|
|
#endif
|
|
|
.name = DRV_NAME,
|
|
|
.info = advansys_info,
|
|
@@ -11939,20 +11446,6 @@ static int advansys_board_found(struct Scsi_Host *shost, unsigned int iop,
|
|
|
#endif /* CONFIG_PCI */
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_PROC_FS
|
|
|
- /*
|
|
|
- * Allocate buffer for printing information from
|
|
|
- * /proc/scsi/advansys/[0...].
|
|
|
- */
|
|
|
- boardp->prtbuf = kmalloc(ASC_PRTBUF_SIZE, GFP_KERNEL);
|
|
|
- if (!boardp->prtbuf) {
|
|
|
- shost_printk(KERN_ERR, shost, "kmalloc(%d) returned NULL\n",
|
|
|
- ASC_PRTBUF_SIZE);
|
|
|
- ret = -ENOMEM;
|
|
|
- goto err_unmap;
|
|
|
- }
|
|
|
-#endif /* CONFIG_PROC_FS */
|
|
|
-
|
|
|
if (ASC_NARROW_BOARD(boardp)) {
|
|
|
/*
|
|
|
* Set the board bus type and PCI IRQ before
|
|
@@ -12010,7 +11503,7 @@ static int advansys_board_found(struct Scsi_Host *shost, unsigned int iop,
|
|
|
}
|
|
|
|
|
|
if (ret)
|
|
|
- goto err_free_proc;
|
|
|
+ goto err_unmap;
|
|
|
|
|
|
/*
|
|
|
* Save the EEPROM configuration so that it can be displayed
|
|
@@ -12055,7 +11548,7 @@ static int advansys_board_found(struct Scsi_Host *shost, unsigned int iop,
|
|
|
ASC_DBG(2, "AscInitSetConfig()\n");
|
|
|
ret = AscInitSetConfig(pdev, shost) ? -ENODEV : 0;
|
|
|
if (ret)
|
|
|
- goto err_free_proc;
|
|
|
+ goto err_unmap;
|
|
|
} else {
|
|
|
ADVEEP_3550_CONFIG *ep_3550;
|
|
|
ADVEEP_38C0800_CONFIG *ep_38C0800;
|
|
@@ -12290,7 +11783,7 @@ static int advansys_board_found(struct Scsi_Host *shost, unsigned int iop,
|
|
|
shost_printk(KERN_ERR, shost, "request_dma() "
|
|
|
"%d failed %d\n",
|
|
|
shost->dma_channel, ret);
|
|
|
- goto err_free_proc;
|
|
|
+ goto err_unmap;
|
|
|
}
|
|
|
AscEnableIsaDma(shost->dma_channel);
|
|
|
}
|
|
@@ -12371,8 +11864,6 @@ static int advansys_board_found(struct Scsi_Host *shost, unsigned int iop,
|
|
|
if (shost->dma_channel != NO_ISA_DMA)
|
|
|
free_dma(shost->dma_channel);
|
|
|
#endif
|
|
|
- err_free_proc:
|
|
|
- kfree(boardp->prtbuf);
|
|
|
err_unmap:
|
|
|
if (boardp->ioremap_addr)
|
|
|
iounmap(boardp->ioremap_addr);
|
|
@@ -12406,7 +11897,6 @@ static int advansys_release(struct Scsi_Host *shost)
|
|
|
iounmap(board->ioremap_addr);
|
|
|
advansys_wide_free_mem(board);
|
|
|
}
|
|
|
- kfree(board->prtbuf);
|
|
|
scsi_host_put(shost);
|
|
|
ASC_DBG(1, "end\n");
|
|
|
return 0;
|