.. | .. |
---|
61 | 61 | #include <asm/io.h> |
---|
62 | 62 | |
---|
63 | 63 | #include <scsi/scsi.h> |
---|
64 | | -#include <scsi/scsicam.h> /* needed for scsicam_bios_param */ |
---|
65 | 64 | #include <scsi/scsi_cmnd.h> |
---|
66 | 65 | #include <scsi/scsi_device.h> |
---|
67 | 66 | #include <scsi/scsi_host.h> |
---|
.. | .. |
---|
753 | 752 | return NULL; |
---|
754 | 753 | } |
---|
755 | 754 | |
---|
756 | | - |
---|
757 | | -static struct ScsiReqBlk *srb_get_free(struct AdapterCtlBlk *acb) |
---|
758 | | -{ |
---|
759 | | - struct list_head *head = &acb->srb_free_list; |
---|
760 | | - struct ScsiReqBlk *srb = NULL; |
---|
761 | | - |
---|
762 | | - if (!list_empty(head)) { |
---|
763 | | - srb = list_entry(head->next, struct ScsiReqBlk, list); |
---|
764 | | - list_del(head->next); |
---|
765 | | - dprintkdbg(DBG_0, "srb_get_free: srb=%p\n", srb); |
---|
766 | | - } |
---|
767 | | - return srb; |
---|
768 | | -} |
---|
769 | | - |
---|
770 | | - |
---|
771 | | -static void srb_free_insert(struct AdapterCtlBlk *acb, struct ScsiReqBlk *srb) |
---|
772 | | -{ |
---|
773 | | - dprintkdbg(DBG_0, "srb_free_insert: srb=%p\n", srb); |
---|
774 | | - list_add_tail(&srb->list, &acb->srb_free_list); |
---|
775 | | -} |
---|
776 | | - |
---|
777 | | - |
---|
778 | | -static void srb_waiting_insert(struct DeviceCtlBlk *dcb, |
---|
779 | | - struct ScsiReqBlk *srb) |
---|
780 | | -{ |
---|
781 | | - dprintkdbg(DBG_0, "srb_waiting_insert: (0x%p) <%02i-%i> srb=%p\n", |
---|
782 | | - srb->cmd, dcb->target_id, dcb->target_lun, srb); |
---|
783 | | - list_add(&srb->list, &dcb->srb_waiting_list); |
---|
784 | | -} |
---|
785 | | - |
---|
786 | | - |
---|
787 | | -static void srb_waiting_append(struct DeviceCtlBlk *dcb, |
---|
788 | | - struct ScsiReqBlk *srb) |
---|
789 | | -{ |
---|
790 | | - dprintkdbg(DBG_0, "srb_waiting_append: (0x%p) <%02i-%i> srb=%p\n", |
---|
791 | | - srb->cmd, dcb->target_id, dcb->target_lun, srb); |
---|
792 | | - list_add_tail(&srb->list, &dcb->srb_waiting_list); |
---|
793 | | -} |
---|
794 | | - |
---|
795 | | - |
---|
796 | | -static void srb_going_append(struct DeviceCtlBlk *dcb, struct ScsiReqBlk *srb) |
---|
797 | | -{ |
---|
798 | | - dprintkdbg(DBG_0, "srb_going_append: (0x%p) <%02i-%i> srb=%p\n", |
---|
799 | | - srb->cmd, dcb->target_id, dcb->target_lun, srb); |
---|
800 | | - list_add_tail(&srb->list, &dcb->srb_going_list); |
---|
801 | | -} |
---|
802 | | - |
---|
803 | | - |
---|
804 | | -static void srb_going_remove(struct DeviceCtlBlk *dcb, struct ScsiReqBlk *srb) |
---|
805 | | -{ |
---|
806 | | - struct ScsiReqBlk *i; |
---|
807 | | - struct ScsiReqBlk *tmp; |
---|
808 | | - dprintkdbg(DBG_0, "srb_going_remove: (0x%p) <%02i-%i> srb=%p\n", |
---|
809 | | - srb->cmd, dcb->target_id, dcb->target_lun, srb); |
---|
810 | | - |
---|
811 | | - list_for_each_entry_safe(i, tmp, &dcb->srb_going_list, list) |
---|
812 | | - if (i == srb) { |
---|
813 | | - list_del(&srb->list); |
---|
814 | | - break; |
---|
815 | | - } |
---|
816 | | -} |
---|
817 | | - |
---|
818 | | - |
---|
819 | | -static void srb_waiting_remove(struct DeviceCtlBlk *dcb, |
---|
820 | | - struct ScsiReqBlk *srb) |
---|
821 | | -{ |
---|
822 | | - struct ScsiReqBlk *i; |
---|
823 | | - struct ScsiReqBlk *tmp; |
---|
824 | | - dprintkdbg(DBG_0, "srb_waiting_remove: (0x%p) <%02i-%i> srb=%p\n", |
---|
825 | | - srb->cmd, dcb->target_id, dcb->target_lun, srb); |
---|
826 | | - |
---|
827 | | - list_for_each_entry_safe(i, tmp, &dcb->srb_waiting_list, list) |
---|
828 | | - if (i == srb) { |
---|
829 | | - list_del(&srb->list); |
---|
830 | | - break; |
---|
831 | | - } |
---|
832 | | -} |
---|
833 | | - |
---|
834 | | - |
---|
835 | | -static void srb_going_to_waiting_move(struct DeviceCtlBlk *dcb, |
---|
836 | | - struct ScsiReqBlk *srb) |
---|
837 | | -{ |
---|
838 | | - dprintkdbg(DBG_0, |
---|
839 | | - "srb_going_to_waiting_move: (0x%p) <%02i-%i> srb=%p\n", |
---|
840 | | - srb->cmd, dcb->target_id, dcb->target_lun, srb); |
---|
841 | | - list_move(&srb->list, &dcb->srb_waiting_list); |
---|
842 | | -} |
---|
843 | | - |
---|
844 | | - |
---|
845 | | -static void srb_waiting_to_going_move(struct DeviceCtlBlk *dcb, |
---|
846 | | - struct ScsiReqBlk *srb) |
---|
847 | | -{ |
---|
848 | | - dprintkdbg(DBG_0, |
---|
849 | | - "srb_waiting_to_going_move: (0x%p) <%02i-%i> srb=%p\n", |
---|
850 | | - srb->cmd, dcb->target_id, dcb->target_lun, srb); |
---|
851 | | - list_move(&srb->list, &dcb->srb_going_list); |
---|
852 | | -} |
---|
853 | | - |
---|
854 | | - |
---|
855 | 755 | /* Sets the timer to wake us up */ |
---|
856 | 756 | static void waiting_set_timer(struct AdapterCtlBlk *acb, unsigned long to) |
---|
857 | 757 | { |
---|
.. | .. |
---|
923 | 823 | |
---|
924 | 824 | /* Try to send to the bus */ |
---|
925 | 825 | if (!start_scsi(acb, pos, srb)) |
---|
926 | | - srb_waiting_to_going_move(pos, srb); |
---|
| 826 | + list_move(&srb->list, &pos->srb_going_list); |
---|
927 | 827 | else |
---|
928 | 828 | waiting_set_timer(acb, HZ/50); |
---|
929 | 829 | break; |
---|
.. | .. |
---|
960 | 860 | if (dcb->max_command <= list_size(&dcb->srb_going_list) || |
---|
961 | 861 | acb->active_dcb || |
---|
962 | 862 | (acb->acb_flag & (RESET_DETECT + RESET_DONE + RESET_DEV))) { |
---|
963 | | - srb_waiting_append(dcb, srb); |
---|
| 863 | + list_add_tail(&srb->list, &dcb->srb_waiting_list); |
---|
964 | 864 | waiting_process_next(acb); |
---|
965 | 865 | return; |
---|
966 | 866 | } |
---|
967 | 867 | |
---|
968 | | - if (!start_scsi(acb, dcb, srb)) |
---|
969 | | - srb_going_append(dcb, srb); |
---|
970 | | - else { |
---|
971 | | - srb_waiting_insert(dcb, srb); |
---|
| 868 | + if (!start_scsi(acb, dcb, srb)) { |
---|
| 869 | + list_add_tail(&srb->list, &dcb->srb_going_list); |
---|
| 870 | + } else { |
---|
| 871 | + list_add(&srb->list, &dcb->srb_waiting_list); |
---|
972 | 872 | waiting_set_timer(acb, HZ / 50); |
---|
973 | 873 | } |
---|
974 | 874 | } |
---|
.. | .. |
---|
1002 | 902 | nseg = scsi_dma_map(cmd); |
---|
1003 | 903 | BUG_ON(nseg < 0); |
---|
1004 | 904 | |
---|
1005 | | - if (dir == PCI_DMA_NONE || !nseg) { |
---|
| 905 | + if (dir == DMA_NONE || !nseg) { |
---|
1006 | 906 | dprintkdbg(DBG_0, |
---|
1007 | 907 | "build_srb: [0] len=%d buf=%p use_sg=%d !MAP=%08x\n", |
---|
1008 | 908 | cmd->bufflen, scsi_sglist(cmd), scsi_sg_count(cmd), |
---|
.. | .. |
---|
1045 | 945 | sgp->length++; |
---|
1046 | 946 | } |
---|
1047 | 947 | |
---|
1048 | | - srb->sg_bus_addr = pci_map_single(dcb->acb->dev, |
---|
1049 | | - srb->segment_x, |
---|
1050 | | - SEGMENTX_LEN, |
---|
1051 | | - PCI_DMA_TODEVICE); |
---|
| 948 | + srb->sg_bus_addr = dma_map_single(&dcb->acb->dev->dev, |
---|
| 949 | + srb->segment_x, SEGMENTX_LEN, DMA_TO_DEVICE); |
---|
1052 | 950 | |
---|
1053 | 951 | dprintkdbg(DBG_SG, "build_srb: [n] map sg %p->%08x(%05x)\n", |
---|
1054 | 952 | srb->segment_x, srb->sg_bus_addr, SEGMENTX_LEN); |
---|
.. | .. |
---|
1116 | 1014 | cmd->scsi_done = done; |
---|
1117 | 1015 | cmd->result = 0; |
---|
1118 | 1016 | |
---|
1119 | | - srb = srb_get_free(acb); |
---|
1120 | | - if (!srb) |
---|
1121 | | - { |
---|
| 1017 | + srb = list_first_entry_or_null(&acb->srb_free_list, |
---|
| 1018 | + struct ScsiReqBlk, list); |
---|
| 1019 | + if (!srb) { |
---|
1122 | 1020 | /* |
---|
1123 | 1021 | * Return 1 since we are unable to queue this command at this |
---|
1124 | 1022 | * point in time. |
---|
.. | .. |
---|
1126 | 1024 | dprintkdbg(DBG_0, "queue_command: No free srb's\n"); |
---|
1127 | 1025 | return 1; |
---|
1128 | 1026 | } |
---|
| 1027 | + list_del(&srb->list); |
---|
1129 | 1028 | |
---|
1130 | 1029 | build_srb(cmd, dcb, srb); |
---|
1131 | 1030 | |
---|
1132 | 1031 | if (!list_empty(&dcb->srb_waiting_list)) { |
---|
1133 | 1032 | /* append to waiting queue */ |
---|
1134 | | - srb_waiting_append(dcb, srb); |
---|
| 1033 | + list_add_tail(&srb->list, &dcb->srb_waiting_list); |
---|
1135 | 1034 | waiting_process_next(acb); |
---|
1136 | 1035 | } else { |
---|
1137 | 1036 | /* process immediately */ |
---|
.. | .. |
---|
1152 | 1051 | } |
---|
1153 | 1052 | |
---|
1154 | 1053 | static DEF_SCSI_QCMD(dc395x_queue_command) |
---|
1155 | | - |
---|
1156 | | -/* |
---|
1157 | | - * Return the disk geometry for the given SCSI device. |
---|
1158 | | - */ |
---|
1159 | | -static int dc395x_bios_param(struct scsi_device *sdev, |
---|
1160 | | - struct block_device *bdev, sector_t capacity, int *info) |
---|
1161 | | -{ |
---|
1162 | | -#ifdef CONFIG_SCSI_DC395x_TRMS1040_TRADMAP |
---|
1163 | | - int heads, sectors, cylinders; |
---|
1164 | | - struct AdapterCtlBlk *acb; |
---|
1165 | | - int size = capacity; |
---|
1166 | | - |
---|
1167 | | - dprintkdbg(DBG_0, "dc395x_bios_param..............\n"); |
---|
1168 | | - acb = (struct AdapterCtlBlk *)sdev->host->hostdata; |
---|
1169 | | - heads = 64; |
---|
1170 | | - sectors = 32; |
---|
1171 | | - cylinders = size / (heads * sectors); |
---|
1172 | | - |
---|
1173 | | - if ((acb->gmode2 & NAC_GREATER_1G) && (cylinders > 1024)) { |
---|
1174 | | - heads = 255; |
---|
1175 | | - sectors = 63; |
---|
1176 | | - cylinders = size / (heads * sectors); |
---|
1177 | | - } |
---|
1178 | | - geom[0] = heads; |
---|
1179 | | - geom[1] = sectors; |
---|
1180 | | - geom[2] = cylinders; |
---|
1181 | | - return 0; |
---|
1182 | | -#else |
---|
1183 | | - return scsicam_bios_param(bdev, capacity, info); |
---|
1184 | | -#endif |
---|
1185 | | -} |
---|
1186 | | - |
---|
1187 | 1054 | |
---|
1188 | 1055 | static void dump_register_info(struct AdapterCtlBlk *acb, |
---|
1189 | 1056 | struct DeviceCtlBlk *dcb, struct ScsiReqBlk *srb) |
---|
.. | .. |
---|
1376 | 1243 | |
---|
1377 | 1244 | srb = find_cmd(cmd, &dcb->srb_waiting_list); |
---|
1378 | 1245 | if (srb) { |
---|
1379 | | - srb_waiting_remove(dcb, srb); |
---|
| 1246 | + list_del(&srb->list); |
---|
1380 | 1247 | pci_unmap_srb_sense(acb, srb); |
---|
1381 | 1248 | pci_unmap_srb(acb, srb); |
---|
1382 | 1249 | free_tag(dcb, srb); |
---|
1383 | | - srb_free_insert(acb, srb); |
---|
| 1250 | + list_add_tail(&srb->list, &acb->srb_free_list); |
---|
1384 | 1251 | dprintkl(KERN_DEBUG, "eh_abort: Command was waiting\n"); |
---|
1385 | 1252 | cmd->result = DID_ABORT << 16; |
---|
1386 | 1253 | return SUCCESS; |
---|
.. | .. |
---|
1969 | 1836 | xferred -= psge->length; |
---|
1970 | 1837 | } else { |
---|
1971 | 1838 | /* Partial SG entry done */ |
---|
1972 | | - pci_dma_sync_single_for_cpu(srb->dcb-> |
---|
1973 | | - acb->dev, |
---|
1974 | | - srb->sg_bus_addr, |
---|
1975 | | - SEGMENTX_LEN, |
---|
1976 | | - PCI_DMA_TODEVICE); |
---|
| 1839 | + dma_sync_single_for_cpu(&srb->dcb->acb->dev->dev, |
---|
| 1840 | + srb->sg_bus_addr, SEGMENTX_LEN, |
---|
| 1841 | + DMA_TO_DEVICE); |
---|
1977 | 1842 | psge->length -= xferred; |
---|
1978 | 1843 | psge->address += xferred; |
---|
1979 | 1844 | srb->sg_index = idx; |
---|
1980 | | - pci_dma_sync_single_for_device(srb->dcb-> |
---|
1981 | | - acb->dev, |
---|
1982 | | - srb->sg_bus_addr, |
---|
1983 | | - SEGMENTX_LEN, |
---|
1984 | | - PCI_DMA_TODEVICE); |
---|
| 1845 | + dma_sync_single_for_device(&srb->dcb->acb->dev->dev, |
---|
| 1846 | + srb->sg_bus_addr, SEGMENTX_LEN, |
---|
| 1847 | + DMA_TO_DEVICE); |
---|
1985 | 1848 | break; |
---|
1986 | 1849 | } |
---|
1987 | 1850 | psge++; |
---|
.. | .. |
---|
3088 | 2951 | goto disc1; |
---|
3089 | 2952 | } |
---|
3090 | 2953 | free_tag(dcb, srb); |
---|
3091 | | - srb_going_to_waiting_move(dcb, srb); |
---|
| 2954 | + list_move(&srb->list, &dcb->srb_waiting_list); |
---|
3092 | 2955 | dprintkdbg(DBG_KG, |
---|
3093 | 2956 | "disconnect: (0x%p) Retry\n", |
---|
3094 | 2957 | srb->cmd); |
---|
.. | .. |
---|
3153 | 3016 | |
---|
3154 | 3017 | srb->state = SRB_READY; |
---|
3155 | 3018 | free_tag(dcb, srb); |
---|
3156 | | - srb_going_to_waiting_move(dcb, srb); |
---|
| 3019 | + list_move(&srb->list, &dcb->srb_waiting_list); |
---|
3157 | 3020 | waiting_set_timer(acb, HZ / 20); |
---|
3158 | 3021 | |
---|
3159 | 3022 | /* return; */ |
---|
.. | .. |
---|
3272 | 3135 | struct scsi_cmnd *cmd = srb->cmd; |
---|
3273 | 3136 | enum dma_data_direction dir = cmd->sc_data_direction; |
---|
3274 | 3137 | |
---|
3275 | | - if (scsi_sg_count(cmd) && dir != PCI_DMA_NONE) { |
---|
| 3138 | + if (scsi_sg_count(cmd) && dir != DMA_NONE) { |
---|
3276 | 3139 | /* unmap DC395x SG list */ |
---|
3277 | 3140 | dprintkdbg(DBG_SG, "pci_unmap_srb: list=%08x(%05x)\n", |
---|
3278 | 3141 | srb->sg_bus_addr, SEGMENTX_LEN); |
---|
3279 | | - pci_unmap_single(acb->dev, srb->sg_bus_addr, |
---|
3280 | | - SEGMENTX_LEN, |
---|
3281 | | - PCI_DMA_TODEVICE); |
---|
| 3142 | + dma_unmap_single(&acb->dev->dev, srb->sg_bus_addr, SEGMENTX_LEN, |
---|
| 3143 | + DMA_TO_DEVICE); |
---|
3282 | 3144 | dprintkdbg(DBG_SG, "pci_unmap_srb: segs=%i buffer=%p\n", |
---|
3283 | 3145 | scsi_sg_count(cmd), scsi_bufflen(cmd)); |
---|
3284 | 3146 | /* unmap the sg segments */ |
---|
.. | .. |
---|
3296 | 3158 | /* Unmap sense buffer */ |
---|
3297 | 3159 | dprintkdbg(DBG_SG, "pci_unmap_srb_sense: buffer=%08x\n", |
---|
3298 | 3160 | srb->segment_x[0].address); |
---|
3299 | | - pci_unmap_single(acb->dev, srb->segment_x[0].address, |
---|
3300 | | - srb->segment_x[0].length, PCI_DMA_FROMDEVICE); |
---|
| 3161 | + dma_unmap_single(&acb->dev->dev, srb->segment_x[0].address, |
---|
| 3162 | + srb->segment_x[0].length, DMA_FROM_DEVICE); |
---|
3301 | 3163 | /* Restore SG stuff */ |
---|
3302 | 3164 | srb->total_xfer_length = srb->xferred; |
---|
3303 | 3165 | srb->segment_x[0].address = |
---|
.. | .. |
---|
3416 | 3278 | tempcnt--; |
---|
3417 | 3279 | dcb->max_command = tempcnt; |
---|
3418 | 3280 | free_tag(dcb, srb); |
---|
3419 | | - srb_going_to_waiting_move(dcb, srb); |
---|
| 3281 | + list_move(&srb->list, &dcb->srb_waiting_list); |
---|
3420 | 3282 | waiting_set_timer(acb, HZ / 20); |
---|
3421 | 3283 | srb->adapter_status = 0; |
---|
3422 | 3284 | srb->target_status = 0; |
---|
.. | .. |
---|
3471 | 3333 | |
---|
3472 | 3334 | if (!ckc_only && (cmd->result & RES_DID) == 0 |
---|
3473 | 3335 | && cmd->cmnd[2] == 0 && scsi_bufflen(cmd) >= 8 |
---|
3474 | | - && dir != PCI_DMA_NONE && ptr && (ptr->Vers & 0x07) >= 2) |
---|
| 3336 | + && dir != DMA_NONE && ptr && (ptr->Vers & 0x07) >= 2) |
---|
3475 | 3337 | dcb->inquiry7 = ptr->Flags; |
---|
3476 | 3338 | |
---|
3477 | 3339 | /*if( srb->cmd->cmnd[0] == INQUIRY && */ |
---|
.. | .. |
---|
3501 | 3363 | cmd->cmnd[0], srb->total_xfer_length); |
---|
3502 | 3364 | } |
---|
3503 | 3365 | |
---|
3504 | | - srb_going_remove(dcb, srb); |
---|
3505 | | - /* Add to free list */ |
---|
3506 | | - if (srb == acb->tmp_srb) |
---|
3507 | | - dprintkl(KERN_ERR, "srb_done: ERROR! Completed cmd with tmp_srb\n"); |
---|
3508 | | - else { |
---|
| 3366 | + if (srb != acb->tmp_srb) { |
---|
| 3367 | + /* Add to free list */ |
---|
3509 | 3368 | dprintkdbg(DBG_0, "srb_done: (0x%p) done result=0x%08x\n", |
---|
3510 | 3369 | cmd, cmd->result); |
---|
3511 | | - srb_free_insert(acb, srb); |
---|
| 3370 | + list_move_tail(&srb->list, &acb->srb_free_list); |
---|
| 3371 | + } else { |
---|
| 3372 | + dprintkl(KERN_ERR, "srb_done: ERROR! Completed cmd with tmp_srb\n"); |
---|
3512 | 3373 | } |
---|
3513 | 3374 | |
---|
3514 | 3375 | cmd->scsi_done(cmd); |
---|
.. | .. |
---|
3537 | 3398 | result = MK_RES(0, did_flag, 0, 0); |
---|
3538 | 3399 | printk("G:%p(%02i-%i) ", p, |
---|
3539 | 3400 | p->device->id, (u8)p->device->lun); |
---|
3540 | | - srb_going_remove(dcb, srb); |
---|
| 3401 | + list_del(&srb->list); |
---|
3541 | 3402 | free_tag(dcb, srb); |
---|
3542 | | - srb_free_insert(acb, srb); |
---|
| 3403 | + list_add_tail(&srb->list, &acb->srb_free_list); |
---|
3543 | 3404 | p->result = result; |
---|
3544 | 3405 | pci_unmap_srb_sense(acb, srb); |
---|
3545 | 3406 | pci_unmap_srb(acb, srb); |
---|
.. | .. |
---|
3567 | 3428 | result = MK_RES(0, did_flag, 0, 0); |
---|
3568 | 3429 | printk("W:%p<%02i-%i>", p, p->device->id, |
---|
3569 | 3430 | (u8)p->device->lun); |
---|
3570 | | - srb_waiting_remove(dcb, srb); |
---|
3571 | | - srb_free_insert(acb, srb); |
---|
| 3431 | + list_move_tail(&srb->list, &acb->srb_free_list); |
---|
3572 | 3432 | p->result = result; |
---|
3573 | 3433 | pci_unmap_srb_sense(acb, srb); |
---|
3574 | 3434 | pci_unmap_srb(acb, srb); |
---|
.. | .. |
---|
3694 | 3554 | srb->total_xfer_length = SCSI_SENSE_BUFFERSIZE; |
---|
3695 | 3555 | srb->segment_x[0].length = SCSI_SENSE_BUFFERSIZE; |
---|
3696 | 3556 | /* Map sense buffer */ |
---|
3697 | | - srb->segment_x[0].address = |
---|
3698 | | - pci_map_single(acb->dev, cmd->sense_buffer, |
---|
3699 | | - SCSI_SENSE_BUFFERSIZE, PCI_DMA_FROMDEVICE); |
---|
| 3557 | + srb->segment_x[0].address = dma_map_single(&acb->dev->dev, |
---|
| 3558 | + cmd->sense_buffer, SCSI_SENSE_BUFFERSIZE, |
---|
| 3559 | + DMA_FROM_DEVICE); |
---|
3700 | 3560 | dprintkdbg(DBG_SG, "request_sense: map buffer %p->%08x(%05x)\n", |
---|
3701 | 3561 | cmd->sense_buffer, srb->segment_x[0].address, |
---|
3702 | 3562 | SCSI_SENSE_BUFFERSIZE); |
---|
.. | .. |
---|
3707 | 3567 | dprintkl(KERN_DEBUG, |
---|
3708 | 3568 | "request_sense: (0x%p) failed <%02i-%i>\n", |
---|
3709 | 3569 | srb->cmd, dcb->target_id, dcb->target_lun); |
---|
3710 | | - srb_going_to_waiting_move(dcb, srb); |
---|
| 3570 | + list_move(&srb->list, &dcb->srb_waiting_list); |
---|
3711 | 3571 | waiting_set_timer(acb, HZ / 100); |
---|
3712 | 3572 | } |
---|
3713 | 3573 | } |
---|
.. | .. |
---|
3771 | 3631 | #endif |
---|
3772 | 3632 | if (dcb->target_lun != 0) { |
---|
3773 | 3633 | /* Copy settings */ |
---|
3774 | | - struct DeviceCtlBlk *p; |
---|
3775 | | - list_for_each_entry(p, &acb->dcb_list, list) |
---|
3776 | | - if (p->target_id == dcb->target_id) |
---|
| 3634 | + struct DeviceCtlBlk *p = NULL, *iter; |
---|
| 3635 | + |
---|
| 3636 | + list_for_each_entry(iter, &acb->dcb_list, list) |
---|
| 3637 | + if (iter->target_id == dcb->target_id) { |
---|
| 3638 | + p = iter; |
---|
3777 | 3639 | break; |
---|
| 3640 | + } |
---|
| 3641 | + |
---|
| 3642 | + if (!p) { |
---|
| 3643 | + kfree(dcb); |
---|
| 3644 | + return NULL; |
---|
| 3645 | + } |
---|
| 3646 | + |
---|
3778 | 3647 | dprintkdbg(DBG_1, |
---|
3779 | 3648 | "device_alloc: <%02i-%i> copy from <%02i-%i>\n", |
---|
3780 | 3649 | dcb->target_id, dcb->target_lun, |
---|
.. | .. |
---|
4266 | 4135 | const unsigned srbs_per_page = PAGE_SIZE/SEGMENTX_LEN; |
---|
4267 | 4136 | int srb_idx = 0; |
---|
4268 | 4137 | unsigned i = 0; |
---|
4269 | | - struct SGentry *uninitialized_var(ptr); |
---|
| 4138 | + struct SGentry *ptr; |
---|
4270 | 4139 | |
---|
4271 | 4140 | for (i = 0; i < DC395x_MAX_SRB_CNT; i++) |
---|
4272 | 4141 | acb->srb_array[i].segment_x = NULL; |
---|
.. | .. |
---|
4394 | 4263 | |
---|
4395 | 4264 | /* link static array of srbs into the srb free list */ |
---|
4396 | 4265 | for (i = 0; i < acb->srb_count - 1; i++) |
---|
4397 | | - srb_free_insert(acb, &acb->srb_array[i]); |
---|
| 4266 | + list_add_tail(&acb->srb_array[i].list, &acb->srb_free_list); |
---|
4398 | 4267 | } |
---|
4399 | 4268 | |
---|
4400 | 4269 | |
---|
.. | .. |
---|
4644 | 4513 | /*seq_printf(m, "\n"); */ |
---|
4645 | 4514 | |
---|
4646 | 4515 | seq_printf(m, "Nr of DCBs: %i\n", list_size(&acb->dcb_list)); |
---|
4647 | | - seq_printf(m, "Map of attached LUNs: %02x %02x %02x %02x %02x %02x %02x %02x\n", |
---|
4648 | | - acb->dcb_map[0], acb->dcb_map[1], acb->dcb_map[2], |
---|
4649 | | - acb->dcb_map[3], acb->dcb_map[4], acb->dcb_map[5], |
---|
4650 | | - acb->dcb_map[6], acb->dcb_map[7]); |
---|
4651 | | - seq_printf(m, " %02x %02x %02x %02x %02x %02x %02x %02x\n", |
---|
4652 | | - acb->dcb_map[8], acb->dcb_map[9], acb->dcb_map[10], |
---|
4653 | | - acb->dcb_map[11], acb->dcb_map[12], acb->dcb_map[13], |
---|
4654 | | - acb->dcb_map[14], acb->dcb_map[15]); |
---|
| 4516 | + seq_printf(m, "Map of attached LUNs: %8ph\n", &acb->dcb_map[0]); |
---|
| 4517 | + seq_printf(m, " %8ph\n", &acb->dcb_map[8]); |
---|
4655 | 4518 | |
---|
4656 | 4519 | seq_puts(m, |
---|
4657 | 4520 | "Un ID LUN Prty Sync Wide DsCn SndS TagQ nego_period SyncFreq SyncOffs MaxCmd\n"); |
---|
.. | .. |
---|
4729 | 4592 | .show_info = dc395x_show_info, |
---|
4730 | 4593 | .name = DC395X_BANNER " " DC395X_VERSION, |
---|
4731 | 4594 | .queuecommand = dc395x_queue_command, |
---|
4732 | | - .bios_param = dc395x_bios_param, |
---|
4733 | 4595 | .slave_alloc = dc395x_slave_alloc, |
---|
4734 | 4596 | .slave_destroy = dc395x_slave_destroy, |
---|
4735 | 4597 | .can_queue = DC395x_MAX_CAN_QUEUE, |
---|
.. | .. |
---|
4738 | 4600 | .cmd_per_lun = DC395x_MAX_CMD_PER_LUN, |
---|
4739 | 4601 | .eh_abort_handler = dc395x_eh_abort, |
---|
4740 | 4602 | .eh_bus_reset_handler = dc395x_eh_bus_reset, |
---|
4741 | | - .use_clustering = DISABLE_CLUSTERING, |
---|
| 4603 | + .dma_boundary = PAGE_SIZE - 1, |
---|
4742 | 4604 | }; |
---|
4743 | 4605 | |
---|
4744 | 4606 | |
---|
.. | .. |
---|
4869 | 4731 | .probe = dc395x_init_one, |
---|
4870 | 4732 | .remove = dc395x_remove_one, |
---|
4871 | 4733 | }; |
---|
4872 | | - |
---|
4873 | | - |
---|
4874 | | -/** |
---|
4875 | | - * dc395x_module_init - Module initialization function |
---|
4876 | | - * |
---|
4877 | | - * Used by both module and built-in driver to initialise this driver. |
---|
4878 | | - **/ |
---|
4879 | | -static int __init dc395x_module_init(void) |
---|
4880 | | -{ |
---|
4881 | | - return pci_register_driver(&dc395x_driver); |
---|
4882 | | -} |
---|
4883 | | - |
---|
4884 | | - |
---|
4885 | | -/** |
---|
4886 | | - * dc395x_module_exit - Module cleanup function. |
---|
4887 | | - **/ |
---|
4888 | | -static void __exit dc395x_module_exit(void) |
---|
4889 | | -{ |
---|
4890 | | - pci_unregister_driver(&dc395x_driver); |
---|
4891 | | -} |
---|
4892 | | - |
---|
4893 | | - |
---|
4894 | | -module_init(dc395x_module_init); |
---|
4895 | | -module_exit(dc395x_module_exit); |
---|
| 4734 | +module_pci_driver(dc395x_driver); |
---|
4896 | 4735 | |
---|
4897 | 4736 | MODULE_AUTHOR("C.L. Huang / Erich Chen / Kurt Garloff"); |
---|
4898 | 4737 | MODULE_DESCRIPTION("SCSI host adapter driver for Tekram TRM-S1040 based adapters: Tekram DC395 and DC315 series"); |
---|