A mechanism to convert memory references to I/O bus addresses.


The IODMACommand is supersedes the IOMemoryCursor and greatly enhances the functionality and power of it. The command can be specified to output 64 bit physical addresses and also allows driver writers bypass mapping hardware or get addresses suitable for non-snooped DMA.

The command is designed to be very easily subclassable. Most driver writers need to associate some DMA operations with their memory descriptor and usually use a C structure for that purpose. This structure is often kept in a linked list. This IODMACommand has built it <kern/queue.h> linkage and can be derived and 'public:' variables added, giving the developer a structure that can associate a memory descriptor with a particular dma command but will also allow the developer to generate that command and keep the state necessary for tracking it.

It is envisaged that a pool of IODMACommands will be created at driver initialisation and each command will be kept in an IOCommandPool while not in use. However if developers wishes to maintain their own free lists that is certainly possible. See the <kern/queue.h> and <xnu/iokit/Kernel/IOCommandPool> for sample code on manipulating the command's doubly linked list entries.

The IODMACommand can be used in a 'weak-linked' manner. To do this you must avoid using any static member functions. Use the, much slower but safe, weakWithSpecification function. On success a dma command instance will be returned. This instance can then be used to clone as many commands as is needed. Remember deriving from this class can not be done weakly, that is no weak subclassing!



- clearMemoryDescriptor

Clears the DMACommand's current memory descriptor

- cloneCommand

Creates a new command based on the specification of the current one.

- complete

Complete processing of DMA mappings after an I/O transfer is finished.

- gen32IOVMSegments

Helper function for a type checked call to genIOVMSegments(qv), for use with an IODMACommand set up with the output function kIODMACommandOutputHost32, kIODMACommandOutputBig32, or kIODMACommandOutputLittle32. If the output function of the IODMACommand is not a 32 bit function, results will be incorrect.

- gen64IOVMSegments

Helper function for a type checked call to genIOVMSegments(qv), for use with an IODMACommand set up with the output function kIODMACommandOutputHost64, kIODMACommandOutputBig64, or kIODMACommandOutputLittle64. If the output function of the IODMACommand is not a 64 bit function, results will be incorrect.

- genIOVMSegments

Generates a physical scatter/gather for the current DMA command

- getMemoryDescriptor

Get the current memory descriptor

- getPreparedOffsetAndLength

Returns the offset and length into the target IOMemoryDescriptor of a prepared IODDMACommand.

- initWithSpecification

Primary initializer for the IODMACommand class.

- OutputBig32

Output big-endian Segment32 output segment function.

- OutputBig64

Output big-endian Segment64 output segment function.

- OutputHost32

Output host natural Segment32 output segment function.

- OutputHost64

Output host natural Segment64 output segment function.

- OutputLittle32

Output little-endian Segment32 output segment function.

- OutputLittle64

Output little-endian Segment64 output segment function.

- prepare

Prepare the memory for an I/O transfer.

- prepareWithSpecification

Prepare the memory for an I/O transfer with a new specification.

- readBytes

Copy data from the IODMACommand's buffer to the specified buffer.

- setMemoryDescriptor

Sets and resets the DMACommand's current memory descriptor

- synchronize

Bring IOMemoryDescriptor and IODMACommand buffers into sync.

- weakWithSpecification

Creates and initialises an IODMACommand in one operation if this version of the operating system supports it.

- withSpecification

Creates and initializes an IODMACommand in one operation.

- writeBytes

Copy data to the IODMACommand's buffer from the specified buffer.



Mapping types to indicate the desired mapper type for translating memory descriptors into I/O DMA Bus addresses.


Options for the synchronize method.