wrapper.c 3.58 KB

/*************************************************************************
 *
 *  File: tstsim.c
 *
 *  $Header: /root/leakn64/depot/rf/sw/bbplayer/iosim/src/pi_test/wrapper.c,v 1.6 2003/02/03 20:27:32 apatti Exp $
 *
 */
#include <errno.h>
#include <fcntl.h>
#include <getopt.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <unistd.h>

#include "../iomap.h"
#include "../iotest.h"
#include "../sim.h"
#include "../simipc.h"

/***********************************************************************
 * Extern definitions
 */
extern  TstCmd  TstCmdTbl[];
extern  void    IoTestAll(char *flashInitFileName,int isGateLevel);


/***********************************************************************
 * Macro definitions
 */
#define TEST_CMD_FILE   "all.tst"
#define OPTARG      "d:l:f:kgh"


/***********************************************************************
 * Global definitions
 */
int     IpcFd = -1;
unsigned long   Dflags;
char        *CmdFile = TEST_CMD_FILE;
FILE        *LogFp, *CmdFp;
int     ConfigRdramV = 0;
int             NumberStallCycles = 0;


/***********************************************************************
 * Local static definitions
 */
static FILE     *dumpFp = NULL;

static void     usage(void);
static void     convertTst2C(char *);


main(int argc, char **argv)
{

    int c, testId, killsim=0, gateLevel=0;
    char    *file,flashInitFileName[1024];
    FILE    *fp = NULL;

    extern char *optarg;
    extern int optind, opterr, optopt;

    optind = 1;
    Dflags = 0;
    LogFp  = stdout;

    while ((c = getopt(argc, argv, OPTARG)) != EOF) {
        switch (c) {
            case 'd': { /* Debug flag */
                Dflags = strtoul(optarg, NULL, 16);
                printf("Debug flag=0x%08x\n", Dflags);
                break;
            }
            case 'l': { /* Log file */
                file = optarg;
                printf("Log file = %s\n", file);
                if ((fp = fopen(file, "w+")) == NULL) {
                    printf("Unable to open log: %s\n",
                        file);
                }
                else
                    LogFp = fp;
                break;
            }
            case 'f': { /* flash initialization file */
                strcpy(flashInitFileName,optarg);
                break;
            }
            case 'k': { /* kill simulator on exit */
                killsim=1;
                break;
            }
            case 'g': { /* run gate-level only */
                gateLevel=1;
                break;
            }
            case 'h': { /* Help */
                usage();
                exit(0);
            }
            default:
                break;
        }
    }  /* while */

    ExceptionHandlerInit();
    IpcInit(NULL);
    FindServer();
    IoTestAll(flashInitFileName,gateLevel);

    if (fp)
        fclose(fp);

    if (IpcFd != -1)
        IpcClose(IpcFd);

    /* exit simulator */
    if(killsim)
        IoCmd(REQ_QUIT, 0);

    exit(0);

}

static void
usage(void)
{
    printf("Usage: pi_functest \n");
    printf("   -l <log_file>\n");
    printf("   -f <flash_init_file>\n");
    printf("         Currently must be named <sim_path>/External_File.txt,\n");
    printf("         where <sim_path> is the directory from where sim.ipc\n");
    printf("         is run.\n");
    printf("   -d <debug_flags in hex>\n");
    printf("         NOTE: DLOG | DSTATUS | DERROR always on\n");
    printf("   -k\n");
    printf("         Use this option to kill the simulator on exit\n");
    printf("   -g\n");
    printf("         Use this option to only run gate-level testing\n");
}