summaryrefslogtreecommitdiffstats
path: root/src/include
diff options
context:
space:
mode:
authorMichael Brown2005-05-21 17:15:10 +0200
committerMichael Brown2005-05-21 17:15:10 +0200
commit8355ce8a3287624abb428c84fd8ae2c6961197f0 (patch)
treec1ad742f040f0243f08b873ce5b4071a9036b9c7 /src/include
parentDocumented the UDP API calls. (diff)
downloadipxe-8355ce8a3287624abb428c84fd8ae2c6961197f0.tar.gz
ipxe-8355ce8a3287624abb428c84fd8ae2c6961197f0.tar.xz
ipxe-8355ce8a3287624abb428c84fd8ae2c6961197f0.zip
Documented the basic PXE data types
Diffstat (limited to 'src/include')
-rw-r--r--src/include/pxe_types.h112
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 */