Операционная система ЗОСРВ «Нейтрино» > Руководство разработчика > Основные принципы системной разработки > Запуск системы, быстрая активация устройств > Быстрая активация устройств > API минидрайверов > struct mdriver_entry



struct mdriver_entry

Запись минидрайвера в системной странице

Прототип:

#include <sys/syspage.h>
struct mdriver_entry {
uint32_t intr;
int (*handler)( int state, void *data );
void *data;
paddr32_t data_paddr;
uint32_t data_size;
uint32_t name;
uint32_t internal;
uint32_t spare[1];
};

Описание:

Каждая запись минидрайвера хранится в системной странице. Чтобы полнофункциональный драйвер нашел минидрайвер и получил доступ к его данным, каждый из них должен получить доступ к системной странице. Структура содержит следующие поля:

intr
Прерывание, с которым ассоциирован минидрайвер.
handler
Обработчик минидрайвера.
data
data_paddr
Указатель и физический адрес области данных минидрайвера.
data_size
Размер области данных минидрайвера в байтах.
name
Имя минидрайвера, добавленного с помощью mdriver_add(). Pначение является смещением в секции строк системной страницы, где хранится имя.

Доступ к этой информации осуществляется с помощью макроса SYSPAGE_ENTRY():

SYSPAGE_ENTRY( mdriver )[i].data_paddr

Здесь i это индекс в секции минидрайвера. Вы можете использовать поле name для поиска определенного минидрайвера при наличии нескольких, возможно, присоединенных к одному прерыванию. Пример кода, получающего доступ к этой информации:

int i,
num_drivers = 0;
struct mdriver_entry *mdriver;
mdriver = (struct mdriver_entry *)SYSPAGE_ENTRY( mdriver );
num_drivers = _syspage_ptr->mdriver.entry_size / sizeof( *mdriver );
printf( "Number of Installed minidrivers = %d\n\n", num_drivers );
for ( i = 0; i < num_drivers; i++ )
{
printf( "Minidriver entry .. %d\n", i );
printf( "Name .............. %s\n", SYSPAGE_ENTRY( strings )->data + mdriver[i].name );
printf( "Interrupt ......... 0x%X\n", mdriver[i].intr );
printf( "Data size ......... %d\n", mdriver[i].data_size );
printf( "\n" );
}

Классификация:

ЗОСРВ «Нейтрино»

Тематические ссылки:

mdriver_max, mdriver_add(), _syspage_ptr




Предыдущий раздел: перейти