Регистрация минидрайвера в системе
int mdriver_add( char *name,
int interrupt,
int (*handler)( int state, void *data ),
paddr32_t data_paddr,
unsigned data_size );
- name
- Произвольная строка символов, идентифицирующая минидрайвер.
- interrupt
- Значение, которое передается в InterruptAttach() для присоединения к прерыванию. В первую очередь он проверяется на допустимость значения. По этой причине предварительно следует выполнить init_intrinfo() для добавления информации о прерывании в системную страницу. Только после этого можно будет зарегистрировать минидрайвер.
- handler
- Обработчик минидрайвера. Она будет вызываться в разное время, чтобы разработчик смог выполнить контроль и проверку устройства. Факт вызова обработчика не обязательно говорит о том, что устройству требуется внимание со стороны драйвера. Принятие решения о необходимости управляющих воздействий является компетенцией разработчика минидрайвера.
- data_paddr
- Физический адрес блока памяти, который доступен минидрайверу. Это может быть как предопределённое или зарезервированное пространство, так и выделенная с помощью функции startup alloc_ram() память.
- data_size
- Размер блока памяти, ассоциированного с data_paddr.
libc
Эта функция регистрирует минидрайвер в системе.
mdriver_handler()
Этот обработчик вызывается для зарегистрированного в системе минидрайвера.
Прототип имеет вид:
int mdriver_handler( int state, void *data );
Аргументы обработчика:
- state
- Указывает причину вызова обработчика:
- MDRIVER_INIT
- Драйвер инициализируется, обработчик вызван из mdriver_add(). Вызывается с этим состоянием только один раз.
- MDRIVER_STARTUP
- Драйвер вызывается откуда-то из startup.
- MDRIVER_STARTUP_PREPARE
- Подготовка к работе минидрайвера вне startup.
- MDRIVER_STARTUP_FINI
- Последний вызов драйвера из startup.
- MDRIVER_KERNEL
- Драйвер вызывается во время инициализации ядра.
- MDRIVER_PROCESS
- Драйвер вызывается во время инициализации системы и менеджера процессов.
- MDRIVER_INTR_ATTACH
- Процесс вызывает InterruptAttachEvent() с тем же номером прерывания, что использует минидрайвер.
- data
- Указатель на виртуальный адрес блока данных, соответствующий параметру data_paddr функции mdriver_add().
Индекс в разделе mdriver системной страницы для вновь добавленного минидрайвера или -1
, если минидрайвер не был зарегистрирован.
ЗОСРВ «Нейтрино»
- Да
- Обработчик прерываний
- Нет
- Обработчик сигналов
- Нет
- В потоке
- Да
struct mdriver_entry, mdriver_max
Предыдущий раздел: перейти