Commit Graph
57 Commits
Author SHA1 Message Date
danielandClaude Fable 5 182520a585 feat: vblank IRQ and double-buffered page flip for Intel GPU
Add tear-free scanout to the Intel GPU driver: a second kernel-allocated
scanout buffer, DSPASURF flips latched at vblank, and a vblank interrupt
delivered over MSI (Gen 11+ master/display/pipe IRQ chain) with a
monotonic vblank counter and WaitVblank().

Expose it as SYS_FBFLIP (150): index selects the front buffer, -1
queries support, flags bit0 waits for the flip to latch. fb_map() now
maps buffer 1 right after buffer 0 when flipping is available, and
gui::Framebuffer draws to the off-screen buffer and flips with vsync,
falling back to the direct copy when unsupported.

Scanout is restored to buffer 0 when the flip-owning process exits and
on panic, so the terminal and panic box never land on the invisible
buffer.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-13 21:53:06 +02:00
danielandClaude Fable 5 500020ce47 fix: match Intel HDA controllers enumerated as subclass 0x01
Restricting the IntelHDA PCI match to subclass 0x03 (e0c02f7) hid the
speakers on modern laptops, where the same HDA controller enumerates
as 0x01 (Multimedia audio controller) when the Smart Sound DSP is
enabled. Match any multimedia subclass instead; legacy AC'97 devices
also report 0x01 but expose an I/O-space BAR0, which Probe already
rejects via the ReadBar0 check.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-10 12:41:28 +02:00
danielandClaude Fable 5 928fe0bbed fix: make BT A2DP output exclusive to one process
The A2DP output is a single unmixed PCM stream. A second process
opening audio while a stream was active would reconfigure the SBC
encoder and media clock under the owner and interleave both apps' PCM
into one ring, garbling playback (e.g. launching DOOM destabilized
Music). Add ClaimOutput/ReleaseOutput pid ownership: the first opener
gets the BT sink, later openers fall back to the HDA mixer, and only
the owner can tear the stream down. The scheduler releases ownership
on process exit so a killed app cannot leak the claim.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-10 12:41:17 +02:00
danielandClaude Fable 5 e0c02f76d3 fix: boot failure on VirtualBox legacy-BIOS VMs (AC'97 probed as HDA)
VirtualBox default VMs expose an AC'97 audio controller (8086:2415,
class 04/subclass 01) whose BAR0 is an I/O-space BAR. The IntelHDA
driver matched any Intel multimedia subclass, and ReadBar0 masked the
I/O BAR's port number into a bogus 'physical address' that MapMMIO
panicked on (non-page-aligned), halting boot.

Two fixes:
- IntelHDA now matches only subclass 0x03 (HD Audio); AC'97 (0x01) is
  a different programming model and is not claimed.
- ReadBar0 returns 0 (no usable MMIO BAR) for I/O-space BARs instead
  of handing a port number to MapMMIO.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-08 16:33:54 +02:00
daniel 1d0e8a005e fix: A2DP reconnect fix 2026-07-08 11:57:52 +02:00
danielandClaude Fable 5 c4480a3bf2 feat: reliable Bluetooth pairing, reconnection, and A2DP setup
Four fixes, each a root cause verified on hardware (AX211 + Bose QC Ultra):

1. Link Key Request Reply TRUNCATED: the pending-command queue's params
   buffer was 16 bytes; the reply is 22 (addr 6 + key 16).  The controller
   got 10 key bytes -> every stored-key reconnection failed authentication
   (status 5) since 2026-06-03 (0f16785).  Fresh pairings never touch this
   path, which kept the bug perfectly disguised as a headset quirk.

2. Secure Connections host support (0x0C7A) now enabled: bonds are minted
   as P-256 (Type=7), interoperable with BlueZ's, and SC-bonded peers can
   actually authenticate us.

3. Never write the BD_ADDR override (0xFC31) with the factory address:
   it desyncs the firmware's crypto address from the on-air one and ALL
   SSP pairing fails with status 5.  (The spoofing feature itself was
   already known-cosmetic: the baseband answers pages on the factory
   address regardless.)  import-bluez-bond.sh now removes the override.

4. A2DP channel setup: wait for Encryption Change before dialing L2CAP
   (post-SSP sinks ignore unencrypted CONN_REQ), and LISTEN 2.5s first --
   on reconnection the sink dials AVDTP itself and ignores our dials while
   doing so.  Ends the historical connRsp=FFFF retry-then-give-up failures.

Plus: queued security replies now log delivery + controller status.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-07 19:46:02 +02:00
danielandClaude Fable 5 b39a5f8739 feat: auth-failure bond recovery + BlueZ bond import for dual-boot BT
- On Authentication Failure (Auth Complete status!=0 -- previously swallowed
  silently -- or disconnect reason 0x05), drop the stale local link key so
  the next connect falls back to fresh SSP pairing instead of failing
  identically forever (BlueZ behavior).  Log the link-key exchange.

