~ubuntu-branches/ubuntu/dapper/cdrtools/dapper

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
43
A tip from From: Juergen Keil <jk@tools.de> 

Solaris 9 x86 will not allow DMA for ATAPI CD/DVD-ROM drives even if
the eeprom command shows: 

	atapi-dma-enabled=1

Here is a patch to the file /platform/i86pc/kernel/drv/ata
that allows you to use DMA again. Note that you need to be extremely careful
when applying the patch because it may completely break your installation
if you don't do it right.

% adb /platform/i86pc/kernel/drv/ata 
ata_init_drive_pcidma,10?ia 
ata_init_drive_pcidma: pushl %ebp 
ata_init_drive_pcidma+1: movl %esp,%ebp 
ata_init_drive_pcidma+3: subl $4,%esp 
ata_init_drive_pcidma+6: movl +8(%ebp),%eax 
ata_init_drive_pcidma+9: cmpb $1,+0x1ad(%eax) 
ata_init_drive_pcidma+0x10: jne +0x111 <ata_init_drive_pcidma+0x121> 
ata_init_drive_pcidma+0x16: movl +0xc(%ebp),%eax 
ata_init_drive_pcidma+0x19: movl +0x204(%eax),%eax 
ata_init_drive_pcidma+0x1f: andl $1,%eax 
ata_init_drive_pcidma+0x22: je +0x1a <ata_init_drive_pcidma+0x3c> 
ata_init_drive_pcidma+0x24: movl +0xc(%ebp),%eax 
ata_init_drive_pcidma+0x27: movzwl +4(%eax),%eax 
ata_init_drive_pcidma+0x2b: sarl $8,%eax 
ata_init_drive_pcidma+0x2e: andl $0x1f,%eax 
ata_init_drive_pcidma+0x31: cmpl $5,%eax 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This is the check for a type 5 ATAPI device 
ata_init_drive_pcidma+0x34: jne +8 <ata_init_drive_pcidma+0x3c> 
ata_init_drive_pcidma+0x36: 

Here's a patch that replaces the "cmpl $5" with a "cmpl $55", so 
that all ATAPI devices will perform DMA transfers: 
 
# cd /platform/i86pc/kernel/drv 
# cp ata ata-orig 
# echo 'ata_init_drive_pcidma+0x31?W 7555f883' | adb -w ata 

Note that the exact position of the instruction that needs to be patched
may vary depending on the version of Solaris you use. Be extremely careful
when applying the patch.