summaryrefslogtreecommitdiff
blob: 400fcdfc2f265b6fa00ee91670c34be123fdf950 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Changes extracted from:
 http://www.3ware.com/KB/attachments/183-3w-xxxx-2.6.18-GUIDa2c1e9da5ebd4284a41f7be6cee86ff1.tgz
Described at:
 http://www.3ware.com/KB/article.aspx?id=15243

Recent upstream kernels have been converted to the new
sg list accessor API, so this fix isn't applicable there.

diff -urpN linux-source-2.6.18.orig/drivers/scsi/3w-xxxx.c linux-source-2.6.18/drivers/scsi/3w-xxxx.c
--- linux-source-2.6.18.orig/drivers/scsi/3w-xxxx.c	2006-09-19 21:42:06.000000000 -0600
+++ linux-source-2.6.18/drivers/scsi/3w-xxxx.c	2008-04-21 21:34:10.000000000 -0600
@@ -1286,7 +1286,7 @@ static int tw_map_scsi_sg_data(struct pc
 	if (cmd->use_sg == 0)
 		return 0;
 
-	use_sg = pci_map_sg(pdev, cmd->request_buffer, cmd->use_sg, DMA_BIDIRECTIONAL);
+	use_sg = pci_map_sg(pdev, cmd->request_buffer, cmd->use_sg, cmd->sc_data_direction);
 	
 	if (use_sg == 0) {
 		printk(KERN_WARNING "3w-xxxx: tw_map_scsi_sg_data(): pci_map_sg() failed.\n");
@@ -1308,7 +1308,7 @@ static u32 tw_map_scsi_single_data(struc
 	if (cmd->request_bufflen == 0)
 		return 0;
 
-	mapping = pci_map_page(pdev, virt_to_page(cmd->request_buffer), offset_in_page(cmd->request_buffer), cmd->request_bufflen, DMA_BIDIRECTIONAL);
+	mapping = pci_map_page(pdev, virt_to_page(cmd->request_buffer), offset_in_page(cmd->request_buffer), cmd->request_bufflen, cmd->sc_data_direction);
 
 	if (mapping == 0) {
 		printk(KERN_WARNING "3w-xxxx: tw_map_scsi_single_data(): pci_map_page() failed.\n");
@@ -1327,10 +1327,10 @@ static void tw_unmap_scsi_data(struct pc
 
 	switch(cmd->SCp.phase) {
 		case TW_PHASE_SINGLE:
-			pci_unmap_page(pdev, cmd->SCp.have_data_in, cmd->request_bufflen, DMA_BIDIRECTIONAL);
+			pci_unmap_page(pdev, cmd->SCp.have_data_in, cmd->request_bufflen, cmd->sc_data_direction);
 			break;
 		case TW_PHASE_SGLIST:
-			pci_unmap_sg(pdev, cmd->request_buffer, cmd->use_sg, DMA_BIDIRECTIONAL);
+			pci_unmap_sg(pdev, cmd->request_buffer, cmd->use_sg, cmd->sc_data_direction);
 			break;
 	}
 } /* End tw_unmap_scsi_data() */