- scripts/import-bluez-bond.sh: copy a BlueZ link key into the MontaukOS
  key store on the installed root.  Root cause: the AX211 BD_ADDR override
  (0xFC31) is cosmetic -- the baseband answers pages on the FACTORY address,
  so peers see Linux and MontaukOS as ONE device with ONE key slot, and each
  OS's pairing clobbers the other's key.  Sharing identity + key ends the
  fight: both OSes reconnect (incl. autoconnect) without re-pairing.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-07 13:44:47 +02:00
danielandClaude Fable 5 77940cf896 feat: fully async Intel BT firmware bring-up + HCI multi-packet event reassembly
The BT firmware download now runs from the idle loop after boot (zero boot
stall), completing the async goal.  What made every earlier deferral attempt
fail was a months-latent HCI-layer bug, not the deferred environment:

  WaitCommandComplete returned after the FIRST USB packet of an event, but
  events larger than the 64-byte interrupt max-packet (like the AX211's
  96-byte FC05 TLV version response) span several packets.  Sending the next
  command while the tail of the previous response was still in flight wedges
  the AX211 bootloader into permanently ignoring commands.  Boot-time flanterm
  rendering added milliseconds between commands and accidentally paced the
  protocol past the race -- which is why the synchronous bring-up always
  worked and every log-suppressed (deferred) bring-up went mute at FC05 #2,
  regardless of scheduling/MSI/xHCI fixes.

  Fix: reassemble multi-packet Command Complete/Status events in the
  transfer callback; the mailbox is marked ready only when the declared
  event length has fully arrived.  This inherently paces command flow and,
  as a bonus, the TLV version read now sees the full response (sbe_type
  present -> ECDSA/RSA selection is no longer a guess).

