PERFORCE change 144287 for review

Hans Petter Selasky hselasky at FreeBSD.org
Sun Jun 29 16:25:09 UTC 2008


http://perforce.freebsd.org/chv.cgi?CH=144287

Change 144287 by hselasky at hselasky_laptop001 on 2008/06/29 16:24:43

	
	Here is the new USB core split into parts. There are some
	minor things left like I have to change the USB bus name to
	something non "usb". If anyone has any good suggestions I am
	open to that.
	
	Some bugfixes and improvements have been made.
	
	Mostly symbol substitution has been simplified with
	the help of the following script:
	
	sed -E "s/usbd_|usb_/usb2_/g"| 
	sed -E "s/USBD_/USB_/g"| 
	sed -e "s/USBVERBOSE/USB_VERBOSE/g" | 
	sed -e "s/__KASSERT/USB_ASSERT/g" |      
	sed -e "s/USBREV_/USB_REV_/g" | 
	sed -e "s/device_get_dma_tag/USB_GET_DMA_TAG/g" |   
	sed -e "s/POINTER_TO_UNSIGNED/USB_P2U/g" |                             
	sed -e "s/UMATCH_VENDOR_PRODUCT_REV/(0)/g" | 
	sed -e "s/UMATCH_VENDOR_PRODUCT/(0)/g" | 
	sed -e "s/UMATCH_VENDOR_DEVCLASS_DEVPROTO/(0)/g" | 
	sed -e "s/UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO/(0)/g" | 
	sed -e "s/UMATCH_DEVCLASS_DEVSUBCLASS/(0)/g" | 
	sed -e "s/UMATCH_VENDOR_PRODUCT_REV_CONF_IFACE/(0)/g" | 
	sed -e "s/UMATCH_VENDOR_PRODUCT_CONF_IFACE/(0)/g" | 
	sed -e "s/UMATCH_VENDOR_IFACESUBCLASS_IFACEPROTO/(0)/g" | 
	sed -e "s/UMATCH_VENDOR_IFACESUBCLASS/(0)/g" | 
	sed -e "s/UMATCH_IFACECLASS_IFACESUBCLASS_IFACEPROTO/(0)/g" | 
	sed -e "s/UMATCH_IFACECLASS_IFACESUBCLASS/(0)/g" | 
	sed -e "s/UMATCH_IFACECLASS/(0)/g" | 
	sed -e "s/UMATCH_IFACECLASS_GENERIC/(0)/g" | 
	sed -e "s/UMATCH_GENERIC/(0)/g" | 
	sed -e "s/UMATCH_NONE/(ENXIO)/g" | 
	sed -e "s/_hw_usb[,]/_hw_usb2,/g" | 
	sed -e "s/_hw_usb_/_hw_usb2_/g" | 
	sed -e "s/_std_root_/_sw_/g" | 
	sed -e "s/_STD_ROOT_/_SW_/g" | 
	sed -e "s/usb2_status_t/usb2_error_t/g" |
	sed -e "s/usb2_device_request_t/struct usb2_device_request/g" |
	sed -e "s/usb2_descriptor_t/struct usb2_descriptor/g" |
	sed -e "s/usb2_device_descriptor_t/struct usb2_device_descriptor/g" |
	sed -e "s/usb2_config_descriptor_t/struct usb2_config_descriptor/g" |
	sed -e "s/usb2_interface_descriptor_t/struct usb2_interface_descriptor/g" |
	sed -e "s/usb2_endpoint_descriptor_t/struct usb2_endpoint_descriptor/g" |
	sed -e "s/usb2_string_descriptor_t/struct usb2_string_descriptor/g" |
	sed -e "s/usb2_hub_descriptor_t/struct usb2_hub_descriptor/g" |
	sed -e "s/usb2_device_qualifier_t/struct usb2_device_qualifier/g" |
	sed -e "s/usb2_otg_descriptor_t/struct usb2_otg_descriptor/g" |
	sed -e "s/usb2_hub_status_t/struct usb2_hub_status/g" |
	sed -e "s/usb2_port_status_t/struct usb2_port_status/g" |
	sed -e "s/usbreq_/usb2_req_/g" |
	sed -e "s/usb2_memory_info/usb2_xfer_root/g" |
	sed -e "s/usb2_find_best_slot/usb2_intr_find_best_slot/g" |
	sed -e "s/usb2_set_device_desc/device_set_usb_desc/g" |
	sed -e "s/usb2_finish_vp_info/usb2_check_strings/g" |
	sed -e "s/usb2_driver_load/NULL/g" | 
	sed -e "s/usb2_cdev/usb2_fifo/g" |
	sed -e "s/usb2_cdev_/usb2_fifo_/g" |
	sed -e "s/USB_MAX_ENDPOINTS/USB_EP_MAX/g" |
	sed -e "s/USB_MAX_INTERFACES/USB_IFACE_MAX/g" |

Affected files ...

