v86 0.3.7 → 0.5.10

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 (386) hide show
  1. package/Readme.md +64 -108
  2. package/build/libv86-debug.js +12677 -0
  3. package/build/libv86-debug.mjs +732 -0
  4. package/build/libv86.js +710 -0
  5. package/build/libv86.mjs +636 -0
  6. package/build/v86-debug.wasm +0 -0
  7. package/build/v86-fallback.wasm +0 -0
  8. package/build/v86.wasm +0 -0
  9. package/package.json +12 -35
  10. package/bios/.gitignore +0 -1
  11. package/bios/COPYING.LESSER +0 -165
  12. package/bios/bochs-bios.bin +0 -0
  13. package/bios/bochs-vgabios.bin +0 -0
  14. package/bios/fetch-and-build-seabios.sh +0 -13
  15. package/bios/seabios/.config +0 -113
  16. package/bios/seabios/.config.old +0 -114
  17. package/bios/seabios/.gitignore +0 -4
  18. package/bios/seabios/COPYING +0 -674
  19. package/bios/seabios/COPYING.LESSER +0 -165
  20. package/bios/seabios/Makefile +0 -286
  21. package/bios/seabios/README +0 -17
  22. package/bios/seabios/docs/Build_overview.md +0 -104
  23. package/bios/seabios/docs/Contributing.md +0 -20
  24. package/bios/seabios/docs/Debugging.md +0 -111
  25. package/bios/seabios/docs/Developer_Documentation.md +0 -25
  26. package/bios/seabios/docs/Developer_links.md +0 -86
  27. package/bios/seabios/docs/Download.md +0 -27
  28. package/bios/seabios/docs/Execution_and_code_flow.md +0 -178
  29. package/bios/seabios/docs/Linking_overview.md +0 -160
  30. package/bios/seabios/docs/Mailinglist.md +0 -8
  31. package/bios/seabios/docs/Memory_Model.md +0 -253
  32. package/bios/seabios/docs/README +0 -5
  33. package/bios/seabios/docs/Releases.md +0 -482
  34. package/bios/seabios/docs/Runtime_config.md +0 -193
  35. package/bios/seabios/docs/SeaBIOS.md +0 -17
  36. package/bios/seabios/docs/SeaVGABIOS.md +0 -39
  37. package/bios/seabios/out/autoconf.h +0 -117
  38. package/bios/seabios/out/include/config/acpi/dsdt.h +0 -0
  39. package/bios/seabios/out/include/config/acpi.h +0 -0
  40. package/bios/seabios/out/include/config/ahci.h +0 -0
  41. package/bios/seabios/out/include/config/apmbios.h +0 -0
  42. package/bios/seabios/out/include/config/ata/dma.h +0 -0
  43. package/bios/seabios/out/include/config/ata/pio32.h +0 -0
  44. package/bios/seabios/out/include/config/ata.h +0 -0
  45. package/bios/seabios/out/include/config/auto.conf +0 -69
  46. package/bios/seabios/out/include/config/auto.conf.cmd +0 -9
  47. package/bios/seabios/out/include/config/boot.h +0 -0
  48. package/bios/seabios/out/include/config/bootorder.h +0 -0
  49. package/bios/seabios/out/include/config/build/vgabios.h +0 -0
  50. package/bios/seabios/out/include/config/call32/smm.h +0 -0
  51. package/bios/seabios/out/include/config/cdrom/boot.h +0 -0
  52. package/bios/seabios/out/include/config/cdrom/emu.h +0 -0
  53. package/bios/seabios/out/include/config/debug/level.h +0 -0
  54. package/bios/seabios/out/include/config/drives.h +0 -0
  55. package/bios/seabios/out/include/config/entry/extrastack.h +0 -0
  56. package/bios/seabios/out/include/config/esp/scsi.h +0 -0
  57. package/bios/seabios/out/include/config/flash/floppy.h +0 -0
  58. package/bios/seabios/out/include/config/floppy.h +0 -0
  59. package/bios/seabios/out/include/config/fw/romfile/load.h +0 -0
  60. package/bios/seabios/out/include/config/hardware/irq.h +0 -0
  61. package/bios/seabios/out/include/config/kbd/call/int15/4f.h +0 -0
  62. package/bios/seabios/out/include/config/keyboard.h +0 -0
  63. package/bios/seabios/out/include/config/lpt.h +0 -0
  64. package/bios/seabios/out/include/config/lsi/scsi.h +0 -0
  65. package/bios/seabios/out/include/config/malloc/uppermemory.h +0 -0
  66. package/bios/seabios/out/include/config/megasas.h +0 -0
  67. package/bios/seabios/out/include/config/mouse.h +0 -0
  68. package/bios/seabios/out/include/config/mpt/scsi.h +0 -0
  69. package/bios/seabios/out/include/config/mptable.h +0 -0
  70. package/bios/seabios/out/include/config/mtrr/init.h +0 -0
  71. package/bios/seabios/out/include/config/optionroms.h +0 -0
  72. package/bios/seabios/out/include/config/override/pci/id.h +0 -0
  73. package/bios/seabios/out/include/config/pcibios.h +0 -0
  74. package/bios/seabios/out/include/config/pirtable.h +0 -0
  75. package/bios/seabios/out/include/config/pmm.h +0 -0
  76. package/bios/seabios/out/include/config/pmtimer.h +0 -0
  77. package/bios/seabios/out/include/config/pnpbios.h +0 -0
  78. package/bios/seabios/out/include/config/ps2port.h +0 -0
  79. package/bios/seabios/out/include/config/pvscsi.h +0 -0
  80. package/bios/seabios/out/include/config/qemu/hardware.h +0 -0
  81. package/bios/seabios/out/include/config/qemu.h +0 -0
  82. package/bios/seabios/out/include/config/rom/size.h +0 -0
  83. package/bios/seabios/out/include/config/rtc/timer.h +0 -0
  84. package/bios/seabios/out/include/config/s3/resume.h +0 -0
  85. package/bios/seabios/out/include/config/sdcard.h +0 -0
  86. package/bios/seabios/out/include/config/serial.h +0 -0
  87. package/bios/seabios/out/include/config/tcgbios.h +0 -0
  88. package/bios/seabios/out/include/config/threads.h +0 -0
  89. package/bios/seabios/out/include/config/tristate.conf +0 -4
  90. package/bios/seabios/out/include/config/tsc/timer.h +0 -0
  91. package/bios/seabios/out/include/config/use/smm.h +0 -0
  92. package/bios/seabios/out/include/config/vga/allocate/extra/stack.h +0 -0
  93. package/bios/seabios/out/include/config/vga/bochs/stdvga.h +0 -0
  94. package/bios/seabios/out/include/config/vga/bochs.h +0 -0
  95. package/bios/seabios/out/include/config/vga/did.h +0 -0
  96. package/bios/seabios/out/include/config/vga/extra/stack/size.h +0 -0
  97. package/bios/seabios/out/include/config/vga/fixup/asm.h +0 -0
  98. package/bios/seabios/out/include/config/vga/pci.h +0 -0
  99. package/bios/seabios/out/include/config/vga/stdvga/ports.h +0 -0
  100. package/bios/seabios/out/include/config/vga/vbe.h +0 -0
  101. package/bios/seabios/out/include/config/vga/vid.h +0 -0
  102. package/bios/seabios/out/include/config/vgahooks.h +0 -0
  103. package/bios/seabios/out/include/config/virtio/blk.h +0 -0
  104. package/bios/seabios/out/include/config/virtio/scsi.h +0 -0
  105. package/bios/seabios/out/include/config/xen.h +0 -0
  106. package/bios/seabios/out/scripts/kconfig/conf +0 -0
  107. package/bios/seabios/out/scripts/kconfig/conf.o +0 -0
  108. package/bios/seabios/out/scripts/kconfig/zconf.hash.c +0 -289
  109. package/bios/seabios/out/scripts/kconfig/zconf.lex.c +0 -2420
  110. package/bios/seabios/out/scripts/kconfig/zconf.tab.c +0 -2538
  111. package/bios/seabios/out/scripts/kconfig/zconf.tab.o +0 -0
  112. package/bios/seabios/scripts/acpi_extract.py +0 -366
  113. package/bios/seabios/scripts/acpi_extract_preprocess.py +0 -41
  114. package/bios/seabios/scripts/buildrom.py +0 -56
  115. package/bios/seabios/scripts/buildversion.py +0 -134
  116. package/bios/seabios/scripts/checkrom.py +0 -95
  117. package/bios/seabios/scripts/checkstack.py +0 -226
  118. package/bios/seabios/scripts/checksum.py +0 -16
  119. package/bios/seabios/scripts/encodeint.py +0 -21
  120. package/bios/seabios/scripts/gen-offsets.sh +0 -17
  121. package/bios/seabios/scripts/kconfig/.gitignore +0 -22
  122. package/bios/seabios/scripts/kconfig/Makefile +0 -331
  123. package/bios/seabios/scripts/kconfig/POTFILES.in +0 -12
  124. package/bios/seabios/scripts/kconfig/check.sh +0 -13
  125. package/bios/seabios/scripts/kconfig/conf.c +0 -718
  126. package/bios/seabios/scripts/kconfig/confdata.c +0 -1250
  127. package/bios/seabios/scripts/kconfig/expr.c +0 -1168
  128. package/bios/seabios/scripts/kconfig/expr.h +0 -241
  129. package/bios/seabios/scripts/kconfig/gconf.c +0 -1542
  130. package/bios/seabios/scripts/kconfig/gconf.glade +0 -661
  131. package/bios/seabios/scripts/kconfig/images.c +0 -326
  132. package/bios/seabios/scripts/kconfig/kxgettext.c +0 -235
  133. package/bios/seabios/scripts/kconfig/lex.zconf.c +0 -2430
  134. package/bios/seabios/scripts/kconfig/list.h +0 -131
  135. package/bios/seabios/scripts/kconfig/lkc.h +0 -200
  136. package/bios/seabios/scripts/kconfig/lkc_proto.h +0 -57
  137. package/bios/seabios/scripts/kconfig/lxdialog/.gitignore +0 -4
  138. package/bios/seabios/scripts/kconfig/lxdialog/BIG.FAT.WARNING +0 -4
  139. package/bios/seabios/scripts/kconfig/lxdialog/check-lxdialog.sh +0 -87
  140. package/bios/seabios/scripts/kconfig/lxdialog/checklist.c +0 -332
  141. package/bios/seabios/scripts/kconfig/lxdialog/dialog.h +0 -257
  142. package/bios/seabios/scripts/kconfig/lxdialog/inputbox.c +0 -301
  143. package/bios/seabios/scripts/kconfig/lxdialog/menubox.c +0 -437
  144. package/bios/seabios/scripts/kconfig/lxdialog/textbox.c +0 -408
  145. package/bios/seabios/scripts/kconfig/lxdialog/util.c +0 -713
  146. package/bios/seabios/scripts/kconfig/lxdialog/yesno.c +0 -114
  147. package/bios/seabios/scripts/kconfig/mconf.c +0 -1036
  148. package/bios/seabios/scripts/kconfig/menu.c +0 -697
  149. package/bios/seabios/scripts/kconfig/merge_config.sh +0 -150
  150. package/bios/seabios/scripts/kconfig/nconf.c +0 -1556
  151. package/bios/seabios/scripts/kconfig/nconf.gui.c +0 -656
  152. package/bios/seabios/scripts/kconfig/nconf.h +0 -96
  153. package/bios/seabios/scripts/kconfig/qconf.cc +0 -1795
  154. package/bios/seabios/scripts/kconfig/qconf.h +0 -338
  155. package/bios/seabios/scripts/kconfig/streamline_config.pl +0 -647
  156. package/bios/seabios/scripts/kconfig/symbol.c +0 -1373
  157. package/bios/seabios/scripts/kconfig/util.c +0 -157
  158. package/bios/seabios/scripts/kconfig/zconf.gperf +0 -48
  159. package/bios/seabios/scripts/kconfig/zconf.hash.c_shipped +0 -289
  160. package/bios/seabios/scripts/kconfig/zconf.l +0 -363
  161. package/bios/seabios/scripts/kconfig/zconf.lex.c_shipped +0 -2420
  162. package/bios/seabios/scripts/kconfig/zconf.tab.c_shipped +0 -2538
  163. package/bios/seabios/scripts/kconfig/zconf.y +0 -733
  164. package/bios/seabios/scripts/layoutrom.py +0 -705
  165. package/bios/seabios/scripts/python23compat.py +0 -14
  166. package/bios/seabios/scripts/readserial.py +0 -190
  167. package/bios/seabios/scripts/tarball.sh +0 -36
  168. package/bios/seabios/scripts/test-build.sh +0 -90
  169. package/bios/seabios/scripts/transdump.py +0 -53
  170. package/bios/seabios/scripts/vgafixup.py +0 -96
  171. package/bios/seabios/src/Kconfig +0 -579
  172. package/bios/seabios/src/apm.c +0 -215
  173. package/bios/seabios/src/asm-offsets.c +0 -23
  174. package/bios/seabios/src/biosvar.h +0 -130
  175. package/bios/seabios/src/block.c +0 -623
  176. package/bios/seabios/src/block.h +0 -121
  177. package/bios/seabios/src/bmp.c +0 -117
  178. package/bios/seabios/src/boot.c +0 -793
  179. package/bios/seabios/src/bootsplash.c +0 -255
  180. package/bios/seabios/src/bregs.h +0 -80
  181. package/bios/seabios/src/byteorder.h +0 -71
  182. package/bios/seabios/src/cdrom.c +0 -322
  183. package/bios/seabios/src/clock.c +0 -506
  184. package/bios/seabios/src/code16gcc.s +0 -1
  185. package/bios/seabios/src/config.h +0 -108
  186. package/bios/seabios/src/cp437.c +0 -275
  187. package/bios/seabios/src/cp437.h +0 -1
  188. package/bios/seabios/src/disk.c +0 -779
  189. package/bios/seabios/src/e820map.c +0 -152
  190. package/bios/seabios/src/e820map.h +0 -26
  191. package/bios/seabios/src/entryfuncs.S +0 -165
  192. package/bios/seabios/src/farptr.h +0 -208
  193. package/bios/seabios/src/font.c +0 -139
  194. package/bios/seabios/src/fw/acpi-dsdt-cpu-hotplug.dsl +0 -78
  195. package/bios/seabios/src/fw/acpi-dsdt-dbug.dsl +0 -26
  196. package/bios/seabios/src/fw/acpi-dsdt-hpet.dsl +0 -36
  197. package/bios/seabios/src/fw/acpi-dsdt-isa.dsl +0 -102
  198. package/bios/seabios/src/fw/acpi-dsdt-pci-crs.dsl +0 -90
  199. package/bios/seabios/src/fw/acpi-dsdt.dsl +0 -342
  200. package/bios/seabios/src/fw/acpi-dsdt.hex +0 -554
  201. package/bios/seabios/src/fw/acpi.c +0 -685
  202. package/bios/seabios/src/fw/biostables.c +0 -491
  203. package/bios/seabios/src/fw/coreboot.c +0 -569
  204. package/bios/seabios/src/fw/csm.c +0 -347
  205. package/bios/seabios/src/fw/dev-pci.h +0 -52
  206. package/bios/seabios/src/fw/dev-piix.h +0 -29
  207. package/bios/seabios/src/fw/dev-q35.h +0 -52
  208. package/bios/seabios/src/fw/lzmadecode.c +0 -398
  209. package/bios/seabios/src/fw/lzmadecode.h +0 -67
  210. package/bios/seabios/src/fw/mptable.c +0 -197
  211. package/bios/seabios/src/fw/mtrr.c +0 -105
  212. package/bios/seabios/src/fw/multiboot.c +0 -111
  213. package/bios/seabios/src/fw/paravirt.c +0 -624
  214. package/bios/seabios/src/fw/paravirt.h +0 -63
  215. package/bios/seabios/src/fw/pciinit.c +0 -1187
  216. package/bios/seabios/src/fw/pirtable.c +0 -103
  217. package/bios/seabios/src/fw/q35-acpi-dsdt.dsl +0 -450
  218. package/bios/seabios/src/fw/romfile_loader.c +0 -259
  219. package/bios/seabios/src/fw/romfile_loader.h +0 -91
  220. package/bios/seabios/src/fw/shadow.c +0 -208
  221. package/bios/seabios/src/fw/smbios.c +0 -585
  222. package/bios/seabios/src/fw/smm.c +0 -269
  223. package/bios/seabios/src/fw/smp.c +0 -194
  224. package/bios/seabios/src/fw/ssdt-misc.dsl +0 -104
  225. package/bios/seabios/src/fw/ssdt-misc.hex +0 -88
  226. package/bios/seabios/src/fw/ssdt-pcihp.dsl +0 -36
  227. package/bios/seabios/src/fw/ssdt-pcihp.hex +0 -38
  228. package/bios/seabios/src/fw/ssdt-proc.dsl +0 -48
  229. package/bios/seabios/src/fw/ssdt-proc.hex +0 -35
  230. package/bios/seabios/src/fw/xen.c +0 -149
  231. package/bios/seabios/src/fw/xen.h +0 -125
  232. package/bios/seabios/src/gen-defs.h +0 -19
  233. package/bios/seabios/src/hw/ahci.c +0 -697
  234. package/bios/seabios/src/hw/ahci.h +0 -201
  235. package/bios/seabios/src/hw/ata.c +0 -1046
  236. package/bios/seabios/src/hw/ata.h +0 -163
  237. package/bios/seabios/src/hw/blockcmd.c +0 -372
  238. package/bios/seabios/src/hw/blockcmd.h +0 -114
  239. package/bios/seabios/src/hw/dma.c +0 -67
  240. package/bios/seabios/src/hw/esp-scsi.c +0 -241
  241. package/bios/seabios/src/hw/esp-scsi.h +0 -8
  242. package/bios/seabios/src/hw/floppy.c +0 -741
  243. package/bios/seabios/src/hw/lsi-scsi.c +0 -221
  244. package/bios/seabios/src/hw/lsi-scsi.h +0 -8
  245. package/bios/seabios/src/hw/megasas.c +0 -405
  246. package/bios/seabios/src/hw/megasas.h +0 -8
  247. package/bios/seabios/src/hw/mpt-scsi.c +0 -319
  248. package/bios/seabios/src/hw/mpt-scsi.h +0 -8
  249. package/bios/seabios/src/hw/nvme-int.h +0 -199
  250. package/bios/seabios/src/hw/nvme.c +0 -708
  251. package/bios/seabios/src/hw/nvme.h +0 -17
  252. package/bios/seabios/src/hw/pci.c +0 -133
  253. package/bios/seabios/src/hw/pci.h +0 -47
  254. package/bios/seabios/src/hw/pci_ids.h +0 -2632
  255. package/bios/seabios/src/hw/pci_regs.h +0 -556
  256. package/bios/seabios/src/hw/pcidevice.c +0 -192
  257. package/bios/seabios/src/hw/pcidevice.h +0 -76
  258. package/bios/seabios/src/hw/pic.c +0 -115
  259. package/bios/seabios/src/hw/pic.h +0 -60
  260. package/bios/seabios/src/hw/ps2port.c +0 -543
  261. package/bios/seabios/src/hw/ps2port.h +0 -67
  262. package/bios/seabios/src/hw/pvscsi.c +0 -333
  263. package/bios/seabios/src/hw/pvscsi.h +0 -8
  264. package/bios/seabios/src/hw/ramdisk.c +0 -108
  265. package/bios/seabios/src/hw/rtc.c +0 -100
  266. package/bios/seabios/src/hw/rtc.h +0 -75
  267. package/bios/seabios/src/hw/sdcard.c +0 -572
  268. package/bios/seabios/src/hw/serialio.c +0 -113
  269. package/bios/seabios/src/hw/serialio.h +0 -29
  270. package/bios/seabios/src/hw/timer.c +0 -259
  271. package/bios/seabios/src/hw/tpm_drivers.c +0 -636
  272. package/bios/seabios/src/hw/tpm_drivers.h +0 -127
  273. package/bios/seabios/src/hw/usb-ehci.c +0 -650
  274. package/bios/seabios/src/hw/usb-ehci.h +0 -177
  275. package/bios/seabios/src/hw/usb-hid.c +0 -442
  276. package/bios/seabios/src/hw/usb-hid.h +0 -29
  277. package/bios/seabios/src/hw/usb-hub.c +0 -205
  278. package/bios/seabios/src/hw/usb-hub.h +0 -64
  279. package/bios/seabios/src/hw/usb-msc.c +0 -222
  280. package/bios/seabios/src/hw/usb-msc.h +0 -10
  281. package/bios/seabios/src/hw/usb-ohci.c +0 -568
  282. package/bios/seabios/src/hw/usb-ohci.h +0 -144
  283. package/bios/seabios/src/hw/usb-uas.c +0 -289
  284. package/bios/seabios/src/hw/usb-uas.h +0 -9
  285. package/bios/seabios/src/hw/usb-uhci.c +0 -571
  286. package/bios/seabios/src/hw/usb-uhci.h +0 -128
  287. package/bios/seabios/src/hw/usb-xhci.c +0 -1161
  288. package/bios/seabios/src/hw/usb-xhci.h +0 -133
  289. package/bios/seabios/src/hw/usb.c +0 -499
  290. package/bios/seabios/src/hw/usb.h +0 -254
  291. package/bios/seabios/src/hw/virtio-blk.c +0 -211
  292. package/bios/seabios/src/hw/virtio-blk.h +0 -43
  293. package/bios/seabios/src/hw/virtio-pci.c +0 -501
  294. package/bios/seabios/src/hw/virtio-pci.h +0 -151
  295. package/bios/seabios/src/hw/virtio-ring.c +0 -147
  296. package/bios/seabios/src/hw/virtio-ring.h +0 -121
  297. package/bios/seabios/src/hw/virtio-scsi.c +0 -220
  298. package/bios/seabios/src/hw/virtio-scsi.h +0 -47
  299. package/bios/seabios/src/jpeg.c +0 -1055
  300. package/bios/seabios/src/kbd.c +0 -599
  301. package/bios/seabios/src/list.h +0 -91
  302. package/bios/seabios/src/malloc.c +0 -561
  303. package/bios/seabios/src/malloc.h +0 -70
  304. package/bios/seabios/src/memmap.h +0 -21
  305. package/bios/seabios/src/misc.c +0 -195
  306. package/bios/seabios/src/mouse.c +0 -342
  307. package/bios/seabios/src/optionroms.c +0 -475
  308. package/bios/seabios/src/output.c +0 -584
  309. package/bios/seabios/src/output.h +0 -68
  310. package/bios/seabios/src/pcibios.c +0 -241
  311. package/bios/seabios/src/pmm.c +0 -176
  312. package/bios/seabios/src/pnpbios.c +0 -88
  313. package/bios/seabios/src/post.c +0 -337
  314. package/bios/seabios/src/resume.c +0 -157
  315. package/bios/seabios/src/romfile.c +0 -146
  316. package/bios/seabios/src/romfile.h +0 -21
  317. package/bios/seabios/src/romlayout.S +0 -698
  318. package/bios/seabios/src/sercon.c +0 -677
  319. package/bios/seabios/src/serial.c +0 -317
  320. package/bios/seabios/src/sha1.c +0 -147
  321. package/bios/seabios/src/sha1.h +0 -8
  322. package/bios/seabios/src/stacks.c +0 -771
  323. package/bios/seabios/src/stacks.h +0 -68
  324. package/bios/seabios/src/std/LegacyBios.h +0 -985
  325. package/bios/seabios/src/std/acpi.h +0 -323
  326. package/bios/seabios/src/std/bda.h +0 -174
  327. package/bios/seabios/src/std/disk.h +0 -175
  328. package/bios/seabios/src/std/mptable.h +0 -77
  329. package/bios/seabios/src/std/multiboot.h +0 -260
  330. package/bios/seabios/src/std/optionrom.h +0 -59
  331. package/bios/seabios/src/std/pirtable.h +0 -35
  332. package/bios/seabios/src/std/pmm.h +0 -19
  333. package/bios/seabios/src/std/pnpbios.h +0 -24
  334. package/bios/seabios/src/std/smbios.h +0 -167
  335. package/bios/seabios/src/std/tcg.h +0 -554
  336. package/bios/seabios/src/std/vbe.h +0 -156
  337. package/bios/seabios/src/std/vga.h +0 -63
  338. package/bios/seabios/src/string.c +0 -251
  339. package/bios/seabios/src/string.h +0 -31
  340. package/bios/seabios/src/system.c +0 -357
  341. package/bios/seabios/src/tcgbios.c +0 -2014
  342. package/bios/seabios/src/tcgbios.h +0 -19
  343. package/bios/seabios/src/types.h +0 -156
  344. package/bios/seabios/src/util.h +0 -251
  345. package/bios/seabios/src/version.c +0 -5
  346. package/bios/seabios/src/vgahooks.c +0 -355
  347. package/bios/seabios/src/x86.c +0 -23
  348. package/bios/seabios/src/x86.h +0 -277
  349. package/bios/seabios/vgasrc/Kconfig +0 -211
  350. package/bios/seabios/vgasrc/bochsdisplay.c +0 -59
  351. package/bios/seabios/vgasrc/bochsvga.c +0 -447
  352. package/bios/seabios/vgasrc/bochsvga.h +0 -57
  353. package/bios/seabios/vgasrc/cbvga.c +0 -337
  354. package/bios/seabios/vgasrc/clext.c +0 -627
  355. package/bios/seabios/vgasrc/geodevga.c +0 -434
  356. package/bios/seabios/vgasrc/geodevga.h +0 -89
  357. package/bios/seabios/vgasrc/ramfb.c +0 -163
  358. package/bios/seabios/vgasrc/stdvga.c +0 -485
  359. package/bios/seabios/vgasrc/stdvga.h +0 -81
  360. package/bios/seabios/vgasrc/stdvgaio.c +0 -186
  361. package/bios/seabios/vgasrc/stdvgamodes.c +0 -534
  362. package/bios/seabios/vgasrc/swcursor.c +0 -96
  363. package/bios/seabios/vgasrc/vbe.c +0 -432
  364. package/bios/seabios/vgasrc/vgabios.c +0 -1131
  365. package/bios/seabios/vgasrc/vgabios.h +0 -88
  366. package/bios/seabios/vgasrc/vgaentry.S +0 -161
  367. package/bios/seabios/vgasrc/vgafb.c +0 -661
  368. package/bios/seabios/vgasrc/vgafb.h +0 -42
  369. package/bios/seabios/vgasrc/vgafonts.c +0 -785
  370. package/bios/seabios/vgasrc/vgahw.h +0 -152
  371. package/bios/seabios/vgasrc/vgainit.c +0 -202
  372. package/bios/seabios/vgasrc/vgalayout.lds.S +0 -23
  373. package/bios/seabios/vgasrc/vgautil.h +0 -103
  374. package/bios/seabios/vgasrc/vgaversion.c +0 -6
  375. package/bios/seabios-debug.bin +0 -0
  376. package/bios/seabios-debug.config +0 -117
  377. package/bios/seabios.bin +0 -0
  378. package/bios/seabios.config +0 -114
  379. package/bios/vgabios-debug.bin +0 -0
  380. package/bios/vgabios.bin +0 -0
  381. package/build/binaries.js +0 -1
  382. package/build/index-debug.cjs +0 -1
  383. package/build/index-debug.js +0 -1
  384. package/build/index.cjs +0 -1
  385. package/build/index.js +0 -1
  386. package/v86.css +0 -259
