v86 0.3.4 → 0.3.7

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 +4 -4
  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,333 @@
1
+ // QEMU VMWARE Paravirtualized SCSI boot support.
2
+ //
3
+ // Copyright (c) 2013 Ravello Systems LTD (http://ravellosystems.com)
4
+ //
5
+ // Authors:
6
+ // Evgeny Budilovsky <evgeny.budilovsky@ravellosystems.com>
7
+ //
8
+ // This file may be distributed under the terms of the GNU LGPLv3 license.
9
+
10
+ #include "block.h" // struct drive_s
11
+ #include "blockcmd.h" // scsi_drive_setup
12
+ #include "config.h" // CONFIG_*
13
+ #include "malloc.h" // free
14
+ #include "memmap.h" // PAGE_SHIFT, virt_to_phys
15
+ #include "output.h" // dprintf
16
+ #include "pcidevice.h" // foreachpci
17
+ #include "pci_ids.h" // PCI_DEVICE_ID_VMWARE_PVSCSI
18
+ #include "pci_regs.h" // PCI_VENDOR_ID
19
+ #include "pvscsi.h" // pvscsi_setup
20
+ #include "stacks.h" // run_thread
21
+ #include "std/disk.h" // DISK_RET_SUCCESS
22
+ #include "string.h" // memset
23
+ #include "util.h" // usleep
24
+ #include "x86.h" // writel
25
+
26
+ #define MASK(n) ((1 << (n)) - 1)
27
+
28
+ #define SIMPLE_QUEUE_TAG 0x20
29
+
30
+ #define PVSCSI_INTR_CMPL_0 (1 << 0)
31
+ #define PVSCSI_INTR_CMPL_1 (1 << 1)
32
+ #define PVSCSI_INTR_CMPL_MASK MASK(2)
33
+
34
+ #define PVSCSI_INTR_MSG_0 (1 << 2)
35
+ #define PVSCSI_INTR_MSG_1 (1 << 3)
36
+ #define PVSCSI_INTR_MSG_MASK (MASK(2) << 2)
37
+ #define PVSCSI_INTR_ALL_SUPPORTED MASK(4)
38
+
39
+ #define PVSCSI_FLAG_CMD_WITH_SG_LIST (1 << 0)
40
+ #define PVSCSI_FLAG_CMD_OUT_OF_BAND_CDB (1 << 1)
41
+ #define PVSCSI_FLAG_CMD_DIR_NONE (1 << 2)
42
+ #define PVSCSI_FLAG_CMD_DIR_TOHOST (1 << 3)
43
+ #define PVSCSI_FLAG_CMD_DIR_TODEVICE (1 << 4)
44
+
45
+ enum PVSCSIRegOffset {
46
+ PVSCSI_REG_OFFSET_COMMAND = 0x0,
47
+ PVSCSI_REG_OFFSET_COMMAND_DATA = 0x4,
48
+ PVSCSI_REG_OFFSET_COMMAND_STATUS = 0x8,
49
+ PVSCSI_REG_OFFSET_LAST_STS_0 = 0x100,
50
+ PVSCSI_REG_OFFSET_LAST_STS_1 = 0x104,
51
+ PVSCSI_REG_OFFSET_LAST_STS_2 = 0x108,
52
+ PVSCSI_REG_OFFSET_LAST_STS_3 = 0x10c,
53
+ PVSCSI_REG_OFFSET_INTR_STATUS = 0x100c,
54
+ PVSCSI_REG_OFFSET_INTR_MASK = 0x2010,
55
+ PVSCSI_REG_OFFSET_KICK_NON_RW_IO = 0x3014,
56
+ PVSCSI_REG_OFFSET_DEBUG = 0x3018,
57
+ PVSCSI_REG_OFFSET_KICK_RW_IO = 0x4018,
58
+ };
59
+
60
+ enum PVSCSICommands {
61
+ PVSCSI_CMD_FIRST = 0,
62
+ PVSCSI_CMD_ADAPTER_RESET = 1,
63
+ PVSCSI_CMD_ISSUE_SCSI = 2,
64
+ PVSCSI_CMD_SETUP_RINGS = 3,
65
+ PVSCSI_CMD_RESET_BUS = 4,
66
+ PVSCSI_CMD_RESET_DEVICE = 5,
67
+ PVSCSI_CMD_ABORT_CMD = 6,
68
+ PVSCSI_CMD_CONFIG = 7,
69
+ PVSCSI_CMD_SETUP_MSG_RING = 8,
70
+ PVSCSI_CMD_DEVICE_UNPLUG = 9,
71
+ PVSCSI_CMD_LAST = 10
72
+ };
73
+
74
+ #define PVSCSI_SETUP_RINGS_MAX_NUM_PAGES 32
75
+ struct PVSCSICmdDescSetupRings {
76
+ u32 reqRingNumPages;
77
+ u32 cmpRingNumPages;
78
+ u64 ringsStatePPN;
79
+ u64 reqRingPPNs[PVSCSI_SETUP_RINGS_MAX_NUM_PAGES];
80
+ u64 cmpRingPPNs[PVSCSI_SETUP_RINGS_MAX_NUM_PAGES];
81
+ } PACKED;
82
+
83
+ struct PVSCSIRingCmpDesc {
84
+ u64 context;
85
+ u64 dataLen;
86
+ u32 senseLen;
87
+ u16 hostStatus;
88
+ u16 scsiStatus;
89
+ u32 pad[2];
90
+ } PACKED;
91
+
92
+ struct PVSCSIRingsState {
93
+ u32 reqProdIdx;
94
+ u32 reqConsIdx;
95
+ u32 reqNumEntriesLog2;
96
+
97
+ u32 cmpProdIdx;
98
+ u32 cmpConsIdx;
99
+ u32 cmpNumEntriesLog2;
100
+
101
+ u8 pad[104];
102
+
103
+ u32 msgProdIdx;
104
+ u32 msgConsIdx;
105
+ u32 msgNumEntriesLog2;
106
+ } PACKED;
107
+
108
+ struct PVSCSIRingReqDesc {
109
+ u64 context;
110
+ u64 dataAddr;
111
+ u64 dataLen;
112
+ u64 senseAddr;
113
+ u32 senseLen;
114
+ u32 flags;
115
+ u8 cdb[16];
116
+ u8 cdbLen;
117
+ u8 lun[8];
118
+ u8 tag;
119
+ u8 bus;
120
+ u8 target;
121
+ u8 vcpuHint;
122
+ u8 unused[59];
123
+ } PACKED;
124
+
125
+ struct pvscsi_ring_dsc_s {
126
+ struct PVSCSIRingsState *ring_state;
127
+ struct PVSCSIRingReqDesc *ring_reqs;
128
+ struct PVSCSIRingCmpDesc *ring_cmps;
129
+ };
130
+
131
+ struct pvscsi_lun_s {
132
+ struct drive_s drive;
133
+ void *iobase;
134
+ u8 target;
135
+ u8 lun;
136
+ struct pvscsi_ring_dsc_s *ring_dsc;
137
+ };
138
+
139
+ static void
140
+ pvscsi_write_cmd_desc(void *iobase, u32 cmd, const void *desc, size_t len)
141
+ {
142
+ const u32 *ptr = desc;
143
+ size_t i;
144
+
145
+ len /= sizeof(*ptr);
146
+ writel(iobase + PVSCSI_REG_OFFSET_COMMAND, cmd);
147
+ for (i = 0; i < len; i++)
148
+ writel(iobase + PVSCSI_REG_OFFSET_COMMAND_DATA, ptr[i]);
149
+ }
150
+
151
+ static void
152
+ pvscsi_kick_rw_io(void *iobase)
153
+ {
154
+ writel(iobase + PVSCSI_REG_OFFSET_KICK_RW_IO, 0);
155
+ }
156
+
157
+ static void
158
+ pvscsi_wait_intr_cmpl(void *iobase)
159
+ {
160
+ while (!(readl(iobase + PVSCSI_REG_OFFSET_INTR_STATUS) & PVSCSI_INTR_CMPL_MASK))
161
+ usleep(5);
162
+ writel(iobase + PVSCSI_REG_OFFSET_INTR_STATUS, PVSCSI_INTR_CMPL_MASK);
163
+ }
164
+
165
+ static void
166
+ pvscsi_init_rings(void *iobase, struct pvscsi_ring_dsc_s **ring_dsc)
167
+ {
168
+ struct PVSCSICmdDescSetupRings cmd = {0,};
169
+
170
+ struct pvscsi_ring_dsc_s *dsc = memalign_high(PAGE_SIZE, sizeof(*dsc));
171
+ if (!dsc) {
172
+ warn_noalloc();
173
+ return;
174
+ }
175
+
176
+ dsc->ring_state =
177
+ (struct PVSCSIRingsState *)memalign_high(PAGE_SIZE, PAGE_SIZE);
178
+ dsc->ring_reqs =
179
+ (struct PVSCSIRingReqDesc *)memalign_high(PAGE_SIZE, PAGE_SIZE);
180
+ dsc->ring_cmps =
181
+ (struct PVSCSIRingCmpDesc *)memalign_high(PAGE_SIZE, PAGE_SIZE);
182
+ if (!dsc->ring_state || !dsc->ring_reqs || !dsc->ring_cmps) {
183
+ warn_noalloc();
184
+ return;
185
+ }
186
+ memset(dsc->ring_state, 0, PAGE_SIZE);
187
+ memset(dsc->ring_reqs, 0, PAGE_SIZE);
188
+ memset(dsc->ring_cmps, 0, PAGE_SIZE);
189
+
190
+ cmd.reqRingNumPages = 1;
191
+ cmd.cmpRingNumPages = 1;
192
+ cmd.ringsStatePPN = virt_to_phys(dsc->ring_state) >> PAGE_SHIFT;
193
+ cmd.reqRingPPNs[0] = virt_to_phys(dsc->ring_reqs) >> PAGE_SHIFT;
194
+ cmd.cmpRingPPNs[0] = virt_to_phys(dsc->ring_cmps) >> PAGE_SHIFT;
195
+
196
+ pvscsi_write_cmd_desc(iobase, PVSCSI_CMD_SETUP_RINGS,
197
+ &cmd, sizeof(cmd));
198
+ *ring_dsc = dsc;
199
+ }
200
+
201
+ static u32
202
+ pvscsi_get_rsp(struct PVSCSIRingsState *s,
203
+ struct PVSCSIRingCmpDesc *rsp)
204
+ {
205
+ u32 status = rsp->hostStatus;
206
+ s->cmpConsIdx = s->cmpConsIdx + 1;
207
+ return status;
208
+ }
209
+
210
+ int
211
+ pvscsi_process_op(struct disk_op_s *op)
212
+ {
213
+ if (!CONFIG_PVSCSI)
214
+ return DISK_RET_EBADTRACK;
215
+ struct pvscsi_lun_s *plun =
216
+ container_of(op->drive_fl, struct pvscsi_lun_s, drive);
217
+ struct pvscsi_ring_dsc_s *ring_dsc = plun->ring_dsc;
218
+ struct PVSCSIRingsState *s = ring_dsc->ring_state;
219
+ u32 req_entries = s->reqNumEntriesLog2;
220
+ u32 cmp_entries = s->cmpNumEntriesLog2;
221
+ struct PVSCSIRingReqDesc *req;
222
+ struct PVSCSIRingCmpDesc *rsp;
223
+ u32 status;
224
+
225
+ if (s->reqProdIdx - s->cmpConsIdx >= 1 << req_entries) {
226
+ dprintf(1, "pvscsi: ring full: reqProdIdx=%d cmpConsIdx=%d\n",
227
+ s->reqProdIdx, s->cmpConsIdx);
228
+ return DISK_RET_EBADTRACK;
229
+ }
230
+
231
+ req = ring_dsc->ring_reqs + (s->reqProdIdx & MASK(req_entries));
232
+ int blocksize = scsi_fill_cmd(op, req->cdb, 16);
233
+ if (blocksize < 0)
234
+ return default_process_op(op);
235
+ req->bus = 0;
236
+ req->target = plun->target;
237
+ memset(req->lun, 0, sizeof(req->lun));
238
+ req->lun[1] = plun->lun;
239
+ req->senseLen = 0;
240
+ req->senseAddr = 0;
241
+ req->cdbLen = 16;
242
+ req->vcpuHint = 0;
243
+ req->tag = SIMPLE_QUEUE_TAG;
244
+ req->flags = scsi_is_read(op) ?
245
+ PVSCSI_FLAG_CMD_DIR_TOHOST : PVSCSI_FLAG_CMD_DIR_TODEVICE;
246
+ req->dataLen = op->count * blocksize;
247
+ req->dataAddr = (u32)op->buf_fl;
248
+ s->reqProdIdx = s->reqProdIdx + 1;
249
+
250
+ pvscsi_kick_rw_io(plun->iobase);
251
+ pvscsi_wait_intr_cmpl(plun->iobase);
252
+
253
+ rsp = ring_dsc->ring_cmps + (s->cmpConsIdx & MASK(cmp_entries));
254
+ status = pvscsi_get_rsp(s, rsp);
255
+
256
+ return status == 0 ? DISK_RET_SUCCESS : DISK_RET_EBADTRACK;
257
+ }
258
+
259
+ static int
260
+ pvscsi_add_lun(struct pci_device *pci, void *iobase,
261
+ struct pvscsi_ring_dsc_s *ring_dsc, u8 target, u8 lun)
262
+ {
263
+ struct pvscsi_lun_s *plun = malloc_fseg(sizeof(*plun));
264
+ if (!plun) {
265
+ warn_noalloc();
266
+ return -1;
267
+ }
268
+ memset(plun, 0, sizeof(*plun));
269
+ plun->drive.type = DTYPE_PVSCSI;
270
+ plun->drive.cntl_id = pci->bdf;
271
+ plun->target = target;
272
+ plun->lun = lun;
273
+ plun->iobase = iobase;
274
+ plun->ring_dsc = ring_dsc;
275
+
276
+ char *name = znprintf(MAXDESCSIZE, "pvscsi %pP %d:%d", pci, target, lun);
277
+ int prio = bootprio_find_scsi_device(pci, target, lun);
278
+ int ret = scsi_drive_setup(&plun->drive, name, prio);
279
+ free(name);
280
+ if (ret)
281
+ goto fail;
282
+ return 0;
283
+
284
+ fail:
285
+ free(plun);
286
+ return -1;
287
+ }
288
+
289
+ static void
290
+ pvscsi_scan_target(struct pci_device *pci, void *iobase,
291
+ struct pvscsi_ring_dsc_s *ring_dsc, u8 target)
292
+ {
293
+ /* pvscsi has no more than a single lun per target */
294
+ pvscsi_add_lun(pci, iobase, ring_dsc, target, 0);
295
+ }
296
+
297
+ static void
298
+ init_pvscsi(void *data)
299
+ {
300
+ struct pci_device *pci = data;
301
+ void *iobase = pci_enable_membar(pci, PCI_BASE_ADDRESS_0);
302
+ if (!iobase)
303
+ return;
304
+ pci_enable_busmaster(pci);
305
+
306
+ dprintf(1, "found pvscsi at %pP, io @ %p\n", pci, iobase);
307
+
308
+ pvscsi_write_cmd_desc(iobase, PVSCSI_CMD_ADAPTER_RESET, NULL, 0);
309
+
310
+ struct pvscsi_ring_dsc_s *ring_dsc = NULL;
311
+ pvscsi_init_rings(iobase, &ring_dsc);
312
+ int i;
313
+ for (i = 0; i < 64; i++)
314
+ pvscsi_scan_target(pci, iobase, ring_dsc, i);
315
+ }
316
+
317
+ void
318
+ pvscsi_setup(void)
319
+ {
320
+ ASSERT32FLAT();
321
+ if (! CONFIG_PVSCSI)
322
+ return;
323
+
324
+ dprintf(3, "init pvscsi\n");
325
+
326
+ struct pci_device *pci;
327
+ foreachpci(pci) {
328
+ if (pci->vendor != PCI_VENDOR_ID_VMWARE
329
+ || pci->device != PCI_DEVICE_ID_VMWARE_PVSCSI)
330
+ continue;
331
+ run_thread(init_pvscsi, pci);
332
+ }
333
+ }
@@ -0,0 +1,8 @@
1
+ #ifndef _PVSCSI_H_
2
+ #define _PVSCSI_H_
3
+
4
+ struct disk_op_s;
5
+ int pvscsi_process_op(struct disk_op_s *op);
6
+ void pvscsi_setup(void);
7
+
8
+ #endif /* _PVSCSI_H_ */
@@ -0,0 +1,108 @@
1
+ // Code for emulating a drive via high-memory accesses.
2
+ //
3
+ // Copyright (C) 2009 Kevin O'Connor <kevin@koconnor.net>
4
+ //
5
+ // This file may be distributed under the terms of the GNU LGPLv3 license.
6
+
7
+ #include "biosvar.h" // GET_GLOBALFLAT
8
+ #include "block.h" // struct drive_s
9
+ #include "bregs.h" // struct bregs
10
+ #include "e820map.h" // e820_add
11
+ #include "malloc.h" // memalign_tmphigh
12
+ #include "memmap.h" // PAGE_SIZE
13
+ #include "output.h" // dprintf
14
+ #include "romfile.h" // romfile_findprefix
15
+ #include "stacks.h" // call16_int
16
+ #include "std/disk.h" // DISK_RET_SUCCESS
17
+ #include "string.h" // memset
18
+ #include "util.h" // process_ramdisk_op
19
+
20
+ void
21
+ ramdisk_setup(void)
22
+ {
23
+ if (!CONFIG_FLASH_FLOPPY)
24
+ return;
25
+
26
+ // Find image.
27
+ struct romfile_s *file = romfile_findprefix("floppyimg/", NULL);
28
+ if (!file)
29
+ return;
30
+ const char *filename = file->name;
31
+ u32 size = file->size;
32
+ dprintf(3, "Found floppy file %s of size %d\n", filename, size);
33
+ int ftype = find_floppy_type(size);
34
+ if (ftype < 0) {
35
+ dprintf(3, "No floppy type found for ramdisk size\n");
36
+ return;
37
+ }
38
+
39
+ // Allocate ram for image.
40
+ void *pos = memalign_tmphigh(PAGE_SIZE, size);
41
+ if (!pos) {
42
+ warn_noalloc();
43
+ return;
44
+ }
45
+ e820_add((u32)pos, size, E820_RESERVED);
46
+
47
+ // Copy image into ram.
48
+ int ret = file->copy(file, pos, size);
49
+ if (ret < 0)
50
+ return;
51
+
52
+ // Setup driver.
53
+ struct drive_s *drive = init_floppy((u32)pos, ftype);
54
+ if (!drive)
55
+ return;
56
+ drive->type = DTYPE_RAMDISK;
57
+ dprintf(1, "Mapping floppy %s to addr %p\n", filename, pos);
58
+ char *desc = znprintf(MAXDESCSIZE, "Ramdisk [%s]", &filename[10]);
59
+ boot_add_floppy(drive, desc, bootprio_find_named_rom(filename, 0));
60
+ }
61
+
62
+ static int
63
+ ramdisk_copy(struct disk_op_s *op, int iswrite)
64
+ {
65
+ u32 offset = GET_GLOBALFLAT(op->drive_fl->cntl_id);
66
+ offset += (u32)op->lba * DISK_SECTOR_SIZE;
67
+ u64 opd = GDT_DATA | GDT_LIMIT(0xfffff) | GDT_BASE((u32)op->buf_fl);
68
+ u64 ramd = GDT_DATA | GDT_LIMIT(0xfffff) | GDT_BASE(offset);
69
+
70
+ u64 gdt[6];
71
+ if (iswrite) {
72
+ gdt[2] = opd;
73
+ gdt[3] = ramd;
74
+ } else {
75
+ gdt[2] = ramd;
76
+ gdt[3] = opd;
77
+ }
78
+
79
+ // Call int 1587 to copy data.
80
+ struct bregs br;
81
+ memset(&br, 0, sizeof(br));
82
+ br.flags = F_CF|F_IF;
83
+ br.ah = 0x87;
84
+ br.es = GET_SEG(SS);
85
+ br.si = (u32)gdt;
86
+ br.cx = op->count * DISK_SECTOR_SIZE / 2;
87
+ call16_int(0x15, &br);
88
+
89
+ if (br.flags & F_CF)
90
+ return DISK_RET_EBADTRACK;
91
+ return DISK_RET_SUCCESS;
92
+ }
93
+
94
+ int
95
+ ramdisk_process_op(struct disk_op_s *op)
96
+ {
97
+ if (!CONFIG_FLASH_FLOPPY)
98
+ return 0;
99
+
100
+ switch (op->command) {
101
+ case CMD_READ:
102
+ return ramdisk_copy(op, 0);
103
+ case CMD_WRITE:
104
+ return ramdisk_copy(op, 1);
105
+ default:
106
+ return default_process_op(op);
107
+ }
108
+ }
@@ -0,0 +1,100 @@
1
+ // Support for MC146818 Real Time Clock chip.
2
+ //
3
+ // Copyright (C) 2008-2013 Kevin O'Connor <kevin@koconnor.net>
4
+ // Copyright (C) 2002 MandrakeSoft S.A.
5
+ //
6
+ // This file may be distributed under the terms of the GNU LGPLv3 license.
7
+
8
+ #include "biosvar.h" // GET_LOW
9
+ #include "rtc.h" // rtc_read
10
+ #include "stacks.h" // yield
11
+ #include "util.h" // timer_calc
12
+ #include "x86.h" // inb
13
+
14
+ u8
15
+ rtc_read(u8 index)
16
+ {
17
+ index |= NMI_DISABLE_BIT;
18
+ outb(index, PORT_CMOS_INDEX);
19
+ return inb(PORT_CMOS_DATA);
20
+ }
21
+
22
+ void
23
+ rtc_write(u8 index, u8 val)
24
+ {
25
+ index |= NMI_DISABLE_BIT;
26
+ outb(index, PORT_CMOS_INDEX);
27
+ outb(val, PORT_CMOS_DATA);
28
+ }
29
+
30
+ void
31
+ rtc_mask(u8 index, u8 off, u8 on)
32
+ {
33
+ index |= NMI_DISABLE_BIT;
34
+ outb(index, PORT_CMOS_INDEX);
35
+ u8 val = inb(PORT_CMOS_DATA);
36
+ outb((val & ~off) | on, PORT_CMOS_DATA);
37
+ }
38
+
39
+ int
40
+ rtc_updating(void)
41
+ {
42
+ // This function checks to see if the update-in-progress bit
43
+ // is set in CMOS Status Register A. If not, it returns 0.
44
+ // If it is set, it tries to wait until there is a transition
45
+ // to 0, and will return 0 if such a transition occurs. A -1
46
+ // is returned only after timing out. The maximum period
47
+ // that this bit should be set is constrained to (1984+244)
48
+ // useconds, but we wait for longer just to be sure.
49
+
50
+ if ((rtc_read(CMOS_STATUS_A) & RTC_A_UIP) == 0)
51
+ return 0;
52
+ u32 end = timer_calc(15);
53
+ for (;;) {
54
+ if ((rtc_read(CMOS_STATUS_A) & RTC_A_UIP) == 0)
55
+ return 0;
56
+ if (timer_check(end))
57
+ // update-in-progress never transitioned to 0
58
+ return -1;
59
+ yield();
60
+ }
61
+ }
62
+
63
+ void
64
+ rtc_setup(void)
65
+ {
66
+ if (!CONFIG_RTC_TIMER)
67
+ return;
68
+ rtc_write(CMOS_STATUS_A, 0x26); // 32,768Khz src, 976.5625us updates
69
+ rtc_mask(CMOS_STATUS_B, ~RTC_B_DSE, RTC_B_24HR);
70
+ rtc_read(CMOS_STATUS_C);
71
+ rtc_read(CMOS_STATUS_D);
72
+ }
73
+
74
+ int RTCusers VARLOW;
75
+
76
+ void
77
+ rtc_use(void)
78
+ {
79
+ if (!CONFIG_RTC_TIMER)
80
+ return;
81
+ int count = GET_LOW(RTCusers);
82
+ SET_LOW(RTCusers, count+1);
83
+ if (count)
84
+ return;
85
+ // Turn on the Periodic Interrupt timer
86
+ rtc_mask(CMOS_STATUS_B, 0, RTC_B_PIE);
87
+ }
88
+
89
+ void
90
+ rtc_release(void)
91
+ {
92
+ if (!CONFIG_RTC_TIMER)
93
+ return;
94
+ int count = GET_LOW(RTCusers);
95
+ SET_LOW(RTCusers, count-1);
96
+ if (count != 1)
97
+ return;
98
+ // Clear the Periodic Interrupt.
99
+ rtc_mask(CMOS_STATUS_B, RTC_B_PIE, 0);
100
+ }
@@ -0,0 +1,75 @@
1
+ #ifndef __RTC_H
2
+ #define __RTC_H
3
+
4
+ #define PORT_CMOS_INDEX 0x0070
5
+ #define PORT_CMOS_DATA 0x0071
6
+
7
+ // PORT_CMOS_INDEX nmi disable bit
8
+ #define NMI_DISABLE_BIT 0x80
9
+
10
+ // Standard BIOS RTC chip entries
11
+ #define CMOS_RTC_SECONDS 0x00
12
+ #define CMOS_RTC_SECONDS_ALARM 0x01
13
+ #define CMOS_RTC_MINUTES 0x02
14
+ #define CMOS_RTC_MINUTES_ALARM 0x03
15
+ #define CMOS_RTC_HOURS 0x04
16
+ #define CMOS_RTC_HOURS_ALARM 0x05
17
+ #define CMOS_RTC_DAY_WEEK 0x06
18
+ #define CMOS_RTC_DAY_MONTH 0x07
19
+ #define CMOS_RTC_MONTH 0x08
20
+ #define CMOS_RTC_YEAR 0x09
21
+ #define CMOS_STATUS_A 0x0a
22
+ #define CMOS_STATUS_B 0x0b
23
+ #define CMOS_STATUS_C 0x0c
24
+ #define CMOS_STATUS_D 0x0d
25
+ #define CMOS_RESET_CODE 0x0f
26
+
27
+ // QEMU cmos config fields. DO NOT ADD MORE. (All new content should
28
+ // be passed via the fw_cfg "file" interface.)
29
+ #define CMOS_FLOPPY_DRIVE_TYPE 0x10
30
+ #define CMOS_DISK_DATA 0x12
31
+ #define CMOS_EQUIPMENT_INFO 0x14
32
+ #define CMOS_DISK_DRIVE1_TYPE 0x19
33
+ #define CMOS_DISK_DRIVE2_TYPE 0x1a
34
+ #define CMOS_DISK_DRIVE1_CYL 0x1b
35
+ #define CMOS_DISK_DRIVE2_CYL 0x24
36
+ #define CMOS_MEM_EXTMEM_LOW 0x30
37
+ #define CMOS_MEM_EXTMEM_HIGH 0x31
38
+ #define CMOS_CENTURY 0x32
39
+ #define CMOS_MEM_EXTMEM2_LOW 0x34
40
+ #define CMOS_MEM_EXTMEM2_HIGH 0x35
41
+ #define CMOS_BIOS_BOOTFLAG1 0x38
42
+ #define CMOS_BIOS_DISKTRANSFLAG 0x39
43
+ #define CMOS_BIOS_BOOTFLAG2 0x3d
44
+ #define CMOS_MEM_HIGHMEM_LOW 0x5b
45
+ #define CMOS_MEM_HIGHMEM_MID 0x5c
46
+ #define CMOS_MEM_HIGHMEM_HIGH 0x5d
47
+ #define CMOS_BIOS_SMP_COUNT 0x5f
48
+
49
+ // RTC register flags
50
+ #define RTC_A_UIP 0x80
51
+
52
+ #define RTC_B_SET 0x80
53
+ #define RTC_B_PIE 0x40
54
+ #define RTC_B_AIE 0x20
55
+ #define RTC_B_UIE 0x10
56
+ #define RTC_B_BIN 0x04
57
+ #define RTC_B_24HR 0x02
58
+ #define RTC_B_DSE 0x01
59
+
60
+ #ifndef __ASSEMBLY__
61
+
62
+ #include "types.h" // u8
63
+
64
+ // rtc.c
65
+ u8 rtc_read(u8 index);
66
+ void rtc_write(u8 index, u8 val);
67
+ void rtc_mask(u8 index, u8 off, u8 on);
68
+ int rtc_updating(void);
69
+ void rtc_setup(void);
70
+ void rtc_use(void);
71
+ void rtc_release(void);
72
+
73
+ #endif // !__ASSEMBLY__
74
+
75
+ #endif // rtc.h