v86 0.3.6 → 0.4.0

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.
Files changed (369) hide show
  1. package/Readme.md +17 -6
  2. package/bios/seabios/.config +113 -0
  3. package/bios/seabios/.config.old +114 -0
  4. package/bios/seabios/.gitignore +4 -0
  5. package/bios/seabios/COPYING +674 -0
  6. package/bios/seabios/COPYING.LESSER +165 -0
  7. package/bios/seabios/Makefile +286 -0
  8. package/bios/seabios/README +17 -0
  9. package/bios/seabios/docs/Build_overview.md +104 -0
  10. package/bios/seabios/docs/Contributing.md +20 -0
  11. package/bios/seabios/docs/Debugging.md +111 -0
  12. package/bios/seabios/docs/Developer_Documentation.md +25 -0
  13. package/bios/seabios/docs/Developer_links.md +86 -0
  14. package/bios/seabios/docs/Download.md +27 -0
  15. package/bios/seabios/docs/Execution_and_code_flow.md +178 -0
  16. package/bios/seabios/docs/Linking_overview.md +160 -0
  17. package/bios/seabios/docs/Mailinglist.md +8 -0
  18. package/bios/seabios/docs/Memory_Model.md +253 -0
  19. package/bios/seabios/docs/README +5 -0
  20. package/bios/seabios/docs/Releases.md +482 -0
  21. package/bios/seabios/docs/Runtime_config.md +193 -0
  22. package/bios/seabios/docs/SeaBIOS.md +17 -0
  23. package/bios/seabios/docs/SeaVGABIOS.md +39 -0
  24. package/bios/seabios/out/autoconf.h +117 -0
  25. package/bios/seabios/out/include/config/acpi/dsdt.h +0 -0
  26. package/bios/seabios/out/include/config/acpi.h +0 -0
  27. package/bios/seabios/out/include/config/ahci.h +0 -0
  28. package/bios/seabios/out/include/config/apmbios.h +0 -0
  29. package/bios/seabios/out/include/config/ata/dma.h +0 -0
  30. package/bios/seabios/out/include/config/ata/pio32.h +0 -0
  31. package/bios/seabios/out/include/config/ata.h +0 -0
  32. package/bios/seabios/out/include/config/auto.conf +69 -0
  33. package/bios/seabios/out/include/config/auto.conf.cmd +9 -0
  34. package/bios/seabios/out/include/config/boot.h +0 -0
  35. package/bios/seabios/out/include/config/bootorder.h +0 -0
  36. package/bios/seabios/out/include/config/build/vgabios.h +0 -0
  37. package/bios/seabios/out/include/config/call32/smm.h +0 -0
  38. package/bios/seabios/out/include/config/cdrom/boot.h +0 -0
  39. package/bios/seabios/out/include/config/cdrom/emu.h +0 -0
  40. package/bios/seabios/out/include/config/debug/level.h +0 -0
  41. package/bios/seabios/out/include/config/drives.h +0 -0
  42. package/bios/seabios/out/include/config/entry/extrastack.h +0 -0
  43. package/bios/seabios/out/include/config/esp/scsi.h +0 -0
  44. package/bios/seabios/out/include/config/flash/floppy.h +0 -0
  45. package/bios/seabios/out/include/config/floppy.h +0 -0
  46. package/bios/seabios/out/include/config/fw/romfile/load.h +0 -0
  47. package/bios/seabios/out/include/config/hardware/irq.h +0 -0
  48. package/bios/seabios/out/include/config/kbd/call/int15/4f.h +0 -0
  49. package/bios/seabios/out/include/config/keyboard.h +0 -0
  50. package/bios/seabios/out/include/config/lpt.h +0 -0
  51. package/bios/seabios/out/include/config/lsi/scsi.h +0 -0
  52. package/bios/seabios/out/include/config/malloc/uppermemory.h +0 -0
  53. package/bios/seabios/out/include/config/megasas.h +0 -0
  54. package/bios/seabios/out/include/config/mouse.h +0 -0
  55. package/bios/seabios/out/include/config/mpt/scsi.h +0 -0
  56. package/bios/seabios/out/include/config/mptable.h +0 -0
  57. package/bios/seabios/out/include/config/mtrr/init.h +0 -0
  58. package/bios/seabios/out/include/config/optionroms.h +0 -0
  59. package/bios/seabios/out/include/config/override/pci/id.h +0 -0
  60. package/bios/seabios/out/include/config/pcibios.h +0 -0
  61. package/bios/seabios/out/include/config/pirtable.h +0 -0
  62. package/bios/seabios/out/include/config/pmm.h +0 -0
  63. package/bios/seabios/out/include/config/pmtimer.h +0 -0
  64. package/bios/seabios/out/include/config/pnpbios.h +0 -0
  65. package/bios/seabios/out/include/config/ps2port.h +0 -0
  66. package/bios/seabios/out/include/config/pvscsi.h +0 -0
  67. package/bios/seabios/out/include/config/qemu/hardware.h +0 -0
  68. package/bios/seabios/out/include/config/qemu.h +0 -0
  69. package/bios/seabios/out/include/config/rom/size.h +0 -0
  70. package/bios/seabios/out/include/config/rtc/timer.h +0 -0
  71. package/bios/seabios/out/include/config/s3/resume.h +0 -0
  72. package/bios/seabios/out/include/config/sdcard.h +0 -0
  73. package/bios/seabios/out/include/config/serial.h +0 -0
  74. package/bios/seabios/out/include/config/tcgbios.h +0 -0
  75. package/bios/seabios/out/include/config/threads.h +0 -0
  76. package/bios/seabios/out/include/config/tristate.conf +4 -0
  77. package/bios/seabios/out/include/config/tsc/timer.h +0 -0
  78. package/bios/seabios/out/include/config/use/smm.h +0 -0
  79. package/bios/seabios/out/include/config/vga/allocate/extra/stack.h +0 -0
  80. package/bios/seabios/out/include/config/vga/bochs/stdvga.h +0 -0
  81. package/bios/seabios/out/include/config/vga/bochs.h +0 -0
  82. package/bios/seabios/out/include/config/vga/did.h +0 -0
  83. package/bios/seabios/out/include/config/vga/extra/stack/size.h +0 -0
  84. package/bios/seabios/out/include/config/vga/fixup/asm.h +0 -0
  85. package/bios/seabios/out/include/config/vga/pci.h +0 -0
  86. package/bios/seabios/out/include/config/vga/stdvga/ports.h +0 -0
  87. package/bios/seabios/out/include/config/vga/vbe.h +0 -0
  88. package/bios/seabios/out/include/config/vga/vid.h +0 -0
  89. package/bios/seabios/out/include/config/vgahooks.h +0 -0
  90. package/bios/seabios/out/include/config/virtio/blk.h +0 -0
  91. package/bios/seabios/out/include/config/virtio/scsi.h +0 -0
  92. package/bios/seabios/out/include/config/xen.h +0 -0
  93. package/bios/seabios/out/scripts/kconfig/conf +0 -0
  94. package/bios/seabios/out/scripts/kconfig/conf.o +0 -0
  95. package/bios/seabios/out/scripts/kconfig/zconf.hash.c +289 -0
  96. package/bios/seabios/out/scripts/kconfig/zconf.lex.c +2420 -0
  97. package/bios/seabios/out/scripts/kconfig/zconf.tab.c +2538 -0
  98. package/bios/seabios/out/scripts/kconfig/zconf.tab.o +0 -0
  99. package/bios/seabios/scripts/acpi_extract.py +366 -0
  100. package/bios/seabios/scripts/acpi_extract_preprocess.py +41 -0
  101. package/bios/seabios/scripts/buildrom.py +56 -0
  102. package/bios/seabios/scripts/buildversion.py +134 -0
  103. package/bios/seabios/scripts/checkrom.py +95 -0
  104. package/bios/seabios/scripts/checkstack.py +226 -0
  105. package/bios/seabios/scripts/checksum.py +16 -0
  106. package/bios/seabios/scripts/encodeint.py +21 -0
  107. package/bios/seabios/scripts/gen-offsets.sh +17 -0
  108. package/bios/seabios/scripts/kconfig/.gitignore +22 -0
  109. package/bios/seabios/scripts/kconfig/Makefile +331 -0
  110. package/bios/seabios/scripts/kconfig/POTFILES.in +12 -0
  111. package/bios/seabios/scripts/kconfig/check.sh +13 -0
  112. package/bios/seabios/scripts/kconfig/conf.c +718 -0
  113. package/bios/seabios/scripts/kconfig/confdata.c +1250 -0
  114. package/bios/seabios/scripts/kconfig/expr.c +1168 -0
  115. package/bios/seabios/scripts/kconfig/expr.h +241 -0
  116. package/bios/seabios/scripts/kconfig/gconf.c +1542 -0
  117. package/bios/seabios/scripts/kconfig/gconf.glade +661 -0
  118. package/bios/seabios/scripts/kconfig/images.c +326 -0
  119. package/bios/seabios/scripts/kconfig/kxgettext.c +235 -0
  120. package/bios/seabios/scripts/kconfig/lex.zconf.c +2430 -0
  121. package/bios/seabios/scripts/kconfig/list.h +131 -0
  122. package/bios/seabios/scripts/kconfig/lkc.h +200 -0
  123. package/bios/seabios/scripts/kconfig/lkc_proto.h +57 -0
  124. package/bios/seabios/scripts/kconfig/lxdialog/.gitignore +4 -0
  125. package/bios/seabios/scripts/kconfig/lxdialog/BIG.FAT.WARNING +4 -0
  126. package/bios/seabios/scripts/kconfig/lxdialog/check-lxdialog.sh +87 -0
  127. package/bios/seabios/scripts/kconfig/lxdialog/checklist.c +332 -0
  128. package/bios/seabios/scripts/kconfig/lxdialog/dialog.h +257 -0
  129. package/bios/seabios/scripts/kconfig/lxdialog/inputbox.c +301 -0
  130. package/bios/seabios/scripts/kconfig/lxdialog/menubox.c +437 -0
  131. package/bios/seabios/scripts/kconfig/lxdialog/textbox.c +408 -0
  132. package/bios/seabios/scripts/kconfig/lxdialog/util.c +713 -0
  133. package/bios/seabios/scripts/kconfig/lxdialog/yesno.c +114 -0
  134. package/bios/seabios/scripts/kconfig/mconf.c +1036 -0
  135. package/bios/seabios/scripts/kconfig/menu.c +697 -0
  136. package/bios/seabios/scripts/kconfig/merge_config.sh +150 -0
  137. package/bios/seabios/scripts/kconfig/nconf.c +1556 -0
  138. package/bios/seabios/scripts/kconfig/nconf.gui.c +656 -0
  139. package/bios/seabios/scripts/kconfig/nconf.h +96 -0
  140. package/bios/seabios/scripts/kconfig/qconf.cc +1795 -0
  141. package/bios/seabios/scripts/kconfig/qconf.h +338 -0
  142. package/bios/seabios/scripts/kconfig/streamline_config.pl +647 -0
  143. package/bios/seabios/scripts/kconfig/symbol.c +1373 -0
  144. package/bios/seabios/scripts/kconfig/util.c +157 -0
  145. package/bios/seabios/scripts/kconfig/zconf.gperf +48 -0
  146. package/bios/seabios/scripts/kconfig/zconf.hash.c_shipped +289 -0
  147. package/bios/seabios/scripts/kconfig/zconf.l +363 -0
  148. package/bios/seabios/scripts/kconfig/zconf.lex.c_shipped +2420 -0
  149. package/bios/seabios/scripts/kconfig/zconf.tab.c_shipped +2538 -0
  150. package/bios/seabios/scripts/kconfig/zconf.y +733 -0
  151. package/bios/seabios/scripts/layoutrom.py +705 -0
  152. package/bios/seabios/scripts/python23compat.py +14 -0
  153. package/bios/seabios/scripts/readserial.py +190 -0
  154. package/bios/seabios/scripts/tarball.sh +36 -0
  155. package/bios/seabios/scripts/test-build.sh +90 -0
  156. package/bios/seabios/scripts/transdump.py +53 -0
  157. package/bios/seabios/scripts/vgafixup.py +96 -0
  158. package/bios/seabios/src/Kconfig +579 -0
  159. package/bios/seabios/src/apm.c +215 -0
  160. package/bios/seabios/src/asm-offsets.c +23 -0
  161. package/bios/seabios/src/biosvar.h +130 -0
  162. package/bios/seabios/src/block.c +623 -0
  163. package/bios/seabios/src/block.h +121 -0
  164. package/bios/seabios/src/bmp.c +117 -0
  165. package/bios/seabios/src/boot.c +793 -0
  166. package/bios/seabios/src/bootsplash.c +255 -0
  167. package/bios/seabios/src/bregs.h +80 -0
  168. package/bios/seabios/src/byteorder.h +71 -0
  169. package/bios/seabios/src/cdrom.c +322 -0
  170. package/bios/seabios/src/clock.c +506 -0
  171. package/bios/seabios/src/code16gcc.s +1 -0
  172. package/bios/seabios/src/config.h +108 -0
  173. package/bios/seabios/src/cp437.c +275 -0
  174. package/bios/seabios/src/cp437.h +1 -0
  175. package/bios/seabios/src/disk.c +779 -0
  176. package/bios/seabios/src/e820map.c +152 -0
  177. package/bios/seabios/src/e820map.h +26 -0
  178. package/bios/seabios/src/entryfuncs.S +165 -0
  179. package/bios/seabios/src/farptr.h +208 -0
  180. package/bios/seabios/src/font.c +139 -0
  181. package/bios/seabios/src/fw/acpi-dsdt-cpu-hotplug.dsl +78 -0
  182. package/bios/seabios/src/fw/acpi-dsdt-dbug.dsl +26 -0
  183. package/bios/seabios/src/fw/acpi-dsdt-hpet.dsl +36 -0
  184. package/bios/seabios/src/fw/acpi-dsdt-isa.dsl +102 -0
  185. package/bios/seabios/src/fw/acpi-dsdt-pci-crs.dsl +90 -0
  186. package/bios/seabios/src/fw/acpi-dsdt.dsl +342 -0
  187. package/bios/seabios/src/fw/acpi-dsdt.hex +554 -0
  188. package/bios/seabios/src/fw/acpi.c +685 -0
  189. package/bios/seabios/src/fw/biostables.c +491 -0
  190. package/bios/seabios/src/fw/coreboot.c +569 -0
  191. package/bios/seabios/src/fw/csm.c +347 -0
  192. package/bios/seabios/src/fw/dev-pci.h +52 -0
  193. package/bios/seabios/src/fw/dev-piix.h +29 -0
  194. package/bios/seabios/src/fw/dev-q35.h +52 -0
  195. package/bios/seabios/src/fw/lzmadecode.c +398 -0
  196. package/bios/seabios/src/fw/lzmadecode.h +67 -0
  197. package/bios/seabios/src/fw/mptable.c +197 -0
  198. package/bios/seabios/src/fw/mtrr.c +105 -0
  199. package/bios/seabios/src/fw/multiboot.c +111 -0
  200. package/bios/seabios/src/fw/paravirt.c +624 -0
  201. package/bios/seabios/src/fw/paravirt.h +63 -0
  202. package/bios/seabios/src/fw/pciinit.c +1187 -0
  203. package/bios/seabios/src/fw/pirtable.c +103 -0
  204. package/bios/seabios/src/fw/q35-acpi-dsdt.dsl +450 -0
  205. package/bios/seabios/src/fw/romfile_loader.c +259 -0
  206. package/bios/seabios/src/fw/romfile_loader.h +91 -0
  207. package/bios/seabios/src/fw/shadow.c +208 -0
  208. package/bios/seabios/src/fw/smbios.c +585 -0
  209. package/bios/seabios/src/fw/smm.c +269 -0
  210. package/bios/seabios/src/fw/smp.c +194 -0
  211. package/bios/seabios/src/fw/ssdt-misc.dsl +104 -0
  212. package/bios/seabios/src/fw/ssdt-misc.hex +88 -0
  213. package/bios/seabios/src/fw/ssdt-pcihp.dsl +36 -0
  214. package/bios/seabios/src/fw/ssdt-pcihp.hex +38 -0
  215. package/bios/seabios/src/fw/ssdt-proc.dsl +48 -0
  216. package/bios/seabios/src/fw/ssdt-proc.hex +35 -0
  217. package/bios/seabios/src/fw/xen.c +149 -0
  218. package/bios/seabios/src/fw/xen.h +125 -0
  219. package/bios/seabios/src/gen-defs.h +19 -0
  220. package/bios/seabios/src/hw/ahci.c +697 -0
  221. package/bios/seabios/src/hw/ahci.h +201 -0
  222. package/bios/seabios/src/hw/ata.c +1046 -0
  223. package/bios/seabios/src/hw/ata.h +163 -0
  224. package/bios/seabios/src/hw/blockcmd.c +372 -0
  225. package/bios/seabios/src/hw/blockcmd.h +114 -0
  226. package/bios/seabios/src/hw/dma.c +67 -0
  227. package/bios/seabios/src/hw/esp-scsi.c +241 -0
  228. package/bios/seabios/src/hw/esp-scsi.h +8 -0
  229. package/bios/seabios/src/hw/floppy.c +741 -0
  230. package/bios/seabios/src/hw/lsi-scsi.c +221 -0
  231. package/bios/seabios/src/hw/lsi-scsi.h +8 -0
  232. package/bios/seabios/src/hw/megasas.c +405 -0
  233. package/bios/seabios/src/hw/megasas.h +8 -0
  234. package/bios/seabios/src/hw/mpt-scsi.c +319 -0
  235. package/bios/seabios/src/hw/mpt-scsi.h +8 -0
  236. package/bios/seabios/src/hw/nvme-int.h +199 -0
  237. package/bios/seabios/src/hw/nvme.c +708 -0
  238. package/bios/seabios/src/hw/nvme.h +17 -0
  239. package/bios/seabios/src/hw/pci.c +133 -0
  240. package/bios/seabios/src/hw/pci.h +47 -0
  241. package/bios/seabios/src/hw/pci_ids.h +2632 -0
  242. package/bios/seabios/src/hw/pci_regs.h +556 -0
  243. package/bios/seabios/src/hw/pcidevice.c +192 -0
  244. package/bios/seabios/src/hw/pcidevice.h +76 -0
  245. package/bios/seabios/src/hw/pic.c +115 -0
  246. package/bios/seabios/src/hw/pic.h +60 -0
  247. package/bios/seabios/src/hw/ps2port.c +543 -0
  248. package/bios/seabios/src/hw/ps2port.h +67 -0
  249. package/bios/seabios/src/hw/pvscsi.c +333 -0
  250. package/bios/seabios/src/hw/pvscsi.h +8 -0
  251. package/bios/seabios/src/hw/ramdisk.c +108 -0
  252. package/bios/seabios/src/hw/rtc.c +100 -0
  253. package/bios/seabios/src/hw/rtc.h +75 -0
  254. package/bios/seabios/src/hw/sdcard.c +572 -0
  255. package/bios/seabios/src/hw/serialio.c +113 -0
  256. package/bios/seabios/src/hw/serialio.h +29 -0
  257. package/bios/seabios/src/hw/timer.c +259 -0
  258. package/bios/seabios/src/hw/tpm_drivers.c +636 -0
  259. package/bios/seabios/src/hw/tpm_drivers.h +127 -0
  260. package/bios/seabios/src/hw/usb-ehci.c +650 -0
  261. package/bios/seabios/src/hw/usb-ehci.h +177 -0
  262. package/bios/seabios/src/hw/usb-hid.c +442 -0
  263. package/bios/seabios/src/hw/usb-hid.h +29 -0
  264. package/bios/seabios/src/hw/usb-hub.c +205 -0
  265. package/bios/seabios/src/hw/usb-hub.h +64 -0
  266. package/bios/seabios/src/hw/usb-msc.c +222 -0
  267. package/bios/seabios/src/hw/usb-msc.h +10 -0
  268. package/bios/seabios/src/hw/usb-ohci.c +568 -0
  269. package/bios/seabios/src/hw/usb-ohci.h +144 -0
  270. package/bios/seabios/src/hw/usb-uas.c +289 -0
  271. package/bios/seabios/src/hw/usb-uas.h +9 -0
  272. package/bios/seabios/src/hw/usb-uhci.c +571 -0
  273. package/bios/seabios/src/hw/usb-uhci.h +128 -0
  274. package/bios/seabios/src/hw/usb-xhci.c +1161 -0
  275. package/bios/seabios/src/hw/usb-xhci.h +133 -0
  276. package/bios/seabios/src/hw/usb.c +499 -0
  277. package/bios/seabios/src/hw/usb.h +254 -0
  278. package/bios/seabios/src/hw/virtio-blk.c +211 -0
  279. package/bios/seabios/src/hw/virtio-blk.h +43 -0
  280. package/bios/seabios/src/hw/virtio-pci.c +501 -0
  281. package/bios/seabios/src/hw/virtio-pci.h +151 -0
  282. package/bios/seabios/src/hw/virtio-ring.c +147 -0
  283. package/bios/seabios/src/hw/virtio-ring.h +121 -0
  284. package/bios/seabios/src/hw/virtio-scsi.c +220 -0
  285. package/bios/seabios/src/hw/virtio-scsi.h +47 -0
  286. package/bios/seabios/src/jpeg.c +1055 -0
  287. package/bios/seabios/src/kbd.c +599 -0
  288. package/bios/seabios/src/list.h +91 -0
  289. package/bios/seabios/src/malloc.c +561 -0
  290. package/bios/seabios/src/malloc.h +70 -0
  291. package/bios/seabios/src/memmap.h +21 -0
  292. package/bios/seabios/src/misc.c +195 -0
  293. package/bios/seabios/src/mouse.c +342 -0
  294. package/bios/seabios/src/optionroms.c +475 -0
  295. package/bios/seabios/src/output.c +584 -0
  296. package/bios/seabios/src/output.h +68 -0
  297. package/bios/seabios/src/pcibios.c +241 -0
  298. package/bios/seabios/src/pmm.c +176 -0
  299. package/bios/seabios/src/pnpbios.c +88 -0
  300. package/bios/seabios/src/post.c +337 -0
  301. package/bios/seabios/src/resume.c +157 -0
  302. package/bios/seabios/src/romfile.c +146 -0
  303. package/bios/seabios/src/romfile.h +21 -0
  304. package/bios/seabios/src/romlayout.S +698 -0
  305. package/bios/seabios/src/sercon.c +677 -0
  306. package/bios/seabios/src/serial.c +317 -0
  307. package/bios/seabios/src/sha1.c +147 -0
  308. package/bios/seabios/src/sha1.h +8 -0
  309. package/bios/seabios/src/stacks.c +771 -0
  310. package/bios/seabios/src/stacks.h +68 -0
  311. package/bios/seabios/src/std/LegacyBios.h +985 -0
  312. package/bios/seabios/src/std/acpi.h +323 -0
  313. package/bios/seabios/src/std/bda.h +174 -0
  314. package/bios/seabios/src/std/disk.h +175 -0
  315. package/bios/seabios/src/std/mptable.h +77 -0
  316. package/bios/seabios/src/std/multiboot.h +260 -0
  317. package/bios/seabios/src/std/optionrom.h +59 -0
  318. package/bios/seabios/src/std/pirtable.h +35 -0
  319. package/bios/seabios/src/std/pmm.h +19 -0
  320. package/bios/seabios/src/std/pnpbios.h +24 -0
  321. package/bios/seabios/src/std/smbios.h +167 -0
  322. package/bios/seabios/src/std/tcg.h +554 -0
  323. package/bios/seabios/src/std/vbe.h +156 -0
  324. package/bios/seabios/src/std/vga.h +63 -0
  325. package/bios/seabios/src/string.c +251 -0
  326. package/bios/seabios/src/string.h +31 -0
  327. package/bios/seabios/src/system.c +357 -0
  328. package/bios/seabios/src/tcgbios.c +2014 -0
  329. package/bios/seabios/src/tcgbios.h +19 -0
  330. package/bios/seabios/src/types.h +156 -0
  331. package/bios/seabios/src/util.h +251 -0
  332. package/bios/seabios/src/version.c +5 -0
  333. package/bios/seabios/src/vgahooks.c +355 -0
  334. package/bios/seabios/src/x86.c +23 -0
  335. package/bios/seabios/src/x86.h +277 -0
  336. package/bios/seabios/vgasrc/Kconfig +211 -0
  337. package/bios/seabios/vgasrc/bochsdisplay.c +59 -0
  338. package/bios/seabios/vgasrc/bochsvga.c +447 -0
  339. package/bios/seabios/vgasrc/bochsvga.h +57 -0
  340. package/bios/seabios/vgasrc/cbvga.c +337 -0
  341. package/bios/seabios/vgasrc/clext.c +627 -0
  342. package/bios/seabios/vgasrc/geodevga.c +434 -0
  343. package/bios/seabios/vgasrc/geodevga.h +89 -0
  344. package/bios/seabios/vgasrc/ramfb.c +163 -0
  345. package/bios/seabios/vgasrc/stdvga.c +485 -0
  346. package/bios/seabios/vgasrc/stdvga.h +81 -0
  347. package/bios/seabios/vgasrc/stdvgaio.c +186 -0
  348. package/bios/seabios/vgasrc/stdvgamodes.c +534 -0
  349. package/bios/seabios/vgasrc/swcursor.c +96 -0
  350. package/bios/seabios/vgasrc/vbe.c +432 -0
  351. package/bios/seabios/vgasrc/vgabios.c +1131 -0
  352. package/bios/seabios/vgasrc/vgabios.h +88 -0
  353. package/bios/seabios/vgasrc/vgaentry.S +161 -0
  354. package/bios/seabios/vgasrc/vgafb.c +661 -0
  355. package/bios/seabios/vgasrc/vgafb.h +42 -0
  356. package/bios/seabios/vgasrc/vgafonts.c +785 -0
  357. package/bios/seabios/vgasrc/vgahw.h +152 -0
  358. package/bios/seabios/vgasrc/vgainit.c +202 -0
  359. package/bios/seabios/vgasrc/vgalayout.lds.S +23 -0
  360. package/bios/seabios/vgasrc/vgautil.h +103 -0
  361. package/bios/seabios/vgasrc/vgaversion.c +6 -0
  362. package/build/binaries.js +1 -1
  363. package/build/index-debug.cjs +1 -1
  364. package/build/index-debug.js +1 -1
  365. package/build/index.cjs +1 -1
  366. package/build/index.js +1 -1
  367. package/build/v86-debug.wasm +0 -0
  368. package/build/v86.wasm +0 -0
  369. package/package.json +1 -1
