/*
* makerom.h - Main include file for makerom program
*
* 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: makerom.h,v 1.6 2003/03/09 00:43:08 gkminix Exp $
*/
#ifndef _MAKEROM_H_
#define _MAKEROM_H_
/*
**************************************************************************
*
* General definitions
*
**************************************************************************
*/
/* Size of I/O buffers */
#define BLKSIZE 512
/* Length of PnP device identifier string */
#define PNPIDLEN 7
/*
* Network driver types. These numbers have to correspond with the names
* in the dtypes array.
*/
#define DRVTYPE_NONE 0
#define DRVTYPE_PD 1
#define DRVTYPE_NDIS 2
#define DRVTYPE_UNDI 3
#define DRVTYPE_MIN 1 /* lowest usable driver type */
#define DRVTYPE_MAX 3 /* highest usable driver type */
/*
* Bus types. These numbers correspond with those defined in the PXE
* specification plus 1 (to care for BUSTYPE_NONE). They also have to
* correspond with the names in the btypes array.
*/
#define BUSTYPE_NONE 0
#define BUSTYPE_ISA 1
#define BUSTYPE_EISA 2
#define BUSTYPE_MCA 3
#define BUSTYPE_PCI 4
#define BUSTYPE_MIN 1 /* lowest usable bus type */
#define BUSTYPE_MAX 4 /* highest usable bus type */
/*
**************************************************************************
*
* Definitions used to describe a bootrom specification
*
**************************************************************************
*/
#define MAXPROGS 8 /* maximum number of driver programs */
#define MAXLOADERS 3 /* maximum number of loader programs */
#define OUT_NONE 0 /* no output file type set */
#define OUT_BINARY 1 /* output file as binary */
#define OUT_IHEX 2 /* output file as Intel hex */
#define OUT_MHEX 3 /* output file as Motorola hex */
#define OUT_THEX 4 /* output file as Tektronix hex */
#define OUT_FC 5 /* output file as FlashCard loader */
#define OUT_FLASH 6 /* output file as flash loader */
/* OUT_FLASH has to come last! */
#define OUT_DEF OUT_BINARY /* default output file type */
#define OUT_MIN OUT_BINARY /* lowest usable output file type */
#define OUT_MAX OUT_FLASH /* highest usable output file type */
/* Structure holding all definitions for one loader */
struct loaderdef {
char *name; /* name of loader binary file */
char *outname; /* name of output file */
int outsize; /* size of output file in kB */
int outtype; /* type of output file (see above) */
int useint18; /* nonzero if we should use int 18h */
int cardinst; /* nonzero if ROM installed on card */
int bootask; /* nonzero if to ask for net boot */
int asktime; /* timeout for asking user */
};
/* Structure holding definitions for loadable DOS programs */
struct progdef {
int prognum; /* number of DOS programs */
char *prognames[MAXPROGS]; /* DOS program file names */
char *progargs[MAXPROGS]; /* DOS program arguments */
long minsizes[MAXPROGS]; /* minimum execution sizes */
long maxsizes[MAXPROGS]; /* maximum execution sizes */
};
/* Structure holding all definitions for packet driver loader */
struct pktdrvdef {
int drvindex; /* index of packet driver */
struct progdef progs; /* loadable DOS programs */
};
/* Structure holding all definitions for NDIS driver loader */
struct ndisdef {
__u8 *protocolini; /* memory image of protocol.ini file */
size_t protinisize; /* size of protocol.ini image */
int drvindex; /* index of packet driver */
struct progdef progs; /* loadable DOS programs */
};
/* Structure holding all definitions for UNDI driver loader */
struct undidef {
char *name; /* name of UNDI driver file */
};
/* Structure holding all definitions for the network driver */
struct netdrvdef {
char *name; /* name of network driver file */
int drivertype; /* type of network driver */
union {
struct pktdrvdef pd; /* definitions for packet driver */
struct ndisdef ndis; /* definitions for NDIS driver */
struct undidef undi; /* definitions for UNDI driver */
} driverdefs;
};
/* Structure holding all information for one bootrom specification */
struct bootdef {
char *name; /* name of bootrom spec */
char *kernelname; /* name of kernel file */
char *pnp_devid; /* PnP device ID string */
int pci_vendid; /* PCI vendor ID */
int pci_devid; /* PCI device ID */
int bus_type; /* bus type of network card */
int canflash; /* true if flash available */
int loadernum; /* number of loader specs */
struct loaderdef loaders[MAXLOADERS]; /* loader specifications */
struct netdrvdef netdrv; /* network driver specs */
};
/*
**************************************************************************
*
* External routines
*
**************************************************************************
*/
extern struct bootdef *getdb __P((char *name));
extern struct bootdef *getuser __P((void));
extern void doconfig __P((int argc, char **argv, struct cmdopt *opts));
extern void dopasses __P((struct bootdef *bp));
extern void makehex __P((char *outname, int tempfile, int outtype));
extern void makeflash __P((char *outname, int tempfile, unsigned long ldsize));
extern int checkflash __P((struct bootdef *bp));
extern unsigned long freeze __P((int infile, int outfile));
extern unsigned long donetdrv __P((struct netdrvdef *np,
unsigned long *parareq, int outfile));
#endif
syntax highlighted by Code2HTML, v. 0.9.1