Embedded Xinu Operating System
An ongoing research project and educational operating system.
|
#include <interrupt.h>
#include <mailbox.h>
#include <string.h>
#include <thread.h>
#include <usb_core_driver.h>
#include <usb_dwc_regs.h>
#include <usb_hcdi.h>
#include <usb_hub_defs.h>
#include <usb_std_defs.h>
#include "bcm2837.h"
#include <core.h>
Macros | |
#define | WORD_ALIGN(n) (((n) + sizeof(ulong) - 1) & ~(sizeof(ulong) - 1)) |
#define | IS_WORD_ALIGNED(ptr) ((ulong)(ptr) % sizeof(ulong) == 0) |
#define | USB_MAX_PACKET_SIZE 1024 |
#define | XFER_SCHEDULER_THREAD_STACK_SIZE 4096 |
#define | XFER_SCHEDULER_THREAD_PRIORITY 60 |
#define | XFER_SCHEDULER_THREAD_NAME "USB scheduler" |
#define | DEFER_XFER_THREAD_STACK_SIZE 4096 |
#define | DEFER_XFER_THREAD_PRIORITY 100 |
#define | DEFER_XFER_THREAD_NAME "USB defer xfer" |
#define | START_SPLIT_INTR_TRANSFERS_ON_SOF 1 |
Enumerations | |
enum | dwc_usb_pid { DWC_USB_PID_DATA0 = 0, DWC_USB_PID_DATA1 = 2, DWC_USB_PID_DATA2 = 1, DWC_USB_PID_SETUP = 3 } |
enum | dwc_intr_status { XFER_COMPLETE = 0, XFER_FAILED = 1, XFER_NEEDS_DEFERRAL = 2, XFER_NEEDS_RESTART = 3, XFER_NEEDS_TRANS_RESTART = 4 } |
Functions | |
usb_status_t | hcd_start (void) |
void | hcd_stop (void) |
usb_status_t | hcd_submit_xfer_request (struct usb_xfer_request *req) |
This file contains a USB Host Controller Driver for the Synopsys DesignWare Hi-Speed USB 2.0 On-The-Go Controller.
#define DEFER_XFER_THREAD_NAME "USB defer xfer" |
Name of USB defer transfer threads. Note: including the null-terminator this should be at most TNMLEN, otherwise it will be truncated.
#define DEFER_XFER_THREAD_PRIORITY 100 |
Priority of USB deferred transfer threads (should be very high since these threads are used for the necessary software polling of interrupt endpoints, which are supposed to have guaranteed bandwidth).
#define DEFER_XFER_THREAD_STACK_SIZE 4096 |
Stack size of USB deferred transfer threads (can be fairly small).
#define IS_WORD_ALIGNED | ( | ptr | ) | ((ulong)(ptr) % sizeof(ulong) == 0) |
Determines whether a pointer is word-aligned or not.
#define START_SPLIT_INTR_TRANSFERS_ON_SOF 1 |
TODO: remove this if appropriate
#define USB_MAX_PACKET_SIZE 1024 |
Maximum packet size of any USB endpoint. 1024 is the maximum allowed by USB 2.0. Most endpoints will provide maximum packet sizes much smaller than this.
#define WORD_ALIGN | ( | n | ) | (((n) + sizeof(ulong) - 1) & ~(sizeof(ulong) - 1)) |
Round a number up to the next multiple of the word size.
#define XFER_SCHEDULER_THREAD_NAME "USB scheduler" |
Name of USB transfer request scheduler thread.
#define XFER_SCHEDULER_THREAD_PRIORITY 60 |
Priority of USB transfer request scheduler thread (should be fairly high so that USB transfers can be started as soon as possible).
#define XFER_SCHEDULER_THREAD_STACK_SIZE 4096 |
Stack size of USB transfer request scheduler thread (can be fairly small).
enum dwc_usb_pid |
USB packet ID constants recognized by the DWC hardware.