blob: 1db23698f06185545a4455f262b68e2ee6a030a2 [file] [log] [blame]
/*******************************************************************************
This software file (the "File") is distributed by Marvell International Ltd.
or its affiliate(s) under the terms of the GNU General Public License Version 2,
June 1991 (the "License"). You may use, redistribute and/or modify this File
in accordance with the terms and conditions of the License, a copy of which
is available along with the File in the license.txt file or by writing to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
or on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
DISCLAIMED. The GPL License provides additional details about this warranty
disclaimer.
(C) Copyright 2004 - 2007 Marvell Semiconductor Israel Ltd. All Rights Reserved.
(C) Copyright 1999 - 2004 Chipidea Microelectronica, S.A. All Rights Reserved.
*******************************************************************************/
#ifndef __mvUsbDevApi_h__
#define __mvUsbDevApi_h__
#include "mvUsbTypes.h"
#include "mvUsbDebug.h"
#include "mvUsbDefs.h"
#include "ctrlEnv/mvCtrlEnvSpec.h"
#define ARC_USB_MAX_ENDPOINTS (16)
#define MAX_EP_TR_DESCRS (48)
#define MAX_XDS_FOR_TR_CALLS (32)
#define MAX_USB_DEVICES MV_USB_MAX_PORTS
/*Assumption here is that all control endpoints are sequential 0,1,..
if they are not you need to modify the tr_complete routine to handle that */
#define USB_MAX_CONTROL_ENDPOINTS (1)
#define USB_MAX_CTRL_PAYLOAD (64)
/* Endpoint types */
#define ARC_USB_CONTROL_ENDPOINT (0)
#define ARC_USB_ISOCHRONOUS_ENDPOINT (1)
#define ARC_USB_BULK_ENDPOINT (2)
#define ARC_USB_INTERRUPT_ENDPOINT (3)
/* Informational Request/Set Types */
#define ARC_USB_STATUS_DEVICE_STATE (0x01)
#define ARC_USB_STATUS_INTERFACE (0x02)
#define ARC_USB_STATUS_ADDRESS (0x03)
#define ARC_USB_STATUS_CURRENT_CONFIG (0x04)
#define ARC_USB_STATUS_SOF_COUNT (0x05)
#define ARC_USB_STATUS_DEVICE (0x06)
#define ARC_USB_STATUS_TEST_MODE (0x07)
#define ARC_USB_FORCE_FULL_SPEED (0x08)
#define ARC_USB_PHY_LOW_POWER_SUSPEND (0x09)
#define ARC_USB_STATUS_ENDPOINT_NUMBER_MASK (0x000F)
#define ARC_USB_STATUS_ENDPOINT_DIR_MASK (0x0080)
#define ARC_USB_TEST_MODE_TEST_PACKET (0x0400)
/* Available service types */
/* Services 0 through 15 are reserved for endpoints */
#define ARC_USB_SERVICE_EP0 (0x00)
#define ARC_USB_SERVICE_EP1 (0x01)
#define ARC_USB_SERVICE_EP2 (0x02)
#define ARC_USB_SERVICE_EP3 (0x03)
#define ARC_USB_SERVICE_BUS_RESET (0x10)
#define ARC_USB_SERVICE_SUSPEND (0x11)
#define ARC_USB_SERVICE_SOF (0x12)
#define ARC_USB_SERVICE_RESUME (0x13)
#define ARC_USB_SERVICE_SLEEP (0x14)
#define ARC_USB_SERVICE_SPEED_DETECTION (0x15)
#define ARC_USB_SERVICE_ERROR (0x16)
#define ARC_USB_SERVICE_STALL (0x17)
typedef pointer _usb_device_handle;
typedef void (*USB_SERVICE_FUNC)(void* handle, uint_8, boolean, uint_8,
uint_8_ptr, uint_32, uint_8);
#ifdef __cplusplus
extern "C" {
#endif
void _usb_dci_vusb20_isr(void* handle);
void _usb_device_set_bsp_funcs(USB_IMPORT_FUNCS* pBspFuncs);
uint_8 _usb_device_init(uint_8 devNo, void** pHandle);
uint_8 _usb_device_get_max_endpoint(void* handle);
uint_8 _usb_device_get_dev_num(void* handle);
void _usb_device_shutdown(void* handle);
void _usb_device_stop(void* handle);
void _usb_device_start(void* handle);
uint_8 _usb_device_init_endpoint(void* handle, uint_8 ep_num, uint_16 max_pkt_size,
uint_8 direction, uint_8 type, uint_8 flag);
uint_8 _usb_device_deinit_endpoint(void* handle, uint_8 ep_num, uint_8 direction);
uint_8 _usb_device_recv_data(void* handle, uint_8 ep_num, uint_8* buf_ptr, uint_32 size);
uint_8 _usb_device_send_data(void* handle, uint_8 ep_num, uint_8* buf_ptr, uint_32 size);
uint_8 _usb_device_cancel_transfer(void* handle, uint_8 ep_num, uint_8 direction);
uint_8 _usb_device_get_transfer_status(void* handle, uint_8 ep_num, uint_8 direction);
void _usb_device_stall_endpoint(void* handle, uint_8 ep_num, uint_8 direction);
void _usb_device_unstall_endpoint(void* handle, uint_8 ep_num, uint_8 direction);
uint_8 _usb_device_is_endpoint_stalled(void* handle, uint_8 ep_num, uint_8 direction);
void _usb_device_assert_resume(void* handle);
uint_8 _usb_device_get_status(void* handle, uint_8 component, uint_16* status_ptr);
uint_8 _usb_device_set_status(void* handle, uint_8 component, uint_16 setting);
void _usb_device_read_setup_data(void* handle, uint_8 ep_num, uint_8* buf_ptr);
uint_8 _usb_device_register_service(void* handle, uint_8 type, USB_SERVICE_FUNC serviceFunc);
uint_8 _usb_device_unregister_service(void* handle, uint_8 type);
/* These functions that implement USB 2.0 standard Chapter 9 Setup requests */
void mvUsbCh9GetStatus(void* handle, boolean setup,
SETUP_STRUCT* ctrl_req);
void mvUsbCh9ClearFeature(void* handle, boolean setup,
SETUP_STRUCT* setup_ptr);
void mvUsbCh9SetFeature(void* handle, boolean setup,
SETUP_STRUCT* setup_ptr);
void mvUsbCh9SetAddress(void* handle, boolean setup,
SETUP_STRUCT* setup_ptr);
/* DEBUG Functions */
void _usb_dci_vusb20_set_test_mode(void* handle, uint_16 testMode);
void _usb_debug_set_flags(uint_32 flags);
uint_32 _usb_debug_get_flags(void);
void _usb_debug_init_trace_log(void);
void _usb_debug_print_trace_log(void);
void _usb_regs(void* usbHandle);
void _usb_status(void* usbHandle);
void _usb_stats(void* usbHandle);
void _usb_clear_stats(void* usbHandle);
void _usb_ep_status(void* usbHandle, int ep_num, int direction);
#ifdef __cplusplus
}
#endif
#endif /* __mvUsbDevApi_h__ */
/* EOF */