From 391bf22d7945a894afb034e4ccb61fc2b8d151d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Wed, 14 Jan 2009 23:26:10 +0000 Subject: [PATCH] try to complete snooping enablement git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28906 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../drivers/audio/hda/hda_controller.cpp | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp b/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp index 7a7bd5791c..7deaf3a7a7 100644 --- a/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp +++ b/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp @@ -49,13 +49,13 @@ static const struct { static inline void -update_pci_register(hda_controller* controller, uint8 reg, uint8 mask, uint8 value) +update_pci_register(hda_controller* controller, uint8 reg, uint32 mask, uint32 value, uint8 size) { uint8 tmp = (gPci->read_pci_config)(controller->pci_info.bus, - controller->pci_info.device, controller->pci_info.function, reg, 1); + controller->pci_info.device, controller->pci_info.function, reg, size); (gPci->write_pci_config)(controller->pci_info.bus, controller->pci_info.device, controller->pci_info.function, - reg, 1, (tmp & mask) | value); + reg, size, (tmp & mask) | value); } @@ -737,18 +737,28 @@ hda_hw_init(hda_controller* controller) goto no_irq; /* TCSEL is reset to TC0 (clear 0-2 bits) */ - update_pci_register(controller, PCI_HDA_TCSEL, PCI_HDA_TCSEL_MASK, 0); + update_pci_register(controller, PCI_HDA_TCSEL, PCI_HDA_TCSEL_MASK, 0, 1); /* Enable snooping for ATI and Nvidia, right now for all their hda-devices, but only based on guessing. */ switch (controller->pci_info.vendor_id) { case NVIDIA_VENDORID: update_pci_register(controller, NVIDIA_HDA_TRANSREG, - NVIDIA_HDA_TRANSREG_MASK, NVIDIA_HDA_ENABLE_COHBITS); + NVIDIA_HDA_TRANSREG_MASK, NVIDIA_HDA_ENABLE_COHBITS, 1); + update_pci_register(controller, NVIDIA_HDA_ISTRM_COH, + ~NVIDIA_HDA_ENABLE_COHBIT, NVIDIA_HDA_ENABLE_COHBIT, 1); + update_pci_register(controller, NVIDIA_HDA_OSTRM_COH, + ~NVIDIA_HDA_ENABLE_COHBIT, NVIDIA_HDA_ENABLE_COHBIT, 1); break; case ATI_VENDORID: update_pci_register(controller, ATI_HDA_MISC_CNTR2, - ATI_HDA_MISC_CNTR2_MASK, ATI_HDA_ENABLE_SNOOP); + ATI_HDA_MISC_CNTR2_MASK, ATI_HDA_ENABLE_SNOOP, 1); + break; + case INTEL_VENDORID: + if (controller->pci_info.device_id == INTEL_SCH_DEVICEID) { + update_pci_register(controller, INTEL_SCH_HDA_DEVC, + ~INTEL_SCH_HDA_DEVC_SNOOP, INTEL_SCH_HDA_DEVC_SNOOP, 2); + } break; }