blob: 9a027c81759a7d73fcfee3a9a53e903d51a354fd [file] [log] [blame]
#include <Copyright.h>
/********************************************************************************
* msApiInit.c
*
* DESCRIPTION:
* MS API initialization routine
*
* DEPENDENCIES: Platform
*
* FILE REVISION NUMBER:
*
*******************************************************************************/
#include "msSample.h"
/*
#define MULTI_ADDR_MODE
#define MANUAL_MODE
*/
GT_SYS_CONFIG cfg;
GT_QD_DEV diagDev;
GT_QD_DEV *dev=&diagDev;
/*
* Initialize the QuarterDeck. This should be done in BSP driver init routine.
* Since BSP is not combined with QuarterDeck driver, we are doing here.
*/
GT_STATUS qdStart(int cpuPort, int useQdSim, int devId) /* devId is used for simulator only */
{
GT_STATUS status;
/*
* Register all the required functions to QuarterDeck Driver.
*/
memset((char*)&cfg,0,sizeof(GT_SYS_CONFIG));
memset((char*)&diagDev,0,sizeof(GT_QD_DEV));
if(useQdSim == 0) /* use EV-96122 */
{
cfg.BSPFunctions.readMii = gtBspReadMii;
cfg.BSPFunctions.writeMii = gtBspWriteMii;
#ifdef USE_SEMAPHORE
cfg.BSPFunctions.semCreate = osSemCreate;
cfg.BSPFunctions.semDelete = osSemDelete;
cfg.BSPFunctions.semTake = osSemWait;
cfg.BSPFunctions.semGive = osSemSignal;
#else
cfg.BSPFunctions.semCreate = NULL;
cfg.BSPFunctions.semDelete = NULL;
cfg.BSPFunctions.semTake = NULL;
cfg.BSPFunctions.semGive = NULL;
#endif
gtBspMiiInit(dev);
}
else /* use QuaterDeck Simulator (No QD Device Required.) */
{
cfg.BSPFunctions.readMii = qdSimRead;
cfg.BSPFunctions.writeMii = qdSimWrite;
#ifdef USE_SEMAPHORE
cfg.BSPFunctions.semCreate = osSemCreate;
cfg.BSPFunctions.semDelete = osSemDelete;
cfg.BSPFunctions.semTake = osSemWait;
cfg.BSPFunctions.semGive = osSemSignal;
#else
cfg.BSPFunctions.semCreate = NULL;
cfg.BSPFunctions.semDelete = NULL;
cfg.BSPFunctions.semTake = NULL;
cfg.BSPFunctions.semGive = NULL;
#endif
qdSimInit(devId,0);
}
cfg.initPorts = GT_TRUE; /* Set switch ports to Forwarding mode. If GT_FALSE, use Default Setting. */
cfg.cpuPortNum = cpuPort;
#ifdef MANUAL_MODE /* not defined. this is only for sample */
/* user may want to use this mode when there are two QD switchs on the same MII bus. */
cfg.mode.scanMode = SMI_MANUAL_MODE; /* Use QD located at manually defined base addr */
cfg.mode.baseAddr = 0x10; /* valid value in this case is either 0 or 0x10 */
#else
#ifdef MULTI_ADDR_MODE
cfg.mode.scanMode = SMI_MULTI_ADDR_MODE; /* find a QD in indirect access mode */
cfg.mode.baseAddr = 1; /* this is the phyAddr used by QD family device.
Valid value are 1 ~ 31.*/
#else
cfg.mode.scanMode = SMI_AUTO_SCAN_MODE; /* Scan 0 or 0x10 base address to find the QD */
cfg.mode.baseAddr = 0;
#endif
#endif
if((status=qdLoadDriver(&cfg, dev)) != GT_OK)
{
MSG_PRINT(("qdLoadDriver return Failed\n"));
return status;
}
MSG_PRINT(("Device ID : 0x%x\n",dev->deviceId));
MSG_PRINT(("Base Reg Addr : 0x%x\n",dev->baseRegAddr));
MSG_PRINT(("No of Ports : %d\n",dev->numOfPorts));
MSG_PRINT(("CPU Ports : %d\n",dev->cpuPortNum));
/*
* start the QuarterDeck
*/
if((status=sysEnable(dev)) != GT_OK)
{
MSG_PRINT(("sysConfig return Failed\n"));
return status;
}
MSG_PRINT(("QuarterDeck has been started.\n"));
return GT_OK;
}