Jump to content

Can I disable MSI interrupts in AppleALC similar to VoodooHDA?

1 post in this topic

Recommended Posts

Hello, like some others, I am also new to the forum and can't post to this thread on AppleALC.  Oh well...  I asked this on Reddit and didn't get an answer so I will try here.


I am trying to run High Sierra on a Virtual Machine in Linux using QEMU and KVM, passing through a secondary graphics card to the guest operating system.  I have an old nVidia NVS 300 card based on the GT218 architecture (Tesla 2.0). PCI ID is 10de:10d8.  Graphics and sound for this card work great passed through to a Windows 10 VM. The Tesla architecture also has native Apple driver support under macOS High Sierra. Graphics indeed work fine under Opencore with native drivers, but I don't get any HDMI sound. That is the problem I am trying to get to the bottom of.


If I don't load AppleALC, macOS loads up nice and quick in my Linux KVM virtual machine but I get no sound, nor any sound devices in the sound panel. If I load AppleALC, macOS suddenly takes around 20 minutes to boot. Depending on various things that I try, I'll sometimes see sound devices but only get a second or two of sound output before the machine hangs up.


Poking around in other forums, people using Clover and VoodooHDA got this architecture to work but the fix seems to be in setting a key called AllowMSI to false in the IOKitPersonalities section of VoodooHDA's Info.plist.





Note that with AppleALC.kext loaded, I am able to navigate with IORegistryExplorer to HDAU@0,1 and this shows a property of "IOPCIMSIMODE" set to True. Tried to set it to false but it doesn't let me, of course.


The code in VoodooHDA's tranc/VoodooHDADevice.cpp to deal with this function looks like this, by the way (though I have mangled the formatting)...

if (vendorId == NVIDIA_VENDORID &&  !OSDynamicCast(OSBoolean, getProperty(kVoodooHDAAllowMSI))) {

	 * Disable MSI for NVIDIA controller if not in Info.plist.         
	 *   Known to have problems with MSI (Quirk from HDAC)
	mAllowMSI = false;


	IOService* _provider = getProvider();

	mInterruptSource =IOFilterInterruptEventSource::filterInterruptEventSource(this, (IOInterruptEventAction) &VoodooHDADevice::interruptHandler, (IOFilterInterruptEventSource::Filter) &VoodooHDADevice::interruptFilter, _provider, findInterruptIndex(_provider, mAllowMSI));



So the question is, is there a way to disable MSI interrupts to the sound portion of this graphics card using AppleALC and Opencore?  There seems to be no such support in AppleALC's Info.plist.  And please don't suggest I get a new video card or USB dongle - I'm just doing this for fun and don't want to spend any money on it. This should be made able to work. Most of the fun is figuring out how and the satisfaction when it does :-)

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Create New...