- @abstract Factory function to create and initialise an IOLittleMemoryCursor in one operation, see $link IOLittleMemoryCursor::initWithSpecification.
- @param maxSegmentSize Maximum allowable size for one segment. Defaults to 0.
- @param maxTransferSize Maximum size of an entire transfer. Default to 0 indicating no maximum.
- @param alignment Alligment restrictions on output physical addresses. Not currently implemented. Defaults to single byte alignment.
- @result A new memory cursor if successfully created and initialised, 0 otherwise.
-*/
- static IOLittleMemoryCursor *
- withSpecification(IOPhysicalLength maxSegmentSize,
- IOPhysicalLength maxTransferSize,
- IOPhysicalLength alignment = 1);
-
-/*! @function initWithSpecification
- @abstract Primary initialiser for the IOLittleMemoryCursor class.
- @param maxSegmentSize Maximum allowable size for one segment. Defaults to 0.
- @param maxTransferSize Maximum size of an entire transfer. Default to 0 indicating no maximum.
- @param alignment Alligment restrictions on output physical addresses. Not currently implemented. Defaults to single byte alignment.
- @result true if the inherited classes and this instance initialise
-successfully.
-*/
- virtual bool initWithSpecification(IOPhysicalLength maxSegmentSize,
- IOPhysicalLength maxTransferSize,
- IOPhysicalLength alignment = 1);
-
-
-/*! @function getPhysicalSegments
- @abstract Generate a little endian physical scatter/gather list given a memory descriptor.
- @discussion Generates a list of physical segments from the given memory descriptor, relative to the current position of the descriptor. Wraps $link IOMemoryCursor::genPhysicalSegments.
- @param descriptor IOMemoryDescriptor that describes the data associated with an I/O request.
- @param fromPosition Starting location of the I/O within a memory descriptor.
- @param segments Pointer to an array of $link IOMemoryCursor::PhysicalSegments for the output physical scatter/gather list.
- @param maxSegments Maximum number of segments that can be written to segments array.
- @param maxTransferSize Maximum transfer size is limited to that many bytes, otherwise it defaults to the maximum transfer size specified when the memory cursor was initialized.
- @param transferSize Pointer to a IOByteCount variable that can contain the total size of the transfer being described. Default to 0 indicating that no transfer size need be returned.
- @result If the descriptor is exhausted of memory, a zero is returned, otherwise the number of segments that were filled in is returned.
-*/
- virtual UInt32 getPhysicalSegments(IOMemoryDescriptor * descriptor,
- IOByteCount fromPosition,
- PhysicalSegment * segments,
- UInt32 maxSegments,
- UInt32 maxTransferSize = 0,
- IOByteCount * transferSize = 0)
- {
- return genPhysicalSegments(descriptor, fromPosition, segments,
- maxSegments, maxTransferSize, transferSize);
- }
-};
-
-/************************* class IODBDMAMemoryCursor *************************/
-
-#if defined(__ppc__)
-
-struct IODBDMADescriptor;
-
-/*!
- @class IODBDMAMemoryCursor : public IOMemoryCursor
- @abstract A $link IOMemoryCursor subclass that outputs a vector of DBDMA descriptors where the address and length are filled in.
- @discussion The IODBDMAMemoryCursor would be used when the DBDMA hardware is available for the device for that will use an instance of this cursor.
-*/
-class IODBDMAMemoryCursor : public IOMemoryCursor
-{
- OSDeclareDefaultStructors(IODBDMAMemoryCursor)
-
-public:
-/*! @funtion outputSegment
- @abstract Output the given segment into the output segments array in address and length fields of an DBDMA descriptor.
- @param segment The physical address and length that is next to be output.
- @param segments Base of the output vector of DMA address length pairs.
- @param segmentIndex Index to output 'segment' in the 'segments' array.
-*/
- static void outputSegment(PhysicalSegment segment,
- void * segments,
- UInt32 segmentIndex);
-
-/*! @defined dbdmaOutputSegment
- @discussion Backward compatibilty define for the old global function definition. See $link IODBDMAMemoryCursor::outputSegment */
-#define dbdmaOutputSegment IODBDMAMemoryCursor::outputSegment
-
-/*! @function withSpecification
- @abstract Factory function to create and initialise an IODBDMAMemoryCursor in one operation, see $link IODBDMAMemoryCursor::initWithSpecification.
- @param maxSegmentSize Maximum allowable size for one segment. Defaults to 0.
- @param maxTransferSize Maximum size of an entire transfer. Default to 0 indicating no maximum.
- @param alignment Alligment restrictions on output physical addresses. Not currently implemented. Defaults to single byte alignment.
- @result A new memory cursor if successfully created and initialised, 0 otherwise.
-*/
- static IODBDMAMemoryCursor *