.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_busdma.c#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_busdma.h#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_compat_linux.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_compat_linux.h#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_config_td.c#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_config_td.h#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_core.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_core.h#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_debug.c#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_debug.h#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_dev.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_dev.h#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.c#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.h#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_dynamic.c#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_dynamic.h#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_error.c#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_generic.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_generic.h#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_handle_request.c#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_handle_request.h#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_hub.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_hub.h#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_lookup.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_lookup.h#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_mbuf.c#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_mbuf.h#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_parse.c#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_parse.h#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_port.h#2 delete
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_process.c#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_process.h#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_request.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_request.h#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_sw_transfer.c#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_sw_transfer.h#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_transfer.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_transfer.h#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_util.c#1 add
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_util.h#1 add
.. //depot/projects/usb/src/sys/dev/usb2/include/usb2_hid.h#2 edit

Differences ...

==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_compat_linux.c#2 (text+ko) ====

@@ -1,4 +1,4 @@
-/*
+/*-
  * Copyright (c) 2007 Luigi Rizzo - Universita` di Pisa. All rights reserved.
  * Copyright (c) 2007 Hans Petter Selasky. All rights reserved.
  *
@@ -24,25 +24,28 @@
  * SUCH DAMAGE.
  */
 
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/usb/usb_compat_linux.c $");
+#include <dev/usb2/include/usb2_defs.h>
+#include <dev/usb2/include/usb2_mfunc.h>
+#include <dev/usb2/include/usb2_standard.h>
+#include <dev/usb2/include/usb2_error.h>
+#include <dev/usb2/include/usb2_revision.h>
 
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/malloc.h>
-#include <sys/endian.h>
+#include <dev/usb2/core/usb2_core.h>
+#include <dev/usb2/core/usb2_compat_linux.h>
+#include <dev/usb2/core/usb2_process.h>
+#include <dev/usb2/core/usb2_device.h>
+#include <dev/usb2/core/usb2_util.h>
+#include <dev/usb2/core/usb2_busdma.h>
+#include <dev/usb2/core/usb2_transfer.h>
+#include <dev/usb2/core/usb2_parse.h>
 
-#include <dev/usb/usb_port.h>
-#include <dev/usb/usb.h>
-#include <dev/usb/usb_subr.h>
-
-#include <dev/usb/usb_compat_linux.h>
+#include <dev/usb2/controller/usb2_controller.h>
 
 struct usb_linux_softc {
 	LIST_ENTRY(usb_linux_softc) sc_attached_list;
 
 	device_t sc_fbsd_dev;
-	struct usbd_device *sc_fbsd_udev;
+	struct usb2_device *sc_fbsd_udev;
 	struct usb_interface *sc_ui;
 	struct usb_driver *sc_udrv;
 };
@@ -55,18 +58,18 @@
 static device_resume_t usb_linux_resume;
 static device_shutdown_t usb_linux_shutdown;
 
-static usbd_callback_t usb_linux_isoc_callback;
-static usbd_callback_t usb_linux_non_isoc_callback;
+static usb2_callback_t usb_linux_isoc_callback;
+static usb2_callback_t usb_linux_non_isoc_callback;
 
 static usb_complete_t usb_linux_wait_complete;
 
 static uint16_t usb_max_isoc_frames(struct usb_device *dev);
-static int32_t usb_start_wait_urb(struct urb *urb, uint32_t timeout, uint32_t *p_actlen);
-static const struct usb_device_id *usb_linux_lookup_id(const struct usb_device_id *id, struct usb_attach_arg *uaa);
+static int usb_start_wait_urb(struct urb *urb, uint32_t timeout, uint32_t *p_actlen);
+static const struct usb_device_id *usb_linux_lookup_id(const struct usb_device_id *id, struct usb2_attach_arg *uaa);
 static struct usb_driver *usb_linux_get_usb_driver(struct usb_linux_softc *sc);
-static struct usb_device *usb_linux_create_usb_device(struct usbd_device *udev, device_t dev);
+static struct usb_device *usb_linux_create_usb_device(struct usb2_device *udev, device_t dev);
 static void usb_linux_cleanup_interface(struct usb_device *dev, struct usb_interface *iface);
-static void usb_linux_complete(struct usbd_xfer *xfer);
+static void usb_linux_complete(struct usb2_xfer *xfer);
 
 /*------------------------------------------------------------------------*
  * FreeBSD USB interface
@@ -95,31 +98,23 @@
 
 static devclass_t usb_linux_devclass;
 
-DRIVER_MODULE(usb_linux, uhub, usb_linux_driver, usb_linux_devclass, usbd_driver_load, 0);
+DRIVER_MODULE(usb_linux, uhub, usb_linux_driver, usb_linux_devclass, NULL, 0);
 MODULE_DEPEND(usb_linux, usb, 1, 1, 1);
 
 /*------------------------------------------------------------------------*
  *	usb_linux_lookup_id
  *
  * This functions takes an array of "struct usb_device_id" and tries
- * to match the entries with the information in "struct usb_attach_arg".
+ * to match the entries with the information in "struct usb2_attach_arg".
  * If it finds a match the matching entry will be returned.
  * Else "NULL" will be returned.
  *------------------------------------------------------------------------*/
 static const struct usb_device_id *
