153 lines
4.1 KiB
C
153 lines
4.1 KiB
C
/*******************************************************************************
|
|
Copyright (C) Marvell International Ltd. and its affiliates
|
|
|
|
********************************************************************************
|
|
Marvell GPL License Option
|
|
|
|
If you received this File from Marvell, you may opt to use, redistribute and/or
|
|
modify this File in accordance with the terms and conditions of the General
|
|
Public License Version 2, June 1991 (the "GPL 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.
|
|
|
|
*******************************************************************************/
|
|
|
|
#include <config.h>
|
|
#include <common.h>
|
|
#include <command.h>
|
|
|
|
#include "mvOs.h"
|
|
#include "mvDebug.h"
|
|
#include "mvBoardEnvSpec.h"
|
|
#include "mvCtrlEnvLib.h"
|
|
|
|
#include "mvUsbHostApi.h"
|
|
|
|
extern USB_HOST_STATE_STRUCT_PTR usb_host_state_struct_ptr;
|
|
extern void _usb_hci_vusb20_isr(void);
|
|
extern void hidMouseMain(void);
|
|
|
|
static void print_args(int argc, char** argv)
|
|
{
|
|
int i;
|
|
|
|
for(i=0; i<argc; i++)
|
|
{
|
|
mvOsPrintf("argv[%d]=%s, ", i, argv[i]);
|
|
}
|
|
mvOsPrintf("\n");
|
|
}
|
|
|
|
|
|
int mvUsbHostMain(int argc, char *argv[])
|
|
{
|
|
int i, mode;
|
|
unsigned char error;
|
|
USB_STATUS status;
|
|
_usb_host_handle host_handle;
|
|
|
|
if(argc <= 1)
|
|
{
|
|
mvOsPrintf("usbTest: not enough parameters\n");
|
|
return 2;
|
|
}
|
|
print_args(argc, argv);
|
|
|
|
ARC_INIT_DEBUG_TRACE();
|
|
|
|
ARC_START_DEBUG_TRACE(ARC_DEBUG_FLAG_STALL
|
|
| ARC_DEBUG_FLAG_ERROR
|
|
| ARC_DEBUG_FLAG_RESET
|
|
| ARC_DEBUG_FLAG_ISR
|
|
| ARC_DEBUG_FLAG_SETUP
|
|
| ARC_DEBUG_FLAG_RX | ARC_DEBUG_FLAG_TX
|
|
| ARC_DEBUG_FLAG_ADDR);
|
|
|
|
if( (usb_host_state_struct_ptr == NULL) &&
|
|
(memcmp(argv[1], "load", strlen(argv[1])) == 0) )
|
|
{
|
|
MV_REG_WRITE(MV_USB_CORE_MODE_REG, 0x3);
|
|
status = _usb_host_init(0, 1024, &host_handle);
|
|
if (status != USB_OK)
|
|
{
|
|
printf("\nUSB Host Initialization failed. STATUS: %x", status);
|
|
} /* Endif */
|
|
|
|
mvOsPrintf("USB HOST core is initialized\n");
|
|
return 0;
|
|
}
|
|
|
|
if( (usb_host_state_struct_ptr != NULL) &&
|
|
(memcmp(argv[1], "show", strlen(argv[1])) == 0))
|
|
{
|
|
mode = 0;
|
|
if(argc > 2)
|
|
mode = strtol(argv[2], NULL, 16);
|
|
|
|
if( MV_BIT_CHECK(mode, 3) )
|
|
ARC_PRINT_DEBUG_TRACE();
|
|
|
|
return 0;
|
|
}
|
|
|
|
if( (usb_host_state_struct_ptr != NULL) &&
|
|
(memcmp(argv[1], "poll", strlen(argv[1])) == 0))
|
|
{
|
|
i = 0;
|
|
while(TRUE)
|
|
{
|
|
if( (i & 0xFFFFF) == 0)
|
|
{
|
|
mvOsPrintf(".");
|
|
}
|
|
_usb_hci_vusb20_isr();
|
|
i++;
|
|
|
|
if (ctrlc())
|
|
{
|
|
puts ("\nAbort\n");
|
|
return 0;
|
|
}
|
|
}
|
|
mvOsPrintf("\n");
|
|
|
|
return 0;
|
|
}
|
|
|
|
if( (usb_host_state_struct_ptr == NULL) &&
|
|
(memcmp(argv[1], "mouse", strlen(argv[1])) == 0))
|
|
{
|
|
mvOsPrintf("Start hidmouse driver\n");
|
|
MV_REG_WRITE(MV_USB_CORE_MODE_REG, 0x3);
|
|
hidMouseMain();
|
|
return 0;
|
|
}
|
|
|
|
mvOsPrintf("USB test: Unexpected command %s\n", argv[1]);
|
|
return 3;
|
|
}
|
|
|
|
int mvUsbHost(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|
{
|
|
if( (argc == 0) || (argc == 1) )
|
|
{
|
|
mvOsPrintf ("Usage:\n%s\n", cmdtp->usage);
|
|
return 1;
|
|
}
|
|
mvUsbHostMain(argc, argv);
|
|
return 1;
|
|
}
|
|
|
|
U_BOOT_CMD(
|
|
usbHost, 5, 0, mvUsbHost,
|
|
"usbHost - USB Host specific commands\n",
|
|
"\t usbHost mouse <1 | 0> - Load/Unload USB HID mouse driver\n"
|
|
"\t usbHost show [mask] - Print out all USB information\n"
|
|
);
|