@@ -1,163 +0,0 @@
1
- #ifndef __ATA_H
2
- #define __ATA_H
3
-
4
- #include "block.h" // struct drive_s
5
- #include "config.h" // CONFIG_MAX_ATA_INTERFACES
6
- #include "types.h" // u8
7
-
8
- struct ata_channel_s {
9
- u16 iobase1;
10
- u16 iobase2;
11
- u16 iomaster;
12
- u8 irq;
13
- u8 chanid;
14
- u8 ataid;
15
- int pci_bdf;
16
- struct pci_device *pci_tmp;
17
- };
18
-
19
- struct atadrive_s {
20
- struct drive_s drive;
21
- struct ata_channel_s *chan_gf;
22
- u8 slave;
23
- };
24
-
25
- // ata.c
26
- char *ata_extract_model(char *model, u32 size, u16 *buffer);
27
- int ata_extract_version(u16 *buffer);
28
- int ata_process_op(struct disk_op_s *op);
29
- int ata_atapi_process_op(struct disk_op_s *op);
30
- void ata_setup(void);
31
-
32
- #define PORT_ATA2_CMD_BASE 0x0170
33
- #define PORT_ATA1_CMD_BASE 0x01f0
34
- #define PORT_ATA2_CTRL_BASE 0x0374
35
- #define PORT_ATA1_CTRL_BASE 0x03f4
36
-
37
- // Global defines -- ATA register and register bits.
38
- // command block & control block regs
39
- #define ATA_CB_DATA 0 // data reg in/out pio_base_addr1+0
40
- #define ATA_CB_ERR 1 // error in pio_base_addr1+1
41
- #define ATA_CB_FR 1 // feature reg out pio_base_addr1+1
42
- #define ATA_CB_SC 2 // sector count in/out pio_base_addr1+2
43
- #define ATA_CB_SN 3 // sector number in/out pio_base_addr1+3
44
- #define ATA_CB_CL 4 // cylinder low in/out pio_base_addr1+4
45
- #define ATA_CB_CH 5 // cylinder high in/out pio_base_addr1+5
46
- #define ATA_CB_DH 6 // device head in/out pio_base_addr1+6
47
- #define ATA_CB_STAT 7 // primary status in pio_base_addr1+7
48
- #define ATA_CB_CMD 7 // command out pio_base_addr1+7
49
-
50
- #define ATA_CB_ASTAT 2 // alternate status in pio_base_addr2+2
51
- #define ATA_CB_DC 2 // device control out pio_base_addr2+2
52
- #define ATA_CB_DA 3 // device address in pio_base_addr2+3
53
-
54
- #define ATA_CB_ER_ICRC 0x80 // ATA Ultra DMA bad CRC
55
- #define ATA_CB_ER_BBK 0x80 // ATA bad block
56
- #define ATA_CB_ER_UNC 0x40 // ATA uncorrected error
57
- #define ATA_CB_ER_MC 0x20 // ATA media change
58
- #define ATA_CB_ER_IDNF 0x10 // ATA id not found
59
- #define ATA_CB_ER_MCR 0x08 // ATA media change request
60
- #define ATA_CB_ER_ABRT 0x04 // ATA command aborted
61
- #define ATA_CB_ER_NTK0 0x02 // ATA track 0 not found
62
- #define ATA_CB_ER_NDAM 0x01 // ATA address mark not found
63
-
64
- #define ATA_CB_ER_P_SNSKEY 0xf0 // ATAPI sense key (mask)
65
- #define ATA_CB_ER_P_MCR 0x08 // ATAPI Media Change Request
66
- #define ATA_CB_ER_P_ABRT 0x04 // ATAPI command abort
67
- #define ATA_CB_ER_P_EOM 0x02 // ATAPI End of Media
68
- #define ATA_CB_ER_P_ILI 0x01 // ATAPI Illegal Length Indication
69
-
70
- // ATAPI Interrupt Reason bits in the Sector Count reg (CB_SC)
71
- #define ATA_CB_SC_P_TAG 0xf8 // ATAPI tag (mask)
72
- #define ATA_CB_SC_P_REL 0x04 // ATAPI release
73
- #define ATA_CB_SC_P_IO 0x02 // ATAPI I/O
74
- #define ATA_CB_SC_P_CD 0x01 // ATAPI C/D
75
-
76
- // bits 7-4 of the device/head (CB_DH) reg
77
- #define ATA_CB_DH_DEV0 0xa0 // select device 0
78
- #define ATA_CB_DH_DEV1 0xb0 // select device 1
79
- #define ATA_CB_DH_LBA 0x40 // use LBA
80
-
81
- // status reg (CB_STAT and CB_ASTAT) bits
82
- #define ATA_CB_STAT_BSY 0x80 // busy
83
- #define ATA_CB_STAT_RDY 0x40 // ready
84
- #define ATA_CB_STAT_DF 0x20 // device fault
85
- #define ATA_CB_STAT_WFT 0x20 // write fault (old name)
86
- #define ATA_CB_STAT_SKC 0x10 // seek complete
87
- #define ATA_CB_STAT_SERV 0x10 // service
88
- #define ATA_CB_STAT_DRQ 0x08 // data request
89
- #define ATA_CB_STAT_CORR 0x04 // corrected
90
- #define ATA_CB_STAT_IDX 0x02 // index
91
- #define ATA_CB_STAT_ERR 0x01 // error (ATA)
92
- #define ATA_CB_STAT_CHK 0x01 // check (ATAPI)
93
-
94
- // device control reg (CB_DC) bits
95
- #define ATA_CB_DC_HD15 0x08 // bit should always be set to one
96
- #define ATA_CB_DC_SRST 0x04 // soft reset
97
- #define ATA_CB_DC_NIEN 0x02 // disable interrupts
98
-
99
- // Most mandtory and optional ATA commands (from ATA-3),
100
- #define ATA_CMD_NOP 0x00
101
- #define ATA_CMD_CFA_REQUEST_EXT_ERR_CODE 0x03
102
- #define ATA_CMD_DEVICE_RESET 0x08
103
- #define ATA_CMD_RECALIBRATE 0x10
104
- #define ATA_CMD_READ_SECTORS 0x20
105
- #define ATA_CMD_READ_SECTORS_EXT 0x24
106
- #define ATA_CMD_READ_DMA_EXT 0x25
107
- #define ATA_CMD_READ_DMA_QUEUED_EXT 0x26
108
- #define ATA_CMD_READ_NATIVE_MAX_ADDRESS_EXT 0x27
109
- #define ATA_CMD_READ_MULTIPLE_EXT 0x29
110
- #define ATA_CMD_READ_LOG_EXT 0x2F
111
- #define ATA_CMD_WRITE_SECTORS 0x30
112
- #define ATA_CMD_WRITE_SECTORS_EXT 0x34
113
- #define ATA_CMD_WRITE_DMA_EXT 0x35
114
- #define ATA_CMD_WRITE_DMA_QUEUED_EXT 0x36
115
- #define ATA_CMD_SET_MAX_ADDRESS_EXT 0x37
116
- #define ATA_CMD_CFA_WRITE_SECTORS_WO_ERASE 0x38
117
- #define ATA_CMD_WRITE_MULTIPLE_EXT 0x39
118
- #define ATA_CMD_WRITE_VERIFY 0x3C
119
- #define ATA_CMD_WRITE_LOG_EXT 0x3F
120
- #define ATA_CMD_READ_VERIFY_SECTORS 0x40
121
- #define ATA_CMD_READ_VERIFY_SECTORS_EXT 0x42
122
- #define ATA_CMD_FORMAT_TRACK 0x50
123
- #define ATA_CMD_SEEK 0x70
124
- #define ATA_CMD_CFA_TRANSLATE_SECTOR 0x87
125
- #define ATA_CMD_EXECUTE_DEVICE_DIAGNOSTIC 0x90
126
- #define ATA_CMD_INITIALIZE_DEVICE_PARAMETERS 0x91
127
- #define ATA_CMD_STANDBY_IMMEDIATE2 0x94
128
- #define ATA_CMD_IDLE_IMMEDIATE2 0x95
129
- #define ATA_CMD_STANDBY2 0x96
130
- #define ATA_CMD_IDLE2 0x97
131
- #define ATA_CMD_CHECK_POWER_MODE2 0x98
132
- #define ATA_CMD_SLEEP2 0x99
133
- #define ATA_CMD_PACKET 0xA0
134
- #define ATA_CMD_IDENTIFY_PACKET_DEVICE 0xA1
135
- #define ATA_CMD_CFA_ERASE_SECTORS 0xC0
136
- #define ATA_CMD_READ_MULTIPLE 0xC4
137
- #define ATA_CMD_WRITE_MULTIPLE 0xC5
138
- #define ATA_CMD_SET_MULTIPLE_MODE 0xC6
139
- #define ATA_CMD_READ_DMA_QUEUED 0xC7
140
- #define ATA_CMD_READ_DMA 0xC8
141
- #define ATA_CMD_WRITE_DMA 0xCA
142
- #define ATA_CMD_WRITE_DMA_QUEUED 0xCC
143
- #define ATA_CMD_CFA_WRITE_MULTIPLE_WO_ERASE 0xCD
144
- #define ATA_CMD_STANDBY_IMMEDIATE 0xE0
145
- #define ATA_CMD_IDLE_IMMEDIATE 0xE1
146
- #define ATA_CMD_STANDBY 0xE2
147
- #define ATA_CMD_IDLE 0xE3
148
- #define ATA_CMD_READ_BUFFER 0xE4
149
- #define ATA_CMD_CHECK_POWER_MODE 0xE5
150
- #define ATA_CMD_SLEEP 0xE6
151
- #define ATA_CMD_FLUSH_CACHE 0xE7
152
- #define ATA_CMD_WRITE_BUFFER 0xE8
153
- #define ATA_CMD_IDENTIFY_DEVICE 0xEC
154
- #define ATA_CMD_SET_FEATURES 0xEF
155
- #define ATA_CMD_READ_NATIVE_MAX_ADDRESS 0xF8
156
- #define ATA_CMD_SET_MAX 0xF9
157
-
158
- #define ATA_SET_FEATRUE_TRANSFER_MODE 0x03
159
- #define ATA_TRANSFER_MODE_ULTRA_DMA 0x40
160
- #define ATA_TRANSFER_MODE_MULTIWORD_DMA 0x20
161
- #define ATA_TRANSFER_MODE_PIO_FLOW_CTRL 0x08
162
- #define ATA_TRANSFER_MODE_DEFAULT_PIO 0x00
163
- #endif // ata.h
@@ -1,372 +0,0 @@
1
- // Support for several common scsi like command data block requests
2
- //
3
- // Copyright (C) 2010 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 "block.h" // struct disk_op_s
9
- #include "blockcmd.h" // struct cdb_request_sense
10
- #include "byteorder.h" // be32_to_cpu
11
- #include "farptr.h" // GET_FLATPTR
12
- #include "output.h" // dprintf
13
- #include "std/disk.h" // DISK_RET_EPARAM
14
- #include "string.h" // memset
15
- #include "util.h" // timer_calc
16
- #include "malloc.h"
17
-
18
-
19
- /****************************************************************
20
- * Low level command requests
21
- ****************************************************************/
22
-
23
- static int
24
- cdb_get_inquiry(struct disk_op_s *op, struct cdbres_inquiry *data)
25
- {
26
- struct cdb_request_sense cmd;
27
- memset(&cmd, 0, sizeof(cmd));
28
- cmd.command = CDB_CMD_INQUIRY;
29
- cmd.length = sizeof(*data);
30
- op->command = CMD_SCSI;
31
- op->count = 1;
32
- op->buf_fl = data;
33
- op->cdbcmd = &cmd;
34
- op->blocksize = sizeof(*data);
35
- return process_op(op);
36
- }
37
-
38
- // Request SENSE
39
- static int
40
- cdb_get_sense(struct disk_op_s *op, struct cdbres_request_sense *data)
41
- {
42
- struct cdb_request_sense cmd;
43
- memset(&cmd, 0, sizeof(cmd));
44
- cmd.command = CDB_CMD_REQUEST_SENSE;
45
- cmd.length = sizeof(*data);
46
- op->command = CMD_SCSI;
47
- op->count = 1;
48
- op->buf_fl = data;
49
- op->cdbcmd = &cmd;
50
- op->blocksize = sizeof(*data);
51
- return process_op(op);
52
- }
53
-
54
- // Test unit ready
55
- static int
56
- cdb_test_unit_ready(struct disk_op_s *op)
57
- {
58
- struct cdb_request_sense cmd;
59
- memset(&cmd, 0, sizeof(cmd));
60
- cmd.command = CDB_CMD_TEST_UNIT_READY;
61
- op->command = CMD_SCSI;
62
- op->count = 0;
63
- op->buf_fl = NULL;
64
- op->cdbcmd = &cmd;
65
- op->blocksize = 0;
66
- return process_op(op);
67
- }
68
-
69
- // Request capacity
70
- static int
71
- cdb_read_capacity(struct disk_op_s *op, struct cdbres_read_capacity *data)
72
- {
73
- struct cdb_read_capacity cmd;
74
- memset(&cmd, 0, sizeof(cmd));
75
- cmd.command = CDB_CMD_READ_CAPACITY;
76
- op->command = CMD_SCSI;
77
- op->count = 1;
78
- op->buf_fl = data;
79
- op->cdbcmd = &cmd;
80
- op->blocksize = sizeof(*data);
81
- return process_op(op);
82
- }
83
-
84
- // Mode sense, geometry page.
85
- static int
86
- cdb_mode_sense_geom(struct disk_op_s *op, struct cdbres_mode_sense_geom *data)
87
- {
88
- struct cdb_mode_sense cmd;
89
- memset(&cmd, 0, sizeof(cmd));
90
- cmd.command = CDB_CMD_MODE_SENSE;
91
- cmd.flags = 8; /* DBD */
92
- cmd.page = MODE_PAGE_HD_GEOMETRY;
93
- cmd.count = cpu_to_be16(sizeof(*data));
94
- op->command = CMD_SCSI;
95
- op->count = 1;
96
- op->buf_fl = data;
97
- op->cdbcmd = &cmd;
98
- op->blocksize = sizeof(*data);
99
- return process_op(op);
100
- }
101
-
102
-
103
- /****************************************************************
104
- * Main SCSI commands
105
- ****************************************************************/
106
-
107
- // Create a scsi command request from a disk_op_s request
108
- int
109
- scsi_fill_cmd(struct disk_op_s *op, void *cdbcmd, int maxcdb)
110
- {
111
- switch (op->command) {
112
- case CMD_READ:
113
- case CMD_WRITE: ;
114
- struct cdb_rwdata_10 *cmd = cdbcmd;
115
- memset(cmd, 0, maxcdb);
116
- cmd->command = (op->command == CMD_READ ? CDB_CMD_READ_10
117
- : CDB_CMD_WRITE_10);
118
- cmd->lba = cpu_to_be32(op->lba);
119
- cmd->count = cpu_to_be16(op->count);
120
- return GET_FLATPTR(op->drive_fl->blksize);
121
- case CMD_SCSI:
122
- if (MODESEGMENT)
123
- return -1;
124
- memcpy(cdbcmd, op->cdbcmd, maxcdb);
125
- return op->blocksize;
126
- default:
127
- return -1;
128
- }
129
- }
130
-
131
- // Determine if the command is a request to pull data from the device
132
- int
133
- scsi_is_read(struct disk_op_s *op)
134
- {
135
- return op->command == CMD_READ || (
136
- !MODESEGMENT && op->command == CMD_SCSI && op->blocksize);
137
- }
138
-
139
- // Check if a SCSI device is ready to receive commands
140
- int
141
- scsi_is_ready(struct disk_op_s *op)
142
- {
143
- ASSERT32FLAT();
144
- dprintf(6, "scsi_is_ready (drive=%p)\n", op->drive_fl);
145
-
146
- /* Retry TEST UNIT READY for 5 seconds unless MEDIUM NOT PRESENT is
147
- * reported by the device. If the device reports "IN PROGRESS",
148
- * 30 seconds is added. */
149
- int in_progress = 0;
150
- u32 end = timer_calc(5000);
151
- for (;;) {
152
- if (timer_check(end)) {
153
- dprintf(1, "test unit ready failed\n");
154
- return -1;
155
- }
156
-
157
- int ret = cdb_test_unit_ready(op);
158
- if (!ret)
159
- // Success
160
- break;
161
-
162
- struct cdbres_request_sense sense;
163
- ret = cdb_get_sense(op, &sense);
164
- if (ret)
165
- // Error - retry.
166
- continue;
167
-
168
- // Sense succeeded.
169
- if (sense.asc == 0x3a) { /* MEDIUM NOT PRESENT */
170
- dprintf(1, "Device reports MEDIUM NOT PRESENT\n");
171
- return -1;
172
- }
173
-
174
- if (sense.asc == 0x04 && sense.ascq == 0x01 && !in_progress) {
175
- /* IN PROGRESS OF BECOMING READY */
176
- dprintf(1, "Waiting for device to detect medium... ");
177
- /* Allow 30 seconds more */
178
- end = timer_calc(30000);
179
- in_progress = 1;
180
- }
181
- }
182
- return 0;
183
- }
184
-
185
- #define CDB_CMD_REPORT_LUNS 0xA0
186
-
187
- struct cdb_report_luns {
188
- u8 command;
189
- u8 reserved_01[5];
190
- u32 length;
191
- u8 pad[6];
192
- } PACKED;
193
-
194
- struct scsi_lun {
195
- u16 lun[4];
196
- };
197
-
198
- struct cdbres_report_luns {
199
- u32 length;
200
- u32 reserved;
201
- struct scsi_lun luns[];
202
- };
203
-
204
- static u64 scsilun2u64(struct scsi_lun *scsi_lun)
205
- {
206
- int i;
207
- u64 ret = 0;
208
- for (i = 0; i < ARRAY_SIZE(scsi_lun->lun); i++)
209
- ret |= be16_to_cpu(scsi_lun->lun[i]) << (16 * i);
210
- return ret;
211
- }
212
-
213
- // Issue REPORT LUNS on a temporary drive and iterate reported luns calling
214
- // @add_lun for each
215
- int scsi_rep_luns_scan(struct drive_s *tmp_drive, scsi_add_lun add_lun)
216
- {
217
- int ret = -1;
218
- /* start with the smallest possible buffer, otherwise some devices in QEMU
219
- * may (incorrectly) error out on returning less data than fits in it */
220
- u32 maxluns = 1;
221
- u32 nluns, i;
222
- struct cdb_report_luns cdb = {
223
- .command = CDB_CMD_REPORT_LUNS,
224
- };
225
- struct disk_op_s op = {
226
- .drive_fl = tmp_drive,
227
- .command = CMD_SCSI,
228
- .count = 1,
229
- .cdbcmd = &cdb,
230
- };
231
- struct cdbres_report_luns *resp;
232
-
233
- ASSERT32FLAT();
234
-
235
- while (1) {
236
- op.blocksize = sizeof(struct cdbres_report_luns) +
237
- maxluns * sizeof(struct scsi_lun);
238
- op.buf_fl = malloc_tmp(op.blocksize);
239
- if (!op.buf_fl) {
240
- warn_noalloc();
241
- return -1;
242
- }
243
-
244
- cdb.length = cpu_to_be32(op.blocksize);
245
- if (process_op(&op) != DISK_RET_SUCCESS)
246
- goto out;
247
-
248
- resp = op.buf_fl;
249
- nluns = be32_to_cpu(resp->length) / sizeof(struct scsi_lun);
250
- if (nluns <= maxluns)
251
- break;
252
-
253
- free(op.buf_fl);
254
- maxluns = nluns;
255
- }
256
-
257
- for (i = 0, ret = 0; i < nluns; i++) {
258
- u64 lun = scsilun2u64(&resp->luns[i]);
259
- if (lun >> 32)
260
- continue;
261
- ret += !add_lun((u32)lun, tmp_drive);
262
- }
263
- out:
264
- free(op.buf_fl);
265
- return ret;
266
- }
267
-
268
- // Iterate LUNs on the target and call @add_lun for each
269
- int scsi_sequential_scan(struct drive_s *tmp_drive, u32 maxluns,
270
- scsi_add_lun add_lun)
271
- {
272
- int ret;
273
- u32 lun;
274
-
275
- for (lun = 0, ret = 0; lun < maxluns; lun++)
276
- ret += !add_lun(lun, tmp_drive);
277
- return ret;
278
- }
279
-
280
- // Validate drive, find block size / sector count, and register drive.
281
- int
282
- scsi_drive_setup(struct drive_s *drive, const char *s, int prio)
283
- {
284
- ASSERT32FLAT();
285
- struct disk_op_s dop;
286
- memset(&dop, 0, sizeof(dop));
287
- dop.drive_fl = drive;
288
- struct cdbres_inquiry data;
289
- int ret = cdb_get_inquiry(&dop, &data);
290
- if (ret)
291
- return ret;
292
- char vendor[sizeof(data.vendor)+1], product[sizeof(data.product)+1];
293
- char rev[sizeof(data.rev)+1];
294
- strtcpy(vendor, data.vendor, sizeof(vendor));
295
- nullTrailingSpace(vendor);
296
- strtcpy(product, data.product, sizeof(product));
297
- nullTrailingSpace(product);
298
- strtcpy(rev, data.rev, sizeof(rev));
299
- nullTrailingSpace(rev);
300
- int pdt = data.pdt & 0x1f;
301
- int removable = !!(data.removable & 0x80);
302
- dprintf(1, "%s vendor='%s' product='%s' rev='%s' type=%d removable=%d\n"
303
- , s, vendor, product, rev, pdt, removable);
304
- drive->removable = removable;
305
-
306
- if (pdt == SCSI_TYPE_CDROM) {
307
- drive->blksize = CDROM_SECTOR_SIZE;
308
- drive->sectors = (u64)-1;
309
-
310
- char *desc = znprintf(MAXDESCSIZE, "DVD/CD [%s Drive %s %s %s]"
311
- , s, vendor, product, rev);
312
- boot_add_cd(drive, desc, prio);
313
- return 0;
314
- }
315
-
316
- if (pdt != SCSI_TYPE_DISK)
317
- return -1;
318
-
319
- ret = scsi_is_ready(&dop);
320
- if (ret) {
321
- dprintf(1, "scsi_is_ready returned %d\n", ret);
322
- return ret;
323
- }
324
-
325
- struct cdbres_read_capacity capdata;
326
- ret = cdb_read_capacity(&dop, &capdata);
327
- if (ret)
328
- return ret;
329
-
330
- // READ CAPACITY returns the address of the last block.
331
- // We do not bother with READ CAPACITY(16) because BIOS does not support
332
- // 64-bit LBA anyway.
333
- drive->blksize = be32_to_cpu(capdata.blksize);
334
- if (drive->blksize != DISK_SECTOR_SIZE) {
335
- dprintf(1, "%s: unsupported block size %d\n", s, drive->blksize);
336
- return -1;
337
- }
338
- drive->sectors = (u64)be32_to_cpu(capdata.sectors) + 1;
339
- dprintf(1, "%s blksize=%d sectors=%u\n"
340
- , s, drive->blksize, (unsigned)drive->sectors);
341
-
342
- // We do not recover from USB stalls, so try to be safe and avoid
343
- // sending the command if the (obsolete, but still provided by QEMU)
344
- // fixed disk geometry page may not be supported.
345
- //
346
- // We could also send the command only to small disks (e.g. <504MiB)
347
- // but some old USB keys only support a very small subset of SCSI which
348
- // does not even include the MODE SENSE command!
349
- //
350
- if (CONFIG_QEMU_HARDWARE && memcmp(vendor, "QEMU", 5) == 0) {
351
- struct cdbres_mode_sense_geom geomdata;
352
- ret = cdb_mode_sense_geom(&dop, &geomdata);
353
- if (ret == 0) {
354
- u32 cylinders;
355
- cylinders = geomdata.cyl[0] << 16;
356
- cylinders |= geomdata.cyl[1] << 8;
357
- cylinders |= geomdata.cyl[2];
358
- if (cylinders && geomdata.heads &&
359
- drive->sectors <= 0xFFFFFFFFULL &&
360
- ((u32)drive->sectors % (geomdata.heads * cylinders) == 0)) {
361
- drive->pchs.cylinder = cylinders;
362
- drive->pchs.head = geomdata.heads;
363
- drive->pchs.sector = (u32)drive->sectors / (geomdata.heads * cylinders);
364
- }
365
- }
366
- }
367
-
368
- char *desc = znprintf(MAXDESCSIZE, "%s Drive %s %s %s"
369
- , s, vendor, product, rev);
370
- boot_add_hd(drive, desc, prio);
371
- return 0;
372
- }
@@ -1,114 +0,0 @@
1
- // Definitions for SCSI style command data blocks.
2
- #ifndef __BLOCKCMD_H
3
- #define __BLOCKCMD_H
4
-
5
- #include "types.h" // u8
6
-
7
- #define CDB_CMD_READ_10 0x28
8
- #define CDB_CMD_VERIFY_10 0x2f
9
- #define CDB_CMD_WRITE_10 0x2a
10
-
11
- struct cdb_rwdata_10 {
12
- u8 command;
13
- u8 flags;
14
- u32 lba;
15
- u8 resreved_06;
16
- u16 count;
17
- u8 reserved_09;
18
- u8 pad[6];
19
- } PACKED;
20
-
21
- #define CDB_CMD_READ_CAPACITY 0x25
22
-
23
- struct cdb_read_capacity {
24
- u8 command;
25
- u8 flags;
26
- u8 resreved_02[8];
27
- u8 pad[6];
28
- } PACKED;
29
-
30
- struct cdbres_read_capacity {
31
- u32 sectors;
32
- u32 blksize;
33
- } PACKED;
34
-
35
- #define CDB_CMD_TEST_UNIT_READY 0x00
36
- #define CDB_CMD_INQUIRY 0x12
37
- #define CDB_CMD_REQUEST_SENSE 0x03
38
-
39
- struct cdb_request_sense {
40
- u8 command;
41
- u8 flags;
42
- u16 reserved_02;
43
- u8 length;
44
- u8 reserved_05;
45
- u8 pad[10];
46
- } PACKED;
47
-
48
- struct cdbres_request_sense {
49
- u8 errcode;
50
- u8 segment;
51
- u8 flags;
52
- u32 info;
53
- u8 additional;
54
- u32 specific;
55
- u8 asc;
56
- u8 ascq;
57
- u32 reserved_0e;
58
- } PACKED;
59
-
60
- #define SCSI_TYPE_DISK 0x00
61
- #define SCSI_TYPE_CDROM 0x05
62
-
63
- struct cdbres_inquiry {
64
- u8 pdt;
65
- u8 removable;
66
- u8 reserved_02[2];
67
- u8 additional;
68
- u8 reserved_05[3];
69
- char vendor[8];
70
- char product[16];
71
- char rev[4];
72
- } PACKED;
73
-
74
- #define CDB_CMD_MODE_SENSE 0x5A
75
- #define MODE_PAGE_HD_GEOMETRY 0x04
76
-
77
- struct cdb_mode_sense {
78
- u8 command;
79
- u8 flags;
80
- u8 page;
81
- u32 reserved_03;
82
- u16 count;
83
- u8 reserved_09;
84
- u8 pad[6];
85
- } PACKED;
86
-
87
- struct cdbres_mode_sense_geom {
88
- u8 unused_00[3];
89
- u8 read_only;
90
- u32 unused_04;
91
- u8 page;
92
- u8 length;
93
- u8 cyl[3];
94
- u8 heads;
95
- u8 precomp[3];
96
- u8 reduced[3];
97
- u16 step_rate;
98
- u8 landing[3];
99
- u16 rpm;
100
- } PACKED;
101
-
102
- // blockcmd.c
103
- struct disk_op_s;
104
- int scsi_fill_cmd(struct disk_op_s *op, void *cdbcmd, int maxcdb);
105
- int scsi_is_read(struct disk_op_s *op);
106
- int scsi_is_ready(struct disk_op_s *op);
107
- struct drive_s;
108
- int scsi_drive_setup(struct drive_s *drive, const char *s, int prio);
109
- typedef int (*scsi_add_lun)(u32 lun, struct drive_s *tmpl_drv);
110
- int scsi_rep_luns_scan(struct drive_s *tmp_drive, scsi_add_lun add_lun);
111
- int scsi_sequential_scan(struct drive_s *tmp_drive, u32 maxluns,
112
- scsi_add_lun add_lun);
113
-
114
- #endif // blockcmd.h