-usb_linux_lookup_id(const struct usb_device_id *id, struct usb_attach_arg *uaa)
+usb_linux_lookup_id(const struct usb_device_id *id, struct usb2_attach_arg *uaa)
 {
-	usb_interface_descriptor_t *idesc;
-	usb_device_descriptor_t *dd;
-
 	if (id == NULL) {
 		goto done;
 	}
-	idesc = usbd_get_interface_descriptor(uaa->iface);
-	if (idesc == NULL) {
-		goto done;
-	}
-	dd = &(uaa->device->ddesc);
 
 	/*
 	 * Keep on matching array entries until we find one with
@@ -129,34 +124,34 @@
 	for (; id->match_flags; id++) {
 
 		if ((id->match_flags & USB_DEVICE_ID_MATCH_VENDOR) &&
-		    (id->idVendor != uaa->vendor)) {
+		    (id->idVendor != uaa->info.idVendor)) {
 			continue;
 		}
 		if ((id->match_flags & USB_DEVICE_ID_MATCH_PRODUCT) &&
-		    (id->idProduct != uaa->product)) {
+		    (id->idProduct != uaa->info.idProduct)) {
 			continue;
 		}
 		if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_LO) &&
-		    (id->bcdDevice_lo > uaa->release)) {
+		    (id->bcdDevice_lo > uaa->info.bcdDevice)) {
 			continue;
 		}
 		if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_HI) &&
-		    (id->bcdDevice_hi < uaa->release)) {
+		    (id->bcdDevice_hi < uaa->info.bcdDevice)) {
 			continue;
 		}
 		if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_CLASS) &&
-		    (id->bDeviceClass != dd->bDeviceClass)) {
+		    (id->bDeviceClass != uaa->info.bDeviceClass)) {
 			continue;
 		}
 		if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_SUBCLASS) &&
-		    (id->bDeviceSubClass != dd->bDeviceSubClass)) {
+		    (id->bDeviceSubClass != uaa->info.bDeviceSubClass)) {
 			continue;
 		}
 		if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_PROTOCOL) &&
-		    (id->bDeviceProtocol != dd->bDeviceProtocol)) {
+		    (id->bDeviceProtocol != uaa->info.bDeviceProtocol)) {
 			continue;
 		}
-		if ((dd->bDeviceClass == 0xFF) &&
+		if ((uaa->info.bDeviceClass == 0xFF) &&
 		    !(id->match_flags & USB_DEVICE_ID_MATCH_VENDOR) &&
 		    (id->match_flags & (USB_DEVICE_ID_MATCH_INT_CLASS |
 		    USB_DEVICE_ID_MATCH_INT_SUBCLASS |
@@ -164,15 +159,15 @@
 			continue;
 		}
 		if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_CLASS) &&
-		    (id->bInterfaceClass != idesc->bInterfaceClass)) {
+		    (id->bInterfaceClass != uaa->info.bInterfaceClass)) {
 			continue;
 		}
 		if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_SUBCLASS) &&
-		    (id->bInterfaceSubClass != idesc->bInterfaceSubClass)) {
+		    (id->bInterfaceSubClass != uaa->info.bInterfaceSubClass)) {
 			continue;
 		}
 		if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_PROTOCOL) &&
-		    (id->bInterfaceProtocol != idesc->bInterfaceProtocol)) {
+		    (id->bInterfaceProtocol != uaa->info.bInterfaceProtocol)) {
 			continue;
 		}
 		/* we found a match! */
@@ -192,24 +187,21 @@
 static int
 usb_linux_probe(device_t dev)
 {
-	struct usb_attach_arg *uaa = device_get_ivars(dev);
+	struct usb2_attach_arg *uaa = device_get_ivars(dev);
 	struct usb_driver *udrv;
-	int err = UMATCH_NONE;
+	int err = ENXIO;
 
-	if (uaa->usb_mode != USB_MODE_HOST) {
-		return (UMATCH_NONE);
+	if (uaa->usb2_mode != USB_MODE_HOST) {
+		return (ENXIO);
 	}
-	if (uaa->iface == NULL) {
-		return (UMATCH_NONE);
-	}
-	mtx_lock(&usb_global_lock);
+	mtx_lock(&Giant);
 	LIST_FOREACH(udrv, &usb_linux_driver_list, linux_driver_list) {
 		if (usb_linux_lookup_id(udrv->id_table, uaa)) {
 			err = 0;
 			break;
 		}
 	}
-	mtx_unlock(&usb_global_lock);
+	mtx_unlock(&Giant);
 
 	return (err);
 }
@@ -226,9 +218,9 @@
 {
 	struct usb_driver *udrv;
 
-	mtx_lock(&usb_global_lock);
+	mtx_lock(&Giant);
 	udrv = sc->sc_udrv;
-	mtx_unlock(&usb_global_lock);
+	mtx_unlock(&Giant);
 	return (udrv);
 }
 
@@ -242,7 +234,7 @@
 static int
 usb_linux_attach(device_t dev)
 {
-	struct usb_attach_arg *uaa = device_get_ivars(dev);
+	struct usb2_attach_arg *uaa = device_get_ivars(dev);
 	struct usb_linux_softc *sc = device_get_softc(dev);
 	struct usb_driver *udrv;
 	struct usb_device *p_dev;
@@ -251,13 +243,13 @@
 	if (sc == NULL) {
 		return (ENOMEM);
 	}
-	mtx_lock(&usb_global_lock);
+	mtx_lock(&Giant);
 	LIST_FOREACH(udrv, &usb_linux_driver_list, linux_driver_list) {
 		id = usb_linux_lookup_id(udrv->id_table, uaa);
 		if (id)
 			break;
 	}
-	mtx_unlock(&usb_global_lock);
+	mtx_unlock(&Giant);
 
 	if (id == NULL) {
 		return (ENXIO);
@@ -274,12 +266,12 @@
 		}
 		uaa->device->linux_dev = p_dev;
 	}
-	usbd_set_device_desc(dev);
+	device_set_usb2_desc(dev);
 
 	sc->sc_fbsd_udev = uaa->device;
 	sc->sc_fbsd_dev = dev;
 	sc->sc_udrv = udrv;
-	sc->sc_ui = usb_ifnum_to_if(p_dev, uaa->iface->idesc->bInterfaceNumber);
+	sc->sc_ui = usb_ifnum_to_if(p_dev, uaa->info.bIfaceNum);
 	if (sc->sc_ui == NULL) {
 		return (EINVAL);
 	}
@@ -288,9 +280,9 @@
 			return (ENXIO);
 		}
 	}
