#ifndef _KERNEL_DEVICE_STORAGE_USBDRV_H #define _KERNEL_DEVICE_STORAGE_USBDRV_H #include #include #include #include #define USB_CBW_SIGNATURE 0x43425355 /* command block wrapper */ struct usb_ms_cbw { uint32_t signature; uint32_t tag; uint32_t length; uint8_t dir; uint8_t lun; uint8_t cmd_len; uint8_t data[16]; } PACKED; #define USB_CSW_SIGNATURE 0x53425355 /* command status wrapper */ struct usb_ms_csw { uint32_t signature; uint32_t tag; uint32_t residue; uint8_t status; } PACKED; struct device; struct usbdrv_init { struct xhci* xhci; struct xhci_usb_device* usb_device; }; struct usbdrv { struct xhci* xhci; struct xhci_usb_device* usb_device; size_t sector_size; size_t sector_count; struct usb_endpoint_desc bulk_in; struct usb_endpoint_desc bulk_out; }; DEFINE_DEVICE_INIT(usbdrv_init); DEFINE_DEVICE_FINI(usbdrv_fini); DEFINE_DEVICE_OP(usbdrv_read); DEFINE_DEVICE_OP(usbdrv_write); DEFINE_DEVICE_OP(usbdrv_get_device_type); DEFINE_DEVICE_OP(usbdrv_get_sector_size); DEFINE_DEVICE_OP(usbdrv_get_size); DEFINE_DEVICE_OP(usbdrv_partition_rescan); #endif // _KERNEL_DEVICE_STORAGE_USBDRV_H