IODMACommand
Механизм для преобразования ссылок памяти на адреса шины I/O.
IODMACommand, заменяет IOMemoryCursor и значительно улучшает функциональность и питание его. Команда может быть указана для вывода физических адресов на 64 бита и также позволяет обход писателей драйвера, отображающий аппаратные средства, или получите адреса, подходящие для неотслеженного DMA.
Команда разработана для подкласса. Большинство писателей драйвера должно связать некоторые операции DMA со своим дескриптором памяти и обычно использовать структуру C с этой целью. Эта структура часто сохраняется в связанном списке. Этот IODMACommand создал его <kern/queue.h> связь и может быть получен и 'общественность': переменные добавили, дав разработчику структуру, которая может связать дескриптор памяти с определенной dma командой, но также позволит разработчику генерировать ту команду и сохранять состояние необходимым для отслеживания его.
Предусматривается, что пул IODMACommands будет создаваться в инициализации драйвера, и каждая команда будет сохранена в IOCommandPool в то время как не в использовании. Однако, если разработчики хотят вести свои собственные бесплатные списки, который, конечно, возможен. Посмотрите <kern/queue.h> и <xnu/iokit/Kernel/IOCommandPool> для примера кода при управлении записями двунаправленного связанного списка команды.
IODMACommand может использоваться 'слабо соединенным' способом. Чтобы сделать это, необходимо избегать использования любых статических функций членства. Используйте, намного медленнее, но безопасный, weakWithSpecification функция. На успехе будет возвращен dma экземпляр команды. Этот экземпляр может тогда использоваться для клонирования стольких команд, сколько необходим. Не забудьте происходить из этого класса, не может быть сделан слабо, который не является никаким слабым разделением на подклассы!
Наследование
Не применимый
Соответствует
Не применимый
Оператор импорта
Не применимый
Objective C
@import Kernel;
Доступность
Доступный в OS X v10.4 и позже.
-
Очищает текущий дескриптор памяти DMACOMMAND
Объявление
C++
virtual IOReturn clearMemoryDescriptor( bool autoComplete = true);
Параметры
autoComplete
Обрабатывается дополнительная логическая переменная, которая вызовет полное () функция автоматически перед дескриптором памяти. Значения по умолчанию к истине.
Обсуждение
завершает и лишает законной силы кэш, если команда DMA в настоящее время активна, копирует все данные с буферов возврата, если необходимый и высвобождает все средства, полученные во время setMemoryDescriptor.
-
Создает новую команду на основе спецификации текущей.
Объявление
C++
virtual IODMACommand *cloneCommand( void *refCon = 0);
Возвращаемое значение
Возвращает новый курсор памяти, если успешно создается и инициализировано, 0 иначе.
Обсуждение
Функция фабрики, чтобы создать и инициализировать IODMACommand в одной работе. Спецификация текущей команды будет дублирована в новом объекте, но однако ни одно из его состояния не будет дублировано. Это означает, что безопасно клонировать команду, даже если это в настоящее время активно и выполнение, однако необходимо быть уверены, что команда, которая будет дублирована, действительно имеет действительную ссылку в течение какого-то времени.
-
Полная обработка отображений DMA после передачи I/O закончена.
Объявление
C++
virtual IOReturn complete( bool invalidateCache = true, bool synchronize = true);
Параметры
invalidCache
Лишите законной силы кэши для дескриптора памяти. Значения по умолчанию к истине для kNonCoherent и проигнорированы другими типами.
synchronize
Скопируйте любые буферизированные данные назад в целевой IOMemoryDescriptor. Значения по умолчанию к истине, если синхронизируются () используются для явного копирования данных, передающая ложь может избежать ненужной копии.
Возвращаемое значение
kIOReturnNotReady, если не подготовленный, kIOReturnSuccess иначе.
Обсуждение
Этот метод нельзя вызвать, если не было ранее выпущено подготавливать; подготавливать () и завершенный () должно произойти в парах, прежде и после передачи I/O
-
Функция помощника для типа проверила вызов к genIOVMSegments (qv) для использования с IODMACommand, установленным с функцией вывода kIODMACommandOutputHost32, kIODMACommandOutputBig32 или kIODMACommandOutputLittle32. Если функция вывода IODMACommand не будет функцией на 32 бита, то результаты будут неправильными.
Объявление
C++
inline IOReturn gen32IOVMSegments( UInt64 *
offset
, Segment32 *segments
, UInt32 *numSegments
) ; -
Функция помощника для типа проверила вызов к genIOVMSegments (qv) для использования с IODMACommand, установленным с функцией вывода kIODMACommandOutputHost64, kIODMACommandOutputBig64 или kIODMACommandOutputLittle64. Если функция вывода IODMACommand не будет функцией на 64 бита, то результаты будут неправильными.
Объявление
C++
inline IOReturn gen64IOVMSegments( UInt64 *
offset
, Segment64 *segments
, UInt32 *numSegments
) ; -
Генерирует медосмотр, рассеиваются/собирают для текущей команды DMA
Объявление
C++
virtual IOReturn genIOVMSegments( UInt64 *
offset
, void *segments
, UInt32 *numSegments
);Параметры
offset
параметр ввода/вывода, определяет запуск, и окончание смещения в дескрипторе памяти, относительно любого смещения передало тому, чтобы подготавливать () метод.
segments
Недействительный указатель на основу физического вывода рассеивается/собирает список. Всегда передаваемый непосредственно на SegmentFunction.
numSegments
Число параметра ввода/вывода сегментов, которые могут поместиться в массив сегмента и число возвратов сгенерированных сегментов.
Возвращаемое значение
kIOReturnSuccess на успехе, kIOReturnOverrun, если дескриптор памяти исчерпывается, kIOReturnMessageTooLarge, если выходные адресные биты функции сегмента имеет недостаточное разрешение для сегмента, kIOReturnNotReady, если команда DMA не имеет быть подготовленной, kIOReturnBadArgument, если команда DMA еще не имеет дескриптора памяти или некоторые параметры, является NULL и kIOReturnNotReady, если не подготовлена команда DMA.
Обсуждение
Генерирует список физических сегментов от данного дескриптора памяти, относительно текущей позиции дескриптора. Ограничения, установленные во время инициализации, будут уважать. Эта функция поддерживает состояние через множественные вызовы эффективности. Если новое смещение не является ожидаемым, однако, состояние отбрасывается.
-
Получите текущий дескриптор памяти
Объявление
C++
virtual const IOMemoryDescriptor *getMemoryDescriptor() const;
-
Возвращает смещение и длину в целевой IOMemoryDescriptor подготовленного IODDMACommand.
Объявление
C++
virtual IOReturn getPreparedOffsetAndLength( UInt64 *
offset
, UInt64 *length
);Параметры
offset
возвращает начальное смещение в дескрипторе памяти, с которым была подготовлена команда DMA. Передайте NULL для, не заботятся.
length
возвращает длину в дескрипторе памяти, с которым была подготовлена команда DMA. Передайте NULL для, не заботятся.
Возвращаемое значение
Код IOReturn. kIOReturnNotReady, если не подготовлен IODMACommand.
Обсуждение
Если успешно подготовлено, возвращает смещение и длину в IOMemoryDescriptor. Перестанет работать для неприготовленного IODMACommand.
-
Основной инициализатор для класса IODMACommand.
Объявление
C++
virtual bool initWithSpecification( SegmentFunction
outSegFunc
, UInt8numAddressBits
, UInt64maxSegmentSize
, MappingOptions mappingOptions =kMapped
, UInt64 maxTransferSize = 0, UInt32 alignment = 1, IOMapper *mapper = 0, void *refCon = 0);Параметры
outSegFunc
SegmentFunction для вызова для вывода одного физического сегмента. Ряд девяти обычно требуемых функций сегмента предоставлен.
numAddressBits
Число битов, которые аппаратные средства используют на его внутренней адресной шине. Обычно 32, но может быть больше на современных аппаратных средствах. 0 подразумевает без ограничений кроме подразумеваемого выходной функцией сегмента.
maxSegmentSize
Максимальный допустимый размер для одного сегмента. Значения по умолчанию к 0, что означает любой размер.
mappingOptions
тип отображения, требующегося, чтобы переводить IOMemoryDescriptor в желаемое число битов. Например, если Ваши аппаратные средства только будут поддерживать 32 бита, но должны будут работать на машинах с> 4G RAM, то некоторое отображение будет требоваться. Число битов будет указано в numAddressBits, видеть ниже. Этот параметр может взять 3:-kNonCoherent значений - используемый для некогерентных аппаратных передач, Отображенный - Проверяют сгенерированные адреса шины того всего I/O, в числе обращения битов, указанных, Обойденных указывает, что обойденное обращение требуется, это используется, когда аппаратные трансдрузья в когерентную память, но не требуется никакое отображение. См. также подготавливаются () к случаям возникновения отказов.
maxTransferSize
Максимальный размер всей передачи. Значения по умолчанию к 0 указаниям никакого максимума.
alignment
Ограничение выравнивания, в байтах, на адресах шины I/O. Значения по умолчанию к единственному выравниванию байта.
mapper
Для отображения типов ударил и kBypassed картопостроитель, используется для определения аппаратных средств, которые выполнят отображение, значения по умолчанию к системному картопостроителю.
Возвращаемое значение
Может перестать работать, если отображающийся тип не распознан, если один из 3 обязательных параметров устанавливается на 0, если функция вывода на 32 бита выбрана, когда больше чем 32 бита адреса требуются или, если kBypassed требуют на машине, не поддерживающей обход. Возвращает true иначе.
-
Выходная функция сегмента вывода Segment32 обратного порядка байтов.
Объявление
C++
static bool OutputBig32( IODMACommand *
target
, Segment64seg
, void *segs
, UInt32ind
); -
Выходная функция сегмента вывода Segment64 обратного порядка байтов.
Объявление
C++
static bool OutputBig64( IODMACommand *
target
, Segment64seg
, void *segs
, UInt32ind
); -
Выходной узел естественная функция сегмента вывода Segment32.
Объявление
C++
static bool OutputHost32( IODMACommand *
target
, Segment64seg
, void *segs
, UInt32ind
); -
Выходной узел естественная функция сегмента вывода Segment64.
Объявление
C++
static bool OutputHost64( IODMACommand *
target
, Segment64seg
, void *segs
, UInt32ind
); -
Выходная функция сегмента вывода Segment32 прямого порядка байтов.
Объявление
C++
static bool OutputLittle32( IODMACommand *
target
, Segment64seg
, void *segs
, UInt32ind
); -
Выходная функция сегмента вывода Segment64 прямого порядка байтов.
Объявление
C++
static bool OutputLittle64( IODMACommand *
target
, Segment64seg
, void *segs
, UInt32ind
); -
Подготовьте память к передаче I/O.
Объявление
C++
virtual IOReturn prepare( UInt64 offset = 0, UInt64 length = 0, bool flushCache = true, bool synchronize = true);
Параметры
offset
определяет начальное смещение в дескрипторе памяти, на который будет воздействовать команда DMA. genIOVMSegments приведет к своим результатам на основе смещения, и длина передала подготавливать методу.
length
определяет конечную позицию в дескрипторе памяти, на который будет воздействовать команда DMA. genIOVMSegments приведет к своим результатам на основе смещения, и длина передала подготавливать методу.
flushCache
Сбросьте кэши для дескриптора памяти и удостоверьтесь, что циклы памяти завершены. Значения по умолчанию к истине для kNonCoherent и проигнорированы другими типами.
synchronize
Скопируйте любые буферизированные данные назад с целевого IOMemoryDescriptor. Значения по умолчанию к истине, если синхронизируются () используются для явного копирования данных, передающая ложь может избежать ненужной копии.
Возвращаемое значение
Код IOReturn.
Обсуждение
Выделите отображающиеся ресурсы, необходимые для этой передачи, указав sub диапазон IOMemoryDescriptor, который будет целью I/O. Полное () метод освобождает эти ресурсы. Данные могут быть скопированы в буферы для kIODirectionOut дескрипторов памяти, в зависимости от аппаратных средств, отображающих доступность ресурса или ограничения выравнивания. Нужно отметить, что эта функция может блокировать и должна только быть вызвана на клиентском контексте, т.е. никогда не вызывать эту подпрограмму, в то время как пропущено; также сам вызов не ориентирован на многопотоковое исполнение, хотя это должно быть проблемой, поскольку каждый IODMACommand независим.
-
Подготовьте память к передаче I/O с новой спецификацией.
Объявление
C++
virtual IOReturn prepareWithSpecification( SegmentFunction
outSegFunc
, UInt8numAddressBits
, UInt64maxSegmentSize
, MappingOptions mappingOptions =kMapped
, UInt64 maxTransferSize = 0, UInt32 alignment = 1, IOMapper *mapper = 0, UInt64 offset = 0, UInt64 length = 0, bool flushCache = true, bool synchronize = true);Параметры
outSegFunc
SegmentFunction для вызова для вывода одного физического сегмента. Ряд девяти обычно требуемых функций сегмента предоставлен.
numAddressBits
Число битов, которые аппаратные средства используют на его внутренней адресной шине. Обычно 32, но может быть больше на современных аппаратных средствах. 0 подразумевает без ограничений кроме подразумеваемого выходной функцией сегмента.
maxSegmentSize
Максимальный допустимый размер для одного сегмента. Значения по умолчанию к 0, что означает любой размер.
mappingOptions
тип отображения, требующегося, чтобы переводить IOMemoryDescriptor в желаемое число битов. Например, если Ваши аппаратные средства только будут поддерживать 32 бита, но должны будут работать на машинах с> 4G RAM, то некоторое отображение будет требоваться. Число битов будет указано в numAddressBits, видеть ниже. Этот параметр может взять 3:-kNonCoherent значений - используемый для некогерентных аппаратных передач, Отображенный - Проверяют сгенерированные адреса шины того всего I/O, в числе обращения битов, указанных, Обойденных указывает, что обойденное обращение требуется, это используется, когда аппаратные трансдрузья в когерентную память, но не требуется никакое отображение. См. также подготавливаются () к случаям возникновения отказов.
maxTransferSize
Максимальный размер всей передачи. Значения по умолчанию к 0 указаниям никакого максимума.
alignment
Ограничение выравнивания, в байтах, на адресах шины I/O. Значения по умолчанию к единственному выравниванию байта.
mapper
Для отображения типов ударил и kBypassed картопостроитель, используется для определения аппаратных средств, которые выполнят отображение, значения по умолчанию к системному картопостроителю.
offset
определяет начальное смещение в дескрипторе памяти, на который будет воздействовать команда DMA. genIOVMSegments приведет к своим результатам на основе смещения, и длина передала подготавливать методу.
length
определяет конечную позицию в дескрипторе памяти, на который будет воздействовать команда DMA. genIOVMSegments приведет к своим результатам на основе смещения, и длина передала подготавливать методу.
flushCache
Сбросьте кэши для дескриптора памяти и удостоверьтесь, что циклы памяти завершены. Значения по умолчанию к истине для kNonCoherent и проигнорированы другими типами.
synchronize
Скопируйте любые буферизированные данные назад с целевого IOMemoryDescriptor. Значения по умолчанию к истине, если синхронизируются () используются для явного копирования данных, передающая ложь может избежать ненужной копии.
Возвращаемое значение
Код IOReturn. Может перестать работать, если отображающийся тип не распознан, если один из 3 обязательных параметров устанавливается на 0, если функция вывода на 32 бита выбрана, когда больше чем 32 бита адреса требуются или, если kBypassed требуют на машине, не поддерживающей обход.
Обсуждение
Выделите отображающиеся ресурсы, необходимые для этой передачи, указав sub диапазон IOMemoryDescriptor, который будет целью I/O. Полное () метод освобождает эти ресурсы. Данные могут быть скопированы в буферы для kIODirectionOut дескрипторов памяти, в зависимости от аппаратных средств, отображающих доступность ресурса или ограничения выравнивания. Нужно отметить, что эта функция может блокировать и должна только быть вызвана на клиентском контексте, т.е. никогда не вызывать эту подпрограмму, в то время как пропущено; также сам вызов не ориентирован на многопотоковое исполнение, хотя это должно быть проблемой, поскольку каждый IODMACommand независим.
-
Данные копии с буфера IODMACOMMAND на указанный буфер.
Объявление
C++
UInt64 readBytes( UInt64
offset
, void *bytes
, UInt64length
);Параметры
offset
Байтовое смещение в память IODMACOMMAND, относительно подготовленного смещения.
bytes
Вызывающая сторона предоставила буфер для копирования данных в.
length
Длина данных для копирования.
Возвращаемое значение
Число байтов скопировало, нуль будет возвращен, если указанное смещение будет вне подготовленной длины IODMACommand.
Обсуждение
Этот метод копирует данные с памяти IODMACOMMAND при данном смещении к буферу вызывающей стороны. IODMACommand должен быть подготовлен, и смещение относительно подготовленного смещения.
-
Наборы и сброс текущий дескриптор памяти DMACOMMAND
Объявление
C++
virtual IOReturn setMemoryDescriptor( const IOMemoryDescriptor *
mem
, bool autoPrepare = true);Параметры
mem
Указатель на текущий дескриптор памяти I/Os.
autoPrepare
Обрабатывается дополнительная логическая переменная, которая вызовет подготавливать () функция автоматически после дескриптора памяти. Значения по умолчанию к истине.
Возвращаемое значение
Возвраты kIOReturnSuccess, kIOReturnBusy, если в настоящее время подготовлено, kIOReturnNoSpace, если длина (мадам)> = Максимальный Размер Передачи или коды ошибки, возвращенные, подготавливаются () (qv).
Обсуждение
Команда DMA сконфигурирует себя на основе информации, которую она находит в дескрипторе памяти. Это ищет вещи как направление дескриптора памяти и отображается ли текущий дескриптор памяти уже в некоторый IOMMU. Как удобство программиста это может также сразу подготовить команду DMA. Посмотрите подготавливаются (). Обратите внимание на то, что IODMACommand разработан к используемому многократно с преемственностью дескрипторов памяти, делая объединение команд возможным. Это - ошибка, хотя попытаться сбросить в настоящее время подготовленный () команда DMA. Предупреждение: В то время как в запертом контексте, т.е. одном из действия WorkLoops вызывают outs, эта подпрограмма может блокировать поэтому никогда попытку автоподготовить IODMACommand.
-
Принесите IOMemoryDescriptor и буферы IODMACommand в синхронизацию.
Объявление
C++
virtual IOReturn synchronize( IOOptionBits
options
);Параметры
options
Указывает направление копии: kIODirectionOut копируют память IOMemoryDesciptor в любые буферы IODMACommand. По умолчанию это действие имеет место автоматически в, подготавливаются (). kIODirectionIn копируют любые буферы IODMACommand назад в IOMemoryDescriptor. По умолчанию это действие имеет место автоматически в полном (). kForceDoubleBuffer копируют весь подготовленный диапазон в новую страницу выровненный буфер.
Возвращаемое значение
kIOReturnNotReady, если не подготовленный, kIOReturnBadArgument, если недопустимые опции передаются, kIOReturnSuccess иначе.
Обсуждение
Этот метод нельзя вызвать, если не было ранее выпущено подготавливать. В случае необходимости вызывающая сторона может синхронизировать любые буферы IODMACommand с исходными буферами IOMemoryDescriptor.
-
Создает и инициализирует IODMACommand в одной работе, если эта версия операционной системы поддерживает ее.
Объявление
C++
static inline IOReturn weakWithSpecification ( IODMACommand **
newCommand
, SegmentFunctionoutSegFunc
, UInt8numAddressBits
, UInt64maxSegmentSize
, MappingOptions mapType =kMapped
, UInt64 maxTransferSize = 0, UInt32 alignment = 1, IOMapper *mapper = 0, void *refCon = 0) __attribute__((always_inline));Параметры
newCommand
Выходная ссылочная переменная недавно создаваемого IODMACommand.
outSegFunc
SegmentFunction для вызова для вывода одного физического сегмента. Ряд девяти обычно требуемых функций сегмента предоставлен.
numAddressBits
Число битов, которые аппаратные средства используют на его внутренней адресной шине. Обычно 32, но может быть больше на современных аппаратных средствах. 0 подразумевает без ограничений кроме подразумеваемого выходной функцией сегмента.
maxSegmentSize
Максимальный допустимый размер для одного сегмента. Нуль обрабатывается как неограниченный размер сегмента.
mapType
тип отображения, требующегося, чтобы переводить IOMemoryDescriptor в желаемое число битов. Например, если Ваши аппаратные средства только будут поддерживать 32 бита, но должны будут работать на машинах с> 4G RAM, то некоторое отображение будет требоваться. Число битов будет указано в numAddressBits, видеть ниже. Этот параметр может взять 3:-kNonCoherent значений - используемый для некогерентных аппаратных передач, Отображенный - Проверяют сгенерированные адреса шины того всего I/O, в числе обращения битов, указанных, Обойденных указывает, что обойденное обращение требуется, это используется, когда аппаратные передачи в когерентную память, но не требуется никакое отображение. См. также подготавливаются () к случаям возникновения отказов.
maxTransferSize
Максимальный размер всей передачи. Значения по умолчанию к 0 указаниям никакого максимума.
alignment
Ограничение выравнивания, в байтах, на адресах шины I/O. Значения по умолчанию к единственному выравниванию байта.
mapper
Для отображения типов ударил и kBypassed картопостроитель, используется для определения аппаратных средств, которые выполнят отображение, значения по умолчанию к системному картопостроителю.
Возвращаемое значение
kIOReturnSuccess, если все в порядке, иначе kIOReturnBadArgument, если newCommand является NULL, kIOReturnUnsupported, если ядро не экспортирует IODMACommand или IOReturnError, если новая команда перестала работать к init, q.v. initWithSpecification.
Обсуждение
Функция фабрики, чтобы создать и инициализировать IODMACommand в одной работе. Функция позволяет разработчику 'слабой' ссылке с IODMACommand. Если IODMACommand будет недоступен, эта функция возвратит kIOReturnUnsupported. Эта функция является фактически довольно медленной, таким образом, будет лучше вызвать его, как только тогда клонируются, успешно создают команду с помощью cloneCommand (q.v)..
-
Создает и инициализирует IODMACommand в одной работе.
Объявление
C++
static IODMACommand * withSpecification( SegmentFunction
outSegFunc
, UInt8numAddressBits
, UInt64maxSegmentSize
, MappingOptions mappingOptions =kMapped
, UInt64 maxTransferSize = 0, UInt32 alignment = 1, IOMapper *mapper = 0, void *refCon = 0);Параметры
outSegFunc
SegmentFunction для вызова для вывода одного физического сегмента. Ряд девяти обычно требуемых функций сегмента предоставлен.
numAddressBits
Число битов, которые аппаратные средства используют на его внутренней адресной шине. Обычно 32, но может быть больше на современных аппаратных средствах. 0 подразумевает без ограничений кроме подразумеваемого выходной функцией сегмента.
maxSegmentSize
Максимальный допустимый размер для одного сегмента. Если 0 передается, максимальный размер сегмента неограничен.
mappingOptions
тип отображения, требующегося, чтобы переводить IOMemoryDescriptor в желаемое число битов. Например, если Ваши аппаратные средства только будут поддерживать 32 бита, но должны будут работать на машинах с> 4G RAM, то некоторое отображение будет требоваться. Число битов будет указано в numAddressBits, видеть ниже. Этот параметр может взять 3:-kNonCoherent значений - используемый для некогерентных аппаратных передач, Отображенный - Проверяют сгенерированные адреса шины того всего I/O, в числе обращения битов, указанных, Обойденных указывает, что обойденное обращение требуется, это используется, когда аппаратные трансдрузья в когерентную память, но не требуется никакое отображение. См. также подготавливаются () к случаям возникновения отказов.
maxTransferSize
Максимальный размер всей передачи. Значения по умолчанию к 0 указаниям никакого максимума.
alignment
Ограничение выравнивания, в байтах, на адресах шины I/O. Значения по умолчанию к единственному выравниванию байта.
mapper
Для отображения типов ударил и kBypassed картопостроитель, используется для определения аппаратных средств, которые выполнят отображение, значения по умолчанию к системному картопостроителю.
Возвращаемое значение
Возвращает новый курсор памяти, если успешно создается и инициализировано, 0 иначе.
Обсуждение
Функция фабрики, чтобы создать и инициализировать IODMACommand в одной работе.
-
Данные копии к буферу IODMACOMMAND от указанного буфера.
Объявление
C++
UInt64 writeBytes( UInt64
offset
, const void *bytes
, UInt64length
);Параметры
offset
Байтовое смещение в память IODMACOMMAND, относительно подготовленного смещения.
bytes
Вызывающая сторона предоставила буфер для копирования данных с.
length
Длина данных для копирования.
Возвращаемое значение
Число байтов скопировало, нуль будет возвращен, если указанное смещение будет вне подготовленной длины IODMACommand.
Обсуждение
Этот метод копирует данные в память IODMACOMMAND при данном смещении от буфера вызывающей стороны. IODMACommand должен быть подготовлен, и смещение относительно подготовленного смещения.
-
Объявление
C++
typedef bool ( *SegmentFunction)( IODMACommand *target, Segment64 segment, void *segments, UInt32 segmentIndex);
Параметры
segment
Адрес шины I/O на 64 бита и длина.
segments
Основа выходного вектора DMA адресует пар длины.
segmentIndex
Индекс для вывода 'сегмента' в массиве 'сегментов'.
Возвращаемое значение
Если кодирование сегмента успешно выполнилось, возвращает true. false может быть возвращен, если текущий сегмент не помещается в выходной сегмент, т.е. привычка адреса на 38 битов вписалась в 32 кодирования.
Обсуждение
Указатель на функцию C, переводящую 64 сегмента и выводящую единственный желаемый сегмент к массиву в требуемом индексе. Существует группа предварительно реализованных SegmentFunctions, которые могут быть полезны для разработчика ниже.
Оператор импорта
Objective C
#include <IODMACommand.h>;
Доступность
Доступный в OS X v10.0 через OS X v10.5.
fMemory
fMemory
дескриптор памяти для текущего I/O.
Объявление
CPlusPlus
#define kIODMACommandOutputBig32 (IODMACommand::OutputBig32)
#define kIODMACommandOutputBig64 (IODMACommand::OutputBig64)
#define kIODMACommandOutputLittle64 (IODMACommand::OutputLittle64)
#define kIODMACommandOutputHost32 (IODMACommand::OutputHost32)
#define kIODMACommandOutputHost64 (IODMACommand::OutputHost64)
#define kIODMACommandOutputLittle32 (IODMACommand::OutputLittle32)
#define kIODMACommandOutputBig64 (IODMACommand::OutputBig64)
#define kIODMACommandOutputLittle64 (IODMACommand::OutputLittle64)
Константы
-
kIODMACommandOutputBig32
kIODMACommandOutputBig32
Выходная функция сегмента вывода Segment32 обратного порядка байтов.
Доступный в OS X v10.4 и позже.
-
kIODMACommandOutputBig64
kIODMACommandOutputBig64
Выходная функция сегмента вывода Segment64 прямого порядка байтов.
Доступный в OS X v10.4 и позже.
-
kIODMACommandOutputBig64
kIODMACommandOutputBig64
Выходная функция сегмента вывода Segment64 обратного порядка байтов.
Доступный в OS X v10.4 и позже.
-
kIODMACommandOutputHost32
kIODMACommandOutputHost32
Выходной узел естественная функция сегмента вывода Segment32.
Доступный в OS X v10.4 и позже.
-
kIODMACommandOutputHost64
kIODMACommandOutputHost64
Выходной узел естественная функция сегмента вывода Segment64.
Доступный в OS X v10.4 и позже.
-
kIODMACommandOutputLittle32
kIODMACommandOutputLittle32
Выходная функция сегмента вывода Segment32 прямого порядка байтов.
Доступный в OS X v10.4 и позже.
-
kIODMACommandOutputLittle64
kIODMACommandOutputLittle64
Выходная функция сегмента вывода Segment64 прямого порядка байтов.
Доступный в OS X v10.4 и позже.
-
kIODMACommandOutputLittle64
kIODMACommandOutputLittle64
Выходная функция сегмента вывода Segment64 обратного порядка байтов.
Доступный в OS X v10.4 и позже.
Отображение типов для указания желаемого картопостроителя вводит для перевода дескрипторов памяти в I/O Адреса шины DMA.
Объявление
CPlusPlus
enum MappingOptions {
kMapped = 0x00000000,
kBypassed = 0x00000001,
kNonCoherent = 0x00000002,
kTypeMask = 0x0000000f,
kNoCacheStore = 0x00000010 , // Memory in descriptor
kOnChip = 0x00000020 , // Indicates DMA is on South Bridge
kIterateOnly = 0x00000040 // DMACommand will be used as a cursor only
};
Константы
-
kNonCoherent
kNonCoherent
Используемый драйверами для некогерентных передач, подразумевает неотображенную память
-
kMapped
kMapped
Позвольте драйверу определять размер обращения
-
kBypassed
kBypassed
Позвольте драйверам обходить любой картопостроитель
-
kMaxMappingOptions
kMaxMappingOptions
Внутреннее использование только
Оператор импорта
Objective C
#include <IODMACommand.h>;
Доступность
Доступный в OS X v10.4 через OS X v10.5.
Опции для синхронизировать метода.
Объявление
CPlusPlus
enum SynchronizeOptions {
kForceDoubleBuffer = 0x01000000
};
Константы
-
kForceDoubleBuffer
kForceDoubleBuffer
Скопируйте весь подготовленный диапазон в новую страницу выровненный буфер.
Оператор импорта
Objective C
#include <IODMACommand.h>;
Доступность
Доступный в OS X v10.4 через OS X v10.5.
-
Зарезервированный для будущего использования. (Только внутреннее использование)
Объявление
C++
struct IODMACommandInternal * reserved;
-
Ссылка Констант, клиент определил публично avialable
Объявление
C++
void *fRefCon;
-
Когда событие было поставлено, метод действия вызвал
Объявление
C++
SegmentFunction fOutSeg;
-
Число непрерывных сегментов, требуемых для текущего дескриптора памяти и желаемого отображения
Объявление
C++
UInt32 fNumSegments;
-
Число битов, которые могут адресовать аппаратные средства
Объявление
C++
UInt32 fNumAddressBits;
-
Максимальный размер передачи, которую этому курсору памяти позволяют генерировать
Объявление
C++
UInt64 fMaxTransferSize;
-
Максимальный размер одного сегмента в рассеиваться/собирать списке
Объявление
C++
UInt64 fMaxSegmentSize;
-
Какое отображение виртуального адреса I/O требуется для этой команды
Объявление
C++
MappingOptions fMappingOptions;
-
Клиент определил картопостроитель.
Объявление
C++
IOMapper *fMapper;
-
Маска, чтобы быть ored в адрес для обхода отображения данного iommu.
Объявление
C++
UInt64 fBypassMask;
-
Маска ограничения выравнивания.
Объявление
C++
UInt32 fAlignMask;
-
fActive указывает, что эта команда DMA в настоящее время подготавливается и готова пойти
Объявление
C++
UInt32 fActive;