aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/u14-34f.c
diff options
context:
space:
mode:
authorGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
committerGlenn Elliott <gelliott@cs.unc.edu>2012-03-04 19:47:13 -0500
commitc71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch)
treeecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /drivers/scsi/u14-34f.c
parentea53c912f8a86a8567697115b6a0d8152beee5c8 (diff)
parent6a00f206debf8a5c8899055726ad127dbeeed098 (diff)
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts: litmus/sched_cedf.c
Diffstat (limited to 'drivers/scsi/u14-34f.c')
-rw-r--r--drivers/scsi/u14-34f.c67
1 files changed, 31 insertions, 36 deletions
diff --git a/drivers/scsi/u14-34f.c b/drivers/scsi/u14-34f.c
index 5d9fdeeb2315..90e104d6b558 100644
--- a/drivers/scsi/u14-34f.c
+++ b/drivers/scsi/u14-34f.c
@@ -433,7 +433,7 @@
433 433
434static int u14_34f_detect(struct scsi_host_template *); 434static int u14_34f_detect(struct scsi_host_template *);
435static int u14_34f_release(struct Scsi_Host *); 435static int u14_34f_release(struct Scsi_Host *);
436static int u14_34f_queuecommand(struct scsi_cmnd *, void (*done)(struct scsi_cmnd *)); 436static int u14_34f_queuecommand(struct Scsi_Host *, struct scsi_cmnd *);
437static int u14_34f_eh_abort(struct scsi_cmnd *); 437static int u14_34f_eh_abort(struct scsi_cmnd *);
438static int u14_34f_eh_host_reset(struct scsi_cmnd *); 438static int u14_34f_eh_host_reset(struct scsi_cmnd *);
439static int u14_34f_bios_param(struct scsi_device *, struct block_device *, 439static int u14_34f_bios_param(struct scsi_device *, struct block_device *,
@@ -1248,7 +1248,7 @@ static void scsi_to_dev_dir(unsigned int i, unsigned int j) {
1248 1248
1249} 1249}
1250 1250
1251static int u14_34f_queuecommand(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *)) { 1251static int u14_34f_queuecommand_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *)) {
1252 unsigned int i, j, k; 1252 unsigned int i, j, k;
1253 struct mscp *cpp; 1253 struct mscp *cpp;
1254 1254
@@ -1256,8 +1256,8 @@ static int u14_34f_queuecommand(struct scsi_cmnd *SCpnt, void (*done)(struct scs
1256 j = ((struct hostdata *) SCpnt->device->host->hostdata)->board_number; 1256 j = ((struct hostdata *) SCpnt->device->host->hostdata)->board_number;
1257 1257
1258 if (SCpnt->host_scribble) 1258 if (SCpnt->host_scribble)
1259 panic("%s: qcomm, pid %ld, SCpnt %p already active.\n", 1259 panic("%s: qcomm, SCpnt %p already active.\n",
1260 BN(j), SCpnt->serial_number, SCpnt); 1260 BN(j), SCpnt);
1261 1261
1262 /* i is the mailbox number, look for the first free mailbox 1262 /* i is the mailbox number, look for the first free mailbox
1263 starting from last_cp_used */ 1263 starting from last_cp_used */
@@ -1286,9 +1286,9 @@ static int u14_34f_queuecommand(struct scsi_cmnd *SCpnt, void (*done)(struct scs
1286 cpp->cpp_index = i; 1286 cpp->cpp_index = i;
1287 SCpnt->host_scribble = (unsigned char *) &cpp->cpp_index; 1287 SCpnt->host_scribble = (unsigned char *) &cpp->cpp_index;
1288 1288
1289 if (do_trace) printk("%s: qcomm, mbox %d, target %d.%d:%d, pid %ld.\n", 1289 if (do_trace) printk("%s: qcomm, mbox %d, target %d.%d:%d.\n",
1290 BN(j), i, SCpnt->device->channel, SCpnt->device->id, 1290 BN(j), i, SCpnt->device->channel, SCpnt->device->id,
1291 SCpnt->device->lun, SCpnt->serial_number); 1291 SCpnt->device->lun);
1292 1292
1293 cpp->opcode = OP_SCSI; 1293 cpp->opcode = OP_SCSI;
1294 cpp->channel = SCpnt->device->channel; 1294 cpp->channel = SCpnt->device->channel;
@@ -1315,7 +1315,7 @@ static int u14_34f_queuecommand(struct scsi_cmnd *SCpnt, void (*done)(struct scs
1315 unmap_dma(i, j); 1315 unmap_dma(i, j);
1316 SCpnt->host_scribble = NULL; 1316 SCpnt->host_scribble = NULL;
1317 scmd_printk(KERN_INFO, SCpnt, 1317 scmd_printk(KERN_INFO, SCpnt,
1318 "qcomm, pid %ld, adapter busy.\n", SCpnt->serial_number); 1318 "qcomm, adapter busy.\n");
1319 return 1; 1319 return 1;
1320 } 1320 }
1321 1321
@@ -1329,20 +1329,20 @@ static int u14_34f_queuecommand(struct scsi_cmnd *SCpnt, void (*done)(struct scs
1329 return 0; 1329 return 0;
1330} 1330}
1331 1331
1332static DEF_SCSI_QCMD(u14_34f_queuecommand)
1333
1332static int u14_34f_eh_abort(struct scsi_cmnd *SCarg) { 1334static int u14_34f_eh_abort(struct scsi_cmnd *SCarg) {
1333 unsigned int i, j; 1335 unsigned int i, j;
1334 1336
1335 j = ((struct hostdata *) SCarg->device->host->hostdata)->board_number; 1337 j = ((struct hostdata *) SCarg->device->host->hostdata)->board_number;
1336 1338
1337 if (SCarg->host_scribble == NULL) { 1339 if (SCarg->host_scribble == NULL) {
1338 scmd_printk(KERN_INFO, SCarg, "abort, pid %ld inactive.\n", 1340 scmd_printk(KERN_INFO, SCarg, "abort, command inactive.\n");
1339 SCarg->serial_number);
1340 return SUCCESS; 1341 return SUCCESS;
1341 } 1342 }
1342 1343
1343 i = *(unsigned int *)SCarg->host_scribble; 1344 i = *(unsigned int *)SCarg->host_scribble;
1344 scmd_printk(KERN_INFO, SCarg, "abort, mbox %d, pid %ld.\n", 1345 scmd_printk(KERN_INFO, SCarg, "abort, mbox %d.\n", i);
1345 i, SCarg->serial_number);
1346 1346
1347 if (i >= sh[j]->can_queue) 1347 if (i >= sh[j]->can_queue)
1348 panic("%s: abort, invalid SCarg->host_scribble.\n", BN(j)); 1348 panic("%s: abort, invalid SCarg->host_scribble.\n", BN(j));
@@ -1385,8 +1385,7 @@ static int u14_34f_eh_abort(struct scsi_cmnd *SCarg) {
1385 SCarg->result = DID_ABORT << 16; 1385 SCarg->result = DID_ABORT << 16;
1386 SCarg->host_scribble = NULL; 1386 SCarg->host_scribble = NULL;
1387 HD(j)->cp_stat[i] = FREE; 1387 HD(j)->cp_stat[i] = FREE;
1388 printk("%s, abort, mbox %d ready, DID_ABORT, pid %ld done.\n", 1388 printk("%s, abort, mbox %d ready, DID_ABORT, done.\n", BN(j), i);
1389 BN(j), i, SCarg->serial_number);
1390 SCarg->scsi_done(SCarg); 1389 SCarg->scsi_done(SCarg);
1391 return SUCCESS; 1390 return SUCCESS;
1392 } 1391 }
@@ -1401,12 +1400,12 @@ static int u14_34f_eh_host_reset(struct scsi_cmnd *SCarg) {
1401 struct scsi_cmnd *SCpnt; 1400 struct scsi_cmnd *SCpnt;
1402 1401
1403 j = ((struct hostdata *) SCarg->device->host->hostdata)->board_number; 1402 j = ((struct hostdata *) SCarg->device->host->hostdata)->board_number;
1404 scmd_printk(KERN_INFO, SCarg, "reset, enter, pid %ld.\n", SCarg->serial_number); 1403 scmd_printk(KERN_INFO, SCarg, "reset, enter.\n");
1405 1404
1406 spin_lock_irq(sh[j]->host_lock); 1405 spin_lock_irq(sh[j]->host_lock);
1407 1406
1408 if (SCarg->host_scribble == NULL) 1407 if (SCarg->host_scribble == NULL)
1409 printk("%s: reset, pid %ld inactive.\n", BN(j), SCarg->serial_number); 1408 printk("%s: reset, inactive.\n", BN(j));
1410 1409
1411 if (HD(j)->in_reset) { 1410 if (HD(j)->in_reset) {
1412 printk("%s: reset, exit, already in reset.\n", BN(j)); 1411 printk("%s: reset, exit, already in reset.\n", BN(j));
@@ -1443,14 +1442,12 @@ static int u14_34f_eh_host_reset(struct scsi_cmnd *SCarg) {
1443 1442
1444 if (HD(j)->cp_stat[i] == READY || HD(j)->cp_stat[i] == ABORTING) { 1443 if (HD(j)->cp_stat[i] == READY || HD(j)->cp_stat[i] == ABORTING) {
1445 HD(j)->cp_stat[i] = ABORTING; 1444 HD(j)->cp_stat[i] = ABORTING;
1446 printk("%s: reset, mbox %d aborting, pid %ld.\n", 1445 printk("%s: reset, mbox %d aborting.\n", BN(j), i);
1447 BN(j), i, SCpnt->serial_number);
1448 } 1446 }
1449 1447
1450 else { 1448 else {
1451 HD(j)->cp_stat[i] = IN_RESET; 1449 HD(j)->cp_stat[i] = IN_RESET;
1452 printk("%s: reset, mbox %d in reset, pid %ld.\n", 1450 printk("%s: reset, mbox %d in reset.\n", BN(j), i);
1453 BN(j), i, SCpnt->serial_number);
1454 } 1451 }
1455 1452
1456 if (SCpnt->host_scribble == NULL) 1453 if (SCpnt->host_scribble == NULL)
@@ -1498,8 +1495,7 @@ static int u14_34f_eh_host_reset(struct scsi_cmnd *SCarg) {
1498 /* This mailbox is still waiting for its interrupt */ 1495 /* This mailbox is still waiting for its interrupt */
1499 HD(j)->cp_stat[i] = LOCKED; 1496 HD(j)->cp_stat[i] = LOCKED;
1500 1497
1501 printk("%s, reset, mbox %d locked, DID_RESET, pid %ld done.\n", 1498 printk("%s, reset, mbox %d locked, DID_RESET, done.\n", BN(j), i);
1502 BN(j), i, SCpnt->serial_number);
1503 } 1499 }
1504 1500
1505 else if (HD(j)->cp_stat[i] == ABORTING) { 1501 else if (HD(j)->cp_stat[i] == ABORTING) {
@@ -1511,8 +1507,7 @@ static int u14_34f_eh_host_reset(struct scsi_cmnd *SCarg) {
1511 /* This mailbox was never queued to the adapter */ 1507 /* This mailbox was never queued to the adapter */
1512 HD(j)->cp_stat[i] = FREE; 1508 HD(j)->cp_stat[i] = FREE;
1513 1509
1514 printk("%s, reset, mbox %d aborting, DID_RESET, pid %ld done.\n", 1510 printk("%s, reset, mbox %d aborting, DID_RESET, done.\n", BN(j), i);
1515 BN(j), i, SCpnt->serial_number);
1516 } 1511 }
1517 1512
1518 else 1513 else
@@ -1526,7 +1521,7 @@ static int u14_34f_eh_host_reset(struct scsi_cmnd *SCarg) {
1526 HD(j)->in_reset = FALSE; 1521 HD(j)->in_reset = FALSE;
1527 do_trace = FALSE; 1522 do_trace = FALSE;
1528 1523
1529 if (arg_done) printk("%s: reset, exit, pid %ld done.\n", BN(j), SCarg->serial_number); 1524 if (arg_done) printk("%s: reset, exit, done.\n", BN(j));
1530 else printk("%s: reset, exit.\n", BN(j)); 1525 else printk("%s: reset, exit.\n", BN(j));
1531 1526
1532 spin_unlock_irq(sh[j]->host_lock); 1527 spin_unlock_irq(sh[j]->host_lock);
@@ -1669,10 +1664,10 @@ static int reorder(unsigned int j, unsigned long cursec,
1669 if (link_statistics && (overlap || !(flushcount % link_statistics))) 1664 if (link_statistics && (overlap || !(flushcount % link_statistics)))
1670 for (n = 0; n < n_ready; n++) { 1665 for (n = 0; n < n_ready; n++) {
1671 k = il[n]; cpp = &HD(j)->cp[k]; SCpnt = cpp->SCpnt; 1666 k = il[n]; cpp = &HD(j)->cp[k]; SCpnt = cpp->SCpnt;
1672 printk("%s %d.%d:%d pid %ld mb %d fc %d nr %d sec %ld ns %u"\ 1667 printk("%s %d.%d:%d mb %d fc %d nr %d sec %ld ns %u"\
1673 " cur %ld s:%c r:%c rev:%c in:%c ov:%c xd %d.\n", 1668 " cur %ld s:%c r:%c rev:%c in:%c ov:%c xd %d.\n",
1674 (ihdlr ? "ihdlr" : "qcomm"), SCpnt->channel, SCpnt->target, 1669 (ihdlr ? "ihdlr" : "qcomm"), SCpnt->channel, SCpnt->target,
1675 SCpnt->lun, SCpnt->serial_number, k, flushcount, n_ready, 1670 SCpnt->lun, k, flushcount, n_ready,
1676 blk_rq_pos(SCpnt->request), blk_rq_sectors(SCpnt->request), 1671 blk_rq_pos(SCpnt->request), blk_rq_sectors(SCpnt->request),
1677 cursec, YESNO(s), YESNO(r), YESNO(rev), YESNO(input_only), 1672 cursec, YESNO(s), YESNO(r), YESNO(rev), YESNO(input_only),
1678 YESNO(overlap), cpp->xdir); 1673 YESNO(overlap), cpp->xdir);
@@ -1707,9 +1702,9 @@ static void flush_dev(struct scsi_device *dev, unsigned long cursec, unsigned in
1707 1702
1708 if (wait_on_busy(sh[j]->io_port, MAXLOOP)) { 1703 if (wait_on_busy(sh[j]->io_port, MAXLOOP)) {
1709 scmd_printk(KERN_INFO, SCpnt, 1704 scmd_printk(KERN_INFO, SCpnt,
1710 "%s, pid %ld, mbox %d, adapter" 1705 "%s, mbox %d, adapter"
1711 " busy, will abort.\n", (ihdlr ? "ihdlr" : "qcomm"), 1706 " busy, will abort.\n", (ihdlr ? "ihdlr" : "qcomm"),
1712 SCpnt->serial_number, k); 1707 k);
1713 HD(j)->cp_stat[k] = ABORTING; 1708 HD(j)->cp_stat[k] = ABORTING;
1714 continue; 1709 continue;
1715 } 1710 }
@@ -1791,12 +1786,12 @@ static irqreturn_t ihdlr(unsigned int j)
1791 if (SCpnt == NULL) panic("%s: ihdlr, mbox %d, SCpnt == NULL.\n", BN(j), i); 1786 if (SCpnt == NULL) panic("%s: ihdlr, mbox %d, SCpnt == NULL.\n", BN(j), i);
1792 1787
1793 if (SCpnt->host_scribble == NULL) 1788 if (SCpnt->host_scribble == NULL)
1794 panic("%s: ihdlr, mbox %d, pid %ld, SCpnt %p garbled.\n", BN(j), i, 1789 panic("%s: ihdlr, mbox %d, SCpnt %p garbled.\n", BN(j), i,
1795 SCpnt->serial_number, SCpnt); 1790 SCpnt);
1796 1791
1797 if (*(unsigned int *)SCpnt->host_scribble != i) 1792 if (*(unsigned int *)SCpnt->host_scribble != i)
1798 panic("%s: ihdlr, mbox %d, pid %ld, index mismatch %d.\n", 1793 panic("%s: ihdlr, mbox %d, index mismatch %d.\n",
1799 BN(j), i, SCpnt->serial_number, *(unsigned int *)SCpnt->host_scribble); 1794 BN(j), i, *(unsigned int *)SCpnt->host_scribble);
1800 1795
1801 sync_dma(i, j); 1796 sync_dma(i, j);
1802 1797
@@ -1839,8 +1834,8 @@ static irqreturn_t ihdlr(unsigned int j)
1839 (!(tstatus == CHECK_CONDITION && HD(j)->iocount <= 1000 && 1834 (!(tstatus == CHECK_CONDITION && HD(j)->iocount <= 1000 &&
1840 (SCpnt->sense_buffer[2] & 0xf) == NOT_READY))) 1835 (SCpnt->sense_buffer[2] & 0xf) == NOT_READY)))
1841 scmd_printk(KERN_INFO, SCpnt, 1836 scmd_printk(KERN_INFO, SCpnt,
1842 "ihdlr, pid %ld, target_status 0x%x, sense key 0x%x.\n", 1837 "ihdlr, target_status 0x%x, sense key 0x%x.\n",
1843 SCpnt->serial_number, spp->target_status, 1838 spp->target_status,
1844 SCpnt->sense_buffer[2]); 1839 SCpnt->sense_buffer[2]);
1845 1840
1846 HD(j)->target_to[scmd_id(SCpnt)][scmd_channel(SCpnt)] = 0; 1841 HD(j)->target_to[scmd_id(SCpnt)][scmd_channel(SCpnt)] = 0;
@@ -1911,8 +1906,8 @@ static irqreturn_t ihdlr(unsigned int j)
1911 do_trace || msg_byte(spp->target_status)) 1906 do_trace || msg_byte(spp->target_status))
1912#endif 1907#endif
1913 scmd_printk(KERN_INFO, SCpnt, "ihdlr, mbox %2d, err 0x%x:%x,"\ 1908 scmd_printk(KERN_INFO, SCpnt, "ihdlr, mbox %2d, err 0x%x:%x,"\
1914 " pid %ld, reg 0x%x, count %d.\n", 1909 " reg 0x%x, count %d.\n",
1915 i, spp->adapter_status, spp->target_status, SCpnt->serial_number, 1910 i, spp->adapter_status, spp->target_status,
1916 reg, HD(j)->iocount); 1911 reg, HD(j)->iocount);
1917 1912
1918 unmap_dma(i, j); 1913 unmap_dma(i, j);