diff options
Diffstat (limited to 'src/include/pxe_types.h')
-rw-r--r-- | src/include/pxe_types.h | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/src/include/pxe_types.h b/src/include/pxe_types.h new file mode 100644 index 00000000..4d8917a5 --- /dev/null +++ b/src/include/pxe_types.h @@ -0,0 +1,112 @@ +#ifndef PXE_TYPES_H +#define PXE_TYPES_H + +/** @addtogroup pxe Preboot eXecution Environment (PXE) API + * @{ + */ + +/** @file + * + * PXE data types + * + */ + +#include "stdint.h" +#include "pxe_addr.h" /* Architecture-specific PXE definitions */ +#include "errno.h" /* PXE status codes */ + +/** @defgroup pxe_types PXE data types + * + * These definitions are based on Table 1-1 ("Data Type Definitions") + * in the Intel PXE specification version 2.1. They have been + * generalised to non-x86 architectures where possible. + * + * @{ + */ + +/** An 8-bit unsigned integer */ +typedef uint8_t UINT8; + +/** A 16-bit unsigned integer */ +typedef uint16_t UINT16; + +/** A 32-bit unsigned integer */ +typedef uint32_t UINT32; + +/** A PXE exit code. + * + * Permitted values are PXENV_EXIT_SUCCESS and PXENV_EXIT_FAILURE. + * + */ +typedef uint16_t PXENV_EXIT; + +/** A PXE status code. + * + * Status codes are defined in errno.h. + * + */ +typedef uint16_t PXENV_STATUS; + +/** An IP address. + * + * This is an IPv4 address in host byte order. + * + */ +typedef uint32_t IP4; + +/** A UDP port. + * + * Note that this is in network (big-endian) byte order. + * + */ +typedef uint16_t UDP_PORT; + +/** Maximum length of a MAC address */ +#define MAC_ADDR_LEN 16 + +/** A MAC address */ +typedef uint8_t MAC_ADDR[MAC_ADDR_LEN]; + +/** A physical address. + * + * For x86, this is a 32-bit physical address, and is therefore + * limited to the low 4GB. + * + */ +typedef physaddr_t ADDR32; + +#ifndef HAVE_ARCH_SEGSEL +/** A segment selector. + * + * For x86, this is a real mode segment (0x0000-0xffff), or a + * protected-mode segment selector, such as could be loaded into a + * segment register. + * + */ +typedef uint16_t SEGSEL; +#endif + +#ifndef HAVE_ARCH_OFF16 +/** An offset within a segment identified by #SEGSEL */ +typedef uint16_t OFF16; +#endif + +/** A segment:offset address */ +typedef struct s_SEGOFF16 { + OFF16 offset; /**< Offset within the segment */ + SEGSEL segment; /**< Segment selector */ +} SEGOFF16 __attribute__ (( packed )); + +/** A segment descriptor */ +typedef struct s_SEGDESC { + SEGSEL segment_address; /**< Segment selector */ + ADDR32 physical_address; /**< Base address of the segment */ + OFF16 seg_size; /**< Size of the segment */ +} SEGDESC __attribute__ (( packed )); + +/** @} */ /* defgroup */ + + +/** @} */ /* addtogroup */ + +#endif /* PXE_TYPES_H */ |