❌

Lees weergave

3.0.1

CSMWrap Version 3.0.1

Changelog since CSMWrap 3.0.0

Bug Fixes

  • ap_trampoline: Skip APIC disable when x2APIC is active, preventing #GP on systems with locked x2APIC (e.g. Nova Lake xAPIC deprecation).
  • apic: Clear stale vector bits when configuring LINT0/LINT1 for ExtINT/NMI.
  • mptable: Read LAPIC address and version from MSR instead of MADT, fixing x2APIC mode where MMIO LAPIC reads don't work.
  • video: Backport GOP quirks and fixes from Limine - reject PixelBltOnly/unknown pixel formats, validate all-zero PixelBitMask, check PixelsPerScanLine, and calculate correct BPP for non-32bpp PixelBitMask modes.

SeaBIOS

  • mptable: Use x2APIC MSR for APIC version read when in x2APIC mode.

Full Changelog: 3.0.0...3.0.1

  •  

3.0.0

CSMWrap Version 3.0.0

Changelog since CSMWrap 2.1.0

New Features

  • INI configuration file support - CSMWrap now reads an optional csmwrap.ini placed alongside the EFI executable. See README.md for available options.
  • Runtime-configurable serial output - Serial debug is now controlled via the config file instead of a compile-time flag.
  • VGA device selection - A non-primary video card can be selected by PCI address for multi-GPU setups.
  • Verbose mode - Screen output is suppressed by default; banner and panics always shown.

Bug Fixes

  • Fix framebuffer address double-adjustment during BAR relocation - A PCI bridge's prefetchable and non-prefetchable windows could alias after relocation, causing the framebuffer address to be adjusted twice to a wrong address.
  • Fix BIOS proxy helper ready signal race (SeaBIOS) - The helper core now signals ready only after its first mailbox check, eliminating a startup race condition.

Other Changes

  • README.md updated with clearer instructions and new FAQ entries and more.

Full Changelog: 2.1.0...3.0.0

  •  

2.1.0

CSMWrap Version 2.1.0

Changelog since CSMWrap 2.0.0

Bug Fixes

  • Fix heap buffer overflow in uacpi_kernel_io_map() bounds tracking
  • Fix find_table buffer overread and add VBIOS size bounds check
  • Fix SMBIOS 2.1 entry point checksum covering wrong range
  • Fix printf format specifier for EFI_PHYSICAL_ADDRESS on ia32
  • Fix off-by-one page count in thunk data allocation
  • Fix BAR type check to match exactly type 2 (64-bit) instead of any bit-2-set value
  • Fix division by zero in get_nanoseconds_since_boot for sub-1GHz TSC
  • Fix get_nanoseconds_since_boot() intermediate overflow
  • Fix uACPI-to-MADT interrupt flag conversion for PCI link device routing
  • Fix ExitBootServices retry to re-call GetMemoryMap to avoid stale map key
  • Guard vbios_loc memcpy against NULL
  • Guard __builtin_ffs against zero PixelBitMask to avoid bogus mask position
  • Reject extended config space offsets in PIO fallback
  • Use -1ULL for EfiAcpiAddressRangeHole to ensure consistent width on ia32
  • Widen get_unix_epoch nanosecond parameter to uint32_t to match EFI_TIME
  • Re-hide P2SB before early return on ia32 BARH overflow

New Features & Enhancements

  • Add TSC calibration, delay functions, and CPUID-based frequency detection (time.c/h)
  • Use TSC-based timing for uACPI instead of low-resolution RTC
  • Add RDNA 4 (Navi 48/44, 0x75xx) to AMD discrete GPU detection
  • Add Lunar Lake (model 0xBD) PIT clock gating workaround
  • Initialize CMOS memory registers for legacy software compatibility
  • Add panic() function
  • Add bounds check for PCI interrupt routing entries
  • Warn when pci_early_initialize fails
  • Check acpi_init() return value

