diff options
Diffstat (limited to 'drivers/scsi/nsp32.c')
-rw-r--r-- | drivers/scsi/nsp32.c | 194 |
1 files changed, 37 insertions, 157 deletions
diff --git a/drivers/scsi/nsp32.c b/drivers/scsi/nsp32.c index 3e9765f0281d..7fed35372150 100644 --- a/drivers/scsi/nsp32.c +++ b/drivers/scsi/nsp32.c | |||
@@ -49,10 +49,6 @@ | |||
49 | #include <scsi/scsi_host.h> | 49 | #include <scsi/scsi_host.h> |
50 | #include <scsi/scsi_ioctl.h> | 50 | #include <scsi/scsi_ioctl.h> |
51 | 51 | ||
52 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)) | ||
53 | # include <linux/blk.h> | ||
54 | #endif | ||
55 | |||
56 | #include "nsp32.h" | 52 | #include "nsp32.h" |
57 | 53 | ||
58 | 54 | ||
@@ -199,17 +195,9 @@ static int __init init_nsp32 (void); | |||
199 | static void __exit exit_nsp32 (void); | 195 | static void __exit exit_nsp32 (void); |
200 | 196 | ||
201 | /* struct struct scsi_host_template */ | 197 | /* struct struct scsi_host_template */ |
202 | #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,73)) | ||
203 | static int nsp32_proc_info (struct Scsi_Host *, char *, char **, off_t, int, int); | 198 | static int nsp32_proc_info (struct Scsi_Host *, char *, char **, off_t, int, int); |
204 | #else | ||
205 | static int nsp32_proc_info (char *, char **, off_t, int, int, int); | ||
206 | #endif | ||
207 | 199 | ||
208 | #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,73)) | ||
209 | static int nsp32_detect (struct pci_dev *pdev); | 200 | static int nsp32_detect (struct pci_dev *pdev); |
210 | #else | ||
211 | static int nsp32_detect (struct scsi_host_template *); | ||
212 | #endif | ||
213 | static int nsp32_queuecommand(struct scsi_cmnd *, | 201 | static int nsp32_queuecommand(struct scsi_cmnd *, |
214 | void (*done)(struct scsi_cmnd *)); | 202 | void (*done)(struct scsi_cmnd *)); |
215 | static const char *nsp32_info (struct Scsi_Host *); | 203 | static const char *nsp32_info (struct Scsi_Host *); |
@@ -296,15 +284,7 @@ static struct scsi_host_template nsp32_template = { | |||
296 | .eh_abort_handler = nsp32_eh_abort, | 284 | .eh_abort_handler = nsp32_eh_abort, |
297 | .eh_bus_reset_handler = nsp32_eh_bus_reset, | 285 | .eh_bus_reset_handler = nsp32_eh_bus_reset, |
298 | .eh_host_reset_handler = nsp32_eh_host_reset, | 286 | .eh_host_reset_handler = nsp32_eh_host_reset, |
299 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,74)) | ||
300 | .detect = nsp32_detect, | ||
301 | .release = nsp32_release, | ||
302 | #endif | ||
303 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,2)) | ||
304 | .use_new_eh_code = 1, | ||
305 | #else | ||
306 | /* .highmem_io = 1, */ | 287 | /* .highmem_io = 1, */ |
307 | #endif | ||
308 | }; | 288 | }; |
309 | 289 | ||
310 | #include "nsp32_io.h" | 290 | #include "nsp32_io.h" |
@@ -739,7 +719,7 @@ static int nsp32_selection_autoscsi(struct scsi_cmnd *SCpnt) | |||
739 | command = 0; | 719 | command = 0; |
740 | command |= (TRANSFER_GO | ALL_COUNTER_CLR); | 720 | command |= (TRANSFER_GO | ALL_COUNTER_CLR); |
741 | if (data->trans_method & NSP32_TRANSFER_BUSMASTER) { | 721 | if (data->trans_method & NSP32_TRANSFER_BUSMASTER) { |
742 | if (SCpnt->request_bufflen > 0) { | 722 | if (scsi_bufflen(SCpnt) > 0) { |
743 | command |= BM_START; | 723 | command |= BM_START; |
744 | } | 724 | } |
745 | } else if (data->trans_method & NSP32_TRANSFER_MMIO) { | 725 | } else if (data->trans_method & NSP32_TRANSFER_MMIO) { |
@@ -888,31 +868,28 @@ static int nsp32_reselection(struct scsi_cmnd *SCpnt, unsigned char newlun) | |||
888 | static int nsp32_setup_sg_table(struct scsi_cmnd *SCpnt) | 868 | static int nsp32_setup_sg_table(struct scsi_cmnd *SCpnt) |
889 | { | 869 | { |
890 | nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; | 870 | nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; |
891 | struct scatterlist *sgl; | 871 | struct scatterlist *sg; |
892 | nsp32_sgtable *sgt = data->cur_lunt->sglun->sgt; | 872 | nsp32_sgtable *sgt = data->cur_lunt->sglun->sgt; |
893 | int num, i; | 873 | int num, i; |
894 | u32_le l; | 874 | u32_le l; |
895 | 875 | ||
896 | if (SCpnt->request_bufflen == 0) { | ||
897 | return TRUE; | ||
898 | } | ||
899 | |||
900 | if (sgt == NULL) { | 876 | if (sgt == NULL) { |
901 | nsp32_dbg(NSP32_DEBUG_SGLIST, "SGT == null"); | 877 | nsp32_dbg(NSP32_DEBUG_SGLIST, "SGT == null"); |
902 | return FALSE; | 878 | return FALSE; |
903 | } | 879 | } |
904 | 880 | ||
905 | if (SCpnt->use_sg) { | 881 | num = scsi_dma_map(SCpnt); |
906 | sgl = (struct scatterlist *)SCpnt->request_buffer; | 882 | if (!num) |
907 | num = pci_map_sg(data->Pci, sgl, SCpnt->use_sg, | 883 | return TRUE; |
908 | SCpnt->sc_data_direction); | 884 | else if (num < 0) |
909 | for (i = 0; i < num; i++) { | 885 | return FALSE; |
886 | else { | ||
887 | scsi_for_each_sg(SCpnt, sg, num, i) { | ||
910 | /* | 888 | /* |
911 | * Build nsp32_sglist, substitute sg dma addresses. | 889 | * Build nsp32_sglist, substitute sg dma addresses. |
912 | */ | 890 | */ |
913 | sgt[i].addr = cpu_to_le32(sg_dma_address(sgl)); | 891 | sgt[i].addr = cpu_to_le32(sg_dma_address(sg)); |
914 | sgt[i].len = cpu_to_le32(sg_dma_len(sgl)); | 892 | sgt[i].len = cpu_to_le32(sg_dma_len(sg)); |
915 | sgl++; | ||
916 | 893 | ||
917 | if (le32_to_cpu(sgt[i].len) > 0x10000) { | 894 | if (le32_to_cpu(sgt[i].len) > 0x10000) { |
918 | nsp32_msg(KERN_ERR, | 895 | nsp32_msg(KERN_ERR, |
@@ -929,23 +906,6 @@ static int nsp32_setup_sg_table(struct scsi_cmnd *SCpnt) | |||
929 | /* set end mark */ | 906 | /* set end mark */ |
930 | l = le32_to_cpu(sgt[num-1].len); | 907 | l = le32_to_cpu(sgt[num-1].len); |
931 | sgt[num-1].len = cpu_to_le32(l | SGTEND); | 908 | sgt[num-1].len = cpu_to_le32(l | SGTEND); |
932 | |||
933 | } else { | ||
934 | SCpnt->SCp.have_data_in = pci_map_single(data->Pci, | ||
935 | SCpnt->request_buffer, SCpnt->request_bufflen, | ||
936 | SCpnt->sc_data_direction); | ||
937 | |||
938 | sgt[0].addr = cpu_to_le32(SCpnt->SCp.have_data_in); | ||
939 | sgt[0].len = cpu_to_le32(SCpnt->request_bufflen | SGTEND); /* set end mark */ | ||
940 | |||
941 | if (SCpnt->request_bufflen > 0x10000) { | ||
942 | nsp32_msg(KERN_ERR, | ||
943 | "can't transfer over 64KB at a time, size=0x%lx", SCpnt->request_bufflen); | ||
944 | return FALSE; | ||
945 | } | ||
946 | nsp32_dbg(NSP32_DEBUG_SGLIST, "single : addr 0x%lx len=0x%lx", | ||
947 | le32_to_cpu(sgt[0].addr), | ||
948 | le32_to_cpu(sgt[0].len )); | ||
949 | } | 909 | } |
950 | 910 | ||
951 | return TRUE; | 911 | return TRUE; |
@@ -962,7 +922,7 @@ static int nsp32_queuecommand(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_ | |||
962 | "enter. target: 0x%x LUN: 0x%x cmnd: 0x%x cmndlen: 0x%x " | 922 | "enter. target: 0x%x LUN: 0x%x cmnd: 0x%x cmndlen: 0x%x " |
963 | "use_sg: 0x%x reqbuf: 0x%lx reqlen: 0x%x", | 923 | "use_sg: 0x%x reqbuf: 0x%lx reqlen: 0x%x", |
964 | SCpnt->device->id, SCpnt->device->lun, SCpnt->cmnd[0], SCpnt->cmd_len, | 924 | SCpnt->device->id, SCpnt->device->lun, SCpnt->cmnd[0], SCpnt->cmd_len, |
965 | SCpnt->use_sg, SCpnt->request_buffer, SCpnt->request_bufflen); | 925 | scsi_sg_count(SCpnt), scsi_sglist(SCpnt), scsi_bufflen(SCpnt)); |
966 | 926 | ||
967 | if (data->CurrentSC != NULL) { | 927 | if (data->CurrentSC != NULL) { |
968 | nsp32_msg(KERN_ERR, "Currentsc != NULL. Cancel this command request"); | 928 | nsp32_msg(KERN_ERR, "Currentsc != NULL. Cancel this command request"); |
@@ -994,10 +954,10 @@ static int nsp32_queuecommand(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_ | |||
994 | data->CurrentSC = SCpnt; | 954 | data->CurrentSC = SCpnt; |
995 | SCpnt->SCp.Status = CHECK_CONDITION; | 955 | SCpnt->SCp.Status = CHECK_CONDITION; |
996 | SCpnt->SCp.Message = 0; | 956 | SCpnt->SCp.Message = 0; |
997 | SCpnt->resid = SCpnt->request_bufflen; | 957 | scsi_set_resid(SCpnt, scsi_bufflen(SCpnt)); |
998 | 958 | ||
999 | SCpnt->SCp.ptr = (char *) SCpnt->request_buffer; | 959 | SCpnt->SCp.ptr = (char *)scsi_sglist(SCpnt); |
1000 | SCpnt->SCp.this_residual = SCpnt->request_bufflen; | 960 | SCpnt->SCp.this_residual = scsi_bufflen(SCpnt); |
1001 | SCpnt->SCp.buffer = NULL; | 961 | SCpnt->SCp.buffer = NULL; |
1002 | SCpnt->SCp.buffers_residual = 0; | 962 | SCpnt->SCp.buffers_residual = 0; |
1003 | 963 | ||
@@ -1210,13 +1170,9 @@ static irqreturn_t do_nsp32_isr(int irq, void *dev_id) | |||
1210 | unsigned long flags; | 1170 | unsigned long flags; |
1211 | int ret; | 1171 | int ret; |
1212 | int handled = 0; | 1172 | int handled = 0; |
1213 | |||
1214 | #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) | ||
1215 | struct Scsi_Host *host = data->Host; | 1173 | struct Scsi_Host *host = data->Host; |
1174 | |||
1216 | spin_lock_irqsave(host->host_lock, flags); | 1175 | spin_lock_irqsave(host->host_lock, flags); |
1217 | #else | ||
1218 | spin_lock_irqsave(&io_request_lock, flags); | ||
1219 | #endif | ||
1220 | 1176 | ||
1221 | /* | 1177 | /* |
1222 | * IRQ check, then enable IRQ mask | 1178 | * IRQ check, then enable IRQ mask |
@@ -1312,7 +1268,7 @@ static irqreturn_t do_nsp32_isr(int irq, void *dev_id) | |||
1312 | } | 1268 | } |
1313 | 1269 | ||
1314 | if ((auto_stat & DATA_IN_PHASE) && | 1270 | if ((auto_stat & DATA_IN_PHASE) && |
1315 | (SCpnt->resid > 0) && | 1271 | (scsi_get_resid(SCpnt) > 0) && |
1316 | ((nsp32_read2(base, FIFO_REST_CNT) & FIFO_REST_MASK) != 0)) { | 1272 | ((nsp32_read2(base, FIFO_REST_CNT) & FIFO_REST_MASK) != 0)) { |
1317 | printk( "auto+fifo\n"); | 1273 | printk( "auto+fifo\n"); |
1318 | //nsp32_pio_read(SCpnt); | 1274 | //nsp32_pio_read(SCpnt); |
@@ -1333,7 +1289,7 @@ static irqreturn_t do_nsp32_isr(int irq, void *dev_id) | |||
1333 | nsp32_dbg(NSP32_DEBUG_INTR, "SSACK=0x%lx", | 1289 | nsp32_dbg(NSP32_DEBUG_INTR, "SSACK=0x%lx", |
1334 | nsp32_read4(base, SAVED_SACK_CNT)); | 1290 | nsp32_read4(base, SAVED_SACK_CNT)); |
1335 | 1291 | ||
1336 | SCpnt->resid = 0; /* all data transfered! */ | 1292 | scsi_set_resid(SCpnt, 0); /* all data transfered! */ |
1337 | } | 1293 | } |
1338 | 1294 | ||
1339 | /* | 1295 | /* |
@@ -1480,11 +1436,7 @@ static irqreturn_t do_nsp32_isr(int irq, void *dev_id) | |||
1480 | nsp32_write2(base, IRQ_CONTROL, 0); | 1436 | nsp32_write2(base, IRQ_CONTROL, 0); |
1481 | 1437 | ||
1482 | out2: | 1438 | out2: |
1483 | #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) | ||
1484 | spin_unlock_irqrestore(host->host_lock, flags); | 1439 | spin_unlock_irqrestore(host->host_lock, flags); |
1485 | #else | ||
1486 | spin_unlock_irqrestore(&io_request_lock, flags); | ||
1487 | #endif | ||
1488 | 1440 | ||
1489 | nsp32_dbg(NSP32_DEBUG_INTR, "exit"); | 1441 | nsp32_dbg(NSP32_DEBUG_INTR, "exit"); |
1490 | 1442 | ||
@@ -1499,28 +1451,15 @@ static irqreturn_t do_nsp32_isr(int irq, void *dev_id) | |||
1499 | nsp32_dbg(NSP32_DEBUG_PROC, "buffer=0x%p pos=0x%p length=%d %d\n", buffer, pos, length, length - (pos - buffer));\ | 1451 | nsp32_dbg(NSP32_DEBUG_PROC, "buffer=0x%p pos=0x%p length=%d %d\n", buffer, pos, length, length - (pos - buffer));\ |
1500 | } \ | 1452 | } \ |
1501 | } while(0) | 1453 | } while(0) |
1502 | static int nsp32_proc_info( | 1454 | |
1503 | #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,73)) | 1455 | static int nsp32_proc_info(struct Scsi_Host *host, char *buffer, char **start, |
1504 | struct Scsi_Host *host, | 1456 | off_t offset, int length, int inout) |
1505 | #endif | ||
1506 | char *buffer, | ||
1507 | char **start, | ||
1508 | off_t offset, | ||
1509 | int length, | ||
1510 | #if !(LINUX_VERSION_CODE > KERNEL_VERSION(2,5,73)) | ||
1511 | int hostno, | ||
1512 | #endif | ||
1513 | int inout) | ||
1514 | { | 1457 | { |
1515 | char *pos = buffer; | 1458 | char *pos = buffer; |
1516 | int thislength; | 1459 | int thislength; |
1517 | unsigned long flags; | 1460 | unsigned long flags; |
1518 | nsp32_hw_data *data; | 1461 | nsp32_hw_data *data; |
1519 | #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,73)) | ||
1520 | int hostno; | 1462 | int hostno; |
1521 | #else | ||
1522 | struct Scsi_Host *host; | ||
1523 | #endif | ||
1524 | unsigned int base; | 1463 | unsigned int base; |
1525 | unsigned char mode_reg; | 1464 | unsigned char mode_reg; |
1526 | int id, speed; | 1465 | int id, speed; |
@@ -1531,15 +1470,7 @@ static int nsp32_proc_info( | |||
1531 | return -EINVAL; | 1470 | return -EINVAL; |
1532 | } | 1471 | } |
1533 | 1472 | ||
1534 | #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,73)) | ||
1535 | hostno = host->host_no; | 1473 | hostno = host->host_no; |
1536 | #else | ||
1537 | /* search this HBA host */ | ||
1538 | host = scsi_host_hn_get(hostno); | ||
1539 | if (host == NULL) { | ||
1540 | return -ESRCH; | ||
1541 | } | ||
1542 | #endif | ||
1543 | data = (nsp32_hw_data *)host->hostdata; | 1474 | data = (nsp32_hw_data *)host->hostdata; |
1544 | base = host->io_port; | 1475 | base = host->io_port; |
1545 | 1476 | ||
@@ -1626,25 +1557,8 @@ static void nsp32_scsi_done(struct scsi_cmnd *SCpnt) | |||
1626 | nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; | 1557 | nsp32_hw_data *data = (nsp32_hw_data *)SCpnt->device->host->hostdata; |
1627 | unsigned int base = SCpnt->device->host->io_port; | 1558 | unsigned int base = SCpnt->device->host->io_port; |
1628 | 1559 | ||
1629 | /* | 1560 | scsi_dma_unmap(SCpnt); |
1630 | * unmap pci | ||
1631 | */ | ||
1632 | if (SCpnt->request_bufflen == 0) { | ||
1633 | goto skip; | ||
1634 | } | ||
1635 | 1561 | ||
1636 | if (SCpnt->use_sg) { | ||
1637 | pci_unmap_sg(data->Pci, | ||
1638 | (struct scatterlist *)SCpnt->request_buffer, | ||
1639 | SCpnt->use_sg, SCpnt->sc_data_direction); | ||
1640 | } else { | ||
1641 | pci_unmap_single(data->Pci, | ||
1642 | (u32)SCpnt->SCp.have_data_in, | ||
1643 | SCpnt->request_bufflen, | ||
1644 | SCpnt->sc_data_direction); | ||
1645 | } | ||
1646 | |||
1647 | skip: | ||
1648 | /* | 1562 | /* |
1649 | * clear TRANSFERCONTROL_BM_START | 1563 | * clear TRANSFERCONTROL_BM_START |
1650 | */ | 1564 | */ |
@@ -1800,7 +1714,7 @@ static int nsp32_busfree_occur(struct scsi_cmnd *SCpnt, unsigned short execph) | |||
1800 | SCpnt->SCp.Message = 0; | 1714 | SCpnt->SCp.Message = 0; |
1801 | nsp32_dbg(NSP32_DEBUG_BUSFREE, | 1715 | nsp32_dbg(NSP32_DEBUG_BUSFREE, |
1802 | "normal end stat=0x%x resid=0x%x\n", | 1716 | "normal end stat=0x%x resid=0x%x\n", |
1803 | SCpnt->SCp.Status, SCpnt->resid); | 1717 | SCpnt->SCp.Status, scsi_get_resid(SCpnt)); |
1804 | SCpnt->result = (DID_OK << 16) | | 1718 | SCpnt->result = (DID_OK << 16) | |
1805 | (SCpnt->SCp.Message << 8) | | 1719 | (SCpnt->SCp.Message << 8) | |
1806 | (SCpnt->SCp.Status << 0); | 1720 | (SCpnt->SCp.Status << 0); |
@@ -1844,7 +1758,7 @@ static void nsp32_adjust_busfree(struct scsi_cmnd *SCpnt, unsigned int s_sacklen | |||
1844 | unsigned int restlen, sentlen; | 1758 | unsigned int restlen, sentlen; |
1845 | u32_le len, addr; | 1759 | u32_le len, addr; |
1846 | 1760 | ||
1847 | nsp32_dbg(NSP32_DEBUG_SGLIST, "old resid=0x%x", SCpnt->resid); | 1761 | nsp32_dbg(NSP32_DEBUG_SGLIST, "old resid=0x%x", scsi_get_resid(SCpnt)); |
1848 | 1762 | ||
1849 | /* adjust saved SACK count with 4 byte start address boundary */ | 1763 | /* adjust saved SACK count with 4 byte start address boundary */ |
1850 | s_sacklen -= le32_to_cpu(sgt[old_entry].addr) & 3; | 1764 | s_sacklen -= le32_to_cpu(sgt[old_entry].addr) & 3; |
@@ -1888,12 +1802,12 @@ static void nsp32_adjust_busfree(struct scsi_cmnd *SCpnt, unsigned int s_sacklen | |||
1888 | return; | 1802 | return; |
1889 | 1803 | ||
1890 | last: | 1804 | last: |
1891 | if (SCpnt->resid < sentlen) { | 1805 | if (scsi_get_resid(SCpnt) < sentlen) { |
1892 | nsp32_msg(KERN_ERR, "resid underflow"); | 1806 | nsp32_msg(KERN_ERR, "resid underflow"); |
1893 | } | 1807 | } |
1894 | 1808 | ||
1895 | SCpnt->resid -= sentlen; | 1809 | scsi_set_resid(SCpnt, scsi_get_resid(SCpnt) - sentlen); |
1896 | nsp32_dbg(NSP32_DEBUG_SGLIST, "new resid=0x%x", SCpnt->resid); | 1810 | nsp32_dbg(NSP32_DEBUG_SGLIST, "new resid=0x%x", scsi_get_resid(SCpnt)); |
1897 | 1811 | ||
1898 | /* update hostdata and lun */ | 1812 | /* update hostdata and lun */ |
1899 | 1813 | ||
@@ -2022,7 +1936,7 @@ static void nsp32_restart_autoscsi(struct scsi_cmnd *SCpnt, unsigned short comma | |||
2022 | transfer = 0; | 1936 | transfer = 0; |
2023 | transfer |= (TRANSFER_GO | ALL_COUNTER_CLR); | 1937 | transfer |= (TRANSFER_GO | ALL_COUNTER_CLR); |
2024 | if (data->trans_method & NSP32_TRANSFER_BUSMASTER) { | 1938 | if (data->trans_method & NSP32_TRANSFER_BUSMASTER) { |
2025 | if (SCpnt->request_bufflen > 0) { | 1939 | if (scsi_bufflen(SCpnt) > 0) { |
2026 | transfer |= BM_START; | 1940 | transfer |= BM_START; |
2027 | } | 1941 | } |
2028 | } else if (data->trans_method & NSP32_TRANSFER_MMIO) { | 1942 | } else if (data->trans_method & NSP32_TRANSFER_MMIO) { |
@@ -2674,17 +2588,7 @@ static void nsp32_sack_negate(nsp32_hw_data *data) | |||
2674 | * 0x900-0xbff: (map same 0x800-0x8ff I/O port image repeatedly) | 2588 | * 0x900-0xbff: (map same 0x800-0x8ff I/O port image repeatedly) |
2675 | * 0xc00-0xfff: CardBus status registers | 2589 | * 0xc00-0xfff: CardBus status registers |
2676 | */ | 2590 | */ |
2677 | #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,73)) | ||
2678 | #define DETECT_OK 0 | ||
2679 | #define DETECT_NG 1 | ||
2680 | #define PCIDEV pdev | ||
2681 | static int nsp32_detect(struct pci_dev *pdev) | 2591 | static int nsp32_detect(struct pci_dev *pdev) |
2682 | #else | ||
2683 | #define DETECT_OK 1 | ||
2684 | #define DETECT_NG 0 | ||
2685 | #define PCIDEV (data->Pci) | ||
2686 | static int nsp32_detect(struct scsi_host_template *sht) | ||
2687 | #endif | ||
2688 | { | 2592 | { |
2689 | struct Scsi_Host *host; /* registered host structure */ | 2593 | struct Scsi_Host *host; /* registered host structure */ |
2690 | struct resource *res; | 2594 | struct resource *res; |
@@ -2697,11 +2601,7 @@ static int nsp32_detect(struct scsi_host_template *sht) | |||
2697 | /* | 2601 | /* |
2698 | * register this HBA as SCSI device | 2602 | * register this HBA as SCSI device |
2699 | */ | 2603 | */ |
2700 | #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,73)) | ||
2701 | host = scsi_host_alloc(&nsp32_template, sizeof(nsp32_hw_data)); | 2604 | host = scsi_host_alloc(&nsp32_template, sizeof(nsp32_hw_data)); |
2702 | #else | ||
2703 | host = scsi_register(sht, sizeof(nsp32_hw_data)); | ||
2704 | #endif | ||
2705 | if (host == NULL) { | 2605 | if (host == NULL) { |
2706 | nsp32_msg (KERN_ERR, "failed to scsi register"); | 2606 | nsp32_msg (KERN_ERR, "failed to scsi register"); |
2707 | goto err; | 2607 | goto err; |
@@ -2719,9 +2619,6 @@ static int nsp32_detect(struct scsi_host_template *sht) | |||
2719 | host->unique_id = data->BaseAddress; | 2619 | host->unique_id = data->BaseAddress; |
2720 | host->n_io_port = data->NumAddress; | 2620 | host->n_io_port = data->NumAddress; |
2721 | host->base = (unsigned long)data->MmioAddress; | 2621 | host->base = (unsigned long)data->MmioAddress; |
2722 | #if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,63)) | ||
2723 | scsi_set_pci_device(host, PCIDEV); | ||
2724 | #endif | ||
2725 | 2622 | ||
2726 | data->Host = host; | 2623 | data->Host = host; |
2727 | spin_lock_init(&(data->Lock)); | 2624 | spin_lock_init(&(data->Lock)); |
@@ -2776,7 +2673,7 @@ static int nsp32_detect(struct scsi_host_template *sht) | |||
2776 | /* | 2673 | /* |
2777 | * setup DMA | 2674 | * setup DMA |
2778 | */ | 2675 | */ |
2779 | if (pci_set_dma_mask(PCIDEV, DMA_32BIT_MASK) != 0) { | 2676 | if (pci_set_dma_mask(pdev, DMA_32BIT_MASK) != 0) { |
2780 | nsp32_msg (KERN_ERR, "failed to set PCI DMA mask"); | 2677 | nsp32_msg (KERN_ERR, "failed to set PCI DMA mask"); |
2781 | goto scsi_unregister; | 2678 | goto scsi_unregister; |
2782 | } | 2679 | } |
@@ -2784,7 +2681,7 @@ static int nsp32_detect(struct scsi_host_template *sht) | |||
2784 | /* | 2681 | /* |
2785 | * allocate autoparam DMA resource. | 2682 | * allocate autoparam DMA resource. |
2786 | */ | 2683 | */ |
2787 | data->autoparam = pci_alloc_consistent(PCIDEV, sizeof(nsp32_autoparam), &(data->auto_paddr)); | 2684 | data->autoparam = pci_alloc_consistent(pdev, sizeof(nsp32_autoparam), &(data->auto_paddr)); |
2788 | if (data->autoparam == NULL) { | 2685 | if (data->autoparam == NULL) { |
2789 | nsp32_msg(KERN_ERR, "failed to allocate DMA memory"); | 2686 | nsp32_msg(KERN_ERR, "failed to allocate DMA memory"); |
2790 | goto scsi_unregister; | 2687 | goto scsi_unregister; |
@@ -2793,7 +2690,7 @@ static int nsp32_detect(struct scsi_host_template *sht) | |||
2793 | /* | 2690 | /* |
2794 | * allocate scatter-gather DMA resource. | 2691 | * allocate scatter-gather DMA resource. |
2795 | */ | 2692 | */ |
2796 | data->sg_list = pci_alloc_consistent(PCIDEV, NSP32_SG_TABLE_SIZE, | 2693 | data->sg_list = pci_alloc_consistent(pdev, NSP32_SG_TABLE_SIZE, |
2797 | &(data->sg_paddr)); | 2694 | &(data->sg_paddr)); |
2798 | if (data->sg_list == NULL) { | 2695 | if (data->sg_list == NULL) { |
2799 | nsp32_msg(KERN_ERR, "failed to allocate DMA memory"); | 2696 | nsp32_msg(KERN_ERR, "failed to allocate DMA memory"); |
@@ -2883,16 +2780,14 @@ static int nsp32_detect(struct scsi_host_template *sht) | |||
2883 | goto free_irq; | 2780 | goto free_irq; |
2884 | } | 2781 | } |
2885 | 2782 | ||
2886 | #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,73)) | 2783 | ret = scsi_add_host(host, &pdev->dev); |
2887 | ret = scsi_add_host(host, &PCIDEV->dev); | ||
2888 | if (ret) { | 2784 | if (ret) { |
2889 | nsp32_msg(KERN_ERR, "failed to add scsi host"); | 2785 | nsp32_msg(KERN_ERR, "failed to add scsi host"); |
2890 | goto free_region; | 2786 | goto free_region; |
2891 | } | 2787 | } |
2892 | scsi_scan_host(host); | 2788 | scsi_scan_host(host); |
2893 | #endif | 2789 | pci_set_drvdata(pdev, host); |
2894 | pci_set_drvdata(PCIDEV, host); | 2790 | return 0; |
2895 | return DETECT_OK; | ||
2896 | 2791 | ||
2897 | free_region: | 2792 | free_region: |
2898 | release_region(host->io_port, host->n_io_port); | 2793 | release_region(host->io_port, host->n_io_port); |
@@ -2901,22 +2796,19 @@ static int nsp32_detect(struct scsi_host_template *sht) | |||
2901 | free_irq(host->irq, data); | 2796 | free_irq(host->irq, data); |
2902 | 2797 | ||
2903 | free_sg_list: | 2798 | free_sg_list: |
2904 | pci_free_consistent(PCIDEV, NSP32_SG_TABLE_SIZE, | 2799 | pci_free_consistent(pdev, NSP32_SG_TABLE_SIZE, |
2905 | data->sg_list, data->sg_paddr); | 2800 | data->sg_list, data->sg_paddr); |
2906 | 2801 | ||
2907 | free_autoparam: | 2802 | free_autoparam: |
2908 | pci_free_consistent(PCIDEV, sizeof(nsp32_autoparam), | 2803 | pci_free_consistent(pdev, sizeof(nsp32_autoparam), |
2909 | data->autoparam, data->auto_paddr); | 2804 | data->autoparam, data->auto_paddr); |
2910 | 2805 | ||
2911 | scsi_unregister: | 2806 | scsi_unregister: |
2912 | scsi_host_put(host); | 2807 | scsi_host_put(host); |
2913 | 2808 | ||
2914 | err: | 2809 | err: |
2915 | return DETECT_NG; | 2810 | return 1; |
2916 | } | 2811 | } |
2917 | #undef DETECT_OK | ||
2918 | #undef DETECT_NG | ||
2919 | #undef PCIDEV | ||
2920 | 2812 | ||
2921 | static int nsp32_release(struct Scsi_Host *host) | 2813 | static int nsp32_release(struct Scsi_Host *host) |
2922 | { | 2814 | { |
@@ -3516,11 +3408,7 @@ static int __devinit nsp32_probe(struct pci_dev *pdev, const struct pci_device_i | |||
3516 | 3408 | ||
3517 | pci_set_master(pdev); | 3409 | pci_set_master(pdev); |
3518 | 3410 | ||
3519 | #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,73)) | ||
3520 | ret = nsp32_detect(pdev); | 3411 | ret = nsp32_detect(pdev); |
3521 | #else | ||
3522 | ret = scsi_register_host(&nsp32_template); | ||
3523 | #endif | ||
3524 | 3412 | ||
3525 | nsp32_msg(KERN_INFO, "irq: %i mmio: %p+0x%lx slot: %s model: %s", | 3413 | nsp32_msg(KERN_INFO, "irq: %i mmio: %p+0x%lx slot: %s model: %s", |
3526 | pdev->irq, | 3414 | pdev->irq, |
@@ -3535,25 +3423,17 @@ static int __devinit nsp32_probe(struct pci_dev *pdev, const struct pci_device_i | |||
3535 | 3423 | ||
3536 | static void __devexit nsp32_remove(struct pci_dev *pdev) | 3424 | static void __devexit nsp32_remove(struct pci_dev *pdev) |
3537 | { | 3425 | { |
3538 | #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,73)) | ||
3539 | struct Scsi_Host *host = pci_get_drvdata(pdev); | 3426 | struct Scsi_Host *host = pci_get_drvdata(pdev); |
3540 | #endif | ||
3541 | 3427 | ||
3542 | nsp32_dbg(NSP32_DEBUG_REGISTER, "enter"); | 3428 | nsp32_dbg(NSP32_DEBUG_REGISTER, "enter"); |
3543 | 3429 | ||
3544 | #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,73)) | ||
3545 | scsi_remove_host(host); | 3430 | scsi_remove_host(host); |
3546 | 3431 | ||
3547 | nsp32_release(host); | 3432 | nsp32_release(host); |
3548 | 3433 | ||
3549 | scsi_host_put(host); | 3434 | scsi_host_put(host); |
3550 | #else | ||
3551 | scsi_unregister_host(&nsp32_template); | ||
3552 | #endif | ||
3553 | } | 3435 | } |
3554 | 3436 | ||
3555 | |||
3556 | |||
3557 | static struct pci_driver nsp32_driver = { | 3437 | static struct pci_driver nsp32_driver = { |
3558 | .name = "nsp32", | 3438 | .name = "nsp32", |
3559 | .id_table = nsp32_pci_table, | 3439 | .id_table = nsp32_pci_table, |