Обнаружение и подключение звуковых драйверов во многом схоже с драйвером любого другого устройства. За дополнительной информацией вы можете обратиться к главам 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>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.