Also: per-slot EP0 completion tracking in the xHCI (a waiting ControlTransfer
can no longer be released early by another device's EP0 completion).

Verified on the AX211: instant boot, background download, real BD_ADDR.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-07 12:31:30 +02:00
danielandClaude Fable 5 72f6c4449c feat: fast Intel BT firmware download (bulk-pipelined payload, no timeout burns)
Two fixes, verified on the AX211 (8087:0033), ibt-1040-0041.sfi, 720 KB:

1. TryHeader waited 1500+2000 ms for secure-send results after the CSS and
   key/signature sends, but on success this controller stays SILENT until
   the end of the whole download (traced) -- both timeouts always burned in
   full.  A rejection arrives within milliseconds, so 250 ms windows lose
   nothing and save ~3 s per cold boot.

2. The payload now goes over the bulk OUT endpoint with up to 7 fragments
   in flight (the btusb bootloader path for 0xFC09), replacing ~2900
   synchronous 3-stage EP0 control transfers.  Headers stay on EP0; the
   ACL TX DMA ring is reused (no ACL header, no NOCP credit accounting).
   DrainBulkTx() ensures all bytes reach the controller before waiting for
   the download-complete result.

Also in this branch since main: IRQ-safe BT-TRACE ring (KernelLogStream in
TransferCallback deadlocked on the terminal Mutex from MSI context), xHCI
interrupt-IN ZLP length fix, always-re-arm of the BT event pipe,
InPollContext same-core owner check, TLV version read retry.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-07 11:52:21 +02:00
daniel 8fdc10953b wip: BT firmware debugging 2026-07-06 18:17:06 +02:00
danielandClaude Fable 5 8bf3ceb457 wip: async BT firmware download attempt — DO NOT MERGE, breaks AX211 bring-up
Deferring the Intel BT firmware download off the boot path made the AX211
bootloader stop answering after the first FC05; even the final synchronous
revert freezes boot, so one of the 'neutral' fixes kept in this diff breaks
the bring-up on its own (candidates: BT-TRACE logging inside TransferCallback,
unconditional interrupt-IN re-queue after error completions on a halted EP,
xHCI interrupt-IN ZLP len fix interacting with HID, InPollContext owner
check).  Full history + next experiments in memory notes, 2026-07-05/06.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-06 15:46:06 +02:00
daniel daa17a325f fix: RTL-SDR bug fixes and accuracy improvements 2026-07-03 10:36:41 +02:00
daniel 108538f60c feat: add RTL-SDR, R820t drivers, radio APIs, and sdr demo tool 2026-06-22 11:49:16 +02:00
daniel 121f3f2081 cleanup: Bluetooth/A2DP code cleanup 2026-06-21 15:01:37 +02:00
daniel fc106e6c71 cleanup: rename Graphics:Cursor => Graphics::Framebuffer 2026-06-21 10:42:27 +02:00
daniel 43d43ac9ea cleanup: namespace Montauk (capital M) => montauk::abi 2026-06-16 09:09:16 +02:00
daniel b6ac5ac994 feat: allow MAC spoofing in Bluetooth stack, show paired devices in Bluetooth app 2026-06-16 08:49:06 +02:00
daniel 2bcc19f0fc fix: prevent NVMe completion-queue desync from breaking reads 2026-06-13 17:41:11 +02:00
daniel f7c69c4ae4 feat: A2DP reliability improvements 2026-06-12 11:48:24 +02:00
daniel e0c8787727 feat: A2DP bluetooth audio working 2026-06-10 16:00:42 +02:00
daniel f0943d675f feat: disconnect Bluetooth devices, flush disks on shutdown/reboot, display progress in login.elf window 2026-06-06 18:27:19 +02:00
daniel 0f16785c9f feat: Intel BT firmware download, A2dp & Bluetooth audio progress 2026-06-03 18:05:17 +02:00
daniel 2991acfa80 fix: fix freeze upon closing Music app 2026-05-25 21:34:05 +02:00
daniel 5d6ad0ae9b fix: fix audio Mixer freeze 2026-05-25 11:35:03 +02:00
daniel 77ab2d004f fix: fix login screen hang when no USB input device plugged in 2026-05-24 14:25:13 +02:00
daniel 104b89d4ed feat: Xhci BIOS-to-OS handoff 2026-05-24 10:23:16 +02:00
daniel f95dc771a6 fix: audio stack bug fixes 2026-05-19 18:36:22 +02:00
daniel de4e996f3f feat: audio stack performance improvements 2026-05-19 18:13:37 +02:00
daniel 8b8c8cee95 feat: audio mixer, Audio app, fix Installer crash 2026-05-19 07:48:09 +02:00
daniel 52bbacb60b fix: USB mass storage polish 2026-05-18 17:53:10 +02:00
daniel c20579afd3 feat: support for USB mass storage devices, hotplugging 2026-05-18 17:47:12 +02:00
daniel af48ab0e1e feat: kernel network statistics reporting, new Network configuration applet 2026-05-03 10:45:33 +02:00
daniel 38b1f8a7ef feat: further kernel power and power optimizations 2026-04-21 20:51:12 +02:00
daniel 7d6f001659 feat: various power and thermal optimizations, fix Printers app regression 2026-04-20 16:00:52 +02:00
daniel 55d7c1ab0e feat: new calculator UI, video app icon, Super + Space search window 2026-03-28 23:31:43 +01:00
daniel 9b4dfe3e0e fix: improve scheduling, memory, timer implementations 2026-03-24 07:40:37 +01:00
daniel 41ad1f6404 feat: Symmetric Multiprocessing, text editor improvements, merge doom libc, implement math functions 2026-03-23 20:09:11 +01:00
daniel 1a9fc0724c feat: Intel GPU fixes, add tcc compiler, spreadsheet improvements, paint app, file manager improvements 2026-03-21 17:35:16 +01:00
daniel 4c7efa3203 feat: expanded ACPI support, initial support for S3 sleep 2026-03-15 00:55:19 +01:00
daniel 9f54e4957d feat: Intel HDA audio driver, audio streaming syscalls, userspace Music app, fixes and improvements, rudimentary Bluetooth support 2026-03-10 17:14:33 +01:00
daniel 7617419640 feat: MontaukOS installer app, toml config, app directory with manifests, and more 2026-03-08 12:06:29 +01:00
daniel b540a43f39 feat: GPT, FAT32 driver, disks app, userspace adapted for multiple drives, and more 2026-03-07 15:58:27 +01:00
daniel 663567fbb3 feat: Ahci, ACPI shutdown 2026-03-06 23:39:35 +01:00
daniel 5dded4bda0 feat: graphics/net PnP, keyboard driver improvements 2026-03-04 21:10:34 +01:00
daniel cd8f756574 cleanup: move some logic out of kernel Main.cpp into separate files/functions 2026-03-03 20:30:59 +01:00
daniel e4f5cd7664 fix: scrolling direction consistency 2026-02-26 18:36:04 +01:00
daniel 2130334779 fix: GUI and kernel fixes, Wikipedia app rewrite, among other things 2026-02-21 11:08:11 +01:00
daniel 9e191f64a9 feat: TrueType (TTF) font rendering, many new desktop applications and DOOM support, among other improvements 2026-02-20 22:46:41 +01:00
daniel 0106a9e881 feat: Desktop improvements 2026-02-20 14:13:25 +01:00
daniel 887a61bf33 feat: Fix USB mouse support, GUI wkipedia app, icon refresh, file manager improvements, more 2026-02-20 11:33:06 +01:00