A tip from From: Juergen Keil 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+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+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+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. IMPORTANT NOTE FOR AMD64 Systems cd /platform/i86pc/kernel/drv/amd64 cp ata ata.orig adb -w ata ata_init_drive_pcidma,17?ia 0x50f0: pushq %rbp 0x50f1: xorl %edx,%edx 0x50f3: movq %rsp,%rbp 0x50f6: subq $0x20,%rsp 0x50fa: movq %rbx,-0x18(%rbp) 0x50fe: movq %r12,-0x10(%rbp) 0x5102: movq %rdi,%rbx 0x5105: movq %r13,-0x8(%rbp) 0x5109: movq $0x0,0x0(%rip) 0x5114: movq %rsi,%r12 0x5117: cmpb $0x1,0x321(%rdi) 0x511e: je +0x12 <0x5130> 0x5120: movq -0x18(%rbp),%rbx 0x5124: movq -0x10(%rbp),%r12 0x5128: movl %edx,%eax 0x512a: movq -0x8(%rbp),%r13 0x512e: leave 0x512f: ret 0x5130: testb $0x1,0x208(%rsi) 0x5137: je +0xe <0x5145> 0x5139: movzbl 0x9(%rsi),%eax 0x513d: andl $0x1f,%eax 0x5140: cmpl $0x5,%eax ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This is the check for a type 5 ATAPI device 0x5140?W7455f883 <<< This changes the code 0x5140: 0x7405f883 = 0x7455f883 ?i 0x5140: cmpl $0x55,%eax