iPXE - Open Source Boot Firmware

[pxe] Introduce PXE exit hook for NBP chaining
authorShao Miller <shao.miller@yrdsb.edu.on.ca>
Sun, 24 Jan 2010 03:12:27 +0000 (22:12 -0500)
committerMarty Connor <mdc@etherboot.org>
Sun, 24 Jan 2010 12:54:42 +0000 (07:54 -0500)
commit112a3f2de281a2afb23ced2082d555720de7c9b0
tree50f91813ae58ed102fa4b7a47bd9f90f9d99732c
parent5efc2fcb602864e82de2cd7414e3828f589034e5
[pxe] Introduce PXE exit hook for NBP chaining

It might be the case that we wish to chain to an NBP without
being "in the way".  We now implement a hook in our exit path
for gPXE *.*pxe build targets.  The hook is a pointer to a
SEG16:OFF16 which we try to jump to during exit.  By default,
this pointer results in the usual exit path.

We also implement the "pxenv_file_exit_hook" PXE API routine
to allow the user to specify an alternate SEG16:OFF16 to jump
to during exit.

Unfortunately, this additional PXE extension has a cost
in code size.  Fortunately, a look at the size difference
for a gPXE .rom build target shows zero size difference
after compression.

The routine is documented in doc/pxe_extensions as follows:

FILE EXIT HOOK

Op-Code: PXENV_FILE_EXIT_HOOK (00e7h)

Input: Far pointer to a t_PXENV_FILE_EXIT_HOOK parameter
structure that has been initialized by the caller.

Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be
returned in AX.  The Status field in the parameter
structure must be set to one of the values represented
by the PXENV_STATUS_xxx constants.

Description:Modify the exit path to jump to the specified code.
Only valid for pxeprefix-based builds.

typedef struct s_PXENV_FILE_EXIT_HOOK {
        PXENV_STATUS_t Status;
        SEGOFF16_t Hook;
} t_PXENV_FILE_EXIT_HOOK;

Set before calling API service:

Hook: The SEG16:OFF16 of the code to jump to.

Returned from API service:

Status: See PXENV_STATUS_xxx constants.

Requested-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Shao Miller <shao.miller@yrdsb.edu.on.ca>
Signed-off-by: Marty Connor <mdc@etherboot.org>
src/arch/i386/include/pxe.h
src/arch/i386/include/pxe_api.h
src/arch/i386/interface/pxe/pxe_call.c
src/arch/i386/interface/pxe/pxe_file.c
src/arch/i386/prefix/pxeprefix.S
src/doc/pxe_extensions