mirror of
https://github.com/ipxe/ipxe
synced 2026-02-01 15:29:45 +03:00
Merged mcb30-realmode-redesign back to HEAD
This commit is contained in:
@@ -32,7 +32,7 @@ typedef struct boot_infos
|
||||
/* Some infos about the current MacOS display */
|
||||
u32 dispDeviceRect[4]; /* left,top,right,bottom */
|
||||
u32 dispDeviceDepth; /* (8, 16 or 32) */
|
||||
u8* dispDeviceBase; /* base address (physical) */
|
||||
u32 dispDeviceBase; /* base address (physical) */
|
||||
u32 dispDeviceRowBytes; /* rowbytes (in bytes) */
|
||||
u32 dispDeviceColorsOffset; /* Colormap (8 bits only) or 0 (*) */
|
||||
|
||||
@@ -56,21 +56,7 @@ typedef struct boot_infos
|
||||
* Benjamin Herrenschmidt <benh@kernel.crashing.org>
|
||||
*/
|
||||
|
||||
extern void btext_clearscreen(void);
|
||||
|
||||
extern boot_infos_t disp_bi;
|
||||
extern u32 boot_text_mapped;
|
||||
|
||||
void btext_setup_display(u32 width, u32 height, u32 depth, u32 pitch,
|
||||
unsigned long address);
|
||||
void map_boot_text(void);
|
||||
|
||||
void btext_drawchar(char c);
|
||||
void btext_drawstring(const char *str);
|
||||
void btext_drawhex(u32 v);
|
||||
|
||||
void btext_putc(int c);
|
||||
|
||||
void btext_init(void);
|
||||
|
||||
#endif /* _BTEXT_H */
|
||||
|
||||
41
src/include/compiler.h
Normal file
41
src/include/compiler.h
Normal file
@@ -0,0 +1,41 @@
|
||||
#ifndef COMPILER_H
|
||||
#define COMPILER_H
|
||||
|
||||
/* We export the symbol obj_OBJECT (OBJECT is defined on command-line)
|
||||
* as a global symbol, so that the linker can drag in selected object
|
||||
* files from the library using -u obj_OBJECT.
|
||||
*
|
||||
* Not quite sure why cpp requires two levels of macro call in order
|
||||
* to actually expand OBJECT...
|
||||
*/
|
||||
#undef _H1
|
||||
#define _H1( x, y ) x ## y
|
||||
#undef _H2
|
||||
#define _H2( x, y ) _H1 ( x, y )
|
||||
#define OBJECT_SYMBOL _H2 ( obj_, OBJECT )
|
||||
#undef _STR
|
||||
#define _STR(s) #s
|
||||
#undef _XSTR
|
||||
#define _XSTR(s) _STR(s)
|
||||
#define OBJECT_SYMBOL_STR _XSTR ( OBJECT_SYMBOL )
|
||||
|
||||
#ifdef ASSEMBLY
|
||||
|
||||
.globl OBJECT_SYMBOL
|
||||
.equ OBJECT_SYMBOL, 0
|
||||
|
||||
#else /* ASSEMBLY */
|
||||
|
||||
__asm__ ( ".globl\t" OBJECT_SYMBOL_STR );
|
||||
__asm__ ( ".equ\t" OBJECT_SYMBOL_STR ", 0" );
|
||||
|
||||
#define REQUIRE_OBJECT(object) \
|
||||
__asm__ ( ".equ\tneed_" #object ", obj_" #object );
|
||||
|
||||
#define PACKED __attribute__((packed))
|
||||
#define __unused __attribute__((unused))
|
||||
#define __used __attribute__((used))
|
||||
|
||||
#endif /* ASSEMBLY */
|
||||
|
||||
#endif /* COMPILER_H */
|
||||
28
src/include/console.h
Normal file
28
src/include/console.h
Normal file
@@ -0,0 +1,28 @@
|
||||
#ifndef CONSOLE_H
|
||||
#define CONSOLE_H
|
||||
|
||||
#include "stdint.h"
|
||||
|
||||
/*
|
||||
* Consoles that cannot be used before their INIT_FN() has completed
|
||||
* should set disabled = 1 initially. This allows other console
|
||||
* devices to still be used to print out early debugging messages.
|
||||
*/
|
||||
|
||||
struct console_driver {
|
||||
int disabled;
|
||||
void ( *putchar ) ( int character );
|
||||
int ( *getchar ) ( void );
|
||||
int ( *iskey ) ( void );
|
||||
};
|
||||
|
||||
#define __console_driver \
|
||||
__attribute__ (( used, __section__ ( ".drivers.console" ) ))
|
||||
|
||||
/* Function prototypes */
|
||||
|
||||
extern void putchar ( int character );
|
||||
extern int getchar ( void );
|
||||
extern int iskey ( void );
|
||||
|
||||
#endif /* CONSOLE_H */
|
||||
@@ -49,28 +49,6 @@
|
||||
#define DEFAULT_BOOTFILE PXENFSROOTPATH "/boot/pxeboot"
|
||||
#endif
|
||||
|
||||
/* Clean up console settings... mainly CONSOLE_FIRMWARE and CONSOLE_SERIAL are used
|
||||
* in the sources (except start.S and serial.S which cannot include
|
||||
* etherboot.h). At least one of the CONSOLE_xxx has to be set, and
|
||||
* CONSOLE_DUAL sets both CONSOLE_CRT and CONSOLE_SERIAL. If none is set,
|
||||
* CONSOLE_CRT is assumed. */
|
||||
#ifdef CONSOLE_CRT
|
||||
#define CONSOLE_FIRMWARE
|
||||
#endif
|
||||
#ifdef CONSOLE_DUAL
|
||||
#undef CONSOLE_FIRMWARE
|
||||
#define CONSOLE_FIRMWARE
|
||||
#undef CONSOLE_SERIAL
|
||||
#define CONSOLE_SERIAL
|
||||
#endif
|
||||
#if defined(CONSOLE_FIRMWARE) && defined(CONSOLE_SERIAL)
|
||||
#undef CONSOLE_DUAL
|
||||
#define CONSOLE_DUAL
|
||||
#endif
|
||||
#if !defined(CONSOLE_FIRMWARE) && !defined(CONSOLE_SERIAL)
|
||||
#define CONSOLE_FIRMWARE
|
||||
#endif
|
||||
|
||||
#if !defined(DOWNLOAD_PROTO_TFTP) && !defined(DOWNLOAD_PROTO_NFS) && !defined(DOWNLOAD_PROTO_SLAM) && !defined(DOWNLOAD_PROTO_TFTM) && !defined(DOWNLOAD_PROTO_DISK) && !defined(DOWNLOAD_PROTO_HTTP)
|
||||
#error No download protocol defined!
|
||||
#endif
|
||||
@@ -204,7 +182,7 @@ External prototypes
|
||||
struct Elf_Bhdr;
|
||||
extern int in_call(in_call_data_t *data, uint32_t opcode, va_list params);
|
||||
extern void console_init(void);
|
||||
extern int main(in_call_data_t *data, va_list params);
|
||||
extern int main();
|
||||
extern int loadkernel P((const char *fname));
|
||||
extern char as_main_program;
|
||||
/* nic.c */
|
||||
@@ -287,26 +265,6 @@ extern unsigned long strtoul P((const char *p, const char **, int base));
|
||||
extern void printf P((const char *, ...));
|
||||
extern int sprintf P((char *, const char *, ...));
|
||||
extern int inet_aton P((const char *p, in_addr *i));
|
||||
#ifdef PCBIOS
|
||||
extern void gateA20_set P((void));
|
||||
#define gateA20_unset()
|
||||
#else
|
||||
#define gateA20_set()
|
||||
#define gateA20_unset()
|
||||
#endif
|
||||
extern void putchar P((int));
|
||||
extern int getchar P((void));
|
||||
extern int iskey P((void));
|
||||
|
||||
/* pcbios.S */
|
||||
extern int console_getc P((void));
|
||||
extern void console_putc P((int));
|
||||
extern int console_ischar P((void));
|
||||
extern int getshift P((void));
|
||||
extern int int15 P((int));
|
||||
#ifdef POWERSAVE
|
||||
extern void cpu_nap P((void));
|
||||
#endif /* POWERSAVE */
|
||||
|
||||
/* basemem.c */
|
||||
extern uint32_t get_free_base_memory ( void );
|
||||
@@ -318,26 +276,6 @@ extern void free_unused_base_memory ( void );
|
||||
extern void forget_prefix_base_memory ( void );
|
||||
extern void forget_runtime_base_memory ( uint32_t old_addr );
|
||||
|
||||
struct e820entry {
|
||||
uint64_t addr;
|
||||
uint64_t size;
|
||||
uint32_t type;
|
||||
#define E820_RAM 1
|
||||
#define E820_RESERVED 2
|
||||
#define E820_ACPI 3 /* usable as RAM once ACPI tables have been read */
|
||||
#define E820_NVS 4
|
||||
} PACKED;
|
||||
#define E820ENTRY_SIZE 20
|
||||
#define E820MAX 32
|
||||
struct meminfo {
|
||||
uint16_t basememsize;
|
||||
uint16_t pad;
|
||||
uint32_t memsize;
|
||||
uint32_t map_count;
|
||||
struct e820entry map[E820MAX];
|
||||
} PACKED;
|
||||
extern struct meminfo meminfo;
|
||||
extern void get_memsizes(void);
|
||||
extern unsigned long get_boot_order(unsigned long order, unsigned *index);
|
||||
#ifndef NORELOCATE
|
||||
extern void relocate(void);
|
||||
|
||||
58
src/include/init.h
Normal file
58
src/include/init.h
Normal file
@@ -0,0 +1,58 @@
|
||||
#ifndef INIT_H
|
||||
#define INIT_H
|
||||
|
||||
/*
|
||||
* In order to avoid having objects dragged in just because main()
|
||||
* calls their initialisation function, we allow each object to
|
||||
* specify that it has a function that must be called to initialise
|
||||
* that object. The function call_init_fns() will call all the
|
||||
* included objects' initialisation functions.
|
||||
*
|
||||
* Objects that require initialisation should include init.h and
|
||||
* register the initialisation function using INIT_FN().
|
||||
*
|
||||
* Objects may register up to three functions: init, reset and exit.
|
||||
* init gets called only once, at the point that Etherboot is
|
||||
* initialised (before the call to main()). reset gets called between
|
||||
* each boot attempt. exit gets called only once, just before the
|
||||
* loaded OS starts up (or just before Etherboot exits, if it exits,
|
||||
* or when the PXE NBP calls UNDI_SHUTDOWN, if it's a PXE NBP).
|
||||
*
|
||||
* The syntax is:
|
||||
* INIT_FN ( init_order, init_function, reset_function, exit_function );
|
||||
* where init_order is an ordering taken from the list below. Any
|
||||
* function may be left as NULL.
|
||||
*/
|
||||
|
||||
/* An entry in the initialisation function table */
|
||||
|
||||
struct init_fn {
|
||||
void ( *init ) ( void );
|
||||
void ( *reset ) ( void );
|
||||
void ( *exit ) ( void );
|
||||
};
|
||||
|
||||
/* Use double digits to avoid problems with "10" < "9" on alphabetic sort */
|
||||
#define INIT_CONSOLE "00"
|
||||
#define INIT_CPU "01"
|
||||
#define INIT_TIMERS "02"
|
||||
#define INIT_PCMCIA "03"
|
||||
#define INIT_MEMSIZES "04"
|
||||
#define INIT_HEAP "05"
|
||||
|
||||
/* Macro for creating an initialisation function table entry */
|
||||
#define INIT_FN( init_order, init_func, reset_func, exit_func ) \
|
||||
static struct init_fn init_ ## init_func ## _ ## exit_func \
|
||||
__attribute__ ((used,__section__(".init_fns." init_order))) = { \
|
||||
.init = init_func, \
|
||||
.reset = reset_func, \
|
||||
.exit = exit_func, \
|
||||
};
|
||||
|
||||
/* Function prototypes */
|
||||
|
||||
void call_init_fns ( void );
|
||||
void call_reset_fns ( void );
|
||||
void call_exit_fns ( void );
|
||||
|
||||
#endif /* INIT_H */
|
||||
6
src/include/main.h
Normal file
6
src/include/main.h
Normal file
@@ -0,0 +1,6 @@
|
||||
#ifndef MAIN_H
|
||||
#define MAIN_H
|
||||
|
||||
extern int main ( void );
|
||||
|
||||
#endif /* MAIN_H */
|
||||
@@ -18,7 +18,6 @@
|
||||
#include "setjmp.h"
|
||||
#include "latch.h"
|
||||
#include "callbacks.h"
|
||||
#include "hooks.h"
|
||||
|
||||
/* within 1MB of 4GB is too close.
|
||||
* MAX_ADDR is the maximum address we can easily do DMA to.
|
||||
|
||||
13
src/include/stddef.h
Normal file
13
src/include/stddef.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#ifndef STDDEF_H
|
||||
#define STDDEF_H
|
||||
|
||||
/* for size_t */
|
||||
#include "stdint.h"
|
||||
|
||||
#undef NULL
|
||||
#define NULL ((void *)0)
|
||||
|
||||
#undef offsetof
|
||||
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
|
||||
|
||||
#endif /* STDDEF_H */
|
||||
@@ -53,7 +53,6 @@ extern void load_timer2(unsigned int ticks);
|
||||
extern inline int timer2_running(void);
|
||||
extern void waiton_timer2(unsigned int ticks);
|
||||
|
||||
extern void setup_timers(void);
|
||||
extern void ndelay(unsigned int nsecs);
|
||||
extern void udelay(unsigned int usecs);
|
||||
extern void mdelay(unsigned int msecs);
|
||||
|
||||
Reference in New Issue
Block a user