|
2.7.8.2. Рабочие областиВ зависимости от возможостей и требований host адаптера, список scatter- gather может управляться различными способами. Для поддержки многозадачности несколько рабочих областей прикрепляются эксклюзивно к драйверу низкого уровня. 2.7.8.2.1. Указатель scsi_done()Указатель должен быть установлен на функцию done() в функции queuecommand(). Других использований этому указатенлю не предусмотрено. 2.7.8.2.2. Указатель host_scribbleКод высокого уровня поддерживает пару функций распределения памяти - scsi_malloc() и scsi_free(), которые гарантируют возврат физической памяти из первых 16Мб. Эта память также подходит для использования DMA. Количество распределенной памяти под запрос должно быть кратно 512 байтам и быть не больше 4096 байт. Общее количество памяти доступной scsi_malloc() определяется арифметической функцией с тремя аргументами, находящиеся в Scsi_Host - переменные sg_tablesize,cmd_per_lun и unchecked_isa_dma. Указатель host_scribble указывает на область досупной памяти выделенной scsi_malloc(). Драйвер SCSI низкого уровня обладает возможностью управления этим указателем и соответствующей ему памяти, а также возможностью очистки ненужной информации в памяти. 2.7.8.2.3. Структура Scsi_PointerПеременная SCp, структура типа Scsi_Pointer, описана на рисунке ниже. Переменные этой структуры могут быть использованы любыми средствами в драйверах низкого уровня. Как обычно buffer здесь указывает на текущую позицию scatterlist, buffer_residual показывает количество элементов находящихся в scatterlist, ptr - указатель на буффер, а this_residual - число символов для передачи. Некоторые host адаптеры требуют эту информацию, некоторые игнорируют ее. Второй набор переменных содержит информацию о статусе SCSI, различные указатели и флаги. typedef struct scsi_pointer { char *ptr; int this_residual; struct scatterlist *buffer; int buffers_residual; volatile int Status; volatile int Message; volatile int have_data_in; volatile int sent_command; volatile int phase; }Scsi_Pointer; Глава 3. Файловая система /procФайловая система proc пpедставляет собой интеpфейс к нескольким стpуктуpам данных ядpа, котоpые pаботают также как и файловая система. Вместо того, чтобы каждый pаз обpащаться в /dev/kmem и искать путь к опpеделению местонахождения какой-либо инфоpмации, все пpиложения читают файлы и каталоги из /proc. Таким обpазом все адpеса стpуктуp данных ядpа заносятся в /proc во вpемя компиляции ядpа, и пpогpаммы использующие proc не могут пеpекомпилиpоваться после этого. Существует возможность поддеpживать файловую систему proc вне /proc, но пpи этом она теpяет эффективность, поэтому в данном тpуде эта возможность не pассматpивается. |
helloworld.ru © 2001-2021 Все права защищены |
|
|