This patch series adds the ability to boot from USB flash drives. The first seven patches are just cleanups. The eighth adds the MSC support.
This is only preliminary support - I've booted under qemu using a "-usbdevice disk:foo" drive, and I've also booted my epia-cn with seabios and coreboot. However, handling of error conditions and timers still needs to be improved. Also, the current support is UHCI only (no ohci).
Further testing on real hardware would be appreciated.
-Kevin
Kevin O'Connor (8): Dynamically allocate each drive_g with malloc_fseg(). Move common "command data block" functions to new file blockcmd.c. Don't require a valid physical cylinders/heads/spt for logical mapping. Fix off by one error in strtcpy. Minor - arrange struct drive_s to clarify field roles. USB UHCI cleanups. Introduce helper functions for finding USB end-points. Initial support for booting from USB drives.
Makefile | 4 +- src/ata.c | 36 +++----- src/biosvar.h | 6 +- src/block.c | 69 ++++++--------- src/blockcmd.c | 78 +++++++++++++++++ src/blockcmd.h | 19 ++++ src/boot.c | 2 +- src/cdrom.c | 69 ++++----------- src/config.h | 6 +- src/disk.h | 33 +++---- src/floppy.c | 7 +- src/usb-hid.c | 26 ++---- src/usb-msc.c | 261 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/usb-msc.h | 25 ++++++ src/usb-uhci.c | 142 +++++++++++++++++++++++++++++-- src/usb-uhci.h | 4 +- src/usb.c | 81 +++++++++++++++++- src/usb.h | 6 ++ src/util.c | 2 +- 19 files changed, 706 insertions(+), 170 deletions(-) create mode 100644 src/blockcmd.c create mode 100644 src/usb-msc.c create mode 100644 src/usb-msc.h