deviceat 2 0 { # bus 2, master drive, i.e. /dev/disk/ide/ata/2/master/0/raw forcedma }
to /boot/home/config/settings/kernel/drivers/ata for hard disks or .../atapi for CD-ROMs and alike.
Modify "2 0" according to the device you want DMA for. If you don't know in which way, take a look at DriveSetup, it shows you the names of you mass storage devices. You will find something like "dev/disk/ata/x/y/0/raw". x stands for the bus number and is the first number after "deviceat", y is either "master" or "slave". If it is "master", set the second number after "deviceat" to "0", if it is "slave" to "1". Sadly, the device name is truncated in the main window of DriverSetup, so will probably have to execute something like "Options|Surface Test" to see its full name.
Please make sure, that the device can really handle DMA transfer, so take a look at the boot message of the controller before messing around with this setting!
Normally, BeOS' IDE driver should automatically detect all PCI IDE controller cards, so there should be no need for additional drivers, but... Some cards, at least the Ultra 100 TX2, are declared to be an "Unknown Mass Storage Controller" instead of an "IDE Mass Storage Controller", so the standard driver has no chance to detect this card, probably to make sure that no generic driver disturbs a specific driver provided by Promise. Anyway, Promise hasn't yet supplied a BeOS driver, so I took a look at the linux driver and found out, that there is no special magic to access the card: you can use generic IDE controller routines.
So, this driver is just a slightly modified version of the generic IDE driver written by Be Inc. - I replaced the detection code to recognize the Ultra 100 TX2 as a normal IDE controller, and this was it. Of course, this quick hack doesn't use the full power of this nice card (there are special memory areas and I/O ports reserved according to the information provided by its PCI interface, but I have no clue what they are meant for, though I suspect that they provide some extra features), but at least it works in some way!
As you've probably found out - BeOS doesn't know about it. In general, this shouldn't matter, as it's the card's BIOS part to negotiate and set up transfer speed. Unfortunately, the IDE bus driver checks whether the transfer speed as set by the controller and as seen by the hard disks matches. If it doesn't, PIO mode is used. If your controller happens to use Ultra DMA 100, the bus driver doesn't know what this mode is and how to handle it and therefore falls back to PIO mode too. So you have to force the bus driver to use DMA mode. If I understand it correctly, the bus driver doesn't care about the transfer speed and leaves it as is in this case, so you still get your Ultra DMA 100 working.
Warning: I'm not a IDE guru and probably everything I've stated above is pure bullshit, but so what: it works!