IOMMU

  • Disable VT-d interrupt remapping and queued invalidation
  • Add pause instruction to VT-d polling loops
  • Remove VT-d polling timeout and unnecessary AMD-Vi polling

Legacy Handoff

  • Zero CR3, TR, and GDTR before legacy handoff
  • Mask stale LVT entries before legacy handoff
  • Send second SIPI per Intel MP spec INIT-SIPI-SIPI sequence
  • Hardware-disable helper core LAPIC to prevent stale IPIs from legacy OS
  • Remove all MADT entries for helper core (both LAPIC and x2APIC)
  • Limit helper core selection to xAPIC-addressable APIC IDs (<255)
  • Allocate helper stack as RuntimeServicesData to prevent OS reuse
  • Align helper signature to 8 bytes and use aligned 64-bit scan
  • Move mailbox out of EBDA
  • Invalidate ConOut after ExitBootServices to prevent stale access

Dependencies

  • Update uACPI from 3.2.0 to 4.0.0
  • Update SeaBIOS submodule

Code Quality

  • Convert CRLF line endings to LF
  • Replace VLA swap buffer in qsort with fixed-size chunked copy
  • Use uintptr_t comparison in memmove to avoid relational pointer UB
  • Cache CLFLUSH CPUID check to avoid repeated serializing instruction
  • Drop CPUID 0x16 TSC frequency fallback
  • Round up delay_us() tick count for sub-MHz timer frequencies
  • Check add_bar return value for bridge window BARs
  • Remove dead type==0 check in e820 (convert_memory_type never returns 0)
  • Remove unused AssignedDriveNumber (SeaBIOS uses BootPriority only)
  • Fix misleading PAM0 comments
  • Remove double semicolon in PCI code

Full Changelog: 2.0.0...2.1.0

  •  

2.0.0

CSMWrap Version 2.0.0

Major New Features

  • PCI BAR Relocation - Automatically relocate PCI BARs from >4GB to <4GB, eliminating the need to disable "Above 4G Decoding" in UEFI settings.
  • PCIe Resizable BAR Support - Shrink large BARs (e.g., 4GB GPU VRAM) to 256MB using PCIe ReBAR capability, eliminating the need to disable "Resizable Bar/Smart Access Memory" in UEFI settings.
  • BIOS Proxy Helper Core - Dedicate an AP for BIOS calls from the BSP. This allows usage of CSMWrap with legacy OSes calling BIOS routines from Virtual 8086 Mode and other improvements.
  • MP Table Generation - Generate Intel MPS 1.4 tables from ACPI MADT for legacy OSes that don't support ACPI.
  • SMBIOS 3.0 β†’ 2.x Synthesis - Generate SMBIOS 2.x entry point when only 3.0 is available.
  • Boot Device Detection - Auto-detect boot drive and build BBS table with correct priority.

Platform Support

  • IOMMU Disable - Automatically disable Intel VT-d and AMD-Vi before legacy OS handoff.
  • x2APIC Handling - Transition to xAPIC mode if possible or configure ExtINT passthrough for PIC interrupts.
  • Intel PIT Workaround - Fix timer interrupts on Arrow Lake, Meteor Lake, Panther Lake.
  • AMD RDNA+ Detection - Force SeaVGABIOS for RDNA/RDNA2/RDNA3 GPUs with broken legacy OpROMs.

Video

  • Flanterm Integration - Faster, better video output via Flanterm library.
  • GOP Modesetting Fixes - Handle Intel iGPU where default mode has FrameBufferBase=0.
  • VGA Arbitration - Only claim VGA routing when using OpROM path.

Many other minor fixes and improvements!

Full Changelog: 1.3.0...2.0.0

  •  

1.3.0

Many bug fixes and improvements, and reapplication of (fixed versions of) previously reverted commits.

Add support for loading a custom VGA Video BIOS from \EFI\CSMWrap\vgabios.bin, if present.

Merged pull requests

New Contributors

  • @Gelip made their first contribution in #92

Full Changelog: 1.2.3...1.3.0

  •  
❌