From owner-svn-soc-all@FreeBSD.ORG Sun Jul 28 17:24:37 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 8A6A39C for ; Sun, 28 Jul 2013 17:24:37 +0000 (UTC) (envelope-from bguan@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 76C3E22AC for ; Sun, 28 Jul 2013 17:24:37 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r6SHObmm093413 for ; Sun, 28 Jul 2013 17:24:37 GMT (envelope-from bguan@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r6SHObYr093408 for svn-soc-all@FreeBSD.org; Sun, 28 Jul 2013 17:24:37 GMT (envelope-from bguan@FreeBSD.org) Date: Sun, 28 Jul 2013 17:24:37 GMT Message-Id: <201307281724.r6SHObYr093408@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to bguan@FreeBSD.org using -f From: bguan@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r255271 - soc2013/bguan/head/sys/dev/xen/usbfront MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 28 Jul 2013 17:24:37 -0000 Author: bguan Date: Sun Jul 28 17:24:37 2013 New Revision: 255271 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=255271 Log: more initalization for usbfront driver Modified: soc2013/bguan/head/sys/dev/xen/usbfront/xenhci.c Modified: soc2013/bguan/head/sys/dev/xen/usbfront/xenhci.c ============================================================================== --- soc2013/bguan/head/sys/dev/xen/usbfront/xenhci.c Sun Jul 28 17:24:24 2013 (r255270) +++ soc2013/bguan/head/sys/dev/xen/usbfront/xenhci.c Sun Jul 28 17:24:37 2013 (r255271) @@ -51,7 +51,7 @@ #include #include -//#define USB_DEBUG_VAR xhcidebug +#define USB_DEBUG_VAR xenhcidebug #include #include @@ -68,8 +68,49 @@ #include +#define XENHCI_BUS2SC(bus) \ + ((struct xenhci_softc *)(((uint8_t *)(bus)) - \ + ((uint8_t *)&(((struct xenhci_softc *)0)->sc_bus)))) + +#ifdef USB_DEBUG +static int xenhcidebug; +static int xenhciroute; +static int xenhcipolling; + +static SYSCTL_NODE(_hw_usb, OID_AUTO, xenhci, CTLFLAG_RW, 0, "USB XENHCI"); +SYSCTL_INT(_hw_usb_xenhci, OID_AUTO, debug, CTLFLAG_RW | CTLFLAG_TUN, + &xenhcidebug, 0, "Debug level"); +TUNABLE_INT("hw.usb.xenhci.debug", &xenhcidebug); +SYSCTL_INT(_hw_usb_xenhci, OID_AUTO, xenhci_port_route, CTLFLAG_RW | CTLFLAG_TUN, + &xenhciroute, 0, "Routing bitmap for switching EHCI ports to XENHCI controller"); +TUNABLE_INT("hw.usb.xenhci.xenhci_port_route", &xenhciroute); +SYSCTL_INT(_hw_usb_xenhci, OID_AUTO, use_polling, CTLFLAG_RW | CTLFLAG_TUN, + &xenhcipolling, 0, "Set to enable software interrupt polling for XENHCI controller"); +TUNABLE_INT("hw.usb.xenhci.use_polling", &xenhcipolling); +#endif + extern struct usb_bus_methods xenhci_bus_methods; + +/* +static void +xenhci_iterate_hw_softc(struct usb_bus *bus, usb_bus_mem_sub_cb_t *cb) +{ + struct xhci_softc *sc = XENHCI_BUS2SC(bus); + uint8_t i; + + cb(bus, &sc->sc_hw.root_pc, &sc->sc_hw.root_pg, + sizeof(struct xhci_hw_root), XENHCI_PAGE_SIZE); + + cb(bus, &sc->sc_hw.ctx_pc, &sc->sc_hw.ctx_pg, + sizeof(struct xhci_dev_ctx_addr), XENHCI_PAGE_SIZE); + + for (i = 0; i != XHCI_MAX_SCRATCHPADS; i++) { + cb(bus, &sc->sc_hw.scratch_pc[i], &sc->sc_hw.scratch_pg[i], + XENHCI_PAGE_SIZE, XENHCI_PAGE_SIZE); + } +}*/ + usb_error_t xenhci_init(struct xenhci_softc *sc, device_t dev) { @@ -83,6 +124,14 @@ sc->sc_bus.devices = sc->sc_devices; sc->sc_bus.devices_max = XENHCI_MAX_DEVICES; + /* get all DMA memory */ + //if (usb_bus_mem_alloc_all(&sc->sc_bus, + // USB_GET_DMA_TAG(dev), &xenhci_iterate_hw_softc)) { + if (usb_bus_mem_alloc_all(&sc->sc_bus, + USB_GET_DMA_TAG(dev), NULL)) { + return (ENOMEM); + } + return (0); } @@ -105,9 +154,6 @@ xenhci_set_address(struct usb_device *udev, struct mtx *mtx, uint16_t address) { printf("[gbtest-pv]xenhci.c: xenhci_set_address()\n"); - //usb_error_t err; - - //return (err); //TODO return (0); } @@ -132,42 +178,67 @@ static void xenhci_xfer_setup(struct usb_setup_params *parm) { - printf("[gbtest-pv]xenhci.c: ()\n"); + printf("[gbtest-pv]xenhci.c: xenhci_xfer_setup()\n"); //TODO } static void xenhci_xfer_unsetup(struct usb_xfer *xfer) { - printf("[gbtest-pv]xenhci.c: ()\n"); + printf("[gbtest-pv]xenhci.c: xenhci_xfer_unsetup()\n"); return; } static void xenhci_start_dma_delay(struct usb_xfer *xfer) { - printf("[gbtest-pv]xenhci.c: ()\n"); + printf("[gbtest-pv]xenhci.c: xenhci_start_dma_delay()\n"); //TODO } + +//TODO ??? static void xenhci_ep_init(struct usb_device *udev, struct usb_endpoint_descriptor *edesc, struct usb_endpoint *ep) { - printf("[gbtest-pv]xenhci.c: ()\n"); + printf("[gbtest-pv]xenhci.c: xenhci_ep_init()\n"); + + //struct xhci_endpoint_ext *pepext; + + DPRINTFN(2, "endpoint=%p, addr=%d, endpt=%d, mode=%d\n", + ep, udev->address, edesc->bEndpointAddress, udev->flags.usb_mode); + + printf("[gb-test]endpoint=%p, addr=%d, endpt=%d, mode=%d\n", + ep, udev->address, edesc->bEndpointAddress, udev->flags.usb_mode); + if (udev->parent_hub == NULL) { + /* root HUB has special endpoint handling */ + printf("[gb-test]xenhci.c: xenhci_ep_init():udev->parent_hub == NULL\n"); + return; + } + + //ep->methods = &xhci_device_generic_methods; + + //pepext = xhci_get_endpoint_ext(udev, edesc); + + //USB_BUS_LOCK(udev->bus); + //pepext->trb_halted = 1; + //pepext->trb_running = 0; + //USB_BUS_UNLOCK(udev->bus); + //TODO } static void xenhci_ep_uninit(struct usb_device *udev, struct usb_endpoint *ep) { - printf("[gbtest-pv]xenhci.c: ()\n"); + printf("[gbtest-pv]xenhci.c: xenhci_ep_uninit()\n"); } static void xenhci_ep_clear_stall(struct usb_device *udev, struct usb_endpoint *ep) { - printf("[gbtest-pv]xenhci.c: ()\n"); + printf("[gbtest-pv]xenhci.c: xenhci_ep_clear_stal()\n"); //TODO } @@ -179,7 +250,7 @@ //uint8_t temp; //return (err); - //TODO + //TODO or not?? return (0); } @@ -211,18 +282,59 @@ //TODO } +//DONE! static void xenhci_set_hw_power(struct usb_bus *bus) { printf("[gbtest-pv]xenhci.c: xenhci_set_hw_power()\n"); //DPRINTF("\n"); - //TODO?? } +//TODO or not ?? static void xenhci_device_state_change(struct usb_device *udev) { + //struct xhci_softc *sc = XHCI_BUS2SC(udev->bus); + //struct usb_page_search buf_inp; + //usb_error_t err; + //uint8_t index; + printf("[gbtest-pv]xenhci.c: xenhci_device_state_change()\n"); + + /* check for root HUB */ + if (udev->parent_hub == NULL) { + printf("[gb-test]xenhci.c: xenhci_device_state_change(): udev->parent_hub == NULL\n"); + return; + } + + //index = udev->controller_slot_id; + + //DPRINTF("\n"); + + if (usb_get_device_state(udev) == USB_STATE_CONFIGURED) { + printf("[gb-test]state(udev) == USB_STATE_CONFIGURED\n"); + } + + //XHCI_CMD_LOCK(sc); + + switch (usb_get_device_state(udev)) { + case USB_STATE_POWERED: + printf("[gb-test]state(udev) == USB_STATE_POWERED\n"); + break; + + case USB_STATE_ADDRESSED: + printf("[gb-test]state(udev) == USB_STATE_ADDRESSED\n"); + break; + + case USB_STATE_CONFIGURED: + printf("[gb-test]state(udev) == USB_STATE_CONFIGURED\n"); + break; + + default: + printf("[gb-test]state(udev) == other!!\n"); + break; + } + //XHCI_CMD_UNLOCK(sc); //TODO }