#include <sys/stdint.h>
#include <sys/param.h>
#include <sys/queue.h>
#include <sys/types.h>
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/bus.h>
#include <sys/module.h>
#include <sys/lock.h>
#include <sys/condvar.h>
#include <sys/sysctl.h>
#include <sys/unistd.h>
#include <sys/callout.h>
#include <sys/malloc.h>
#include <sys/caps.h>
#include <bus/u4b/usb.h>
#include <bus/u4b/usbdi.h>
#include <bus/u4b/usb_core.h>
#include <bus/u4b/usb_process.h>
#include <bus/u4b/usb_device.h>
#include <bus/u4b/usb_dynamic.h>
#include <bus/u4b/usb_request.h>
static usb_handle_req_t usb_temp_get_desc_w;
static usb_temp_setup_by_index_t usb_temp_setup_by_index_w;
static usb_temp_unsetup_t usb_temp_unsetup_w;
static usb_test_quirk_t usb_test_quirk_w;
static usb_quirk_ioctl_t usb_quirk_ioctl_w;
usb_handle_req_t *usb_temp_get_desc_p = &usb_temp_get_desc_w;
usb_temp_setup_by_index_t *usb_temp_setup_by_index_p = &usb_temp_setup_by_index_w;
usb_temp_unsetup_t *usb_temp_unsetup_p = &usb_temp_unsetup_w;
usb_test_quirk_t *usb_test_quirk_p = &usb_test_quirk_w;
usb_quirk_ioctl_t *usb_quirk_ioctl_p = &usb_quirk_ioctl_w;
devclass_t usb_devclass_ptr = NULL;
static usb_error_t
usb_temp_setup_by_index_w(struct usb_device *udev, uint16_t index)
{
return (USB_ERR_INVAL);
}
static uint8_t
usb_test_quirk_w(const struct usbd_lookup_info *info, uint16_t quirk)
{
return (0);
}
static int
usb_quirk_ioctl_w(unsigned long cmd, caddr_t data, int fflag, struct thread *td)
{
return (ENOIOCTL);
}
static usb_error_t
usb_temp_get_desc_w(struct usb_device *udev, struct usb_device_request *req, const void **pPtr, uint16_t *pLength)
{
return (USB_ERR_STALLED);
}
static void
usb_temp_unsetup_w(struct usb_device *udev)
{
if(udev->usb_template_ptr) {
usbd_free_config_desc(udev, udev->usb_template_ptr);
udev->usb_template_ptr = NULL;
}
}
void
usb_quirk_unload(void *arg)
{
usb_test_quirk_p = &usb_test_quirk_w;
usb_quirk_ioctl_p = &usb_quirk_ioctl_w;
tsleep(usb_quirk_unload, 0, "WAIT", hz);
}
void
usb_temp_unload(void *arg)
{
usb_temp_get_desc_p = &usb_temp_get_desc_w;
usb_temp_setup_by_index_p = &usb_temp_setup_by_index_w;
usb_temp_unsetup_p = &usb_temp_unsetup_w;
tsleep(usb_quirk_unload, 0, "WAIT", hz);
}
void
usb_bus_unload(void *arg)
{
usb_devclass_ptr = NULL;
tsleep(usb_quirk_unload, 0, "WAIT", hz);
}