1/* 2 * Copyright 2012 Tilera Corporation. All Rights Reserved. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation, version 2. 7 * 8 * This program is distributed in the hope that it will be useful, but 9 * WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 * NON INFRINGEMENT. See the GNU General Public License for 12 * more details. 13 */ 14#ifndef _GXIO_USB_H_ 15#define _GXIO_USB_H_ 16 17#include <gxio/common.h> 18 19#include <hv/drv_usb_host_intf.h> 20#include <hv/iorpc.h> 21 22/* 23 * 24 * An API for manipulating general-purpose I/O pins. 25 */ 26 27/* 28 * 29 * The USB shim allows access to the processor's Universal Serial Bus 30 * connections. 31 */ 32 33/* A context object used to manage USB hardware resources. */ 34typedef struct { 35 36 /* File descriptor for calling up to the hypervisor. */ 37 int fd; 38 39 /* The VA at which our MMIO registers are mapped. */ 40 char *mmio_base; 41} gxio_usb_host_context_t; 42 43/* Initialize a USB context. 44 * 45 * A properly initialized context must be obtained before any of the other 46 * gxio_usb_host routines may be used. 47 * 48 * @param context Pointer to a gxio_usb_host_context_t, which will be 49 * initialized by this routine, if it succeeds. 50 * @param usb_index Index of the USB shim to use. 51 * @param is_ehci Nonzero to use the EHCI interface; zero to use the OHCI 52 * intereface. 53 * @return Zero if the context was successfully initialized, else a 54 * GXIO_ERR_xxx error code. 55 */ 56extern int gxio_usb_host_init(gxio_usb_host_context_t *context, int usb_index, 57 int is_ehci); 58 59/* Destroy a USB context. 60 * 61 * Once destroyed, a context may not be used with any gxio_usb_host routines 62 * other than gxio_usb_host_init(). After this routine returns, no further 63 * interrupts or signals requested on this context will be delivered. The 64 * state and configuration of the pins which had been attached to this 65 * context are unchanged by this operation. 66 * 67 * @param context Pointer to a gxio_usb_host_context_t. 68 * @return Zero if the context was successfully destroyed, else a 69 * GXIO_ERR_xxx error code. 70 */ 71extern int gxio_usb_host_destroy(gxio_usb_host_context_t *context); 72 73/* Retrieve the address of the shim's MMIO registers. 74 * 75 * @param context Pointer to a properly initialized gxio_usb_host_context_t. 76 * @return The address of the shim's MMIO registers. 77 */ 78extern void *gxio_usb_host_get_reg_start(gxio_usb_host_context_t *context); 79 80/* Retrieve the length of the shim's MMIO registers. 81 * 82 * @param context Pointer to a properly initialized gxio_usb_host_context_t. 83 * @return The length of the shim's MMIO registers. 84 */ 85extern size_t gxio_usb_host_get_reg_len(gxio_usb_host_context_t *context); 86 87#endif /* _GXIO_USB_H_ */ 88