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

Drivers for sound cards
  • yogev_ezra wrote:Может это глюк в Linux, можно его Device ID? Типа 10ec:0259 или какой?

    Code: Select all

    00:1b.0 0403: 8086:27d8 (rev 02)
            Subsystem: 1043:841c
            Flags: bus master, fast devsel, latency 0, IRQ 42
            Memory at f7cf8000 (64-bit, non-prefetchable) [size=16K]
            Capabilities: [50] Power Management version 2
            Capabilities: [60] MSI: Enable+ Count=1/1 Maskable- 64bit+
            Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00
            Capabilities: [100] Virtual Channel <?>
            Capabilities: [130] Root Complex Link <?>
            Kernel driver in use: HDA Intel
    00: 86 80 d8 27 06 04 10 00 02 00 03 04 08 00 00 00
    10: 04 80 cf f7 00 00 00 00 00 00 00 00 00 00 00 00
    20: 00 00 00 00 00 00 00 00 00 00 00 00 43 10 1c 84
    30: 00 00 00 00 50 00 00 00 00 00 00 00 04 01 00 00
    

    Code: Select all

    00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 02)
            Subsystem: ASUSTeK Computer Inc. Device 841c
            Flags: bus master, fast devsel, latency 0, IRQ 42
            Memory at f7cf8000 (64-bit, non-prefetchable) [size=16K]
            Capabilities: [50] Power Management version 2
            Capabilities: [60] MSI: Enable+ Count=1/1 Maskable- 64bit+
            Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00
            Capabilities: [100] Virtual Channel <?>
            Capabilities: [130] Root Complex Link <?>
            Kernel driver in use: HDA Intel
    00: 86 80 d8 27 06 04 10 00 02 00 03 04 08 00 00 00
    10: 04 80 cf f7 00 00 00 00 00 00 00 00 00 00 00 00
    20: 00 00 00 00 00 00 00 00 00 00 00 00 43 10 1c 84
    30: 00 00 00 00 50 00 00 00 00 00 00 00 04 01 00 00
    
    Или не то?
  • Foldl: 1043:841c это типа "Realtek HDA codec ALC269 который засунут в железо от ASUS" (не смог точнее сформулировать :roll: ). Полный код: 10EC:0269:841C:1043
    Тогда думаю, Asper может как-то по-другому его назвать в драйвере HDA, чтобы отличить его от Realtek HDA codec ALC269 не засунутого в ASUS :wink:

    Asper: Двоеточие мигает - уже хорошо, значит, не завис 8) Будем искать, как клавиатуру или мышку присобачить.
  • Asper, I wrote the information about infinity sound system on the wiki, here: http://wiki.kolibrios.org/wiki/Writing_ ... _KolibriOS
    "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein
  • Атауальпа
    Похоже щелчки не так просто устранить как казалось. Вызываю azx_get_position в обработчике прерываний hda_irq. На M4A78-VM всегда выдаёт значение LPIB=0, т.е прерывание сработало как положено по окончанию буфера, на RDC же между LPIB=0 с различной периодичностью проскакивают LPIB=0x4CC и др. значения, что свидетельствует о слишком раннем срабатывании прерывания до окончания буфера (напоминаю, что размер буфера=0x4000).
    При этом загрузка процессора на M4A78-VM 0%, а на RDC колеблется от 2% до 30%. Видимо на пиковой нагрузке и срабатывает "раннее прерывание" дающее щелчок. Тут ещё видимо проблема в низкой работе с устройствами хранения информации и соответственно в работе DMA.
    Пробовал различные способы, но пока ничего толкового не выходит. :( Буду работать дальше.

    yogev_ezra
    yogev_ezra wrote:Foldl: 1043:841c это типа "Realtek HDA codec ALC269 который засунут в железо от ASUS" (не смог точнее сформулировать ). Полный код: 10EC:0269:841C:1043
    Тогда думаю, Asper может как-то по-другому его назвать в драйвере HDA, чтобы отличить его от Realtek HDA codec ALC269 не засунутого в ASUS
    А зачем? DeviceID=0269 значит ALC269, а учет Subsystem и конкретных моделей в драйвере на мой взгляд ни к чему, т.к. в отличие от ALSA я пока не использую патчей и все конфигурации пока работают с единым драйвером.

    hidnplayr
    Thanks! I think I need to written some new sections to this article. :wink:
  • Больше похоже на запаздывание обработчика. Отсюда и щелчки.
  • Serge
    Это как? Я полагаю, что пришло прерывание сработал обработчик. Или сам обработчик слишком долго выполняется? В таком случае единственое, что может там долго срабатывать это callback функция, или нет?
  • Asper wrote:0x4CC и др. значения, что свидетельствует о слишком раннем срабатывании прерывания до окончания буфера (напоминаю, что размер буфера=0x4000)
    Когда я делал драйвер для fm801, была похожая ситуация. Исправилась, после того, как я убрал заполнение второго буфера в процедуре старта проигрывания. Писал тут.
  • tsdima
    Я помню то твоё сообщение. Только я вообще не заполняю буфер в play.

    Code: Select all

    align 4
    play:
    	   call  azx_stream_start
    	   xor	 eax, eax
    	   ret
    

    Code: Select all

    ; start a stream
    proc  azx_stream_start
    	   push  eax edx
    
    	   ; enable SIE
    	   mov	 edx, ICH6_REG_INTCTL
    	   call  azx_readl
    
    	   or	 eax, 0xC0000000 ;Asper+
    	   or	 eax, 1 shl 4  ; Asper: output stream 1
    	   mov	 edx, ICH6_REG_INTCTL
    	   call  azx_writel
    	   ; set DMA start and interrupt mask
    	   mov	 edx, ICH6_REG_SD_CTL + SDO0_SD_OFFSET
    	   call  azx_readb
    
    	   or	  al, SD_CTL_DMA_START or SD_INT_MASK
    
    	   mov	 edx, ICH6_REG_SD_CTL + SDO0_SD_OFFSET
    	   call  azx_writeb
    
    	   pop	 edx eax
    	   ret
    endp
    
    Буфер заполняется только в обработчике прерываний.
  • HD Audio
    This is a simple example of HD Audio integrated into the motherboard. It has Back and Front panels with audio jacks, several codecs (maximum 15 codecs allowed). The first codec contains Audio (AFG), Modem(MFG) and HDMI function groups.
    Colored squares with letters inside are widgets of the codec's AFG.
    B - Beep Generator widget
    P - Power Control widget
    V - Vendor defined audio widget
    O - Audio Output widget
    I - Audio Input widget
    M - Audio Mixer widget
    S - Audio Selector widget
    Pin - Pin Complex widget

    Pink lines mean audio input streams. Green lines mean audio output streams.

    Output of sound.
    HDA Controller's DMA engine(s) get streams of samples from output buffers in the memory and send it through the HDA Link to the codecs' Audio Output widgets which converts samples from digital to analog, than these streams are passed through the output path to the output Pin Complexes, which are connected directly to the output jacks and finally sound outputed by Output Devices.

    Input of sound.
    Audio analog signal come from Input Devices to the jacks which are connected directly to the Pin Complexes and than these stream is passed through the input path to the Audio Input widgets. Audio Input widgets converts analog signal to digital samples and send input streams to the HDA Controller's DMA engine(s) through HDA Link. Finally HDA Controller's DMA engine(s) put input streams of samples to the input buffers in the Memory.
    Attachments
    HD Audio Architecture Example
    codec.PNG (91.78 KiB)
    HD Audio Architecture Example Viewed 4854 times
  • Asper wrote:Похоже щелчки не так просто устранить как казалось. Вызываю azx_get_position в обработчике прерываний hda_irq. На M4A78-VM всегда выдаёт значение LPIB=0, т.е прерывание сработало как положено по окончанию буфера, на RDC же между LPIB=0 с различной периодичностью проскакивают LPIB=0x4CC и др. значения, что свидетельствует о слишком раннем срабатывании прерывания до окончания буфера (напоминаю, что размер буфера=0x4000).
    При этом загрузка процессора на M4A78-VM 0%, а на RDC колеблется от 2% до 30%. Видимо на пиковой нагрузке и срабатывает "раннее прерывание" дающее щелчок. Тут ещё видимо проблема в низкой работе с устройствами хранения информации и соответственно в работе DMA.
    Пробовал различные способы, но пока ничего толкового не выходит. :( Буду работать дальше.
    Asper - если Вы чувствуете, что проблема в железе, то я могу попробовать выяснить это у производителя (в Linux ALSA же как-то работает). Но оставлю это на крайний случай, так как они очень неохотно отвечают на вопросы. Кстати, пользователи Linux тоже жаловались на большую загрузку процессора при проигрывании музыки - порядка 25%.
  • Asper

    Прерывание может быть маскировано. В ядре много таких участков кода. Но надо проверить чередование буферов ДМА. Для АС97 я закладывался на запаздывание обратчика, поэтому список BDL составлен так, что контроллер сам выберет уже готовый буфер. Щелчи возникали при нарушении чередования, если звук микшировался в уже проигрывающийся буфер. Собственно это всегда было единственной причиной щелчков. На новых компьютерах их можно и не заметить. ДМА считывает 128 или 256 байт и сразу выдаёт прерывание если это последние байты в буфере. На быстрой системе обработчик успеет заполнить начало следуещего буфера до того как его считает ДМА.
  • Bug HD Audio драйвера (или Quake :roll: ) - на компьютере с установленным и работающим драйвером версии 0.17fd при запуске Quake пишет в логе, что звуковая карта не обнаружена, и звуки во время игры не издаёт. С игрой Doom всё в порядке и звук есть. В DosBox тоже звук есть. Логи прилагаю.

    Code: Select all

    SDL_SetError: No available audio device
    1162k surface cache
    Sound Initialization
    PackFile: /bd0/2/QUAKE/pak0.pak : gfx/conback.lmp
    Couldn't open SDL audio: No available audio device
    S_Startup: SNDDMA_Init failed.
    Attachments
    BOARDLOG.TXT (17.47 KiB)
    Downloaded 224 times
    log_doom.txt (7.09 KiB)
    Downloaded 222 times
  • Подопытный Asus EeePC 701, для чистоты эксперимента снес xandros (были проблемы, не виделись некоторые файлы из-под
    колибри) - поставил xp на fat32, все работает , звук чистый без щелчков с intel_hda_017.
  • yogev_ezra

    Это версия для Менуэт. Quake под Колибри никто не делал.
  • Who is online

    Users browsing this forum: No registered users and 10 guests