aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/aha152x.c61
1 files changed, 12 insertions, 49 deletions
diff --git a/drivers/scsi/aha152x.c b/drivers/scsi/aha152x.c
index a284be17699f..3f7b6fee0a74 100644
--- a/drivers/scsi/aha152x.c
+++ b/drivers/scsi/aha152x.c
@@ -2977,11 +2977,10 @@ static void show_queues(struct Scsi_Host *shpnt)
2977} 2977}
2978 2978
2979#undef SPRINTF 2979#undef SPRINTF
2980#define SPRINTF(args...) pos += sprintf(pos, ## args) 2980#define SPRINTF(args...) seq_printf(m, ##args)
2981 2981
2982static int get_command(char *pos, Scsi_Cmnd * ptr) 2982static void get_command(struct seq_file *m, Scsi_Cmnd * ptr)
2983{ 2983{
2984 char *start = pos;
2985 int i; 2984 int i;
2986 2985
2987 SPRINTF("%p: target=%d; lun=%d; cmnd=( ", 2986 SPRINTF("%p: target=%d; lun=%d; cmnd=( ",
@@ -3011,13 +3010,10 @@ static int get_command(char *pos, Scsi_Cmnd * ptr)
3011 if (ptr->SCp.phase & syncneg) 3010 if (ptr->SCp.phase & syncneg)
3012 SPRINTF("syncneg|"); 3011 SPRINTF("syncneg|");
3013 SPRINTF("; next=0x%p\n", SCNEXT(ptr)); 3012 SPRINTF("; next=0x%p\n", SCNEXT(ptr));
3014
3015 return (pos - start);
3016} 3013}
3017 3014
3018static int get_ports(struct Scsi_Host *shpnt, char *pos) 3015static void get_ports(struct seq_file *m, struct Scsi_Host *shpnt)
3019{ 3016{
3020 char *start = pos;
3021 int s; 3017 int s;
3022 3018
3023 SPRINTF("\n%s: %s(%s) ", CURRENT_SC ? "on bus" : "waiting", states[STATE].name, states[PREVSTATE].name); 3019 SPRINTF("\n%s: %s(%s) ", CURRENT_SC ? "on bus" : "waiting", states[STATE].name, states[PREVSTATE].name);
@@ -3273,11 +3269,9 @@ static int get_ports(struct Scsi_Host *shpnt, char *pos)
3273 if (s & ENREQINIT) 3269 if (s & ENREQINIT)
3274 SPRINTF("ENREQINIT "); 3270 SPRINTF("ENREQINIT ");
3275 SPRINTF(")\n"); 3271 SPRINTF(")\n");
3276
3277 return (pos - start);
3278} 3272}
3279 3273
3280static int aha152x_set_info(char *buffer, int length, struct Scsi_Host *shpnt) 3274static int aha152x_set_info(struct Scsi_Host *shpnt, char *buffer, int length)
3281{ 3275{
3282 if(!shpnt || !buffer || length<8 || strncmp("aha152x ", buffer, 8)!=0) 3276 if(!shpnt || !buffer || length<8 || strncmp("aha152x ", buffer, 8)!=0)
3283 return -EINVAL; 3277 return -EINVAL;
@@ -3320,26 +3314,11 @@ static int aha152x_set_info(char *buffer, int length, struct Scsi_Host *shpnt)
3320 return length; 3314 return length;
3321} 3315}
3322 3316
3323#undef SPRINTF 3317static int aha152x_show_info(struct seq_file *m, struct Scsi_Host *shpnt)
3324#define SPRINTF(args...) \
3325 do { if(pos < buffer + length) pos += sprintf(pos, ## args); } while(0)
3326
3327static int aha152x_proc_info(struct Scsi_Host *shpnt, char *buffer, char **start,
3328 off_t offset, int length, int inout)
3329{ 3318{
3330 int i; 3319 int i;
3331 char *pos = buffer;
3332 Scsi_Cmnd *ptr; 3320 Scsi_Cmnd *ptr;
3333 unsigned long flags; 3321 unsigned long flags;
3334 int thislength;
3335
3336 DPRINTK(debug_procinfo,
3337 KERN_DEBUG "aha152x_proc_info: buffer=%p offset=%ld length=%d hostno=%d inout=%d\n",
3338 buffer, offset, length, shpnt->host_no, inout);
3339
3340
3341 if (inout)
3342 return aha152x_set_info(buffer, length, shpnt);
3343 3322
3344 SPRINTF(AHA152X_REVID "\n"); 3323 SPRINTF(AHA152X_REVID "\n");
3345 3324
@@ -3392,25 +3371,25 @@ static int aha152x_proc_info(struct Scsi_Host *shpnt, char *buffer, char **start
3392 if (ISSUE_SC) { 3371 if (ISSUE_SC) {
3393 SPRINTF("not yet issued commands:\n"); 3372 SPRINTF("not yet issued commands:\n");
3394 for (ptr = ISSUE_SC; ptr; ptr = SCNEXT(ptr)) 3373 for (ptr = ISSUE_SC; ptr; ptr = SCNEXT(ptr))
3395 pos += get_command(pos, ptr); 3374 get_command(m, ptr);
3396 } else 3375 } else
3397 SPRINTF("no not yet issued commands\n"); 3376 SPRINTF("no not yet issued commands\n");
3398 DO_UNLOCK(flags); 3377 DO_UNLOCK(flags);
3399 3378
3400 if (CURRENT_SC) { 3379 if (CURRENT_SC) {
3401 SPRINTF("current command:\n"); 3380 SPRINTF("current command:\n");
3402 pos += get_command(pos, CURRENT_SC); 3381 get_command(m, CURRENT_SC);
3403 } else 3382 } else
3404 SPRINTF("no current command\n"); 3383 SPRINTF("no current command\n");
3405 3384
3406 if (DISCONNECTED_SC) { 3385 if (DISCONNECTED_SC) {
3407 SPRINTF("disconnected commands:\n"); 3386 SPRINTF("disconnected commands:\n");
3408 for (ptr = DISCONNECTED_SC; ptr; ptr = SCNEXT(ptr)) 3387 for (ptr = DISCONNECTED_SC; ptr; ptr = SCNEXT(ptr))
3409 pos += get_command(pos, ptr); 3388 get_command(m, ptr);
3410 } else 3389 } else
3411 SPRINTF("no disconnected commands\n"); 3390 SPRINTF("no disconnected commands\n");
3412 3391
3413 pos += get_ports(shpnt, pos); 3392 get_ports(m, shpnt);
3414 3393
3415#if defined(AHA152X_STAT) 3394#if defined(AHA152X_STAT)
3416 SPRINTF("statistics:\n" 3395 SPRINTF("statistics:\n"
@@ -3440,24 +3419,7 @@ static int aha152x_proc_info(struct Scsi_Host *shpnt, char *buffer, char **start
3440 HOSTDATA(shpnt)->time[i]); 3419 HOSTDATA(shpnt)->time[i]);
3441 } 3420 }
3442#endif 3421#endif
3443 3422 return 0;
3444 DPRINTK(debug_procinfo, KERN_DEBUG "aha152x_proc_info: pos=%p\n", pos);
3445
3446 thislength = pos - (buffer + offset);
3447 DPRINTK(debug_procinfo, KERN_DEBUG "aha152x_proc_info: length=%d thislength=%d\n", length, thislength);
3448
3449 if(thislength<0) {
3450 DPRINTK(debug_procinfo, KERN_DEBUG "aha152x_proc_info: output too short\n");
3451 *start = NULL;
3452 return 0;
3453 }
3454
3455 thislength = thislength<length ? thislength : length;
3456
3457 DPRINTK(debug_procinfo, KERN_DEBUG "aha152x_proc_info: return %d\n", thislength);
3458
3459 *start = buffer + offset;
3460 return thislength < length ? thislength : length;
3461} 3423}
3462 3424
3463static int aha152x_adjust_queue(struct scsi_device *device) 3425static int aha152x_adjust_queue(struct scsi_device *device)
@@ -3470,7 +3432,8 @@ static struct scsi_host_template aha152x_driver_template = {
3470 .module = THIS_MODULE, 3432 .module = THIS_MODULE,
3471 .name = AHA152X_REVID, 3433 .name = AHA152X_REVID,
3472 .proc_name = "aha152x", 3434 .proc_name = "aha152x",
3473 .proc_info = aha152x_proc_info, 3435 .show_info = aha152x_show_info,
3436 .write_info = aha152x_set_info,
3474 .queuecommand = aha152x_queue, 3437 .queuecommand = aha152x_queue,
3475 .eh_abort_handler = aha152x_abort, 3438 .eh_abort_handler = aha152x_abort,
3476 .eh_device_reset_handler = aha152x_device_reset, 3439 .eh_device_reset_handler = aha152x_device_reset,