Hi Devin, On 30. 09. 21 14:56, Devin Steffler wrote: > Hi Rudolf, > > I have the ACPI utilities working in QNX as well (i.e. acpidump, acpixtract, iasl, etc). The problem is I don't know what to look for in the FADT. You need to look for SMI_CMD (likely ioport 0xb2) and ACPI_ENABLE fields. > So far I have only seen this happen on Lenovo based x86 PCs. For example, the one that I have on hand is a Lenovo ThinkBook 14 Gen 2 laptop. If I boot the ThinkBook into QNX, then I can play a beep over the PC speaker just fine. However, after running ACPICA, then I can no longer play a beep over the PC speaker anymore on this device. So Intels? > How can I check for 8254 clock gating? In the datasheet of Intel, search the southbridge for "8254" + look for some "gating" around. It is quite badly documented and sometimes under NDA only. Thanks, Rudolf > delay is a QNX call to sleep for the specified time in ms. > > Thanks, > Devin > > On Wed, Sep 29, 2021 at 3:58 PM Rudolf Marek > wrote: > > Hi Devin, > > Dne 28. 09. 21 v 21:04 Devin Steffler napsal(a): >> Hello, I am using ACPICA to read battery information in QNX. That part is working great so far. However, now some code that is being used to make beeps via the PC speaker stopped working. Strangely, this code stops working on a few devices only after ACPICA runs. > > You mean same device with same mainboard / BIOS version? > > Maybe SMI and/or ACPI bytecode turns on 8254 clock gating? You can > > try to disassemble the ACPI DSDT/SSDT bytecode and look for it. > > What you can also do, is to try out to send ACPI enable SMI command without > > enabling ACPICA and see if it breaks. You can read the I/O port address > > and data enable command from FADT. To disassemble the ACPI tables > > use acpidump acpixtract and iasl utillites in linux. > >> What could my ACPICA be doing (or failing to do) that could cause the beeps to stop working with the code below? Is the PIT being disabled somehow? I guess I'll need to learn more about the PIT and how to check its status to see if it's being disabled after ACPICA runs. Here's example code for QNX to generate a beep using the PC speaker: // ----------------------------------------------- #include #include #include int main(void) { ThreadCtl( _NTO_TCTL_IO, 0 ); // get I/O permissions // start a beep int freq = 1000; int scale = 1193046 / freq; out8(0x43, 0xb6); out8(0x42, scale & 0xff); out8(0x42, scale >> 8); out8(0x61, in8(0x61) | 3); > > you can also try to see if your assembly for out8 is correct and maybe not re-ordered > > by the compiler or that your asm clobber list is correct (same for in8) > >> // let the beep play for a second delay(1000); > > delay is an OS service right? > > Thanks, > > Rudolf >