sound, SB, AC97 и другое

Drivers for sound cards
  • Mario, скорее, создатель соответствующего виджета - раз уж речь о моем варианте панели (offtop: после сессии продолжу ее, сейчас оно более стойко к падениям и читает настройки из файлов)
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Asper
    В драйвер добавлен вывод и проверка статуса.
    Attachments
    sb16.7z (7.68 KiB)
    Downloaded 233 times
  • А кто нибудь может дать толковую документацию по структуре библиотеки alsa, где было бы дерево этой библиотеки, от главной точки входа, до вызова инициализации конкретной карты.
  • Unduing
    Unduing wrote:В драйвер добавлен вывод и проверка статуса.
    Так хорошо. Дальнейшие разбирательства предлагаю перенести в PM, чтобы не засорять тему.
    Unduing wrote:А кто нибудь может дать толковую документацию по структуре библиотеки alsa, где было бы дерево этой библиотеки, от главной точки входа, до вызова инициализации конкретной карты.
    В ALSA нас интересуют только сами исходные коды драйверов.

    Для PCI карт папка alsa-driver-x.x.x\alsa-kernel\pci
    Для ISA карт папка alsa-driver-x.x.x\alsa-kernel\isa
  • Хотелось бы понять общую суть работы библиотеки.
    Стек вызовов вплоть до инициализации драйвера, многое бы прояснил, сейчас же есть набор исходников, но не ясна последовательность запуска библиотеки.
  • Велик подтянулся, теперь он тоже в теме:
    - 12.06.2011 M64 0.96S released - IntelHDA (ALC662) audio driver
    Небось спёр драйвер у Asper:lol:
  • Для того чтобы спереть надо еще код понять, а он даже готовый рабочий код не хотел принимать в свое время.
  • Чесно говоря я был немного в шоке, когда услышал звук со своего ноутбука Acer Aspire 4740G. :D
    Одно слово Asper БРАВО!!!!!
    Attachments
    PCIDEV.TXT (2.29 KiB)
    Downloaded 210 times
    BOARDLOG.TXT (1.75 KiB)
    Downloaded 208 times
    Из хаоса в космос
  • Leency wrote:Чесно говоря я был немного в шоке, когда услышал звук со своего ноутбука Acer Aspire 4740G. :D
    Одно слово Asper БРАВО!!!!!
    Добавил на Вики в список работающих конфигураций.

    Asper: Мне интересно, почему при первом вызове драйвера, на любом компьютере, происходит зависание на 1-2 секунды, и загрузка процессора подскакивает до 100% - это так должно быть, или пока не выловленный баг? Что драйвер делает в это время?
  • Выполняется первичная инициализация железки -очевидно же!
    Вопрос только почему при этом еще и загрузка дикая, вполне уместен.
    Возможно в цикл ожидания забыли вставить передачу управления следующей задаче.
  • Mario wrote:Выполняется первичная инициализация железки -очевидно же!
    Вопрос только почему при этом еще и загрузка дикая, вполне уместен.
    Загрузка мне как раз не сильно мешает, но показывал потенциальным клиентам, они не могут понять, почему после вызова AC97SND первый раз, до начала проигрывания музыки, проходит несколько секунд, а в последующие разы всё моментально. Вот опять же, CleverMouse инициализирует USB-устройства за миллисекунды, поэтому непонятно, почему звуку нужно так много.
  • Leency
    Спасибо. Рад, что у тебя заработал звук. Поздравляю! :)

    yogev_ezra
    yogev_ezra wrote:Asper: Мне интересно, почему при первом вызове драйвера, на любом компьютере, происходит зависание на 1-2 секунды, и загрузка процессора подскакивает до 100% - это так должно быть, или пока не выловленный баг? Что драйвер делает в это время?
    Большую часть времени занимают задержки при сбросе контроллера и инициализации кодеков.
    Spoiler:; reset codec link
    align 4
    proc reset_controller
    locals
    counter dd ?
    endl

    test eax, eax
    jz .skip

    ; clear STATESTS
    mov eax, STATESTS_INT_MASK
    mov edx, ICH6_REG_STATESTS
    call azx_writeb

    ; reset controller
    mov edx, ICH6_REG_GCTL
    call azx_readl
    mov ebx, ICH6_GCTL_RESET
    xor ebx, -1
    and eax, ebx
    mov edx, ICH6_REG_GCTL
    call azx_writel

    mov [counter], 50 ; total 50*100 ms = 5s
    .wait0:

    mov edx, ICH6_REG_GCTL
    call azx_readb
    test eax, eax
    jz @f

    mov eax, 100000 ; wait 100 ms
    call StallExec

    dec [counter]
    jnz .wait0
    @@:
    ; delay for >= 100us for codec PLL to settle per spec
    ; Rev 0.9 section 5.5.1
    mov eax, 100000 ; wait 100 ms
    call StallExec

    ; Bring controller out of reset
    mov edx, ICH6_REG_GCTL
    call azx_readb
    or eax, ICH6_GCTL_RESET
    mov edx, ICH6_REG_GCTL
    call azx_writeb

    mov [counter], 50 ; total 50*100 ms = 5s
    .wait1:

    mov edx, ICH6_REG_GCTL
    call azx_readb
    test eax, eax
    jnz @f

    mov eax, 100000 ; wait 100 ms
    call StallExec

    dec [counter]
    jnz .wait1
    @@:

    ; Brent Chartrand said to wait >= 540us for codecs to intialize
    mov eax, 100000 ; wait 100 ms
    call StallExec

    .skip:
    ; check to see if controller is ready
    mov edx, ICH6_REG_GCTL
    call azx_readb
    test eax, eax
    jz .fail
    ; (...)
    ret
    endp
    Поскольку тайминги не стандартизированы, то я делал их такими же как в ALSA. Мне кажется можно их значительно уменьшить, но я не уверен, что это везде будет работать.
    Вот попробуй эту версию.
    Attachments
    sound.obj (7.31 KiB)
    tv017d
    Downloaded 222 times
  • Asper
    Я не писал отдельных драверов, но в драйверах файловой подсистемы (встроенных в ядро) вполне себе прокатывал вызов call change_task
    Spoiler:

    Code: Select all

    reserve_hd1:
    
        cli
        cmp   [hd1_status],0
        je    reserve_ok1
    
        sti
        call  change_task
        jmp   reserve_hd1
  • Mario
    Эта функция не экспортируется.
  • Who is online

    Users browsing this forum: No registered users and 0 guests