Commit 1b33ed1689 for qemu.org

commit 1b33ed1689a1055e8c7c0faa91795b2a7e434e2e
Author: BALATON Zoltan <balaton@eik.bme.hu>
Date:   Wed Feb 18 18:40:14 2026 +0000

    hw/usb/hcd-ohci: Implement frame number overflow event

    According to the USB OHCI specification section 6.5.6
    ("FrameNumberOverflow Event"), when bit 15 of the frame count changes
    (either from 1 to 0 or 0 to 1) a FrameNumberOverflow interrupt should
    be generated.

    This fixes usb-audio on mac99,via=pmu with MacOS 9.

    Resolves: https://gitlab.com/qemu-project/qemu/-/issues/3274
    Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
    Tested-by: Elisey Konstantinov <elisey.konstantinov@gmail.com>
    Message-id: 20260212185425.2F854596A29@zero.eik.bme.hu
    [PMM: added brief comment, tweaked commit message]
    Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
    Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

diff --git a/hw/usb/hcd-ohci.c b/hw/usb/hcd-ohci.c
index c7e9c71903..1aeed9286f 100644
--- a/hw/usb/hcd-ohci.c
+++ b/hw/usb/hcd-ohci.c
@@ -1246,6 +1246,10 @@ static void ohci_frame_boundary(void *opaque)
     hcca.frame = cpu_to_le16(ohci->frame_number);
     /* When the HC updates frame number, set pad to 0. Ref OHCI Spec 4.4.1*/
     hcca.pad = 0;
+    /* FrameNumberOverflow happens when bit 15 of frame number changes */
+    if (ohci->frame_number == 0x8000 || ohci->frame_number == 0) {
+        ohci_set_interrupt(ohci, OHCI_INTR_FNO);
+    }

     if (ohci->done_count == 0 && !(ohci->intr_status & OHCI_INTR_WD)) {
         if (!ohci->done) {