From 1b33ed1689a1055e8c7c0faa91795b2a7e434e2e Mon Sep 17 00:00:00 2001 From: BALATON Zoltan Date: Wed, 18 Feb 2026 18:40:14 +0000 Subject: [PATCH] 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 Tested-by: Elisey Konstantinov Message-id: 20260212185425.2F854596A29@zero.eik.bme.hu [PMM: added brief comment, tweaked commit message] Signed-off-by: Peter Maydell Reviewed-by: Peter Maydell --- hw/usb/hcd-ohci.c | 4 ++++ 1 file changed, 4 insertions(+) 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) {