usbdrv Read from USB flash drive
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
#include <device/def_device_op.h>
|
||||
#include <device/device.h>
|
||||
#include <device/storage/partitions.h>
|
||||
#include <device/storage/usbdrv.h>
|
||||
#include <device/usb/usb.h>
|
||||
#include <device/usb/xhci.h>
|
||||
@@ -16,7 +17,13 @@ static atomic_int usb_ms_counter = 0;
|
||||
static struct device* usb_ms_init (struct xhci* xhci, struct xhci_usb_device* usb_device,
|
||||
struct proc* proc, struct reschedule_ctx* rctx,
|
||||
uint64_t* lockflags) {
|
||||
static device_op_func_t ops[] = {0};
|
||||
static device_op_func_t ops[] = {
|
||||
[XDRV_GET_SIZE] = &usbdrv_get_size,
|
||||
[XDRV_GET_SECTOR_SIZE] = &usbdrv_get_sector_size,
|
||||
[XDRV_GET_DEVICE_TYPE] = &usbdrv_get_device_type,
|
||||
[XDRV_READ] = &usbdrv_read,
|
||||
[XDRV_WRITE] = &usbdrv_write,
|
||||
};
|
||||
|
||||
struct usbdrv_init init = {
|
||||
.xhci = xhci,
|
||||
@@ -27,8 +34,13 @@ static struct device* usb_ms_init (struct xhci* xhci, struct xhci_usb_device* us
|
||||
char key[30];
|
||||
snprintf (key, sizeof (key), "usbdrv%d", atomic_fetch_add (&usb_ms_counter, 1));
|
||||
|
||||
return device_create (DEVICE_TYPE_DRIVE, key, ops, lengthof (ops), &usbdrv_init, &usbdrv_fini,
|
||||
&init, proc, rctx);
|
||||
struct device* device = device_create (DEVICE_TYPE_DRIVE, key, ops, lengthof (ops), &usbdrv_init,
|
||||
&usbdrv_fini, &init, proc, rctx);
|
||||
|
||||
if (device != NULL)
|
||||
device_probe_partitions (proc, rctx, device);
|
||||
|
||||
return device;
|
||||
}
|
||||
|
||||
struct usb_driver_info usb_driver_infos[USB_DRIVER_MAX_MATCHES] = {
|
||||
|
||||
@@ -918,8 +918,12 @@ static void xhci_poll_setup_init_ifs (struct xhci* xhci, struct xhci_usb_device*
|
||||
if (if_->desc.if_class == info->if_class &&
|
||||
if_->desc.if_subclass == info->if_subclass &&
|
||||
if_->desc.if_proto == info->if_proto) {
|
||||
spin_unlock (&xhci->device->lock, *lockflags);
|
||||
|
||||
struct device* device = info->init (xhci, usb_device, thiscpu->kproc, &rctx, lockflags);
|
||||
|
||||
spin_lock (&xhci->device->lock, lockflags);
|
||||
|
||||
if (device == NULL)
|
||||
DEBUG ("USB driver failed to initialize. Skipping device!\n");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user