#ifndef _USB_V3_H_
#define _USB_V3_H_
#include <KernelExport.h>
#include <bus_manager.h>
#include <iovec.h>
#include <USB_spec.h>
#include <USB_isochronous.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct usb_module_info usb_module_info;
typedef uint32 usb_id;
typedef usb_id usb_device;
typedef usb_id usb_interface;
typedef usb_id usb_pipe;
typedef struct usb_endpoint_info usb_endpoint_info;
typedef struct usb_interface_info usb_interface_info;
typedef struct usb_interface_list usb_interface_list;
typedef struct usb_configuration_info usb_configuration_info;
typedef struct usb_notify_hooks {
status_t (*device_added)(usb_device device, void **cookie);
status_t (*device_removed)(void *cookie);
} usb_notify_hooks;
typedef struct usb_support_descriptor {
uint8 dev_class;
uint8 dev_subclass;
uint8 dev_protocol;
uint16 vendor;
uint16 product;
} usb_support_descriptor;
struct usb_endpoint_info {
usb_endpoint_descriptor *descr;
usb_pipe handle;
};
struct usb_interface_info {
usb_interface_descriptor *descr;
usb_interface handle;
size_t endpoint_count;
usb_endpoint_info *endpoint;
size_t generic_count;
usb_descriptor **generic;
};
struct usb_interface_list {
size_t alt_count;
usb_interface_info *alt;
usb_interface_info *active;
};
struct usb_configuration_info {
usb_configuration_descriptor *descr;
size_t interface_count;
usb_interface_list *interface;
};
#define USB_ISO_ASAP 0x01
typedef void (*usb_callback_func)(void *cookie, status_t status, void *data,
size_t actualLength);
struct usb_module_info {
bus_manager_info binfo;
status_t (*register_driver)(const char *driverName,
const usb_support_descriptor *supportDescriptors,
size_t supportDescriptorCount,
const char *optionalRepublishDriverName);
status_t (*install_notify)(const char *driverName,
const usb_notify_hooks *hooks);
status_t (*uninstall_notify)(const char *driverName);
const usb_device_descriptor *(*get_device_descriptor)(usb_device device);
const usb_configuration_info *(*get_nth_configuration)(usb_device device,
uint32 index);
const usb_configuration_info *(*get_configuration)(usb_device device);
status_t (*set_configuration)(usb_device device,
const usb_configuration_info *configuration);
status_t (*set_alt_interface)(usb_device device,
const usb_interface_info *interface);
status_t (*set_feature)(usb_id handle, uint16 selector);
status_t (*clear_feature)(usb_id handle, uint16 selector);
status_t (*get_status)(usb_id handle, uint16 *status);
status_t (*get_descriptor)(usb_device device,
uint8 descriptorType, uint8 index,
uint16 languageID, void *data,
size_t dataLength,
size_t *actualLength);
status_t (*send_request)(usb_device device,
uint8 requestType, uint8 request,
uint16 value, uint16 index,
uint16 length, void *data,
size_t *actualLength);
status_t (*queue_interrupt)(usb_pipe pipe,
void *data, size_t dataLength,
usb_callback_func callback,
void *callbackCookie);
status_t (*queue_bulk)(usb_pipe pipe,
void *data, size_t dataLength,
usb_callback_func callback,
void *callbackCookie);
status_t (*queue_bulk_v)(usb_pipe pipe,
iovec *vector, size_t vectorCount,
usb_callback_func callback,
void *callbackCookie);
status_t (*queue_bulk_v_physical)(usb_pipe pipe,
physical_entry *vectors, size_t vectorCount,
usb_callback_func callback,
void *callbackCookie);
status_t (*queue_isochronous)(usb_pipe pipe,
void *data, size_t dataLength,
usb_iso_packet_descriptor *packetDesc,
uint32 packetCount,
uint32 *startingFrameNumber,
uint32 flags,
usb_callback_func callback,
void *callbackCookie);
status_t (*queue_request)(usb_device device,
uint8 requestType, uint8 request,
uint16 value, uint16 index,
uint16 length, void *data,
usb_callback_func callback,
void *callbackCookie);
status_t (*set_pipe_policy)(usb_pipe pipe,
uint8 maxNumQueuedPackets,
uint16 maxBufferDurationMS,
uint16 sampleSize);
status_t (*cancel_queued_transfers)(usb_pipe pipe);
status_t (*cancel_queued_requests)(usb_device device);
status_t (*usb_ioctl)(uint32 opcode, void *buffer,
size_t bufferSize);
status_t (*get_nth_roothub)(uint32 index,
usb_device *rootHub);
status_t (*get_nth_child)(usb_device hub,
uint8 index, usb_device *childDevice);
status_t (*get_device_parent)(usb_device device,
usb_device *parentHub,
uint8 *portIndex);
status_t (*reset_port)(usb_device hub,
uint8 portIndex);
status_t (*disable_port)(usb_device hub,
uint8 portIndex);
};
#define B_USB_MODULE_NAME "bus_managers/usb/v3.1"
#ifdef __cplusplus
}
#endif
#endif