IOMbufMemoryCursor
Механизм для преобразования mbuf цепочек в физические адреса.
IOMbufMemoryCursor определяет суперкласс, от которого должны наследоваться все определенные mbuf курсоры, но mbuf курсор может быть создан без определенного формального подкласса, просто обеспечив функцию сегмента для инициализаторов. Этот класс выполняет задачу обхода данной mbuf цепочки, и создание медосмотра рассеиваются/собирают список, подходящий для целевых аппаратных средств. Когда необходимо, этот класс может также объединить mbuf цепочки, когда сгенерированные рассеиваются/собирают, список превышает указанный аппаратный предел. Однако этого нужно избежать, так как это требует стоимость производительности.
Драйвер, как ожидают, создаст mbuf курсор, и сконфигурировать его для соответствия ограничений он - аппаратные средства DMA; например, mbuf курсор, используемый драйвером контроллера Ethernet, может иметь максимальный физический размер сегмента 1520 и допускать до 6 физических сегментов. Таким образом это создало бы mbuf курсор с maxSegmentSize 1520 и maxNumSegments 6. Драйвер может принять решение предоставить функцию OutputSegmentFunc для форматирования вывода каждого, рассеиваются/собирают сегмент для соответствия аппаратного формата дескриптора, или это может использовать подкласс IOMbufMemoryCursor для генерации сегментов IOPhysicalSegment с различными заказами байта.
Драйвер может также создать больше чем один mbuf курсор, возможно один выделенный для потока передачи и другой для получить потока. Это становится требованием, когда драйвер многопоточен, так как mbuf курсор поддерживает состояние и не поддерживает повторную входимость.
Наследование
Не применимый
Соответствует
Не применимый
Оператор импорта
Не применимый
Objective C
@import Kernel;
Доступность
Доступный в OS X v10.0 через OS X v10.5.
-
Генерирует медосмотр, рассеиваются/собирают список, данный mbuf пакет.
Объявление
C++
virtual UInt32 genPhysicalSegments( mbuf_t
packet
, void *vector
, UInt32maxSegs
, booldoCoalesce
);Параметры
packet
mbuf пакет.
vector
Недействительный указатель на основу физического вывода рассеивается/собирает список. Всегда передаваемый непосредственно на OutputSegmentFunc без интерпретации курсором.
maxSegs
Максимальное количество сегментов, которые могут быть записаны в массив сегментов.
doCoalesce
Набор к истине для выполнения объединения, когда требуемое число сегментов превысит указанный предел, иначе прервитесь и возвратитесь 0.
Возвращаемое значение
Возвращает число сегментов, которые были заполнены в, или 0, если произошла ошибка.
Обсуждение
Генерирует список физических сегментов от данного mbuf.
-
Возвращает количество общего количества mbuf цепочек, объединенных genPhysicalSegments ().
Объявление
C++
UInt32 getAndResetCoalesceCount();
Возвращаемое значение
Возвраты объединить количество.
Обсуждение
Этот метод возвращает количество общего количества mbuf цепочек, объединенных genPhysicalSegments (). Счетчик тогда сбрасывается к 0.
-
Основной инициализатор для класса IOMbufMemoryCursor.
Объявление
C++
virtual bool initWithSpecification( IOMemoryCursor::SegmentFunction
outSeg
, UInt32maxSegmentSize
, UInt32maxNumSegments
);Параметры
outSeg
Функция для вызова для вывода одного физического сегмента.
maxSegmentSize
Максимальный допустимый размер для одного сегмента.
maxNumSegments
Максимальное количество сегментов.
Возвращаемое значение
Возвращает true если наследованные классы и этот экземпляр, инициализированный успешно.
-
Зарезервированный для будущего использования. (Только внутреннее использование)
Объявление
C++
ExpansionData *reserved;