v86 0.4.0 → 0.5.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Readme.md +56 -111
- package/build/libv86-debug.js +12680 -0
- package/build/libv86-debug.mjs +732 -0
- package/build/libv86.js +710 -0
- package/build/libv86.mjs +637 -0
- package/build/v86-debug.wasm +0 -0
- package/build/v86-fallback.wasm +0 -0
- package/build/v86.wasm +0 -0
- package/package.json +12 -35
- package/bios/.gitignore +0 -1
- package/bios/COPYING.LESSER +0 -165
- package/bios/bochs-bios.bin +0 -0
- package/bios/bochs-vgabios.bin +0 -0
- package/bios/fetch-and-build-seabios.sh +0 -13
- package/bios/seabios/.config +0 -113
- package/bios/seabios/.config.old +0 -114
- package/bios/seabios/.gitignore +0 -4
- package/bios/seabios/COPYING +0 -674
- package/bios/seabios/COPYING.LESSER +0 -165
- package/bios/seabios/Makefile +0 -286
- package/bios/seabios/README +0 -17
- package/bios/seabios/docs/Build_overview.md +0 -104
- package/bios/seabios/docs/Contributing.md +0 -20
- package/bios/seabios/docs/Debugging.md +0 -111
- package/bios/seabios/docs/Developer_Documentation.md +0 -25
- package/bios/seabios/docs/Developer_links.md +0 -86
- package/bios/seabios/docs/Download.md +0 -27
- package/bios/seabios/docs/Execution_and_code_flow.md +0 -178
- package/bios/seabios/docs/Linking_overview.md +0 -160
- package/bios/seabios/docs/Mailinglist.md +0 -8
- package/bios/seabios/docs/Memory_Model.md +0 -253
- package/bios/seabios/docs/README +0 -5
- package/bios/seabios/docs/Releases.md +0 -482
- package/bios/seabios/docs/Runtime_config.md +0 -193
- package/bios/seabios/docs/SeaBIOS.md +0 -17
- package/bios/seabios/docs/SeaVGABIOS.md +0 -39
- package/bios/seabios/out/autoconf.h +0 -117
- package/bios/seabios/out/include/config/acpi/dsdt.h +0 -0
- package/bios/seabios/out/include/config/acpi.h +0 -0
- package/bios/seabios/out/include/config/ahci.h +0 -0
- package/bios/seabios/out/include/config/apmbios.h +0 -0
- package/bios/seabios/out/include/config/ata/dma.h +0 -0
- package/bios/seabios/out/include/config/ata/pio32.h +0 -0
- package/bios/seabios/out/include/config/ata.h +0 -0
- package/bios/seabios/out/include/config/auto.conf +0 -69
- package/bios/seabios/out/include/config/auto.conf.cmd +0 -9
- package/bios/seabios/out/include/config/boot.h +0 -0
- package/bios/seabios/out/include/config/bootorder.h +0 -0
- package/bios/seabios/out/include/config/build/vgabios.h +0 -0
- package/bios/seabios/out/include/config/call32/smm.h +0 -0
- package/bios/seabios/out/include/config/cdrom/boot.h +0 -0
- package/bios/seabios/out/include/config/cdrom/emu.h +0 -0
- package/bios/seabios/out/include/config/debug/level.h +0 -0
- package/bios/seabios/out/include/config/drives.h +0 -0
- package/bios/seabios/out/include/config/entry/extrastack.h +0 -0
- package/bios/seabios/out/include/config/esp/scsi.h +0 -0
- package/bios/seabios/out/include/config/flash/floppy.h +0 -0
- package/bios/seabios/out/include/config/floppy.h +0 -0
- package/bios/seabios/out/include/config/fw/romfile/load.h +0 -0
- package/bios/seabios/out/include/config/hardware/irq.h +0 -0
- package/bios/seabios/out/include/config/kbd/call/int15/4f.h +0 -0
- package/bios/seabios/out/include/config/keyboard.h +0 -0
- package/bios/seabios/out/include/config/lpt.h +0 -0
- package/bios/seabios/out/include/config/lsi/scsi.h +0 -0
- package/bios/seabios/out/include/config/malloc/uppermemory.h +0 -0
- package/bios/seabios/out/include/config/megasas.h +0 -0
- package/bios/seabios/out/include/config/mouse.h +0 -0
- package/bios/seabios/out/include/config/mpt/scsi.h +0 -0
- package/bios/seabios/out/include/config/mptable.h +0 -0
- package/bios/seabios/out/include/config/mtrr/init.h +0 -0
- package/bios/seabios/out/include/config/optionroms.h +0 -0
- package/bios/seabios/out/include/config/override/pci/id.h +0 -0
- package/bios/seabios/out/include/config/pcibios.h +0 -0
- package/bios/seabios/out/include/config/pirtable.h +0 -0
- package/bios/seabios/out/include/config/pmm.h +0 -0
- package/bios/seabios/out/include/config/pmtimer.h +0 -0
- package/bios/seabios/out/include/config/pnpbios.h +0 -0
- package/bios/seabios/out/include/config/ps2port.h +0 -0
- package/bios/seabios/out/include/config/pvscsi.h +0 -0
- package/bios/seabios/out/include/config/qemu/hardware.h +0 -0
- package/bios/seabios/out/include/config/qemu.h +0 -0
- package/bios/seabios/out/include/config/rom/size.h +0 -0
- package/bios/seabios/out/include/config/rtc/timer.h +0 -0
- package/bios/seabios/out/include/config/s3/resume.h +0 -0
- package/bios/seabios/out/include/config/sdcard.h +0 -0
- package/bios/seabios/out/include/config/serial.h +0 -0
- package/bios/seabios/out/include/config/tcgbios.h +0 -0
- package/bios/seabios/out/include/config/threads.h +0 -0
- package/bios/seabios/out/include/config/tristate.conf +0 -4
- package/bios/seabios/out/include/config/tsc/timer.h +0 -0
- package/bios/seabios/out/include/config/use/smm.h +0 -0
- package/bios/seabios/out/include/config/vga/allocate/extra/stack.h +0 -0
- package/bios/seabios/out/include/config/vga/bochs/stdvga.h +0 -0
- package/bios/seabios/out/include/config/vga/bochs.h +0 -0
- package/bios/seabios/out/include/config/vga/did.h +0 -0
- package/bios/seabios/out/include/config/vga/extra/stack/size.h +0 -0
- package/bios/seabios/out/include/config/vga/fixup/asm.h +0 -0
- package/bios/seabios/out/include/config/vga/pci.h +0 -0
- package/bios/seabios/out/include/config/vga/stdvga/ports.h +0 -0
- package/bios/seabios/out/include/config/vga/vbe.h +0 -0
- package/bios/seabios/out/include/config/vga/vid.h +0 -0
- package/bios/seabios/out/include/config/vgahooks.h +0 -0
- package/bios/seabios/out/include/config/virtio/blk.h +0 -0
- package/bios/seabios/out/include/config/virtio/scsi.h +0 -0
- package/bios/seabios/out/include/config/xen.h +0 -0
- package/bios/seabios/out/scripts/kconfig/conf +0 -0
- package/bios/seabios/out/scripts/kconfig/conf.o +0 -0
- package/bios/seabios/out/scripts/kconfig/zconf.hash.c +0 -289
- package/bios/seabios/out/scripts/kconfig/zconf.lex.c +0 -2420
- package/bios/seabios/out/scripts/kconfig/zconf.tab.c +0 -2538
- package/bios/seabios/out/scripts/kconfig/zconf.tab.o +0 -0
- package/bios/seabios/scripts/acpi_extract.py +0 -366
- package/bios/seabios/scripts/acpi_extract_preprocess.py +0 -41
- package/bios/seabios/scripts/buildrom.py +0 -56
- package/bios/seabios/scripts/buildversion.py +0 -134
- package/bios/seabios/scripts/checkrom.py +0 -95
- package/bios/seabios/scripts/checkstack.py +0 -226
- package/bios/seabios/scripts/checksum.py +0 -16
- package/bios/seabios/scripts/encodeint.py +0 -21
- package/bios/seabios/scripts/gen-offsets.sh +0 -17
- package/bios/seabios/scripts/kconfig/.gitignore +0 -22
- package/bios/seabios/scripts/kconfig/Makefile +0 -331
- package/bios/seabios/scripts/kconfig/POTFILES.in +0 -12
- package/bios/seabios/scripts/kconfig/check.sh +0 -13
- package/bios/seabios/scripts/kconfig/conf.c +0 -718
- package/bios/seabios/scripts/kconfig/confdata.c +0 -1250
- package/bios/seabios/scripts/kconfig/expr.c +0 -1168
- package/bios/seabios/scripts/kconfig/expr.h +0 -241
- package/bios/seabios/scripts/kconfig/gconf.c +0 -1542
- package/bios/seabios/scripts/kconfig/gconf.glade +0 -661
- package/bios/seabios/scripts/kconfig/images.c +0 -326
- package/bios/seabios/scripts/kconfig/kxgettext.c +0 -235
- package/bios/seabios/scripts/kconfig/lex.zconf.c +0 -2430
- package/bios/seabios/scripts/kconfig/list.h +0 -131
- package/bios/seabios/scripts/kconfig/lkc.h +0 -200
- package/bios/seabios/scripts/kconfig/lkc_proto.h +0 -57
- package/bios/seabios/scripts/kconfig/lxdialog/.gitignore +0 -4
- package/bios/seabios/scripts/kconfig/lxdialog/BIG.FAT.WARNING +0 -4
- package/bios/seabios/scripts/kconfig/lxdialog/check-lxdialog.sh +0 -87
- package/bios/seabios/scripts/kconfig/lxdialog/checklist.c +0 -332
- package/bios/seabios/scripts/kconfig/lxdialog/dialog.h +0 -257
- package/bios/seabios/scripts/kconfig/lxdialog/inputbox.c +0 -301
- package/bios/seabios/scripts/kconfig/lxdialog/menubox.c +0 -437
- package/bios/seabios/scripts/kconfig/lxdialog/textbox.c +0 -408
- package/bios/seabios/scripts/kconfig/lxdialog/util.c +0 -713
- package/bios/seabios/scripts/kconfig/lxdialog/yesno.c +0 -114
- package/bios/seabios/scripts/kconfig/mconf.c +0 -1036
- package/bios/seabios/scripts/kconfig/menu.c +0 -697
- package/bios/seabios/scripts/kconfig/merge_config.sh +0 -150
- package/bios/seabios/scripts/kconfig/nconf.c +0 -1556
- package/bios/seabios/scripts/kconfig/nconf.gui.c +0 -656
- package/bios/seabios/scripts/kconfig/nconf.h +0 -96
- package/bios/seabios/scripts/kconfig/qconf.cc +0 -1795
- package/bios/seabios/scripts/kconfig/qconf.h +0 -338
- package/bios/seabios/scripts/kconfig/streamline_config.pl +0 -647
- package/bios/seabios/scripts/kconfig/symbol.c +0 -1373
- package/bios/seabios/scripts/kconfig/util.c +0 -157
- package/bios/seabios/scripts/kconfig/zconf.gperf +0 -48
- package/bios/seabios/scripts/kconfig/zconf.hash.c_shipped +0 -289
- package/bios/seabios/scripts/kconfig/zconf.l +0 -363
- package/bios/seabios/scripts/kconfig/zconf.lex.c_shipped +0 -2420
- package/bios/seabios/scripts/kconfig/zconf.tab.c_shipped +0 -2538
- package/bios/seabios/scripts/kconfig/zconf.y +0 -733
- package/bios/seabios/scripts/layoutrom.py +0 -705
- package/bios/seabios/scripts/python23compat.py +0 -14
- package/bios/seabios/scripts/readserial.py +0 -190
- package/bios/seabios/scripts/tarball.sh +0 -36
- package/bios/seabios/scripts/test-build.sh +0 -90
- package/bios/seabios/scripts/transdump.py +0 -53
- package/bios/seabios/scripts/vgafixup.py +0 -96
- package/bios/seabios/src/Kconfig +0 -579
- package/bios/seabios/src/apm.c +0 -215
- package/bios/seabios/src/asm-offsets.c +0 -23
- package/bios/seabios/src/biosvar.h +0 -130
- package/bios/seabios/src/block.c +0 -623
- package/bios/seabios/src/block.h +0 -121
- package/bios/seabios/src/bmp.c +0 -117
- package/bios/seabios/src/boot.c +0 -793
- package/bios/seabios/src/bootsplash.c +0 -255
- package/bios/seabios/src/bregs.h +0 -80
- package/bios/seabios/src/byteorder.h +0 -71
- package/bios/seabios/src/cdrom.c +0 -322
- package/bios/seabios/src/clock.c +0 -506
- package/bios/seabios/src/code16gcc.s +0 -1
- package/bios/seabios/src/config.h +0 -108
- package/bios/seabios/src/cp437.c +0 -275
- package/bios/seabios/src/cp437.h +0 -1
- package/bios/seabios/src/disk.c +0 -779
- package/bios/seabios/src/e820map.c +0 -152
- package/bios/seabios/src/e820map.h +0 -26
- package/bios/seabios/src/entryfuncs.S +0 -165
- package/bios/seabios/src/farptr.h +0 -208
- package/bios/seabios/src/font.c +0 -139
- package/bios/seabios/src/fw/acpi-dsdt-cpu-hotplug.dsl +0 -78
- package/bios/seabios/src/fw/acpi-dsdt-dbug.dsl +0 -26
- package/bios/seabios/src/fw/acpi-dsdt-hpet.dsl +0 -36
- package/bios/seabios/src/fw/acpi-dsdt-isa.dsl +0 -102
- package/bios/seabios/src/fw/acpi-dsdt-pci-crs.dsl +0 -90
- package/bios/seabios/src/fw/acpi-dsdt.dsl +0 -342
- package/bios/seabios/src/fw/acpi-dsdt.hex +0 -554
- package/bios/seabios/src/fw/acpi.c +0 -685
- package/bios/seabios/src/fw/biostables.c +0 -491
- package/bios/seabios/src/fw/coreboot.c +0 -569
- package/bios/seabios/src/fw/csm.c +0 -347
- package/bios/seabios/src/fw/dev-pci.h +0 -52
- package/bios/seabios/src/fw/dev-piix.h +0 -29
- package/bios/seabios/src/fw/dev-q35.h +0 -52
- package/bios/seabios/src/fw/lzmadecode.c +0 -398
- package/bios/seabios/src/fw/lzmadecode.h +0 -67
- package/bios/seabios/src/fw/mptable.c +0 -197
- package/bios/seabios/src/fw/mtrr.c +0 -105
- package/bios/seabios/src/fw/multiboot.c +0 -111
- package/bios/seabios/src/fw/paravirt.c +0 -624
- package/bios/seabios/src/fw/paravirt.h +0 -63
- package/bios/seabios/src/fw/pciinit.c +0 -1187
- package/bios/seabios/src/fw/pirtable.c +0 -103
- package/bios/seabios/src/fw/q35-acpi-dsdt.dsl +0 -450
- package/bios/seabios/src/fw/romfile_loader.c +0 -259
- package/bios/seabios/src/fw/romfile_loader.h +0 -91
- package/bios/seabios/src/fw/shadow.c +0 -208
- package/bios/seabios/src/fw/smbios.c +0 -585
- package/bios/seabios/src/fw/smm.c +0 -269
- package/bios/seabios/src/fw/smp.c +0 -194
- package/bios/seabios/src/fw/ssdt-misc.dsl +0 -104
- package/bios/seabios/src/fw/ssdt-misc.hex +0 -88
- package/bios/seabios/src/fw/ssdt-pcihp.dsl +0 -36
- package/bios/seabios/src/fw/ssdt-pcihp.hex +0 -38
- package/bios/seabios/src/fw/ssdt-proc.dsl +0 -48
- package/bios/seabios/src/fw/ssdt-proc.hex +0 -35
- package/bios/seabios/src/fw/xen.c +0 -149
- package/bios/seabios/src/fw/xen.h +0 -125
- package/bios/seabios/src/gen-defs.h +0 -19
- package/bios/seabios/src/hw/ahci.c +0 -697
- package/bios/seabios/src/hw/ahci.h +0 -201
- package/bios/seabios/src/hw/ata.c +0 -1046
- package/bios/seabios/src/hw/ata.h +0 -163
- package/bios/seabios/src/hw/blockcmd.c +0 -372
- package/bios/seabios/src/hw/blockcmd.h +0 -114
- package/bios/seabios/src/hw/dma.c +0 -67
- package/bios/seabios/src/hw/esp-scsi.c +0 -241
- package/bios/seabios/src/hw/esp-scsi.h +0 -8
- package/bios/seabios/src/hw/floppy.c +0 -741
- package/bios/seabios/src/hw/lsi-scsi.c +0 -221
- package/bios/seabios/src/hw/lsi-scsi.h +0 -8
- package/bios/seabios/src/hw/megasas.c +0 -405
- package/bios/seabios/src/hw/megasas.h +0 -8
- package/bios/seabios/src/hw/mpt-scsi.c +0 -319
- package/bios/seabios/src/hw/mpt-scsi.h +0 -8
- package/bios/seabios/src/hw/nvme-int.h +0 -199
- package/bios/seabios/src/hw/nvme.c +0 -708
- package/bios/seabios/src/hw/nvme.h +0 -17
- package/bios/seabios/src/hw/pci.c +0 -133
- package/bios/seabios/src/hw/pci.h +0 -47
- package/bios/seabios/src/hw/pci_ids.h +0 -2632
- package/bios/seabios/src/hw/pci_regs.h +0 -556
- package/bios/seabios/src/hw/pcidevice.c +0 -192
- package/bios/seabios/src/hw/pcidevice.h +0 -76
- package/bios/seabios/src/hw/pic.c +0 -115
- package/bios/seabios/src/hw/pic.h +0 -60
- package/bios/seabios/src/hw/ps2port.c +0 -543
- package/bios/seabios/src/hw/ps2port.h +0 -67
- package/bios/seabios/src/hw/pvscsi.c +0 -333
- package/bios/seabios/src/hw/pvscsi.h +0 -8
- package/bios/seabios/src/hw/ramdisk.c +0 -108
- package/bios/seabios/src/hw/rtc.c +0 -100
- package/bios/seabios/src/hw/rtc.h +0 -75
- package/bios/seabios/src/hw/sdcard.c +0 -572
- package/bios/seabios/src/hw/serialio.c +0 -113
- package/bios/seabios/src/hw/serialio.h +0 -29
- package/bios/seabios/src/hw/timer.c +0 -259
- package/bios/seabios/src/hw/tpm_drivers.c +0 -636
- package/bios/seabios/src/hw/tpm_drivers.h +0 -127
- package/bios/seabios/src/hw/usb-ehci.c +0 -650
- package/bios/seabios/src/hw/usb-ehci.h +0 -177
- package/bios/seabios/src/hw/usb-hid.c +0 -442
- package/bios/seabios/src/hw/usb-hid.h +0 -29
- package/bios/seabios/src/hw/usb-hub.c +0 -205
- package/bios/seabios/src/hw/usb-hub.h +0 -64
- package/bios/seabios/src/hw/usb-msc.c +0 -222
- package/bios/seabios/src/hw/usb-msc.h +0 -10
- package/bios/seabios/src/hw/usb-ohci.c +0 -568
- package/bios/seabios/src/hw/usb-ohci.h +0 -144
- package/bios/seabios/src/hw/usb-uas.c +0 -289
- package/bios/seabios/src/hw/usb-uas.h +0 -9
- package/bios/seabios/src/hw/usb-uhci.c +0 -571
- package/bios/seabios/src/hw/usb-uhci.h +0 -128
- package/bios/seabios/src/hw/usb-xhci.c +0 -1161
- package/bios/seabios/src/hw/usb-xhci.h +0 -133
- package/bios/seabios/src/hw/usb.c +0 -499
- package/bios/seabios/src/hw/usb.h +0 -254
- package/bios/seabios/src/hw/virtio-blk.c +0 -211
- package/bios/seabios/src/hw/virtio-blk.h +0 -43
- package/bios/seabios/src/hw/virtio-pci.c +0 -501
- package/bios/seabios/src/hw/virtio-pci.h +0 -151
- package/bios/seabios/src/hw/virtio-ring.c +0 -147
- package/bios/seabios/src/hw/virtio-ring.h +0 -121
- package/bios/seabios/src/hw/virtio-scsi.c +0 -220
- package/bios/seabios/src/hw/virtio-scsi.h +0 -47
- package/bios/seabios/src/jpeg.c +0 -1055
- package/bios/seabios/src/kbd.c +0 -599
- package/bios/seabios/src/list.h +0 -91
- package/bios/seabios/src/malloc.c +0 -561
- package/bios/seabios/src/malloc.h +0 -70
- package/bios/seabios/src/memmap.h +0 -21
- package/bios/seabios/src/misc.c +0 -195
- package/bios/seabios/src/mouse.c +0 -342
- package/bios/seabios/src/optionroms.c +0 -475
- package/bios/seabios/src/output.c +0 -584
- package/bios/seabios/src/output.h +0 -68
- package/bios/seabios/src/pcibios.c +0 -241
- package/bios/seabios/src/pmm.c +0 -176
- package/bios/seabios/src/pnpbios.c +0 -88
- package/bios/seabios/src/post.c +0 -337
- package/bios/seabios/src/resume.c +0 -157
- package/bios/seabios/src/romfile.c +0 -146
- package/bios/seabios/src/romfile.h +0 -21
- package/bios/seabios/src/romlayout.S +0 -698
- package/bios/seabios/src/sercon.c +0 -677
- package/bios/seabios/src/serial.c +0 -317
- package/bios/seabios/src/sha1.c +0 -147
- package/bios/seabios/src/sha1.h +0 -8
- package/bios/seabios/src/stacks.c +0 -771
- package/bios/seabios/src/stacks.h +0 -68
- package/bios/seabios/src/std/LegacyBios.h +0 -985
- package/bios/seabios/src/std/acpi.h +0 -323
- package/bios/seabios/src/std/bda.h +0 -174
- package/bios/seabios/src/std/disk.h +0 -175
- package/bios/seabios/src/std/mptable.h +0 -77
- package/bios/seabios/src/std/multiboot.h +0 -260
- package/bios/seabios/src/std/optionrom.h +0 -59
- package/bios/seabios/src/std/pirtable.h +0 -35
- package/bios/seabios/src/std/pmm.h +0 -19
- package/bios/seabios/src/std/pnpbios.h +0 -24
- package/bios/seabios/src/std/smbios.h +0 -167
- package/bios/seabios/src/std/tcg.h +0 -554
- package/bios/seabios/src/std/vbe.h +0 -156
- package/bios/seabios/src/std/vga.h +0 -63
- package/bios/seabios/src/string.c +0 -251
- package/bios/seabios/src/string.h +0 -31
- package/bios/seabios/src/system.c +0 -357
- package/bios/seabios/src/tcgbios.c +0 -2014
- package/bios/seabios/src/tcgbios.h +0 -19
- package/bios/seabios/src/types.h +0 -156
- package/bios/seabios/src/util.h +0 -251
- package/bios/seabios/src/version.c +0 -5
- package/bios/seabios/src/vgahooks.c +0 -355
- package/bios/seabios/src/x86.c +0 -23
- package/bios/seabios/src/x86.h +0 -277
- package/bios/seabios/vgasrc/Kconfig +0 -211
- package/bios/seabios/vgasrc/bochsdisplay.c +0 -59
- package/bios/seabios/vgasrc/bochsvga.c +0 -447
- package/bios/seabios/vgasrc/bochsvga.h +0 -57
- package/bios/seabios/vgasrc/cbvga.c +0 -337
- package/bios/seabios/vgasrc/clext.c +0 -627
- package/bios/seabios/vgasrc/geodevga.c +0 -434
- package/bios/seabios/vgasrc/geodevga.h +0 -89
- package/bios/seabios/vgasrc/ramfb.c +0 -163
- package/bios/seabios/vgasrc/stdvga.c +0 -485
- package/bios/seabios/vgasrc/stdvga.h +0 -81
- package/bios/seabios/vgasrc/stdvgaio.c +0 -186
- package/bios/seabios/vgasrc/stdvgamodes.c +0 -534
- package/bios/seabios/vgasrc/swcursor.c +0 -96
- package/bios/seabios/vgasrc/vbe.c +0 -432
- package/bios/seabios/vgasrc/vgabios.c +0 -1131
- package/bios/seabios/vgasrc/vgabios.h +0 -88
- package/bios/seabios/vgasrc/vgaentry.S +0 -161
- package/bios/seabios/vgasrc/vgafb.c +0 -661
- package/bios/seabios/vgasrc/vgafb.h +0 -42
- package/bios/seabios/vgasrc/vgafonts.c +0 -785
- package/bios/seabios/vgasrc/vgahw.h +0 -152
- package/bios/seabios/vgasrc/vgainit.c +0 -202
- package/bios/seabios/vgasrc/vgalayout.lds.S +0 -23
- package/bios/seabios/vgasrc/vgautil.h +0 -103
- package/bios/seabios/vgasrc/vgaversion.c +0 -6
- package/bios/seabios-debug.bin +0 -0
- package/bios/seabios-debug.config +0 -117
- package/bios/seabios.bin +0 -0
- package/bios/seabios.config +0 -114
- package/bios/vgabios-debug.bin +0 -0
- package/bios/vgabios.bin +0 -0
- package/build/binaries.js +0 -1
- package/build/index-debug.cjs +0 -1
- package/build/index-debug.js +0 -1
- package/build/index.cjs +0 -1
- package/build/index.js +0 -1
- package/v86.css +0 -259
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
#include "romfile_loader.h"
|
|
2
|
-
#include "byteorder.h" // leXX_to_cpu/cpu_to_leXX
|
|
3
|
-
#include "util.h" // checksum
|
|
4
|
-
#include "string.h" // strcmp
|
|
5
|
-
#include "romfile.h" // struct romfile_s
|
|
6
|
-
#include "malloc.h" // Zone*, _malloc
|
|
7
|
-
#include "list.h" // struct hlist_node
|
|
8
|
-
#include "output.h" // warn_*
|
|
9
|
-
#include "paravirt.h" // qemu_cfg_write_file
|
|
10
|
-
|
|
11
|
-
struct romfile_loader_file {
|
|
12
|
-
struct romfile_s *file;
|
|
13
|
-
void *data;
|
|
14
|
-
};
|
|
15
|
-
struct romfile_loader_files {
|
|
16
|
-
int nfiles;
|
|
17
|
-
struct romfile_loader_file files[];
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
// Data structures for storing "write pointer" entries for possible replay
|
|
21
|
-
struct romfile_wr_pointer_entry {
|
|
22
|
-
u64 pointer;
|
|
23
|
-
u32 offset;
|
|
24
|
-
u16 key;
|
|
25
|
-
u8 ptr_size;
|
|
26
|
-
struct hlist_node node;
|
|
27
|
-
};
|
|
28
|
-
static struct hlist_head romfile_pointer_list;
|
|
29
|
-
|
|
30
|
-
static struct romfile_loader_file *
|
|
31
|
-
romfile_loader_find(const char *name,
|
|
32
|
-
struct romfile_loader_files *files)
|
|
33
|
-
{
|
|
34
|
-
int i;
|
|
35
|
-
if (name[ROMFILE_LOADER_FILESZ - 1])
|
|
36
|
-
return NULL;
|
|
37
|
-
for (i = 0; i < files->nfiles; ++i)
|
|
38
|
-
if (!strcmp(files->files[i].file->name, name))
|
|
39
|
-
return &files->files[i];
|
|
40
|
-
return NULL;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// Replay "write pointer" entries back to QEMU
|
|
44
|
-
void romfile_fw_cfg_resume(void)
|
|
45
|
-
{
|
|
46
|
-
if (!CONFIG_QEMU)
|
|
47
|
-
return;
|
|
48
|
-
|
|
49
|
-
struct romfile_wr_pointer_entry *entry;
|
|
50
|
-
hlist_for_each_entry(entry, &romfile_pointer_list, node) {
|
|
51
|
-
qemu_cfg_write_file_simple(&entry->pointer, entry->key,
|
|
52
|
-
entry->offset, entry->ptr_size);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
static void romfile_loader_allocate(struct romfile_loader_entry_s *entry,
|
|
57
|
-
struct romfile_loader_files *files)
|
|
58
|
-
{
|
|
59
|
-
struct zone_s *zone;
|
|
60
|
-
struct romfile_loader_file *file = &files->files[files->nfiles];
|
|
61
|
-
void *data;
|
|
62
|
-
int ret;
|
|
63
|
-
unsigned alloc_align = le32_to_cpu(entry->alloc.align);
|
|
64
|
-
|
|
65
|
-
if (alloc_align & (alloc_align - 1))
|
|
66
|
-
goto err;
|
|
67
|
-
|
|
68
|
-
switch (entry->alloc.zone) {
|
|
69
|
-
case ROMFILE_LOADER_ALLOC_ZONE_HIGH:
|
|
70
|
-
zone = &ZoneHigh;
|
|
71
|
-
break;
|
|
72
|
-
case ROMFILE_LOADER_ALLOC_ZONE_FSEG:
|
|
73
|
-
zone = &ZoneFSeg;
|
|
74
|
-
break;
|
|
75
|
-
default:
|
|
76
|
-
goto err;
|
|
77
|
-
}
|
|
78
|
-
if (alloc_align < MALLOC_MIN_ALIGN)
|
|
79
|
-
alloc_align = MALLOC_MIN_ALIGN;
|
|
80
|
-
if (entry->alloc.file[ROMFILE_LOADER_FILESZ - 1])
|
|
81
|
-
goto err;
|
|
82
|
-
file->file = romfile_find(entry->alloc.file);
|
|
83
|
-
if (!file->file || !file->file->size)
|
|
84
|
-
return;
|
|
85
|
-
data = _malloc(zone, file->file->size, alloc_align);
|
|
86
|
-
if (!data) {
|
|
87
|
-
warn_noalloc();
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
ret = file->file->copy(file->file, data, file->file->size);
|
|
91
|
-
if (ret != file->file->size)
|
|
92
|
-
goto file_err;
|
|
93
|
-
file->data = data;
|
|
94
|
-
files->nfiles++;
|
|
95
|
-
return;
|
|
96
|
-
|
|
97
|
-
file_err:
|
|
98
|
-
free(data);
|
|
99
|
-
err:
|
|
100
|
-
warn_internalerror();
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
static void romfile_loader_add_pointer(struct romfile_loader_entry_s *entry,
|
|
104
|
-
struct romfile_loader_files *files)
|
|
105
|
-
{
|
|
106
|
-
struct romfile_loader_file *dest_file;
|
|
107
|
-
struct romfile_loader_file *src_file;
|
|
108
|
-
unsigned offset = le32_to_cpu(entry->pointer.offset);
|
|
109
|
-
u64 pointer = 0;
|
|
110
|
-
|
|
111
|
-
dest_file = romfile_loader_find(entry->pointer.dest_file, files);
|
|
112
|
-
src_file = romfile_loader_find(entry->pointer.src_file, files);
|
|
113
|
-
|
|
114
|
-
if (!dest_file || !src_file || !dest_file->data || !src_file->data ||
|
|
115
|
-
offset + entry->pointer.size < offset ||
|
|
116
|
-
offset + entry->pointer.size > dest_file->file->size ||
|
|
117
|
-
entry->pointer.size < 1 || entry->pointer.size > 8 ||
|
|
118
|
-
entry->pointer.size & (entry->pointer.size - 1))
|
|
119
|
-
goto err;
|
|
120
|
-
|
|
121
|
-
memcpy(&pointer, dest_file->data + offset, entry->pointer.size);
|
|
122
|
-
pointer = le64_to_cpu(pointer);
|
|
123
|
-
pointer += (unsigned long)src_file->data;
|
|
124
|
-
pointer = cpu_to_le64(pointer);
|
|
125
|
-
memcpy(dest_file->data + offset, &pointer, entry->pointer.size);
|
|
126
|
-
|
|
127
|
-
return;
|
|
128
|
-
err:
|
|
129
|
-
warn_internalerror();
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
static void romfile_loader_add_checksum(struct romfile_loader_entry_s *entry,
|
|
133
|
-
struct romfile_loader_files *files)
|
|
134
|
-
{
|
|
135
|
-
struct romfile_loader_file *file;
|
|
136
|
-
unsigned offset = le32_to_cpu(entry->cksum.offset);
|
|
137
|
-
unsigned start = le32_to_cpu(entry->cksum.start);
|
|
138
|
-
unsigned len = le32_to_cpu(entry->cksum.length);
|
|
139
|
-
u8 *data;
|
|
140
|
-
|
|
141
|
-
file = romfile_loader_find(entry->cksum.file, files);
|
|
142
|
-
|
|
143
|
-
if (!file || !file->data || offset >= file->file->size ||
|
|
144
|
-
start + len < start || start + len > file->file->size)
|
|
145
|
-
goto err;
|
|
146
|
-
|
|
147
|
-
data = file->data + offset;
|
|
148
|
-
*data -= checksum(file->data + start, len);
|
|
149
|
-
|
|
150
|
-
return;
|
|
151
|
-
err:
|
|
152
|
-
warn_internalerror();
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
static void romfile_loader_write_pointer(struct romfile_loader_entry_s *entry,
|
|
156
|
-
struct romfile_loader_files *files)
|
|
157
|
-
{
|
|
158
|
-
struct romfile_s *dest_file;
|
|
159
|
-
struct romfile_loader_file *src_file;
|
|
160
|
-
unsigned dst_offset = le32_to_cpu(entry->wr_pointer.dst_offset);
|
|
161
|
-
unsigned src_offset = le32_to_cpu(entry->wr_pointer.src_offset);
|
|
162
|
-
u64 pointer = 0;
|
|
163
|
-
|
|
164
|
-
/* Writing back to a file that may not be loaded in RAM */
|
|
165
|
-
dest_file = romfile_find(entry->wr_pointer.dest_file);
|
|
166
|
-
src_file = romfile_loader_find(entry->wr_pointer.src_file, files);
|
|
167
|
-
|
|
168
|
-
if (!dest_file || !src_file || !src_file->data ||
|
|
169
|
-
dst_offset + entry->wr_pointer.size < dst_offset ||
|
|
170
|
-
dst_offset + entry->wr_pointer.size > dest_file->size ||
|
|
171
|
-
src_offset >= src_file->file->size ||
|
|
172
|
-
entry->wr_pointer.size < 1 || entry->wr_pointer.size > 8 ||
|
|
173
|
-
entry->wr_pointer.size & (entry->wr_pointer.size - 1)) {
|
|
174
|
-
goto err;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
pointer = (unsigned long)src_file->data + src_offset;
|
|
178
|
-
/* Make sure the pointer fits within wr_pointer.size */
|
|
179
|
-
if ((entry->wr_pointer.size != sizeof(u64)) &&
|
|
180
|
-
((pointer >> (entry->wr_pointer.size * 8)) > 0)) {
|
|
181
|
-
goto err;
|
|
182
|
-
}
|
|
183
|
-
pointer = cpu_to_le64(pointer);
|
|
184
|
-
|
|
185
|
-
/* Only supported on QEMU */
|
|
186
|
-
if (qemu_cfg_write_file(&pointer, dest_file, dst_offset,
|
|
187
|
-
entry->wr_pointer.size) != entry->wr_pointer.size) {
|
|
188
|
-
goto err;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
/* Store the info so it can replayed later if necessary */
|
|
192
|
-
struct romfile_wr_pointer_entry *store = malloc_high(sizeof(*store));
|
|
193
|
-
if (!store) {
|
|
194
|
-
warn_noalloc();
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
store->pointer = pointer;
|
|
198
|
-
store->key = qemu_get_romfile_key(dest_file);
|
|
199
|
-
store->offset = dst_offset;
|
|
200
|
-
store->ptr_size = entry->wr_pointer.size;
|
|
201
|
-
hlist_add_head(&store->node, &romfile_pointer_list);
|
|
202
|
-
|
|
203
|
-
return;
|
|
204
|
-
err:
|
|
205
|
-
warn_internalerror();
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
int romfile_loader_execute(const char *name)
|
|
209
|
-
{
|
|
210
|
-
struct romfile_loader_entry_s *entry;
|
|
211
|
-
int size, offset = 0, nfiles;
|
|
212
|
-
struct romfile_loader_files *files;
|
|
213
|
-
void *data = romfile_loadfile(name, &size);
|
|
214
|
-
if (!data)
|
|
215
|
-
return -1;
|
|
216
|
-
|
|
217
|
-
if (size % sizeof(*entry)) {
|
|
218
|
-
warn_internalerror();
|
|
219
|
-
goto err;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
/* (over)estimate the number of files to load. */
|
|
223
|
-
nfiles = size / sizeof(*entry);
|
|
224
|
-
files = malloc_tmp(sizeof(*files) + nfiles * sizeof(files->files[0]));
|
|
225
|
-
if (!files) {
|
|
226
|
-
warn_noalloc();
|
|
227
|
-
goto err;
|
|
228
|
-
}
|
|
229
|
-
files->nfiles = 0;
|
|
230
|
-
|
|
231
|
-
for (offset = 0; offset < size; offset += sizeof(*entry)) {
|
|
232
|
-
entry = data + offset;
|
|
233
|
-
switch (le32_to_cpu(entry->command)) {
|
|
234
|
-
case ROMFILE_LOADER_COMMAND_ALLOCATE:
|
|
235
|
-
romfile_loader_allocate(entry, files);
|
|
236
|
-
break;
|
|
237
|
-
case ROMFILE_LOADER_COMMAND_ADD_POINTER:
|
|
238
|
-
romfile_loader_add_pointer(entry, files);
|
|
239
|
-
break;
|
|
240
|
-
case ROMFILE_LOADER_COMMAND_ADD_CHECKSUM:
|
|
241
|
-
romfile_loader_add_checksum(entry, files);
|
|
242
|
-
break;
|
|
243
|
-
case ROMFILE_LOADER_COMMAND_WRITE_POINTER:
|
|
244
|
-
romfile_loader_write_pointer(entry, files);
|
|
245
|
-
break;
|
|
246
|
-
default:
|
|
247
|
-
/* Skip commands that we don't recognize. */
|
|
248
|
-
break;
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
free(files);
|
|
253
|
-
free(data);
|
|
254
|
-
return 0;
|
|
255
|
-
|
|
256
|
-
err:
|
|
257
|
-
free(data);
|
|
258
|
-
return -1;
|
|
259
|
-
}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
#ifndef __ROMFILE_LOADER_H
|
|
2
|
-
#define __ROMFILE_LOADER_H
|
|
3
|
-
|
|
4
|
-
#include "types.h" // u8
|
|
5
|
-
#include "util.h" // romfile_s
|
|
6
|
-
|
|
7
|
-
#define ROMFILE_LOADER_FILESZ 56
|
|
8
|
-
|
|
9
|
-
/* ROM file linker/loader interface. Linker uses little endian format */
|
|
10
|
-
struct romfile_loader_entry_s {
|
|
11
|
-
u32 command;
|
|
12
|
-
union {
|
|
13
|
-
/*
|
|
14
|
-
* COMMAND_ALLOCATE - allocate a table from @alloc.file
|
|
15
|
-
* subject to @alloc.align alignment (must be power of 2)
|
|
16
|
-
* and @alloc.zone (can be HIGH or FSEG) requirements.
|
|
17
|
-
*
|
|
18
|
-
* Must appear exactly once for each file, and before
|
|
19
|
-
* this file is referenced by any other command.
|
|
20
|
-
*/
|
|
21
|
-
struct {
|
|
22
|
-
char file[ROMFILE_LOADER_FILESZ];
|
|
23
|
-
u32 align;
|
|
24
|
-
u8 zone;
|
|
25
|
-
} alloc;
|
|
26
|
-
|
|
27
|
-
/*
|
|
28
|
-
* COMMAND_ADD_POINTER - patch the table (originating from
|
|
29
|
-
* @dest_file) at @pointer.offset, by adding a pointer to the table
|
|
30
|
-
* originating from @src_file. 1,2,4 or 8 byte unsigned
|
|
31
|
-
* addition is used depending on @pointer.size.
|
|
32
|
-
*/
|
|
33
|
-
struct {
|
|
34
|
-
char dest_file[ROMFILE_LOADER_FILESZ];
|
|
35
|
-
char src_file[ROMFILE_LOADER_FILESZ];
|
|
36
|
-
u32 offset;
|
|
37
|
-
u8 size;
|
|
38
|
-
} pointer;
|
|
39
|
-
|
|
40
|
-
/*
|
|
41
|
-
* COMMAND_ADD_CHECKSUM - calculate checksum of the range specified by
|
|
42
|
-
* @cksum.start and @cksum.length fields,
|
|
43
|
-
* and then add the value at @cksum_offset.
|
|
44
|
-
* Checksum simply sums -X for each byte X in the range
|
|
45
|
-
* using 8-bit math.
|
|
46
|
-
*/
|
|
47
|
-
struct {
|
|
48
|
-
char file[ROMFILE_LOADER_FILESZ];
|
|
49
|
-
u32 offset;
|
|
50
|
-
u32 start;
|
|
51
|
-
u32 length;
|
|
52
|
-
} cksum;
|
|
53
|
-
|
|
54
|
-
/*
|
|
55
|
-
* COMMAND_WRITE_POINTER - Write back to a host file via DMA,
|
|
56
|
-
* @wr_pointer.dest_file at offset @wr_pointer.dst_offset, a pointer
|
|
57
|
-
* to the table originating from @wr_pointer.src_file at offset
|
|
58
|
-
* @wr_pointer.src_offset.
|
|
59
|
-
* 1,2,4 or 8 byte unsigned addition is used depending on
|
|
60
|
-
* @wr_pointer.size.
|
|
61
|
-
*/
|
|
62
|
-
struct {
|
|
63
|
-
char dest_file[ROMFILE_LOADER_FILESZ];
|
|
64
|
-
char src_file[ROMFILE_LOADER_FILESZ];
|
|
65
|
-
u32 dst_offset;
|
|
66
|
-
u32 src_offset;
|
|
67
|
-
u8 size;
|
|
68
|
-
} wr_pointer;
|
|
69
|
-
|
|
70
|
-
/* padding */
|
|
71
|
-
char pad[124];
|
|
72
|
-
};
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
enum {
|
|
76
|
-
ROMFILE_LOADER_COMMAND_ALLOCATE = 0x1,
|
|
77
|
-
ROMFILE_LOADER_COMMAND_ADD_POINTER = 0x2,
|
|
78
|
-
ROMFILE_LOADER_COMMAND_ADD_CHECKSUM = 0x3,
|
|
79
|
-
ROMFILE_LOADER_COMMAND_WRITE_POINTER = 0x4,
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
enum {
|
|
83
|
-
ROMFILE_LOADER_ALLOC_ZONE_HIGH = 0x1,
|
|
84
|
-
ROMFILE_LOADER_ALLOC_ZONE_FSEG = 0x2,
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
int romfile_loader_execute(const char *name);
|
|
88
|
-
|
|
89
|
-
void romfile_fw_cfg_resume(void);
|
|
90
|
-
|
|
91
|
-
#endif
|
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
// Support for enabling/disabling BIOS ram shadowing.
|
|
2
|
-
//
|
|
3
|
-
// Copyright (C) 2008-2010 Kevin O'Connor <kevin@koconnor.net>
|
|
4
|
-
// Copyright (C) 2006 Fabrice Bellard
|
|
5
|
-
//
|
|
6
|
-
// This file may be distributed under the terms of the GNU LGPLv3 license.
|
|
7
|
-
|
|
8
|
-
#include "config.h" // CONFIG_*
|
|
9
|
-
#include "dev-q35.h" // PCI_VENDOR_ID_INTEL
|
|
10
|
-
#include "dev-piix.h" // I440FX_PAM0
|
|
11
|
-
#include "hw/pci.h" // pci_config_writeb
|
|
12
|
-
#include "hw/pci_ids.h" // PCI_VENDOR_ID_INTEL
|
|
13
|
-
#include "hw/pci_regs.h" // PCI_VENDOR_ID
|
|
14
|
-
#include "malloc.h" // rom_get_last
|
|
15
|
-
#include "output.h" // dprintf
|
|
16
|
-
#include "paravirt.h" // runningOnXen
|
|
17
|
-
#include "string.h" // memset
|
|
18
|
-
#include "util.h" // make_bios_writable
|
|
19
|
-
#include "x86.h" // wbinvd
|
|
20
|
-
|
|
21
|
-
// On the emulators, the bios at 0xf0000 is also at 0xffff0000
|
|
22
|
-
#define BIOS_SRC_OFFSET 0xfff00000
|
|
23
|
-
|
|
24
|
-
union pamdata_u {
|
|
25
|
-
u8 data8[8];
|
|
26
|
-
u32 data32[2];
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
// Enable shadowing and copy bios.
|
|
30
|
-
static void
|
|
31
|
-
__make_bios_writable_intel(u16 bdf, u32 pam0)
|
|
32
|
-
{
|
|
33
|
-
// Read in current PAM settings from pci config space
|
|
34
|
-
union pamdata_u pamdata;
|
|
35
|
-
pamdata.data32[0] = pci_config_readl(bdf, ALIGN_DOWN(pam0, 4));
|
|
36
|
-
pamdata.data32[1] = pci_config_readl(bdf, ALIGN_DOWN(pam0, 4) + 4);
|
|
37
|
-
u8 *pam = &pamdata.data8[pam0 & 0x03];
|
|
38
|
-
|
|
39
|
-
// Make ram from 0xc0000-0xf0000 writable
|
|
40
|
-
int i;
|
|
41
|
-
for (i=0; i<6; i++)
|
|
42
|
-
pam[i + 1] = 0x33;
|
|
43
|
-
|
|
44
|
-
// Make ram from 0xf0000-0x100000 writable
|
|
45
|
-
int ram_present = pam[0] & 0x10;
|
|
46
|
-
pam[0] = 0x30;
|
|
47
|
-
|
|
48
|
-
// Write PAM settings back to pci config space
|
|
49
|
-
pci_config_writel(bdf, ALIGN_DOWN(pam0, 4), pamdata.data32[0]);
|
|
50
|
-
pci_config_writel(bdf, ALIGN_DOWN(pam0, 4) + 4, pamdata.data32[1]);
|
|
51
|
-
|
|
52
|
-
if (!ram_present)
|
|
53
|
-
// Copy bios.
|
|
54
|
-
memcpy(VSYMBOL(code32flat_start)
|
|
55
|
-
, VSYMBOL(code32flat_start) + BIOS_SRC_OFFSET
|
|
56
|
-
, SYMBOL(code32flat_end) - SYMBOL(code32flat_start));
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
static void
|
|
60
|
-
make_bios_writable_intel(u16 bdf, u32 pam0)
|
|
61
|
-
{
|
|
62
|
-
int reg = pci_config_readb(bdf, pam0);
|
|
63
|
-
if (!(reg & 0x10)) {
|
|
64
|
-
// QEMU doesn't fully implement the piix shadow capabilities -
|
|
65
|
-
// if ram isn't backing the bios segment when shadowing is
|
|
66
|
-
// disabled, the code itself won't be in memory. So, run the
|
|
67
|
-
// code from the high-memory flash location.
|
|
68
|
-
u32 pos = (u32)__make_bios_writable_intel + BIOS_SRC_OFFSET;
|
|
69
|
-
void (*func)(u16 bdf, u32 pam0) = (void*)pos;
|
|
70
|
-
func(bdf, pam0);
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
// Ram already present - just enable writes
|
|
74
|
-
__make_bios_writable_intel(bdf, pam0);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
static void
|
|
78
|
-
make_bios_readonly_intel(u16 bdf, u32 pam0)
|
|
79
|
-
{
|
|
80
|
-
// Flush any pending writes before locking memory.
|
|
81
|
-
wbinvd();
|
|
82
|
-
|
|
83
|
-
// Read in current PAM settings from pci config space
|
|
84
|
-
union pamdata_u pamdata;
|
|
85
|
-
pamdata.data32[0] = pci_config_readl(bdf, ALIGN_DOWN(pam0, 4));
|
|
86
|
-
pamdata.data32[1] = pci_config_readl(bdf, ALIGN_DOWN(pam0, 4) + 4);
|
|
87
|
-
u8 *pam = &pamdata.data8[pam0 & 0x03];
|
|
88
|
-
|
|
89
|
-
// Write protect roms from 0xc0000-0xf0000
|
|
90
|
-
u32 romlast = BUILD_BIOS_ADDR, rommax = BUILD_BIOS_ADDR;
|
|
91
|
-
if (CONFIG_WRITABLE_UPPERMEMORY)
|
|
92
|
-
romlast = rom_get_last();
|
|
93
|
-
if (CONFIG_MALLOC_UPPERMEMORY)
|
|
94
|
-
rommax = rom_get_max();
|
|
95
|
-
int i;
|
|
96
|
-
for (i=0; i<6; i++) {
|
|
97
|
-
u32 mem = BUILD_ROM_START + i * 32*1024;
|
|
98
|
-
if (romlast < mem + 16*1024 || rommax < mem + 32*1024) {
|
|
99
|
-
if (romlast >= mem && rommax >= mem + 16*1024)
|
|
100
|
-
pam[i + 1] = 0x31;
|
|
101
|
-
break;
|
|
102
|
-
}
|
|
103
|
-
pam[i + 1] = 0x11;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
// Write protect 0xf0000-0x100000
|
|
107
|
-
pam[0] = 0x10;
|
|
108
|
-
|
|
109
|
-
// Write PAM settings back to pci config space
|
|
110
|
-
pci_config_writel(bdf, ALIGN_DOWN(pam0, 4), pamdata.data32[0]);
|
|
111
|
-
pci_config_writel(bdf, ALIGN_DOWN(pam0, 4) + 4, pamdata.data32[1]);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
static int ShadowBDF = -1;
|
|
115
|
-
|
|
116
|
-
// Make the 0xc0000-0x100000 area read/writable.
|
|
117
|
-
void
|
|
118
|
-
make_bios_writable(void)
|
|
119
|
-
{
|
|
120
|
-
if (!CONFIG_QEMU || runningOnXen())
|
|
121
|
-
return;
|
|
122
|
-
|
|
123
|
-
dprintf(3, "enabling shadow ram\n");
|
|
124
|
-
|
|
125
|
-
// At this point, statically allocated variables can't be written,
|
|
126
|
-
// so do this search manually.
|
|
127
|
-
int bdf;
|
|
128
|
-
foreachbdf(bdf, 0) {
|
|
129
|
-
u32 vendev = pci_config_readl(bdf, PCI_VENDOR_ID);
|
|
130
|
-
u16 vendor = vendev & 0xffff, device = vendev >> 16;
|
|
131
|
-
if (vendor == PCI_VENDOR_ID_INTEL
|
|
132
|
-
&& device == PCI_DEVICE_ID_INTEL_82441) {
|
|
133
|
-
make_bios_writable_intel(bdf, I440FX_PAM0);
|
|
134
|
-
code_mutable_preinit();
|
|
135
|
-
ShadowBDF = bdf;
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
if (vendor == PCI_VENDOR_ID_INTEL
|
|
139
|
-
&& device == PCI_DEVICE_ID_INTEL_Q35_MCH) {
|
|
140
|
-
make_bios_writable_intel(bdf, Q35_HOST_BRIDGE_PAM0);
|
|
141
|
-
code_mutable_preinit();
|
|
142
|
-
ShadowBDF = bdf;
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
dprintf(1, "Unable to unlock ram - bridge not found\n");
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
// Make the BIOS code segment area (0xf0000) read-only.
|
|
150
|
-
void
|
|
151
|
-
make_bios_readonly(void)
|
|
152
|
-
{
|
|
153
|
-
if (!CONFIG_QEMU || runningOnXen())
|
|
154
|
-
return;
|
|
155
|
-
dprintf(3, "locking shadow ram\n");
|
|
156
|
-
|
|
157
|
-
if (ShadowBDF < 0) {
|
|
158
|
-
dprintf(1, "Unable to lock ram - bridge not found\n");
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
u16 device = pci_config_readw(ShadowBDF, PCI_DEVICE_ID);
|
|
163
|
-
if (device == PCI_DEVICE_ID_INTEL_82441)
|
|
164
|
-
make_bios_readonly_intel(ShadowBDF, I440FX_PAM0);
|
|
165
|
-
else
|
|
166
|
-
make_bios_readonly_intel(ShadowBDF, Q35_HOST_BRIDGE_PAM0);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
void
|
|
170
|
-
qemu_reboot(void)
|
|
171
|
-
{
|
|
172
|
-
if (!CONFIG_QEMU || runningOnXen())
|
|
173
|
-
return;
|
|
174
|
-
// QEMU doesn't map 0xc0000-0xfffff back to the original rom on a
|
|
175
|
-
// reset, so do that manually before invoking a hard reset.
|
|
176
|
-
void *flash = (void*)BIOS_SRC_OFFSET;
|
|
177
|
-
u32 hrp = (u32)&HaveRunPost;
|
|
178
|
-
if (readl(flash + hrp)) {
|
|
179
|
-
// There isn't a pristine copy of the BIOS at 0xffff0000 to copy
|
|
180
|
-
if (HaveRunPost == 3) {
|
|
181
|
-
// In a reboot loop. Try to shutdown the machine instead.
|
|
182
|
-
dprintf(1, "Unable to hard-reboot machine - attempting shutdown.\n");
|
|
183
|
-
apm_shutdown();
|
|
184
|
-
}
|
|
185
|
-
make_bios_writable();
|
|
186
|
-
HaveRunPost = 3;
|
|
187
|
-
} else {
|
|
188
|
-
// Copy the BIOS making sure to only reset HaveRunPost at end
|
|
189
|
-
make_bios_writable();
|
|
190
|
-
u32 cstart = SYMBOL(code32flat_start), cend = SYMBOL(code32flat_end);
|
|
191
|
-
memcpy((void*)cstart, flash + cstart, hrp - cstart);
|
|
192
|
-
memcpy((void*)hrp + 4, flash + hrp + 4, cend - (hrp + 4));
|
|
193
|
-
barrier();
|
|
194
|
-
HaveRunPost = 0;
|
|
195
|
-
barrier();
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
// Request a QEMU system reset. Do the reset in this function as
|
|
199
|
-
// the BIOS code was overwritten above and not all BIOS
|
|
200
|
-
// functionality may be available.
|
|
201
|
-
|
|
202
|
-
// Attempt PCI style reset
|
|
203
|
-
outb(0x02, PORT_PCI_REBOOT);
|
|
204
|
-
outb(0x06, PORT_PCI_REBOOT);
|
|
205
|
-
|
|
206
|
-
// Next try triple faulting the CPU to force a reset
|
|
207
|
-
asm volatile("int3");
|
|
208
|
-
}
|