@@ -0,0 +1,627 @@
1
+ // QEMU Cirrus CLGD 54xx VGABIOS Extension.
2
+ //
3
+ // Copyright (C) 2009 Kevin O'Connor <kevin@koconnor.net>
4
+ // Copyright (c) 2004 Makoto Suzuki (suzu)
5
+ //
6
+ // This file may be distributed under the terms of the GNU LGPLv3 license.
7
+
8
+ #include "biosvar.h" // GET_GLOBAL
9
+ #include "bregs.h" // struct bregs
10
+ #include "hw/pci.h" // pci_config_readl
11
+ #include "hw/pci_regs.h" // PCI_BASE_ADDRESS_0
12
+ #include "output.h" // dprintf
13
+ #include "stdvga.h" // VGAREG_SEQU_ADDRESS
14
+ #include "string.h" // memset16_far
15
+ #include "vgabios.h" // SET_VGA
16
+ #include "vgautil.h" // VBE_total_memory
17
+
18
+
19
+ /****************************************************************
20
+ * Cirrus mode tables
21
+ ****************************************************************/
22
+
23
+ /* VGA */
24
+ static u16 cseq_vga[] VAR16 = {0x0007,0xffff};
25
+ static u16 cgraph_vga[] VAR16 = {0x0009,0x000a,0x000b,0xffff};
26
+ static u16 ccrtc_vga[] VAR16 = {0x001a,0x001b,0x001d,0xffff};
27
+
28
+ /* extensions */
29
+ static u16 cgraph_svgacolor[] VAR16 = {
30
+ 0x0000,0x0001,0x0002,0x0003,0x0004,0x4005,0x0506,0x0f07,0xff08,
31
+ 0x0009,0x000a,0x000b,
32
+ 0xffff
33
+ };
34
+ /* 640x480x8 */
35
+ static u16 cseq_640x480x8[] VAR16 = {
36
+ 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107,
37
+ 0x580b,0x580c,0x580d,0x580e,
38
+ 0x0412,0x0013,0x2017,
39
+ 0x331b,0x331c,0x331d,0x331e,
40
+ 0xffff
41
+ };
42
+ static u16 ccrtc_640x480x8[] VAR16 = {
43
+ 0x2c11,
44
+ 0x5f00,0x4f01,0x4f02,0x8003,0x5204,0x1e05,0x0b06,0x3e07,
45
+ 0x4009,0x000c,0x000d,
46
+ 0xea10,0xdf12,0x5013,0x4014,0xdf15,0x0b16,0xc317,0xff18,
47
+ 0x001a,0x221b,0x001d,
48
+ 0xffff
49
+ };
50
+ /* 640x480x16 */
51
+ static u16 cseq_640x480x16[] VAR16 = {
52
+ 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1707,
53
+ 0x580b,0x580c,0x580d,0x580e,
54
+ 0x0412,0x0013,0x2017,
55
+ 0x331b,0x331c,0x331d,0x331e,
56
+ 0xffff
57
+ };
58
+ static u16 ccrtc_640x480x16[] VAR16 = {
59
+ 0x2c11,
60
+ 0x5f00,0x4f01,0x4f02,0x8003,0x5204,0x1e05,0x0b06,0x3e07,
61
+ 0x4009,0x000c,0x000d,
62
+ 0xea10,0xdf12,0xa013,0x4014,0xdf15,0x0b16,0xc317,0xff18,
63
+ 0x001a,0x221b,0x001d,
64
+ 0xffff
65
+ };
66
+ /* 640x480x24 */
67
+ static u16 cseq_640x480x24[] VAR16 = {
68
+ 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1507,
69
+ 0x580b,0x580c,0x580d,0x580e,
70
+ 0x0412,0x0013,0x2017,
71
+ 0x331b,0x331c,0x331d,0x331e,
72
+ 0xffff
73
+ };
74
+ static u16 ccrtc_640x480x24[] VAR16 = {
75
+ 0x2c11,
76
+ 0x5f00,0x4f01,0x4f02,0x8003,0x5204,0x1e05,0x0b06,0x3e07,
77
+ 0x4009,0x000c,0x000d,
78
+ 0xea10,0xdf12,0xf013,0x4014,0xdf15,0x0b16,0xc317,0xff18,
79
+ 0x001a,0x221b,0x001d,
80
+ 0xffff
81
+ };
82
+ /* 800x600x8 */
83
+ static u16 cseq_800x600x8[] VAR16 = {
84
+ 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107,
85
+ 0x230b,0x230c,0x230d,0x230e,
86
+ 0x0412,0x0013,0x2017,
87
+ 0x141b,0x141c,0x141d,0x141e,
88
+ 0xffff
89
+ };
90
+ static u16 ccrtc_800x600x8[] VAR16 = {
91
+ 0x2311,0x7d00,0x6301,0x6302,0x8003,0x6b04,0x1a05,0x9806,0xf007,
92
+ 0x6009,0x000c,0x000d,
93
+ 0x7d10,0x5712,0x6413,0x4014,0x5715,0x9816,0xc317,0xff18,
94
+ 0x001a,0x221b,0x001d,
95
+ 0xffff
96
+ };
97
+ /* 800x600x16 */
98
+ static u16 cseq_800x600x16[] VAR16 = {
99
+ 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1707,
100
+ 0x230b,0x230c,0x230d,0x230e,
101
+ 0x0412,0x0013,0x2017,
102
+ 0x141b,0x141c,0x141d,0x141e,
103
+ 0xffff
104
+ };
105
+ static u16 ccrtc_800x600x16[] VAR16 = {
106
+ 0x2311,0x7d00,0x6301,0x6302,0x8003,0x6b04,0x1a05,0x9806,0xf007,
107
+ 0x6009,0x000c,0x000d,
108
+ 0x7d10,0x5712,0xc813,0x4014,0x5715,0x9816,0xc317,0xff18,
109
+ 0x001a,0x221b,0x001d,
110
+ 0xffff
111
+ };
112
+ /* 800x600x24 */
113
+ static u16 cseq_800x600x24[] VAR16 = {
114
+ 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1507,
115
+ 0x230b,0x230c,0x230d,0x230e,
116
+ 0x0412,0x0013,0x2017,
117
+ 0x141b,0x141c,0x141d,0x141e,
118
+ 0xffff
119
+ };
120
+ static u16 ccrtc_800x600x24[] VAR16 = {
121
+ 0x2311,0x7d00,0x6301,0x6302,0x8003,0x6b04,0x1a05,0x9806,0xf007,
122
+ 0x6009,0x000c,0x000d,
123
+ 0x7d10,0x5712,0x2c13,0x4014,0x5715,0x9816,0xc317,0xff18,
124
+ 0x001a,0x321b,0x001d,
125
+ 0xffff
126
+ };
127
+ /* 1024x768x8 */
128
+ static u16 cseq_1024x768x8[] VAR16 = {
129
+ 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107,
130
+ 0x760b,0x760c,0x760d,0x760e,
131
+ 0x0412,0x0013,0x2017,
132
+ 0x341b,0x341c,0x341d,0x341e,
133
+ 0xffff
134
+ };
135
+ static u16 ccrtc_1024x768x8[] VAR16 = {
136
+ 0x2911,0xa300,0x7f01,0x7f02,0x8603,0x8304,0x9405,0x2406,0xf507,
137
+ 0x6009,0x000c,0x000d,
138
+ 0x0310,0xff12,0x8013,0x4014,0xff15,0x2416,0xc317,0xff18,
139
+ 0x001a,0x221b,0x001d,
140
+ 0xffff
141
+ };
142
+ /* 1024x768x16 */
143
+ static u16 cseq_1024x768x16[] VAR16 = {
144
+ 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1707,
145
+ 0x760b,0x760c,0x760d,0x760e,
146
+ 0x0412,0x0013,0x2017,
147
+ 0x341b,0x341c,0x341d,0x341e,
148
+ 0xffff
149
+ };
150
+ static u16 ccrtc_1024x768x16[] VAR16 = {
151
+ 0x2911,0xa300,0x7f01,0x7f02,0x8603,0x8304,0x9405,0x2406,0xf507,
152
+ 0x6009,0x000c,0x000d,
153
+ 0x0310,0xff12,0x0013,0x4014,0xff15,0x2416,0xc317,0xff18,
154
+ 0x001a,0x321b,0x001d,
155
+ 0xffff
156
+ };
157
+ /* 1024x768x24 */
158
+ static u16 cseq_1024x768x24[] VAR16 = {
159
+ 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1507,
160
+ 0x760b,0x760c,0x760d,0x760e,
161
+ 0x0412,0x0013,0x2017,
162
+ 0x341b,0x341c,0x341d,0x341e,
163
+ 0xffff
164
+ };
165
+ static u16 ccrtc_1024x768x24[] VAR16 = {
166
+ 0x2911,0xa300,0x7f01,0x7f02,0x8603,0x8304,0x9405,0x2406,0xf507,
167
+ 0x6009,0x000c,0x000d,
168
+ 0x0310,0xff12,0x8013,0x4014,0xff15,0x2416,0xc317,0xff18,
169
+ 0x001a,0x321b,0x001d,
170
+ 0xffff
171
+ };
172
+ /* 1280x1024x8 */
173
+ static u16 cseq_1280x1024x8[] VAR16 = {
174
+ 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107,
175
+ 0x760b,0x760c,0x760d,0x760e,
176
+ 0x0412,0x0013,0x2017,
177
+ 0x341b,0x341c,0x341d,0x341e,
178
+ 0xffff
179
+ };
180
+ static u16 ccrtc_1280x1024x8[] VAR16 = {
181
+ 0x2911,0xc300,0x9f01,0x9f02,0x8603,0x8304,0x9405,0x2406,0xf707,
182
+ 0x6009,0x000c,0x000d,
183
+ 0x0310,0xff12,0xa013,0x4014,0xff15,0x2416,0xc317,0xff18,
184
+ 0x001a,0x221b,0x001d,
185
+ 0xffff
186
+ };
187
+ /* 1280x1024x16 */
188
+ static u16 cseq_1280x1024x16[] VAR16 = {
189
+ 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1707,
190
+ 0x760b,0x760c,0x760d,0x760e,
191
+ 0x0412,0x0013,0x2017,
192
+ 0x341b,0x341c,0x341d,0x341e,
193
+ 0xffff
194
+ };
195
+ static u16 ccrtc_1280x1024x16[] VAR16 = {
196
+ 0x2911,0xc300,0x9f01,0x9f02,0x8603,0x8304,0x9405,0x2406,0xf707,
197
+ 0x6009,0x000c,0x000d,
198
+ 0x0310,0xff12,0x4013,0x4014,0xff15,0x2416,0xc317,0xff18,
199
+ 0x001a,0x321b,0x001d,
200
+ 0xffff
201
+ };
202
+
203
+ /* 1600x1200x8 */
204
+ static u16 cseq_1600x1200x8[] VAR16 = {
205
+ 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107,
206
+ 0x760b,0x760c,0x760d,0x760e,
207
+ 0x0412,0x0013,0x2017,
208
+ 0x341b,0x341c,0x341d,0x341e,
209
+ 0xffff
210
+ };
211
+ static u16 ccrtc_1600x1200x8[] VAR16 = {
212
+ 0x2911,0xc300,0x9f01,0x9f02,0x8603,0x8304,0x9405,0x2406,0xf707,
213
+ 0x6009,0x000c,0x000d,
214
+ 0x0310,0xff12,0xc813,0x4014,0xff15,0x2416,0xc317,0xff18,
215
+ 0x001a,0x221b,0x001d,
216
+ 0xffff
217
+ };
218
+
219
+ struct cirrus_mode_s {
220
+ u16 mode, vesamode;
221
+ struct vgamode_s info;
222
+
223
+ u16 hidden_dac; /* 0x3c6 */
224
+ u16 *seq; /* 0x3c4 */
225
+ u16 *graph; /* 0x3ce */
226
+ u16 *crtc; /* 0x3d4 */
227
+ };
228
+
229
+ static struct cirrus_mode_s cirrus_modes[] VAR16 = {
230
+ {0x5f,0x101,{MM_PACKED,640,480,8,8,16,SEG_GRAPH},0x00,
231
+ cseq_640x480x8,cgraph_svgacolor,ccrtc_640x480x8},
232
+ {0x64,0x111,{MM_DIRECT,640,480,16,8,16,SEG_GRAPH},0xe1,
233
+ cseq_640x480x16,cgraph_svgacolor,ccrtc_640x480x16},
234
+ {0x66,0x110,{MM_DIRECT,640,480,15,8,16,SEG_GRAPH},0xf0,
235
+ cseq_640x480x16,cgraph_svgacolor,ccrtc_640x480x16},
236
+ {0x71,0x112,{MM_DIRECT,640,480,24,8,16,SEG_GRAPH},0xe5,
237
+ cseq_640x480x24,cgraph_svgacolor,ccrtc_640x480x24},
238
+
239
+ {0x5c,0x103,{MM_PACKED,800,600,8,8,16,SEG_GRAPH},0x00,
240
+ cseq_800x600x8,cgraph_svgacolor,ccrtc_800x600x8},
241
+ {0x65,0x114,{MM_DIRECT,800,600,16,8,16,SEG_GRAPH},0xe1,
242
+ cseq_800x600x16,cgraph_svgacolor,ccrtc_800x600x16},
243
+ {0x67,0x113,{MM_DIRECT,800,600,15,8,16,SEG_GRAPH},0xf0,
244
+ cseq_800x600x16,cgraph_svgacolor,ccrtc_800x600x16},
245
+
246
+ {0x60,0x105,{MM_PACKED,1024,768,8,8,16,SEG_GRAPH},0x00,
247
+ cseq_1024x768x8,cgraph_svgacolor,ccrtc_1024x768x8},
248
+ {0x74,0x117,{MM_DIRECT,1024,768,16,8,16,SEG_GRAPH},0xe1,
249
+ cseq_1024x768x16,cgraph_svgacolor,ccrtc_1024x768x16},
250
+ {0x68,0x116,{MM_DIRECT,1024,768,15,8,16,SEG_GRAPH},0xf0,
251
+ cseq_1024x768x16,cgraph_svgacolor,ccrtc_1024x768x16},
252
+
253
+ {0x78,0x115,{MM_DIRECT,800,600,24,8,16,SEG_GRAPH},0xe5,
254
+ cseq_800x600x24,cgraph_svgacolor,ccrtc_800x600x24},
255
+ {0x79,0x118,{MM_DIRECT,1024,768,24,8,16,SEG_GRAPH},0xe5,
256
+ cseq_1024x768x24,cgraph_svgacolor,ccrtc_1024x768x24},
257
+
258
+ {0x6d,0x107,{MM_PACKED,1280,1024,8,8,16,SEG_GRAPH},0x00,
259
+ cseq_1280x1024x8,cgraph_svgacolor,ccrtc_1280x1024x8},
260
+ {0x69,0x119,{MM_DIRECT,1280,1024,15,8,16,SEG_GRAPH},0xf0,
261
+ cseq_1280x1024x16,cgraph_svgacolor,ccrtc_1280x1024x16},
262
+ {0x75,0x11a,{MM_DIRECT,1280,1024,16,8,16,SEG_GRAPH},0xe1,
263
+ cseq_1280x1024x16,cgraph_svgacolor,ccrtc_1280x1024x16},
264
+
265
+ {0x7b,0xffff,{MM_PACKED,1600,1200,8,8,16,SEG_GRAPH},0x00,
266
+ cseq_1600x1200x8,cgraph_svgacolor,ccrtc_1600x1200x8},
267
+ };
268
+
269
+ static struct cirrus_mode_s mode_switchback VAR16 =
270
+ {0xfe,0xffff,{0xff},0,cseq_vga,cgraph_vga,ccrtc_vga};
271
+
272
+ int
273
+ is_cirrus_mode(struct vgamode_s *vmode_g)
274
+ {
275
+ return (vmode_g >= &cirrus_modes[0].info
276
+ && vmode_g <= &cirrus_modes[ARRAY_SIZE(cirrus_modes)-1].info);
277
+ }
278
+
279
+ struct vgamode_s *
280
+ clext_find_mode(int mode)
281
+ {
282
+ struct cirrus_mode_s *table_g = cirrus_modes;
283
+ while (table_g < &cirrus_modes[ARRAY_SIZE(cirrus_modes)]) {
284
+ if (GET_GLOBAL(table_g->mode) == mode
285
+ || GET_GLOBAL(table_g->vesamode) == mode)
286
+ return &table_g->info;
287
+ table_g++;
288
+ }
289
+ return stdvga_find_mode(mode);
290
+ }
291
+
292
+ void
293
+ clext_list_modes(u16 seg, u16 *dest, u16 *last)
294
+ {
295
+ int i;
296
+ for (i=0; i<ARRAY_SIZE(cirrus_modes) && dest<last; i++) {
297
+ u16 mode = GET_GLOBAL(cirrus_modes[i].vesamode);
298
+ if (mode == 0xffff)
299
+ continue;
300
+ SET_FARVAR(seg, *dest, mode);
301
+ dest++;
302
+ }
303
+ stdvga_list_modes(seg, dest, last);
304
+ }
305
+
306
+
307
+ /****************************************************************
308
+ * helper functions
309
+ ****************************************************************/
310
+
311
+ int
312
+ clext_get_window(struct vgamode_s *vmode_g, int window)
313
+ {
314
+ return stdvga_grdc_read(window + 9);
315
+ }
316
+
317
+ int
318
+ clext_set_window(struct vgamode_s *vmode_g, int window, int val)
319
+ {
320
+ if (val >= 0x100)
321
+ return -1;
322
+ stdvga_grdc_write(window + 9, val);
323
+ return 0;
324
+ }
325
+
326
+ int
327
+ clext_get_linelength(struct vgamode_s *vmode_g)
328
+ {
329
+ u16 crtc_addr = stdvga_get_crtc();
330
+ u8 reg13 = stdvga_crtc_read(crtc_addr, 0x13);
331
+ u8 reg1b = stdvga_crtc_read(crtc_addr, 0x1b);
332
+ return (((reg1b & 0x10) << 4) + reg13) * 8 / stdvga_vram_ratio(vmode_g);
333
+ }
334
+
335
+ int
336
+ clext_set_linelength(struct vgamode_s *vmode_g, int val)
337
+ {
338
+ u16 crtc_addr = stdvga_get_crtc();
339
+ val = DIV_ROUND_UP(val * stdvga_vram_ratio(vmode_g), 8);
340
+ stdvga_crtc_write(crtc_addr, 0x13, val);
341
+ stdvga_crtc_mask(crtc_addr, 0x1b, 0x10, (val & 0x100) >> 4);
342
+ return 0;
343
+ }
344
+
345
+ int
346
+ clext_get_displaystart(struct vgamode_s *vmode_g)
347
+ {
348
+ u16 crtc_addr = stdvga_get_crtc();
349
+ u8 b2 = stdvga_crtc_read(crtc_addr, 0x0c);
350
+ u8 b1 = stdvga_crtc_read(crtc_addr, 0x0d);
351
+ u8 b3 = stdvga_crtc_read(crtc_addr, 0x1b);
352
+ u8 b4 = stdvga_crtc_read(crtc_addr, 0x1d);
353
+ int val = (b1 | (b2<<8) | ((b3 & 0x01) << 16) | ((b3 & 0x0c) << 15)
354
+ | ((b4 & 0x80) << 12));
355
+ return val * 4 / stdvga_vram_ratio(vmode_g);
356
+ }
357
+
358
+ int
359
+ clext_set_displaystart(struct vgamode_s *vmode_g, int val)
360
+ {
361
+ u16 crtc_addr = stdvga_get_crtc();
362
+ val = val * stdvga_vram_ratio(vmode_g) / 4;
363
+ stdvga_crtc_write(crtc_addr, 0x0d, val);
364
+ stdvga_crtc_write(crtc_addr, 0x0c, val >> 8);
365
+ stdvga_crtc_mask(crtc_addr, 0x1d, 0x80, (val & 0x0800) >> 4);
366
+ stdvga_crtc_mask(crtc_addr, 0x1b, 0x0d
367
+ , ((val & 0x0100) >> 8) | ((val & 0x0600) >> 7));
368
+ return 0;
369
+ }
370
+
371
+ int
372
+ clext_save_restore(int cmd, u16 seg, void *data)
373
+ {
374
+ if (cmd & SR_REGISTERS)
375
+ return -1;
376
+ return stdvga_save_restore(cmd, seg, data);
377
+ }
378
+
379
+
380
+ /****************************************************************
381
+ * Mode setting
382
+ ****************************************************************/
383
+
384
+ static void
385
+ cirrus_switch_mode_setregs(u16 *data, u16 port)
386
+ {
387
+ for (;;) {
388
+ u16 val = GET_GLOBAL(*data);
389
+ if (val == 0xffff)
390
+ return;
391
+ outw(val, port);
392
+ data++;
393
+ }
394
+ }
395
+
396
+ static void
397
+ cirrus_switch_mode(struct cirrus_mode_s *table)
398
+ {
399
+ // Unlock cirrus special
400
+ stdvga_sequ_write(0x06, 0x12);
401
+ cirrus_switch_mode_setregs(GET_GLOBAL(table->seq), VGAREG_SEQU_ADDRESS);
402
+ cirrus_switch_mode_setregs(GET_GLOBAL(table->graph), VGAREG_GRDC_ADDRESS);
403
+ cirrus_switch_mode_setregs(GET_GLOBAL(table->crtc), stdvga_get_crtc());
404
+
405
+ stdvga_pelmask_write(0x00);
406
+ stdvga_pelmask_read();
407
+ stdvga_pelmask_read();
408
+ stdvga_pelmask_read();
409
+ stdvga_pelmask_read();
410
+ stdvga_pelmask_write(GET_GLOBAL(table->hidden_dac));
411
+ stdvga_pelmask_write(0xff);
412
+
413
+ u8 memmodel = GET_GLOBAL(table->info.memmodel);
414
+ u8 on = 0;
415
+ if (memmodel == MM_PLANAR)
416
+ on = 0x41;
417
+ else if (memmodel != MM_TEXT)
418
+ on = 0x01;
419
+ stdvga_attr_mask(0x10, 0x01, on);
420
+ stdvga_attrindex_write(0x20);
421
+ }
422
+
423
+ static void
424
+ cirrus_enable_16k_granularity(void)
425
+ {
426
+ stdvga_grdc_mask(0x0b, 0x00, 0x20);
427
+ }
428
+
429
+ static void
430
+ cirrus_clear_vram(u16 fill)
431
+ {
432
+ cirrus_enable_16k_granularity();
433
+ int count = GET_GLOBAL(VBE_total_memory) / (16 * 1024);
434
+ int i;
435
+ for (i=0; i<count; i++) {
436
+ stdvga_grdc_write(0x09, i);
437
+ memset16_far(SEG_GRAPH, 0, fill, 16 * 1024);
438
+ }
439
+ stdvga_grdc_write(0x09, 0x00);
440
+ }
441
+
442
+ int
443
+ clext_set_mode(struct vgamode_s *vmode_g, int flags)
444
+ {
445
+ if (!is_cirrus_mode(vmode_g)) {
446
+ cirrus_switch_mode(&mode_switchback);
447
+ dprintf(1, "cirrus mode switch regular\n");
448
+ return stdvga_set_mode(vmode_g, flags);
449
+ }
450
+ struct cirrus_mode_s *table_g = container_of(
451
+ vmode_g, struct cirrus_mode_s, info);
452
+ cirrus_switch_mode(table_g);
453
+ if (GET_GLOBAL(vmode_g->memmodel) == MM_PACKED && !(flags & MF_NOPALETTE))
454
+ stdvga_set_packed_palette();
455
+ if (!(flags & MF_LINEARFB))
456
+ cirrus_enable_16k_granularity();
457
+ if (!(flags & MF_NOCLEARMEM))
458
+ // fill with 0xff to keep win 2K happy
459
+ cirrus_clear_vram(flags & MF_LEGACY ? 0xffff : 0x0000);
460
+ return 0;
461
+ }
462
+
463
+
464
+ /****************************************************************
465
+ * extbios
466
+ ****************************************************************/
467
+
468
+ static void
469
+ clext_101280(struct bregs *regs)
470
+ {
471
+ u8 v = stdvga_crtc_read(stdvga_get_crtc(), 0x27);
472
+ if (v == 0xa0)
473
+ // 5430
474
+ regs->ax = 0x0032;
475
+ else if (v == 0xb8)
476
+ // 5446
477
+ regs->ax = 0x0039;
478
+ else
479
+ regs->ax = 0x00ff;
480
+ regs->bx = 0x00;
481
+ return;
482
+ }
483
+
484
+ static void
485
+ clext_101281(struct bregs *regs)
486
+ {
487
+ // XXX
488
+ regs->ax = 0x0100;
489
+ }
490
+
491
+ static void
492
+ clext_101282(struct bregs *regs)
493
+ {
494
+ regs->al = stdvga_crtc_read(stdvga_get_crtc(), 0x27) & 0x03;
495
+ regs->ah = 0xAF;
496
+ }
497
+
498
+ static void
499
+ clext_101285(struct bregs *regs)
500
+ {
501
+ regs->al = GET_GLOBAL(VBE_total_memory) / (64*1024);
502
+ }
503
+
504
+ static void
505
+ clext_10129a(struct bregs *regs)
506
+ {
507
+ regs->ax = 0x4060;
508
+ regs->cx = 0x1132;
509
+ }
510
+
511
+ extern void a0h_callback(void);
512
+ ASM16(
513
+ // fatal: not implemented yet
514
+ "a0h_callback:"
515
+ "cli\n"
516
+ "hlt\n"
517
+ "lretw");
518
+
519
+ static void
520
+ clext_1012a0(struct bregs *regs)
521
+ {
522
+ struct vgamode_s *table_g = clext_find_mode(regs->al & 0x7f);
523
+ regs->ah = (table_g ? 1 : 0);
524
+ regs->bx = (u32)a0h_callback;
525
+ regs->ds = regs->si = regs->es = regs->di = 0xffff;
526
+ }
527
+
528
+ static void
529
+ clext_1012a1(struct bregs *regs)
530
+ {
531
+ regs->bx = 0x0e00; // IBM 8512/8513, color
532
+ }
533
+
534
+ static void
535
+ clext_1012a2(struct bregs *regs)
536
+ {
537
+ regs->al = 0x07; // HSync 31.5 - 64.0 kHz
538
+ }
539
+
540
+ static void
541
+ clext_1012ae(struct bregs *regs)
542
+ {
543
+ regs->al = 0x01; // High Refresh 75Hz
544
+ }
545
+
546
+ static void
547
+ clext_1012XX(struct bregs *regs)
548
+ {
549
+ debug_stub(regs);
550
+ }
551
+
552
+ void
553
+ clext_1012(struct bregs *regs)
554
+ {
555
+ switch (regs->bl) {
556
+ case 0x80: clext_101280(regs); break;
557
+ case 0x81: clext_101281(regs); break;
558
+ case 0x82: clext_101282(regs); break;
559
+ case 0x85: clext_101285(regs); break;
560
+ case 0x9a: clext_10129a(regs); break;
561
+ case 0xa0: clext_1012a0(regs); break;
562
+ case 0xa1: clext_1012a1(regs); break;
563
+ case 0xa2: clext_1012a2(regs); break;
564
+ case 0xae: clext_1012ae(regs); break;
565
+ default: clext_1012XX(regs); break;
566
+ }
567
+ }
568
+
569
+
570
+ /****************************************************************
571
+ * init
572
+ ****************************************************************/
573
+
574
+ static int
575
+ cirrus_check(void)
576
+ {
577
+ stdvga_sequ_write(0x06, 0x92);
578
+ return stdvga_sequ_read(0x06) == 0x12;
579
+ }
580
+
581
+ static u8
582
+ cirrus_get_memsize(void)
583
+ {
584
+ // get DRAM band width
585
+ u8 v = stdvga_sequ_read(0x0f);
586
+ u8 x = (v >> 3) & 0x03;
587
+ if (x == 0x03 && v & 0x80)
588
+ // 4MB
589
+ return 0x40;
590
+ return 0x04 << x;
591
+ }
592
+
593
+ int
594
+ clext_setup(void)
595
+ {
596
+ int ret = stdvga_setup();
597
+ if (ret)
598
+ return ret;
599
+
600
+ dprintf(1, "cirrus init\n");
601
+ if (! cirrus_check())
602
+ return -1;
603
+ dprintf(1, "cirrus init 2\n");
604
+
605
+ // memory setup
606
+ stdvga_sequ_write(0x0a, stdvga_sequ_read(0x0f) & 0x18);
607
+ // set vga mode
608
+ stdvga_sequ_write(0x07, 0x00);
609
+ // reset bitblt
610
+ stdvga_grdc_write(0x31, 0x04);
611
+ stdvga_grdc_write(0x31, 0x00);
612
+
613
+ if (GET_GLOBAL(HaveRunInit))
614
+ return 0;
615
+
616
+ u32 lfb_addr = 0;
617
+ int bdf = GET_GLOBAL(VgaBDF);
618
+ if (CONFIG_VGA_PCI && bdf >= 0)
619
+ lfb_addr = (pci_config_readl(bdf, PCI_BASE_ADDRESS_0)
620
+ & PCI_BASE_ADDRESS_MEM_MASK);
621
+ SET_VGA(VBE_framebuffer, lfb_addr);
622
+ u16 totalmem = cirrus_get_memsize();
623
+ SET_VGA(VBE_total_memory, totalmem * 64 * 1024);
624
+ SET_VGA(VBE_win_granularity, 16);
625
+
626
+ return 0;
627
+ }