#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/init.h>
#include <linux/device.h>
#include <linux/errno.h>
#include <linux/list.h>
#include <linux/interrupt.h>
#include <linux/string.h>
#include <linux/dma-mapping.h>
#include <linux/version.h>
#include <asm/io.h>
#include <linux/usb.h>
#include <../drivers/usb/core/hcd.h>
#include "dwc_otg_hcd_if.h"
#include "dwc_otg_dbg.h"
#include "dwc_otg_driver.h"
Go to the source code of this file.
Data Structures | |
struct | wrapper_priv_data |
Linux HC Driver API Functions | |
static int | urb_enqueue (struct usb_hcd *hcd, struct usb_host_endpoint *ep, struct urb *urb, gfp_t mem_flags) |
Starts processing a USB transfer request specified by a USB Request Block (URB). | |
static int | urb_dequeue (struct usb_hcd *hcd, struct urb *urb) |
Aborts/cancels a USB transfer request. | |
static void | endpoint_disable (struct usb_hcd *hcd, struct usb_host_endpoint *ep) |
static irqreturn_t | dwc_otg_hcd_irq (struct usb_hcd *hcd) |
Handles host mode interrupts for the DWC_otg controller. | |
int | hcd_start (struct usb_hcd *hcd) |
Initializes the DWC_otg controller and its root hub and prepares it for host mode operation. | |
void | hcd_stop (struct usb_hcd *hcd) |
Halts the DWC_otg host mode operations in a clean manner. | |
static int | get_frame_number (struct usb_hcd *hcd) |
Returns the current frame number. | |
int | hub_status_data (struct usb_hcd *hcd, char *buf) |
Creates Status Change bitmap for the root hub and root port. | |
int | hub_control (struct usb_hcd *hcd, u16 typeReq, u16 wValue, u16 wIndex, char *buf, u16 wLength) |
Handles hub class-specific requests. | |
Defines | |
#define | dwc_ep_addr_to_endpoint(_bEndpointAddress_) |
Gets the endpoint number from a _bEndpointAddress argument. | |
Functions | |
static dwc_otg_hcd_t * | hcd_to_dwc_otg_hcd (struct usb_hcd *hcd) |
Gets the dwc_otg_hcd from a struct usb_hcd. | |
static struct usb_hcd * | dwc_otg_hcd_to_hcd (dwc_otg_hcd_t *dwc_otg_hcd) |
Gets the struct usb_hcd that contains a dwc_otg_hcd_t. | |
usb_host_endpoint * | dwc_urb_to_endpoint (struct urb *urb) |
Gets the usb_host_endpoint associated with an URB. | |
static int | _disconnect (dwc_otg_hcd_t *hcd) |
static int | _start (dwc_otg_hcd_t *hcd) |
static int | _hub_info (dwc_otg_hcd_t *hcd, void *urb_handle, uint32_t *hub_addr, uint32_t *port_addr) |
static int | _speed (dwc_otg_hcd_t *hcd, void *urb_handle) |
static int | _get_b_hnp_enable (dwc_otg_hcd_t *hcd) |
static void | allocate_bus_bandwidth (struct usb_hcd *hcd, uint32_t bw, struct urb *urb) |
static void | free_bus_bandwidth (struct usb_hcd *hcd, uint32_t bw, struct urb *urb) |
static int | _complete (dwc_otg_hcd_t *hcd, void *urb_handle, dwc_otg_hcd_urb_t *dwc_otg_urb, int32_t status) |
Sets the final status of an URB and returns it to the device driver. | |
int | hcd_init () |
Initializes the HCD. | |
void | hcd_remove () |
Removes the HCD. | |
Variables | |
static const char | dwc_otg_hcd_name [] = "dwc_otg_hcd" |
static struct hc_driver | dwc_otg_hc_driver |
static struct dwc_otg_hcd_function_ops | hcd_fops |
In Linux, the HCD implements the hc_driver API.
Definition in file dwc_otg_hcd_linux.c.
#define dwc_ep_addr_to_endpoint | ( | _bEndpointAddress_ | ) |
Value:
((_bEndpointAddress_ & USB_ENDPOINT_NUMBER_MASK) | \ ((_bEndpointAddress_ & USB_DIR_IN) != 0) << 4)
The endpoint is qualified with its direction (possible 32 endpoints per device).
Definition at line 71 of file dwc_otg_hcd_linux.c.
static int urb_enqueue | ( | struct usb_hcd * | hcd, | |
struct usb_host_endpoint * | ep, | |||
struct urb * | urb, | |||
gfp_t | mem_flags | |||
) | [static] |
Starts processing a USB transfer request specified by a USB Request Block (URB).
mem_flags indicates the type of memory allocation to use while processing this URB.
Definition at line 562 of file dwc_otg_hcd_linux.c.
static int urb_dequeue | ( | struct usb_hcd * | hcd, | |
struct urb * | urb | |||
) | [static] |
Aborts/cancels a USB transfer request.
Always returns 0 to indicate success.
Definition at line 667 of file dwc_otg_hcd_linux.c.
static irqreturn_t dwc_otg_hcd_irq | ( | struct usb_hcd * | hcd | ) | [static] |
Handles host mode interrupts for the DWC_otg controller.
Returns IRQ_NONE if there was no interrupt to handle. Returns IRQ_HANDLED if there was a valid interrupt.
This function is called by the USB core when an interrupt occurs
Definition at line 714 of file dwc_otg_hcd_linux.c.
int hcd_start | ( | struct usb_hcd * | hcd | ) |
Initializes the DWC_otg controller and its root hub and prepares it for host mode operation.
Activates the root port. Returns 0 on success and a negative error code on failure.
Definition at line 469 of file dwc_otg_hcd_linux.c.
void hcd_stop | ( | struct usb_hcd * | hcd | ) |
Halts the DWC_otg host mode operations in a clean manner.
USB transfers are stopped.
Definition at line 496 of file dwc_otg_hcd_linux.c.
int hub_status_data | ( | struct usb_hcd * | hcd, | |
char * | buf | |||
) |
Creates Status Change bitmap for the root hub and root port.
The bitmap is returned in buf. Bit 0 is the status change indicator for the root hub. Bit 1 is the status change indicator for the single root port. Returns 1 if either change indicator is 1, otherwise returns 0.
Definition at line 728 of file dwc_otg_hcd_linux.c.
static int _complete | ( | dwc_otg_hcd_t * | hcd, | |
void * | urb_handle, | |||
dwc_otg_hcd_urb_t * | dwc_otg_urb, | |||
int32_t | status | |||
) | [static] |
Sets the final status of an URB and returns it to the device driver.
Any required cleanup of the URB is performed.
Definition at line 224 of file dwc_otg_hcd_linux.c.
int hcd_init | ( | ) |
Initializes the HCD.
This function allocates memory for and initializes the static parts of the usb_hcd and dwc_otg_hcd structures. It also registers the USB bus with the core and calls the hc_driver->start() function. It returns a negative error on failure.
Definition at line 327 of file dwc_otg_hcd_linux.c.
void hcd_remove | ( | ) |
Removes the HCD.
Frees memory and resources associated with the HCD and deregisters the bus.
Definition at line 417 of file dwc_otg_hcd_linux.c.
struct hc_driver dwc_otg_hc_driver [static] |
Initial value:
{ .description = dwc_otg_hcd_name, .product_desc = "DWC OTG Controller", .hcd_priv_size = sizeof(struct wrapper_priv_data), .irq = dwc_otg_hcd_irq, .flags = HCD_MEMORY | HCD_USB2, .start = hcd_start, .stop = hcd_stop, .urb_enqueue = urb_enqueue, .urb_dequeue = urb_dequeue, .endpoint_disable = endpoint_disable, .get_frame_number = get_frame_number, .hub_status_data = hub_status_data, .hub_control = hub_control, }
Definition at line 101 of file dwc_otg_hcd_linux.c.
struct dwc_otg_hcd_function_ops hcd_fops [static] |
Initial value:
{ .start = _start, .disconnect = _disconnect, .hub_info = _hub_info, .speed = _speed, .complete = _complete, .get_b_hnp_enable = _get_b_hnp_enable, }
Definition at line 312 of file dwc_otg_hcd_linux.c.