@@ -149,7 +149,6 @@ static int twa_reset_sequence(TW_Device_Extension *tw_dev, int soft_reset);
149
149
static int twa_scsiop_execute_scsi (TW_Device_Extension * tw_dev , int request_id , char * cdb , int use_sg , TW_SG_Entry * sglistarg );
150
150
static void twa_scsiop_execute_scsi_complete (TW_Device_Extension * tw_dev , int request_id );
151
151
static char * twa_string_lookup (twa_message_type * table , unsigned int aen_code );
152
- static void twa_unmap_scsi_data (TW_Device_Extension * tw_dev , int request_id );
153
152
154
153
/* Functions */
155
154
@@ -1340,11 +1339,11 @@ static irqreturn_t twa_interrupt(int irq, void *dev_instance)
1340
1339
}
1341
1340
1342
1341
/* Now complete the io */
1342
+ scsi_dma_unmap (cmd );
1343
+ cmd -> scsi_done (cmd );
1343
1344
tw_dev -> state [request_id ] = TW_S_COMPLETED ;
1344
1345
twa_free_request_id (tw_dev , request_id );
1345
1346
tw_dev -> posted_request_count -- ;
1346
- tw_dev -> srb [request_id ]-> scsi_done (tw_dev -> srb [request_id ]);
1347
- twa_unmap_scsi_data (tw_dev , request_id );
1348
1347
}
1349
1348
1350
1349
/* Check for valid status after each drain */
@@ -1402,26 +1401,6 @@ static void twa_load_sgl(TW_Device_Extension *tw_dev, TW_Command_Full *full_comm
1402
1401
}
1403
1402
} /* End twa_load_sgl() */
1404
1403
1405
- /* This function will perform a pci-dma mapping for a scatter gather list */
1406
- static int twa_map_scsi_sg_data (TW_Device_Extension * tw_dev , int request_id )
1407
- {
1408
- int use_sg ;
1409
- struct scsi_cmnd * cmd = tw_dev -> srb [request_id ];
1410
-
1411
- use_sg = scsi_dma_map (cmd );
1412
- if (!use_sg )
1413
- return 0 ;
1414
- else if (use_sg < 0 ) {
1415
- TW_PRINTK (tw_dev -> host , TW_DRIVER , 0x1c , "Failed to map scatter gather list" );
1416
- return 0 ;
1417
- }
1418
-
1419
- cmd -> SCp .phase = TW_PHASE_SGLIST ;
1420
- cmd -> SCp .have_data_in = use_sg ;
1421
-
1422
- return use_sg ;
1423
- } /* End twa_map_scsi_sg_data() */
1424
-
1425
1404
/* This function will poll for a response interrupt of a request */
1426
1405
static int twa_poll_response (TW_Device_Extension * tw_dev , int request_id , int seconds )
1427
1406
{
@@ -1600,9 +1579,11 @@ static int twa_reset_device_extension(TW_Device_Extension *tw_dev)
1600
1579
(tw_dev -> state [i ] != TW_S_INITIAL ) &&
1601
1580
(tw_dev -> state [i ] != TW_S_COMPLETED )) {
1602
1581
if (tw_dev -> srb [i ]) {
1603
- tw_dev -> srb [i ]-> result = (DID_RESET << 16 );
1604
- tw_dev -> srb [i ]-> scsi_done (tw_dev -> srb [i ]);
1605
- twa_unmap_scsi_data (tw_dev , i );
1582
+ struct scsi_cmnd * cmd = tw_dev -> srb [i ];
1583
+
1584
+ cmd -> result = (DID_RESET << 16 );
1585
+ scsi_dma_unmap (cmd );
1586
+ cmd -> scsi_done (cmd );
1606
1587
}
1607
1588
}
1608
1589
}
@@ -1781,21 +1762,18 @@ static int twa_scsi_queue_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_
1781
1762
/* Save the scsi command for use by the ISR */
1782
1763
tw_dev -> srb [request_id ] = SCpnt ;
1783
1764
1784
- /* Initialize phase to zero */
1785
- SCpnt -> SCp .phase = TW_PHASE_INITIAL ;
1786
-
1787
1765
retval = twa_scsiop_execute_scsi (tw_dev , request_id , NULL , 0 , NULL );
1788
1766
switch (retval ) {
1789
1767
case SCSI_MLQUEUE_HOST_BUSY :
1768
+ scsi_dma_unmap (SCpnt );
1790
1769
twa_free_request_id (tw_dev , request_id );
1791
- twa_unmap_scsi_data (tw_dev , request_id );
1792
1770
break ;
1793
1771
case 1 :
1794
- tw_dev -> state [request_id ] = TW_S_COMPLETED ;
1795
- twa_free_request_id (tw_dev , request_id );
1796
- twa_unmap_scsi_data (tw_dev , request_id );
1797
1772
SCpnt -> result = (DID_ERROR << 16 );
1773
+ scsi_dma_unmap (SCpnt );
1798
1774
done (SCpnt );
1775
+ tw_dev -> state [request_id ] = TW_S_COMPLETED ;
1776
+ twa_free_request_id (tw_dev , request_id );
1799
1777
retval = 0 ;
1800
1778
}
1801
1779
out :
@@ -1863,8 +1841,8 @@ static int twa_scsiop_execute_scsi(TW_Device_Extension *tw_dev, int request_id,
1863
1841
command_packet -> sg_list [0 ].address = TW_CPU_TO_SGL (tw_dev -> generic_buffer_phys [request_id ]);
1864
1842
command_packet -> sg_list [0 ].length = cpu_to_le32 (TW_MIN_SGL_LENGTH );
1865
1843
} else {
1866
- sg_count = twa_map_scsi_sg_data ( tw_dev , request_id );
1867
- if (sg_count == 0 )
1844
+ sg_count = scsi_dma_map ( srb );
1845
+ if (sg_count < 0 )
1868
1846
goto out ;
1869
1847
1870
1848
scsi_for_each_sg (srb , sg , sg_count , i ) {
@@ -1979,15 +1957,6 @@ static char *twa_string_lookup(twa_message_type *table, unsigned int code)
1979
1957
return (table [index ].text );
1980
1958
} /* End twa_string_lookup() */
1981
1959
1982
- /* This function will perform a pci-dma unmap */
1983
- static void twa_unmap_scsi_data (TW_Device_Extension * tw_dev , int request_id )
1984
- {
1985
- struct scsi_cmnd * cmd = tw_dev -> srb [request_id ];
1986
-
1987
- if (cmd -> SCp .phase == TW_PHASE_SGLIST )
1988
- scsi_dma_unmap (cmd );
1989
- } /* End twa_unmap_scsi_data() */
1990
-
1991
1960
/* This function gets called when a disk is coming on-line */
1992
1961
static int twa_slave_configure (struct scsi_device * sdev )
1993
1962
{
0 commit comments