Запись минидрайвера в системной странице
#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];};
Каждая запись минидрайвера хранится в системной странице. Чтобы полнофункциональный драйвер нашел минидрайвер и получил доступ к его данным, каждый из них должен получить доступ к системной странице. Структура содержит следующие поля:
Доступ к этой информации осуществляется с помощью макроса 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
Предыдущий раздел: перейти