#include <IOKit/ppc/IODBDMA.h>
#include <IOKit/IOLib.h>
void
IODBDMAStart( volatile IODBDMAChannelRegisters *registers, volatile IODBDMADescriptor *physicalDescPtr)
{
if( ((int) physicalDescPtr) & 0xf)
panic("IODBDMAStart: unaligned IODBDMADescriptor");
eieio();
IOSetDBDMAInterruptSelect(registers, 0xff000000);
IOSetDBDMAChannelControl( registers,
IOClearDBDMAChannelControlBits( kdbdmaRun | kdbdmaPause | kdbdmaFlush | kdbdmaWake | kdbdmaDead | kdbdmaActive ));
while( IOGetDBDMAChannelStatus( registers) & kdbdmaActive)
eieio();
IOSetDBDMACommandPtr( registers, (unsigned int) physicalDescPtr);
IOSetDBDMAChannelControl( registers,
IOSetDBDMAChannelControlBits( kdbdmaRun | kdbdmaWake ));
}
void
IODBDMAStop( volatile IODBDMAChannelRegisters *registers)
{
IOSetDBDMAChannelControl( registers,
IOClearDBDMAChannelControlBits( kdbdmaRun )
| IOSetDBDMAChannelControlBits( kdbdmaFlush ));
while( IOGetDBDMAChannelStatus( registers) & ( kdbdmaActive | kdbdmaFlush))
eieio();
}
void
IODBDMAFlush( volatile IODBDMAChannelRegisters *registers)
{
IOSetDBDMAChannelControl( registers,
IOSetDBDMAChannelControlBits( kdbdmaFlush ));
while( IOGetDBDMAChannelStatus( registers) & kdbdmaFlush)
eieio();
}
void
IODBDMAReset( volatile IODBDMAChannelRegisters *registers)
{
IOSetDBDMAChannelControl( registers,
IOClearDBDMAChannelControlBits( kdbdmaRun | kdbdmaPause | kdbdmaFlush | kdbdmaWake | kdbdmaDead | kdbdmaActive ));
while( IOGetDBDMAChannelStatus( registers) & kdbdmaActive)
eieio();
}
void
IODBDMAContinue( volatile IODBDMAChannelRegisters *registers)
{
IOSetDBDMAChannelControl( registers,
IOClearDBDMAChannelControlBits( kdbdmaPause | kdbdmaDead )
| IOSetDBDMAChannelControlBits( kdbdmaRun | kdbdmaWake ));
}
void
IODBDMAPause( volatile IODBDMAChannelRegisters *registers)
{
IOSetDBDMAChannelControl( registers,
IOSetDBDMAChannelControlBits( kdbdmaPause ));
while( IOGetDBDMAChannelStatus( registers) & kdbdmaActive)
eieio();
}
IOReturn
IOAllocatePhysicallyContiguousMemory(
unsigned int , unsigned int ,
IOVirtualAddress * ,
IOPhysicalAddress * )
{
#if 0
IOReturn err;
vm_offset_t mem;
if( (size > 4096) || (options))
return( kIOReturnUnsupported);
mem = (vm_offset_t) IOMalloc( size);
*logical = (IOVirtualAddress) mem;
if( mem) {
err = IOPhysicalFromVirtual( IOVmTaskSelf(), mem, (vm_offset_t *) physical);
if( err)
IOFree( (char *)mem, size);
} else {
err = kIOReturnNoMemory;
*physical = 0;
}
return( err);
#endif
return (kIOReturnUnsupported);
}
IOReturn
IOFreePhysicallyContiguousMemory( IOVirtualAddress * logical, unsigned int size)
{
IOFree( logical, size);
return( kIOReturnSuccess);
}