summaryrefslogtreecommitdiff
path: root/payloads/libpayload/include
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2013-06-07 12:31:21 -0500
committerStefan Reinauer <stefan.reinauer@coreboot.org>2013-11-25 23:56:22 +0100
commit1c20e385a09fcbbf83c03b3a2d3713f4403debea (patch)
tree1c353de427de2b7f61c36021afc59eb3c9d29f1c /payloads/libpayload/include
parenta967f414dfb1f85097ba7ca2f00fdc7f415da776 (diff)
libpayload: usb mass storage card hot plug
Mass storage devices such as card readers show up as as USB devices. However the media not be inserted. In those situations the previous code would just fake a disk and call usbcreate_disk. This is inappropriate because it forms a 1:1 mapping of USB device to disk leading to the inability to remove the disk and/or handle "hot plug" card insertion and removals. To alleviate this issue introduce the notion of ready to the usbmsc structure. It tracks detached, not ready, and ready states. The polling routine is then used to track not ready to ready transitions thereby creating and removing disks appropriately. This handles the case of inserting and removing a card that shows up as a new disk. Booted recovery mode. Able to observe inerstion and removal of sdcard. Also able to insert valid USB flash drive to boot as well. Change-Id: I3eefbe537ec1b9c975744b8984b06c17ae236f40 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/57948 Reviewed-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-on: http://review.coreboot.org/4226 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
Diffstat (limited to 'payloads/libpayload/include')
-rw-r--r--payloads/libpayload/include/usb/usbmsc.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/payloads/libpayload/include/usb/usbmsc.h b/payloads/libpayload/include/usb/usbmsc.h
index 5c3dadc180..8930156619 100644
--- a/payloads/libpayload/include/usb/usbmsc.h
+++ b/payloads/libpayload/include/usb/usbmsc.h
@@ -36,9 +36,17 @@ typedef struct {
endpoint_t *bulk_in;
endpoint_t *bulk_out;
int usbdisk_created;
+ int ready;
void *data; /* For use by consumers of libpayload. */
} usbmsc_inst_t;
+/* Possible values for ready field. */
+enum {
+ USB_MSC_DETACHED = -1, /* Disk detached or out to lunch. */
+ USB_MSC_NOT_READY = 0, /* Disk not ready yet -- empty card reader */
+ USB_MSC_READY = 1, /* Disk ready to communicate. */
+};
+
#define MSC_INST(dev) ((usbmsc_inst_t*)(dev)->data)
typedef enum { cbw_direction_data_in = 0x80, cbw_direction_data_out = 0