/*
* main.c - Utility program to create a bootrom image
*
* Copyright (C) 1997-2003 Gero Kuhlmann <gero@gkminix.han.de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Id: main.c,v 1.6 2003/01/25 23:29:42 gkminix Exp $
*/
#include <common.h>
#include <nblib.h>
#include "makerom.h"
#include "doconfig.h"
/*
* Private variables
*/
static char *batchname = NULL; /* name of system to batch process */
/*
* Command line options
*/
static struct cmdopt opts[] = {
{ "batch-sys", 'b', strval, {(char **)&batchname}, NULL,
"name of system to process", "SYSTEM" },
{ "drivers", 'd', strval, {(char **)&config.drvfname}, NULL,
"name of file with network driver definitions", "FILE" },
{ "md5sums", 'm', strval, {(char **)&config.md5fname}, NULL,
"name of file with network driver MD5 sums", "FILE" },
{ NULL, 0, noval, {NULL}, NULL, NULL, NULL }
};
/*
* Print boot definition record for debugging purposes
*/
static void printbootdef(bp)
struct bootdef *bp;
{
static char *bnames[] = { "ISA", "EISA", "MCA", "PCI" };
static char *dnames[] = { "packet driver", "NDIS", "UNDI" };
static char *onames[] = { "binary", "flash",
"intel hex", "motorola hex", "tektronix hex" };
int i;
if (bp->name != NULL)
printf("Bootrom building definitions for %s\n", bp->name);
else
printf("Bootrom building definitions\n");
printf("Kernel file = %s\n", bp->kernelname);
if (bp->bus_type != BUSTYPE_NONE)
printf("Bus type = %s\n", bnames[bp->bus_type - 1]);
if (bp->bus_type == BUSTYPE_PCI) {
printf("PCI vendor ID = %04X\n", bp->pci_vendid);
printf("PCI device ID = %04X\n", bp->pci_devid);
} else if (bp->pnp_devid != NULL)
printf("PnP device ID = %s\n", bp->pnp_devid);
printf("\n");
for (i = 0; i < bp->loadernum; i++) {
printf("Loader binary %d = %s\n", i, bp->loaders[i].name);
printf("Output file %d = %s (int %dh)\n", i,
bp->loaders[i].outname,
bp->loaders[i].useint18 ? 18 : 19);
printf("Size of ROM image %d = ", i);
if (bp->loaders[i].outsize > 0)
printf("%d kB\n", bp->loaders[i].outsize);
else
printf("default\n");
printf("Type of out file %d = %s\n", i,
onames[bp->loaders[i].outtype - 1]);
}
printf("\n");
printf("Network interface = %s (%s)\n", bp->netdrv.name,
dnames[bp->netdrv.drivertype - 1]);
if (bp->netdrv.drivertype == DRVTYPE_PD) {
struct progdef *pdp = &(bp->netdrv.driverdefs.pd.progs);
for (i = 0; i < pdp->prognum; i++) {
printf("Driver %d program = %s\n", i, pdp->prognames[i]);
printf("Driver %d arguments = ", i);
if (pdp->progargs[i] != NULL)
printf("%s\n", pdp->progargs[i]);
else
printf("none\n");
}
} else if (bp->netdrv.drivertype == DRVTYPE_NDIS) {
struct progdef *np = &(bp->netdrv.driverdefs.ndis.progs);
for (i = 0; i < np->prognum; i++) {
printf("Driver %d program = %s\n", i, np->prognames[i]);
printf("Driver %d arguments = ", i);
if (np->progargs[i] != NULL)
printf("%s\n", np->progargs[i]);
else
printf("none\n");
}
} else if (bp->netdrv.drivertype == DRVTYPE_UNDI) {
struct undidef *up = &(bp->netdrv.driverdefs.undi);
printf("Driver file = %s\n", up->name);
}
printf("\n");
}
/*
* Main program
*/
int main(argc, argv)
int argc;
char **argv;
{
struct bootdef *bp;
/* Parse command line and read configuration information */
doconfig(argc, argv, opts);
if (verbose > 0) {
printf("\nBootrom configuration program, " VERSION "\n" COPYRIGHT "\n");
printf("Database file = %s\n", dbname);
printf("Binaries directory = %s\n", config.bindir);
printf("Network driver directory = %s\n", config.netdrvdir);
printf("Utilities directory = %s\n", config.utilsdir);
if (config.drvfname != NULL)
printf("Driver definition file = %s\n", config.drvfname);
if (config.md5fname != NULL)
printf("Driver MD5 sums file = %s\n", config.md5fname);
printf("\n");
}
/* Get bootrom specification either from the user or the database */
if (batchname != NULL) {
bp = getdb(batchname);
} else {
if (!verbose)
printf("\nBootrom configuration program, "
VERSION "\n" COPYRIGHT "\n\n");
bp = getuser();
}
if (verbose > 1)
printbootdef(bp);
/* Generate bootrom output files */
dopasses(bp);
return(EXIT_SUCCESS);
}
syntax highlighted by Code2HTML, v. 0.9.1