1
0
uboot-1.1.4-kirkwood/board/mv_feroceon/USP/mv_usb_host.c

153 lines
4.1 KiB
C
Raw Normal View History

2024-01-07 23:58:22 +01:00
/*******************************************************************************
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"
);