/* * * Modifications: $Header: J:/Archives/preboot/lsa2/inc/pxe_api.h_v 1.0 May 02 1997 17:01:00 MJOHNSOX $ * * Copyright(c) 1997 by Intel Corporation. All Rights Reserved. * */ #ifndef _PXENV_API_H #define _PXENV_API_H /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */ /* Parameter structure and type definitions for PXENV API version 2.x * * PXENV.H needs to be #included before this file. * * None of the PXENV API services are available after the stack * has been unloaded. */ #include "bootp.h" /* Defines BOOTPLAYER */ /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */ /* Format of PXENV entry point structure. */ typedef struct s_PXENV_ENTRY { UINT8 signature[6]; /* 'PXENV+' */ UINT16 version; /* MSB=major, LSB=minor */ UINT8 length; /* sizeof(struct s_PXENV_ENTRY) */ UINT8 checksum; /* 8-bit checksum off structure, */ /* including this bytes should */ /* be 0. */ UINT16 rm_entry_off; /* 16-bit real-mode offset and */ UINT16 rm_entry_seg; /* segment of the PXENV API entry */ /* point. */ UINT16 pm_entry_off; /* 16-bit protected-mode offset */ UINT32 pm_entry_seg; /* and segment base address of */ /* the PXENV API entry point. */ /* The PROM stack, base code and data segment selectors are only */ /* required until the base code (TFTP API) layer is removed from */ /* memory (this can only be done in real mode). */ UINT16 stack_sel; /* PROM stack segment. Will be set */ UINT16 stack_size; /* to 0 when removed from memory. */ UINT16 base_cs_sel; /* Base code segment. Will be set */ UINT16 base_cs_size; /* to 0 when removed from memory. */ UINT16 base_ds_sel; /* Base data segment. Will be set */ UINT16 base_ds_size; /* to 0 when removed from memory. */ UINT16 mlid_ds_sel; /* MLID data segment. Will be set */ UINT16 mlid_ds_size; /* to 0 when removed from memory. */ UINT16 mlid_cs_sel; /* MLID code segment. Will be set */ UINT16 mlid_cs_size; /* to 0 when removed from memory. */ #if 0 UINT16 unknown1; /* The V1.0 beta ROM added two extra unknown fields. */ UINT16 unknown2; /* They are not included in the definition here in */ /* order to allow startrom\main.c\PxenvVerifyEntry */ /* to work with older ROMs. */ #endif } t_PXENV_ENTRY; #define PXENV_ENTRY_SIG "PXENV+" /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */ /* One of the following command op-codes needs to be loaded into the * op-code register (BX) before making a call a PXENV API service. */ #define PXENV_UNLOAD_STACK 0x70 #define PXENV_GET_BINL_INFO 0x71 #define PXENV_RESTART_DHCP 0x72 #define PXENV_RESTART_TFTP 0x73 #define PXENV_GET_RAMD_INFO 0x74 /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */ /* PXENV API parameter structure typedefs. */ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ typedef struct s_PXENV_UNLOAD_STACK { UINT16 status; /* Out: See PXENV_STATUS_xxx */ /* constants. */ UINT16 rm_entry_off; /* Out: 16-bit real-mode segment and */ UINT16 rm_entry_seg; /* offset of PXENV Entry Point */ /* structure. */ UINT16 pm_entry_off; /* Out: 16-bit protected-mode offset */ UINT32 pm_entry_base; /* and segment base address of */ /* PXENV Entry Point structure. */ } t_PXENV_UNLOAD_STACK; /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /* Packet types that can be requested in the s_PXENV_GET_BINL_INFO structure. */ #define PXENV_PACKET_TYPE_DHCP_DISCOVER 1 #define PXENV_PACKET_TYPE_DHCP_ACK 2 #define PXENV_PACKET_TYPE_BINL_REPLY 3 /* Three packets are preserved and available through this interface: 1) The * DHCP Discover packet sent by the client, 2) the DHCP acknowledgement * packet returned by the DHCP server, and 3) the reply packet from the BINL * server. If the DHCP server provided the image bootfile name, the * DHCP_ACK and BINL_REPLY packets will identical. */ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ typedef struct s_PXENV_GET_BINL_INFO { UINT16 status; /* Out: See PXENV_STATUS_xxx */ /* constants. */ UINT16 packet_type; /* In: See PXENV_PACKET_TYPE_xxx */ /* constants */ UINT16 buffer_size; /* In: Size of the buffer in */ /* bytes. Specifies the maximum */ /* amount of data that will be */ /* copied by the service. A size */ /* of zero is valid. */ /* Out: Amount of BINL data, in */ /* bytes, that was copied into */ /* the buffer. For an input */ /* size of zero, no data will be */ /* copied and buffer_size will */ /* be set to the maximum amount */ /* of data available to be */ /* copied. */ UINT16 buffer_offset; /* In: 16-bit offset and segment */ UINT16 buffer_segment; /* selector of a buffer where the */ /* requested packet will be */ /* copied. */ } t_PXENV_GET_BINL_INFO; /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ typedef struct s_PXENV_RESTART_DHCP { UINT16 status; /* Out: See PXENV_STATUS_xxx */ /* constants. */ } t_PXENV_RESTART_DHCP; /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #define s_PXENV_RESTART_TFTP s_PXENV_TFTP_READ_FILE #define t_PXENV_RESTART_TFTP t_PXENV_TFTP_READ_FILE /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ typedef struct s_PXENV_GET_RAMD_INFO { UINT16 status; /* Out: See PXENV_STATUS_xxx */ /* constants. */ UINT32 ramd_info; /* Out: Far pointer to RAMDisk */ /* information structure. */ } t_PXENV_GET_RAMD_INFO; typedef struct s_PXENV_RAMD_INFO { UINT16 orig_fbms; /* Original free base memory size. */ UINT32 ramd_addr; /* RAMDisk physical address. */ UINT32 orig_int13; /* Original Int 13h ISR. */ UINT32 orig_int1A; /* Original Int 1Ah ISR. */ UINT32 orig_pxenv; UINT16 dhcp_discover_seg; /* Segment address & length of */ UINT16 dhcp_discover_len; /* DHCP discover packet. */ UINT16 dhcp_ack_seg; /* Segment address & length of */ UINT16 dhcp_ack_len; /* DHCP ack packet. */ UINT16 binl_reply_seg; /* Segment address & length of */ UINT16 binl_reply_len; /* BINL reply packet. */ UINT16 flags; /* RAMDisk operation flags. */ UINT16 xms_page; /* XMS page number of relocated */ /* RAMDisk image. 0 == use Int 87h. */ UINT32 xms_entry; /* XMS API entry point. */ } t_PXENV_RAMD_INFO; #define PXENV_RAMD_FLAG_DISABLE 0x0001 #define PXENV_RAMD_FLAG_PROTECTED 0x0002 #endif /* _PXENV_API_H */ /* EOF - $Workfile: pxe_api.h $ */