IOMemoryCursor


Abstract: A mechanism to convert memory references to physical addresses.

The IOMemoryCursor declares the super class that all specific memory cursors must inherit from, but a memory cursor can be created without a specific format subclass by just providing a segment function to the initializers. This class does the difficult stuff of dividing a memory descriptor into a physical scatter/gather list appropriate for the target hardware.

A driver is expected to create a memory cursor and configure it to the limitations of it's DMA hardware; for instance the memory cursor used by the firewire SBP2 protocol has a maximum physical segment size of 2^16 - 1 but the actual transfer size is unlimited. Thus it would create a cursor with a maxSegmentSize of 65535 and a maxTransfer size of UINT_MAX. It would also provide a SegmentFunction that can output a pagelist entry.

Below is the simplest example of a SegmentFunction:- void IONaturalMemoryCursor::outputSegment(PhysicalSegment segment, void * outSegments, UInt32 outSegmentIndex) { ((PhysicalSegment *) outSegments)[outSegmentIndex] = segment; }



© 2000 Apple Computer, Inc. — (Last Updated 2/23/2000)