/*
 **************************************************************************
 *
 * Boot-ROM-Code to load an operating system across a TCP/IP network.
 *
 * Module:  load.h
 * Purpose: Definitions for the boot image loader
 * Entries: none
 *
 **************************************************************************
 *
 * Copyright (C) 1995-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: load.h,v 1.4 2003/01/25 23:29:41 gkminix Exp $
 */

#ifndef _KERNEL_BOOT_LOAD_H
#define _KERNEL_BOOT_LOAD_H
#ifndef _USE_ASSEMBLER


/*
 **************************************************************************
 *
 * We need some includes before we can include this file
 */
#include <general.h>
#include <pxe/common.h>
#include <pxe/tftp.h>



/*
 **************************************************************************
 *
 * Image file header. This header has to have the same size as a TFTP
 * block.
 */
struct imghdr
{
	unsigned long	ih_magic1;	/* Header magic ID 1		*/
	unsigned long	ih_flags;	/* Header flags			*/
	unsigned long   ih_locn;	/* Pointer to this header	*/
	unsigned long   ih_execute;	/* Execute address		*/
	unsigned char	ih_dummy[494];	/* Fill up to SEGSIZE		*/
	unsigned short	ih_magic2;	/* Header magic ID 2		*/
};

#define IH_MAGIC1	0x1b031336L		/* First magic number	*/
#define IH_MAGIC2	0xaa55			/* Second magic number	*/
#define IH_KEEP_ALL(a)	((a) & 0x00000100L)	/* Keep UNDI and kernel	*/
#define IH_KEEP_UNDI(a)	((a) & 0x00000200L)	/* Only keep UNDI	*/
#define IH_HDRLEN(a)	((unsigned int)((a) & 0x0fL) << 2)
#define IH_VENDLEN(a)	((unsigned int)((a) & 0xf0L) >> 2)
#define IH_HEADERSIZE	16			/* Size of header	*/



/*
 **************************************************************************
 *
 * Load record header
 */
struct loadrec {
	unsigned long	lr_flags;	/* Flags and record length	*/
	unsigned long	lr_addr;	/* Linear address to put record	*/
	unsigned long	lr_ilen;	/* Image length			*/
	unsigned long	lr_mlen;	/* Memory length		*/
};

#define LR_IS_B0(a)	((a) & 0x01000000L)
#define LR_IS_B1(a)	((a) & 0x02000000L)
#define LR_IS_EOF(a)	((a) & 0x04000000L)	  /* Marks last record	*/
#define LR_HDRLEN(a)	((unsigned int)((a) & 0x0fL) << 2)
#define LR_VENDLEN(a)	((unsigned int)((a) & 0xf0L) >> 2)



/*
 **************************************************************************
 *
 * Definition of boot block address and required boot block buffer size
 */
#define BOOTBLOCK	MK_FP(0, 0x7c00)
#define BOOTBSIZE	1024L



/*
 **************************************************************************
 *
 * Structure used to pass parameters to the loading routine
 */
extern struct loadparams {
	t_tftp_read_file  tftp;		/* TFTP parameters		*/
	unsigned long     header;	/* far ptr to load header	*/
	unsigned long     exec;		/* far execution address	*/
	unsigned int      drive;	/* disk ID when calling image	*/
	int               mode;		/* loading mode			*/
} ldparams;

/* Loading modes */
#define LDMODE_KEEP_NONE	0	/* remove kernel and UNDI driver */
#define LDMODE_KEEP_UNDI	1	/* only remove kernel and keep UNDI */
#define LDMODE_KEEP_ALL		2	/* dont remove anything */
#define LDMODE_KEEP_PXE		3	/* PXE calling sequence */


/*
 **************************************************************************
 *
 * Functions in boot image loader module:
 */

/* Get the boot image from the server and execute it */
extern int load __P((int quiet));


#endif				/* _USE_ASSEMBLER */
#endif				/* _KERNEL_BOOT_LOAD_H */



syntax highlighted by Code2HTML, v. 0.9.1