-	mtx_lock(&usb_global_lock);
+	mtx_lock(&Giant);
 	LIST_INSERT_HEAD(&usb_linux_attached_list, sc, sc_attached_list);
-	mtx_unlock(&usb_global_lock);
+	mtx_unlock(&Giant);
 
 	/* success */
 	return (0);
@@ -308,14 +300,14 @@
 	struct usb_linux_softc *sc = device_get_softc(dev);
 	struct usb_driver *udrv = NULL;
 
-	mtx_lock(&usb_global_lock);
+	mtx_lock(&Giant);
 	if (sc->sc_attached_list.le_prev) {
 		LIST_REMOVE(sc, sc_attached_list);
 		sc->sc_attached_list.le_prev = NULL;
 		udrv = sc->sc_udrv;
 		sc->sc_udrv = NULL;
 	}
-	mtx_unlock(&usb_global_lock);
+	mtx_unlock(&Giant);
 
 	if (udrv && udrv->disconnect) {
 		(udrv->disconnect) (sc->sc_ui);
@@ -395,7 +387,7 @@
 static uint16_t
 usb_max_isoc_frames(struct usb_device *dev)
 {
-	return ((usbd_get_speed(dev->bsd_udev) == USB_SPEED_HIGH) ?
+	return ((usb2_get_speed(dev->bsd_udev) == USB_SPEED_HIGH) ?
 	    USB_MAX_HIGH_SPEED_ISOC_FRAMES : USB_MAX_FULL_SPEED_ISOC_FRAMES);
 }
 
@@ -406,7 +398,7 @@
  * initialized. If it returns non-zero, it means that the URB was not
  * queued.
  *------------------------------------------------------------------------*/
-int32_t
+int
 usb_submit_urb(struct urb *urb, uint16_t mem_flags)
 {
 	struct usb_host_endpoint *uhe;
@@ -414,7 +406,7 @@
 	if (urb == NULL) {
 		return (-EINVAL);
 	}
-	mtx_assert(&usb_global_lock, MA_OWNED);
+	mtx_assert(&Giant, MA_OWNED);
 
 	if (urb->pipe == NULL) {
 		return (-EINVAL);
@@ -434,8 +426,8 @@
 
 		urb->status = -EINPROGRESS;
 
-		usbd_transfer_start(uhe->bsd_xfer[0]);
-		usbd_transfer_start(uhe->bsd_xfer[1]);
+		usb2_transfer_start(uhe->bsd_xfer[0]);
+		usb2_transfer_start(uhe->bsd_xfer[1]);
 	} else {
 		/* no pipes have been setup yet! */
 		urb->status = -EINVAL;
@@ -452,7 +444,7 @@
  * FreeBSD this function is always non-blocking, and will always call
  * the "complete" callback with an error before it returns.
  *------------------------------------------------------------------------*/
-int32_t
+int
 usb_unlink_urb(struct urb *urb)
 {
 	struct usb_host_endpoint *uhe;
@@ -461,7 +453,7 @@
 	if (urb == NULL) {
 		return (-EINVAL);
 	}
-	mtx_assert(&usb_global_lock, MA_OWNED);
+	mtx_assert(&Giant, MA_OWNED);
 
 	if (urb->pipe == NULL) {
 		return (-EINVAL);
@@ -494,13 +486,13 @@
 
 		if (uhe->bsd_xfer[0] &&
 		    (uhe->bsd_xfer[0]->priv_fifo == (void *)urb)) {
-			usbd_transfer_stop(uhe->bsd_xfer[0]);
-			usbd_transfer_start(uhe->bsd_xfer[0]);
+			usb2_transfer_stop(uhe->bsd_xfer[0]);
+			usb2_transfer_start(uhe->bsd_xfer[0]);
 		}
 		if (uhe->bsd_xfer[1] &&
 		    (uhe->bsd_xfer[1]->priv_fifo == (void *)urb)) {
-			usbd_transfer_stop(uhe->bsd_xfer[1]);
-			usbd_transfer_start(uhe->bsd_xfer[1]);
+			usb2_transfer_stop(uhe->bsd_xfer[1]);
+			usb2_transfer_start(uhe->bsd_xfer[1]);
 		}
 	}
 	return (0);
@@ -513,11 +505,11 @@
  * an USB endpoint returns a stall message to the USB host controller.
  * Until the stall is cleared, no data can be transferred.
  *------------------------------------------------------------------------*/
-int32_t
+int
 usb_clear_halt(struct usb_device *dev, struct usb_host_endpoint *uhe)
 {
-	struct usbd_config cfg[1];
-	struct usbd_pipe *pipe;
+	struct usb2_config cfg[1];
+	struct usb2_pipe *pipe;
 	uint8_t type;
 	uint8_t addr;
 
@@ -533,11 +525,11 @@
 	cfg[0].endpoint = addr & UE_ADDR;
 	cfg[0].direction = addr & (UE_DIR_OUT | UE_DIR_IN);
 
-	pipe = usbd_get_pipe(dev->bsd_udev, uhe->bsd_iface_index, cfg);
+	pipe = usb2_get_pipe(dev->bsd_udev, uhe->bsd_iface_index, cfg);
 	if (pipe == NULL)
 		return (-EINVAL);
 
-	usbd_clear_data_toggle(dev->bsd_udev, pipe);
+	usb2_clear_data_toggle(dev->bsd_udev, pipe);
 
 	return (usb_control_msg(dev, &(dev->ep0),
 	    UR_CLEAR_FEATURE, UT_WRITE_ENDPOINT,
@@ -550,10 +542,10 @@
  * This is an internal function that is used to perform synchronous
  * Linux USB transfers.
  *------------------------------------------------------------------------*/
-static int32_t
+static int
 usb_start_wait_urb(struct urb *urb, uint32_t timeout, uint32_t *p_actlen)
 {
-	int32_t err;
+	int err;
 
 	/* you must have a timeout! */
 	if (timeout == 0) {
@@ -574,7 +566,7 @@
 	 */
 	while (urb->transfer_flags & URB_WAIT_WAKEUP) {
 		urb->transfer_flags |= URB_IS_SLEEPING;
-		err = mtx_sleep(urb, &usb_global_lock, 0, "USB Linux Wait", 0);
+		err = mtx_sleep(urb, &Giant, 0, "USB Linux Wait", 0);
 		urb->transfer_flags &= ~URB_IS_SLEEPING;
 		if (err)
 			goto done;
@@ -605,17 +597,17 @@
  * < 0: Failure
  * > 0: Acutal length
  *------------------------------------------------------------------------*/
-int32_t
+int
 usb_control_msg(struct usb_device *dev, struct usb_host_endpoint *uhe,
     uint8_t request, uint8_t requesttype,
     uint16_t value, uint16_t index, void *data, uint16_t size, uint32_t timeout)
 {
 	struct urb *urb;
-	usb_device_request_t *req;
+	struct usb2_device_request *req;
 	struct usb_host_endpoint *uhe_write;
 	struct usb_host_endpoint *uhe_read;
 	uint32_t actlen;
-	int32_t err;
+	int err;
 	uint8_t type;
 	uint8_t addr;
 
@@ -673,7 +665,7 @@
 
 	if (size && (req->bmRequestType & UT_WRITE)) {
 		/* move the data to a real buffer */
-		bcopy(data, req->bData, size);
+		bcopy(data, req+1, size);
 	}
 	if (type == UE_CONTROL) {
 		urb->pipe = uhe;
@@ -696,7 +688,7 @@
 			if (req->bmRequestType & UT_READ) {
 				urb->pipe = uhe_read;
 			}
-			urb->transfer_buffer = req->bData;
+			urb->transfer_buffer = req+1;
 			urb->transfer_buffer_length = size;
 
 			err = usb_start_wait_urb(urb, timeout, &actlen);
@@ -713,7 +705,7 @@
 			bzero(((uint8_t *)data) + actlen, size - actlen);
 		}
 		if (actlen) {
-			bcopy(req->bData, data, actlen);
+			bcopy(req+1, data, actlen);
 		}
 	}
 	usb_free_urb(urb);
@@ -732,18 +724,19 @@
  * index zero is selected. Note that "iface_no" is not the interface
  * index, but rather the value of "bInterfaceNumber".
  *------------------------------------------------------------------------*/
-int32_t
+int
 usb_set_interface(struct usb_device *dev, uint8_t iface_no, uint8_t alt_index)
 {
 	struct usb_interface *p_ui = usb_ifnum_to_if(dev, iface_no);
-	int32_t err;
+	int err;
 
 	if (p_ui == NULL)
 		return (-EINVAL);
 	if (alt_index >= p_ui->num_altsetting)
 		return (-EINVAL);
 	usb_linux_cleanup_interface(dev, p_ui);
-	err = -usbd_set_config_index(dev->bsd_udev, p_ui->bsd_iface_index, alt_index);
+	err = -usb2_set_alt_interface_index(dev->bsd_udev, 
+		p_ui->bsd_iface_index, alt_index);
 	if (err == 0) {
 		p_ui->cur_altsetting = p_ui->altsetting + alt_index;
 	}
@@ -761,10 +754,10 @@
  * a non-zero dummy, hence this function will base the maximum buffer
  * size on "wMaxPacketSize".
  *------------------------------------------------------------------------*/
-int32_t
+int
 usb_setup_endpoint(struct usb_device *dev, struct usb_host_endpoint *uhe, uint32_t bufsize)
 {
-	struct usbd_config cfg[2];
+	struct usb2_config cfg[2];
 	uint8_t type = uhe->desc.bmAttributes & UE_XFERTYPE;
 	uint8_t addr = uhe->desc.bEndpointAddress;
 
@@ -772,7 +765,7 @@
 		/* optimize */
 		return (0);
 	}
-	usbd_transfer_unsetup(uhe->bsd_xfer, 2);
+	usb2_transfer_unsetup(uhe->bsd_xfer, 2);
 
 	uhe->fbsd_buf_size = bufsize;
 
@@ -811,8 +804,8 @@
 
 		/* Allocate and setup two generic FreeBSD USB transfers */
 
-		if (usbd_transfer_setup(dev->bsd_udev, &(uhe->bsd_iface_index),
-		    uhe->bsd_xfer, cfg, 2, uhe, &usb_global_lock)) {
+		if (usb2_transfer_setup(dev->bsd_udev, &(uhe->bsd_iface_index),
+		    uhe->bsd_xfer, cfg, 2, uhe, &Giant)) {
 			return (-EINVAL);
 		}
 	} else {
@@ -831,8 +824,8 @@
 		cfg[0].mh.flags.proxy_buffer = 1;
 		cfg[0].mh.flags.short_xfer_ok = 1;
 
-		if (usbd_transfer_setup(dev->bsd_udev, &(uhe->bsd_iface_index),
-		    uhe->bsd_xfer, cfg, 1, uhe, &usb_global_lock)) {
+		if (usb2_transfer_setup(dev->bsd_udev, &(uhe->bsd_iface_index),
+		    uhe->bsd_xfer, cfg, 1, uhe, &Giant)) {
 			return (-EINVAL);
 		}
 	}
@@ -847,13 +840,13 @@
  * is returned by this function.
  *------------------------------------------------------------------------*/
 static struct usb_device *
-usb_linux_create_usb_device(struct usbd_device *udev, device_t dev)
+usb_linux_create_usb_device(struct usb2_device *udev, device_t dev)
 {
-	usb_config_descriptor_t *cd = usbd_get_config_descriptor(udev);
-	usb_descriptor_t *desc;
-	usb_interface_descriptor_t *id;
-	usb_endpoint_descriptor_t *ed;
-	usb_device_descriptor_t *dd;
+	struct usb2_config_descriptor *cd = usb2_get_config_descriptor(udev);
+	struct usb2_descriptor *desc;
+	struct usb2_interface_descriptor *id;
+	struct usb2_endpoint_descriptor *ed;
+	struct usb2_device_descriptor *dd;
 	struct usb_device *p_ud = NULL;
 	struct usb_interface *p_ui = NULL;
 	struct usb_host_interface *p_uhi = NULL;
@@ -882,7 +875,7 @@
 		 * Iterate over all the USB descriptors. Use the USB config
 		 * descriptor pointer provided by the FreeBSD USB stack.
 		 */
-		while ((desc = usbd_desc_foreach(cd, desc))) {
+		while ((desc = usb2_desc_foreach(cd, desc))) {
 
 			/*
 			 * Build up a tree according to the descriptors we
@@ -968,7 +961,7 @@
 			p_ud->product = "";
 			p_ud->manufacturer = "";
 			p_ud->serial = "";
-			p_ud->speed = usbd_get_speed(udev);
+			p_ud->speed = usb2_get_speed(udev);
 			p_ud->bsd_udev = udev;
 			p_ud->bsd_iface_start = p_ui;
 			p_ud->bsd_iface_end = p_ui + iface_index;
@@ -980,7 +973,7 @@
 			    sizeof(p_ud->ep0.desc));
 
 			if (usb_setup_endpoint(p_ud, &(p_ud->ep0), 1024 /* bytes */ )) {
-				usb_linux_free_usb_device(p_ud);
+				usb_linux_free_device(p_ud);
 				p_ud = NULL;
 				goto done;
 			}
@@ -1010,7 +1003,7 @@
 		 * FreeBSD specific magic value to ask for control transfer
 		 * memory allocation:
 		 */
-		size = sizeof(*urb) + sizeof(usb_device_request_t) + mem_flags;
+		size = sizeof(*urb) + sizeof(struct usb2_device_request) + mem_flags;
 	} else {
 		size = sizeof(*urb) + (iso_packets * sizeof(urb->iso_frame_desc[0]));
 	}
@@ -1020,7 +1013,7 @@
 		if (iso_packets == 0xFFFF) {
 			urb->setup_packet = (void *)(urb + 1);
 			urb->transfer_buffer = (void *)(urb->setup_packet +
-			    sizeof(usb_device_request_t));
+			    sizeof(struct usb2_device_request));
 			urb->transfer_buffer_length = mem_flags;
 		} else {
 			urb->number_of_packets = iso_packets;
@@ -1162,11 +1155,11 @@
 {
 	struct usb_driver *drv = arg;
 
-	mtx_lock(&usb_global_lock);
+	mtx_lock(&Giant);
 	LIST_INSERT_HEAD(&usb_linux_driver_list, drv, linux_driver_list);
-	mtx_unlock(&usb_global_lock);
+	mtx_unlock(&Giant);
 
-	usb_needs_probe_and_attach();
+	usb2_needs_explore_all();
 	return;
 }
 
@@ -1187,31 +1180,31 @@
 	struct usb_linux_softc *sc;
 
 repeat:
-	mtx_lock(&usb_global_lock);
+	mtx_lock(&Giant);
 	LIST_FOREACH(sc, &usb_linux_attached_list, sc_attached_list) {
 		if (sc->sc_udrv == drv) {
-			mtx_unlock(&usb_global_lock);
+			mtx_unlock(&Giant);
 			device_detach(sc->sc_fbsd_dev);
 			goto repeat;
 		}
 	}
 	LIST_REMOVE(drv, linux_driver_list);
-	mtx_unlock(&usb_global_lock);
+	mtx_unlock(&Giant);
 	return;
 }
 
 /*------------------------------------------------------------------------*
- *	usb_linux_free_usb_device
+ *	usb_linux_free_device
  *
  * The following function is only used by the FreeBSD USB stack, to
  * cleanup and free memory after that a Linux USB device was attached.
  *------------------------------------------------------------------------*/
 void
-usb_linux_free_usb_device(struct usb_device *dev)
+usb_linux_free_device(struct usb_device *dev)
 {
 	struct usb_host_endpoint *uhe;
 	struct usb_host_endpoint *uhe_end;
-	int32_t err;
+	int err;
 
 	uhe = dev->bsd_endpoint_start;
 	uhe_end = dev->bsd_endpoint_end;
@@ -1275,7 +1268,7 @@
 void
 usb_kill_urb(struct urb *urb)
 {
-	int32_t err;
+	int err;
 
 	err = usb_unlink_urb(urb);
 	return;
@@ -1307,7 +1300,7 @@
 	struct usb_host_interface *uhi_end;
 	struct usb_host_endpoint *uhe;
 	struct usb_host_endpoint *uhe_end;
-	int32_t err;
+	int err;
 
 	uhi = iface->altsetting;
 	uhi_end = iface->altsetting + iface->num_altsetting;
@@ -1343,7 +1336,7 @@
  *	usb_linux_complete
  *------------------------------------------------------------------------*/
 static void
-usb_linux_complete(struct usbd_xfer *xfer)
+usb_linux_complete(struct usb2_xfer *xfer)
 {
 	struct urb *urb;
 
@@ -1364,7 +1357,7 @@
  * used.
  *------------------------------------------------------------------------*/
 static void
-usb_linux_isoc_callback(struct usbd_xfer *xfer)
+usb_linux_isoc_callback(struct usb2_xfer *xfer)
 {
 	uint32_t max_frame = xfer->max_frame_size;
 	uint32_t offset;
@@ -1373,8 +1366,8 @@
 	struct usb_host_endpoint *uhe = xfer->priv_sc;
 	struct usb_iso_packet_descriptor *uipd;
 
-	switch (USBD_GET_STATE(xfer)) {
-	case USBD_ST_TRANSFERRED:
+	switch (USB_GET_STATE(xfer)) {
+	case USB_ST_TRANSFERRED:
 
 		if (urb->bsd_isread) {
 
@@ -1387,8 +1380,8 @@
 				uipd->actual_length = xfer->frlengths[x];
 				uipd->status = 0;
 				if (!xfer->flags.ext_buffer) {
-					usbd_copy_out(xfer->frbuffers, offset,
-					    USBD_ADD_BYTES(urb->transfer_buffer,
+					usb2_copy_out(xfer->frbuffers, offset,
+					    USB_ADD_BYTES(urb->transfer_buffer,
 					    uipd->offset), uipd->actual_length);
 				}
 				offset += max_frame;
@@ -1420,7 +1413,7 @@
 		/* call callback */
 		usb_linux_complete(xfer);
 
-	case USBD_ST_SETUP:
+	case USB_ST_SETUP:
 tr_setup:
 
 		if (xfer->priv_fifo == NULL) {
@@ -1457,8 +1450,8 @@
 				uipd = urb->iso_frame_desc + x;
 				xfer->frlengths[x] = uipd->length;
 				if (!xfer->flags.ext_buffer) {
-					usbd_copy_in(xfer->frbuffers, offset,
-					    USBD_ADD_BYTES(urb->transfer_buffer,
+					usb2_copy_in(xfer->frbuffers, offset,
+					    USB_ADD_BYTES(urb->transfer_buffer,
 					    uipd->offset), uipd->length);
 				}
 				offset += uipd->length;
@@ -1482,18 +1475,18 @@
 
 		if (xfer->flags.ext_buffer) {
 			/* set virtual address to load */
-			usbd_set_frame_data(xfer,
+			usb2_set_frame_data(xfer,
 			    urb->transfer_buffer, 0);
 		}
 		xfer->priv_fifo = urb;
 		xfer->flags.force_short_xfer = 0;
 		xfer->timeout = urb->timeout;
 		xfer->nframes = urb->number_of_packets;
-		usbd_start_hardware(xfer);
+		usb2_start_hardware(xfer);
 		return;
 
 	default:			/* Error */
-		if (xfer->error == USBD_ERR_CANCELLED) {
+		if (xfer->error == USB_ERR_CANCELLED) {
 			urb->status = -ECONNRESET;
 		} else {
 			urb->status = -EPIPE;	/* stalled */
@@ -1510,7 +1503,7 @@
 		/* call callback */
 		usb_linux_complete(xfer);
 
-		if (xfer->error == USBD_ERR_CANCELLED) {
+		if (xfer->error == USB_ERR_CANCELLED) {
 			/* we need to return in this case */
 			return;
 		}
@@ -1529,18 +1522,18 @@
  * callback is called.
  *------------------------------------------------------------------------*/
 static void
-usb_linux_non_isoc_callback(struct usbd_xfer *xfer)
+usb_linux_non_isoc_callback(struct usb2_xfer *xfer)
 {
 	enum {
-		REQ_SIZE = sizeof(usb_device_request_t)
+		REQ_SIZE = sizeof(struct usb2_device_request)
 	};
 	struct urb *urb = xfer->priv_fifo;
 	struct usb_host_endpoint *uhe = xfer->priv_sc;
 	uint32_t max_bulk = xfer->max_data_length;
 	uint8_t data_frame = xfer->flags_int.control_xfr ? 1 : 0;
 
-	switch (USBD_GET_STATE(xfer)) {
-	case USBD_ST_TRANSFERRED:
+	switch (USB_GET_STATE(xfer)) {
+	case USB_ST_TRANSFERRED:
 
 		if (xfer->flags_int.control_xfr) {
 
@@ -1555,7 +1548,7 @@
 		}
 		if (urb->bsd_isread && (!xfer->flags.ext_buffer)) {
 			/* copy in data with regard to the URB */
-			usbd_copy_out(xfer->frbuffers + data_frame, 0,
+			usb2_copy_out(xfer->frbuffers + data_frame, 0,
 			    urb->bsd_data_ptr, xfer->frlengths[data_frame]);
 		}
 		urb->bsd_length_rem -= xfer->frlengths[data_frame];
@@ -1585,7 +1578,7 @@
 		/* call callback */
 		usb_linux_complete(xfer);
 
-	case USBD_ST_SETUP:
+	case USB_ST_SETUP:
 tr_setup:
 
 		/* get next transfer */
@@ -1608,11 +1601,11 @@
 		         * First copy in the header, then copy in data!
 		         */
 			if (!xfer->flags.ext_buffer) {
-				usbd_copy_in(xfer->frbuffers, 0,
+				usb2_copy_in(xfer->frbuffers, 0,
 				    urb->setup_packet, REQ_SIZE);
 			} else {
 				/* set virtual address to load */
-				usbd_set_frame_data(xfer,
+				usb2_set_frame_data(xfer,
 				    urb->setup_packet, 0);
 			}
 
@@ -1648,11 +1641,11 @@
 
 		if (xfer->flags.ext_buffer) {
 			/* set virtual address to load */
-			usbd_set_frame_data(xfer, urb->bsd_data_ptr,
+			usb2_set_frame_data(xfer, urb->bsd_data_ptr,
 			    data_frame);
 		} else if (!urb->bsd_isread) {
 			/* copy out data with regard to the URB */
-			usbd_copy_in(xfer->frbuffers + data_frame, 0,
+			usb2_copy_in(xfer->frbuffers + data_frame, 0,
 			    urb->bsd_data_ptr, max_bulk);
 		}
 		xfer->frlengths[data_frame] = max_bulk;
@@ -1665,12 +1658,12 @@
 		} else {
 			xfer->nframes = 1;
 		}
-		usbd_start_hardware(xfer);
+		usb2_start_hardware(xfer);
 		return;
 
 	default:
 tr_error:
-		if (xfer->error == USBD_ERR_CANCELLED) {
+		if (xfer->error == USB_ERR_CANCELLED) {
 			urb->status = -ECONNRESET;
 		} else {
 			urb->status = -EPIPE;
@@ -1682,7 +1675,7 @@
 		/* call callback */
 		usb_linux_complete(xfer);
 
-		if (xfer->error == USBD_ERR_CANCELLED) {
+		if (xfer->error == USB_ERR_CANCELLED) {
 			/* we need to return in this case */
 			return;
 		}

==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_compat_linux.h#2 (text+ko) ====

@@ -1,4 +1,4 @@
-/*
+/*-
  * Copyright (c) 2007 Luigi Rizzo - Universita` di Pisa. All rights reserved.
  * Copyright (c) 2007 Hans Petter Selasky. All rights reserved.
  *
@@ -27,16 +27,6 @@
 #ifndef _USB_COMPAT_LINUX_H
 #define	_USB_COMPAT_LINUX_H
 
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/malloc.h>
-#include <sys/endian.h>
-#include <sys/queue.h>
-#include <sys/types.h>
-#include <sys/kernel.h>
-
-#include <dev/usb/usb.h>
-
 struct usb_device;
 struct usb_interface;
 struct usb_driver;
@@ -327,7 +317,7 @@
 
 	TAILQ_HEAD(, urb) bsd_urb_list;
 
-	struct usbd_xfer *bsd_xfer[2];
+	struct usb2_xfer *bsd_xfer[2];
 
 	uint8_t *extra;			/* Extra descriptors */
 
@@ -365,7 +355,7 @@
 	struct usb_device_descriptor descriptor;
 	struct usb_host_endpoint ep0;
 
-	struct usbd_device *bsd_udev;
+	struct usb2_device *bsd_udev;
 	struct usb_interface *bsd_iface_start;
 	struct usb_interface *bsd_iface_end;
 	struct usb_host_endpoint *bsd_endpoint_start;
@@ -443,12 +433,12 @@
 
 /* various prototypes */
 

>>> TRUNCATED FOR MAIL (1000 lines) <<<


More information about the p4-projects mailing list