Обнаружение и подключение звуковых драйверов во многом схоже с драйвером любого другого устройства. За дополнительной информацией вы можете обратиться к главам ISA или PCI данного руководства.
Но всё же, звуковые драйвера немного отличаются:
Они объявляют сами себя, как устройства класса pcm, с
частной структурой устройства struct snddev_info
:
static driver_t xxx_driver = { "pcm", xxx_methods, sizeof(struct snddev_info) }; DRIVER_MODULE(snd_xxxpci, pci, xxx_driver, pcm_devclass, 0, 0); MODULE_DEPEND(snd_xxxpci, snd_pcm, PCM_MINVER, PCM_PREFVER,PCM_MAXVER);
Большинство звуковых драйверов нуждаются в сохранении личной информации, касающейся их
устройства. Структура с личными данными обычно выделяется при вызове функции attach. Её
адрес передаётся pcm посредством вызовов pcm_register()
и mixer_init()
.
Позже pcm передаёт назад этот адрес, в качестве параметра в
вызовах к интерфейсам звукового драйвера.
Функция подключения звукового драйвера должна объявлять её микшерный или AC97
интерфейс pcm посредством вызова mixer_init()
. Для микшерного интерфейса это взамен вернёт вызов
xxxmixer_init()
.
Функция подключения звукового драйвера передаёт общие настройки каналов pcm посредством вызова pcm_register(dev,
sc, nplay, nrec)
, где sc
- адрес структуры данных
устройства, используемой в дальнейших вызовах от pcm, а nplay
и nrec
- количество каналов
проигрывания и записи.
Функция подключения звукового драйвера объявляет каждый из её каналов с помощью
вызовов pcm_addchan()
. Это установит занятость канала в pcm и вызовет взамен вызов xxxchannel_init()
.
Функция отключения должна вызывать pcm_unregister()
перед объявлением её ресурсов свободными.
Существует два метода работы с не PnP устройствами:
Использование метода device_identify()
(пример смотрите
в: sound/isa/es1888.c). device_identify()
пытается обнаружить оборудование, использующее
известные адреса, и если найдёт поддерживаемое устройство, то создаст новое pcm
устройство, которое затем будет передано процессу обнаружения/подключения.
Использование выборочной конфигурации ядра с соответствующими хинтами для pcm устройств (пример: sound/isa/mss.c).
pcm драйверы должны поддерживать device_suspend
, device_resume
и
device_shutdown
функции, для корректного функционирования
управления питанием и процесса выгрузки модуля.
Пред. | Начало | След. |
Файлы | Уровень выше | Интерфейсы |
Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.