[build] Remove PACKED macro
[gpxe.git] / src / arch / i386 / include / pxe_types.h
1 #ifndef PXE_TYPES_H
2 #define PXE_TYPES_H
3
4 /** @file
5  *
6  * PXE data types
7  *
8  */
9
10 FILE_LICENCE ( GPL2_OR_LATER );
11
12 #include <stdint.h>
13 #include <errno.h> /* PXE status codes */
14
15 /** @addtogroup pxe Preboot eXecution Environment (PXE) API
16  *  @{
17  */
18
19 /** @defgroup pxe_types PXE data types
20  *
21  * Basic PXE data types such as #UINT16_t, #ADDR32_t, #SEGSEL_t etc.
22  *
23  * These definitions are based on Table 1-1 ("Data Type Definitions")
24  * in the Intel PXE specification version 2.1.  They have been
25  * generalised to non-x86 architectures where possible.
26  *
27  * @{
28  */
29
30 /** An 8-bit unsigned integer */
31 typedef uint8_t UINT8_t;
32
33 /** A 16-bit unsigned integer */
34 typedef uint16_t UINT16_t;
35
36 /** A 32-bit unsigned integer */
37 typedef uint32_t UINT32_t;
38
39 /** A PXE exit code.
40  *
41  * Permitted values are #PXENV_EXIT_SUCCESS and #PXENV_EXIT_FAILURE.
42  *
43  */
44 typedef UINT16_t PXENV_EXIT_t;
45 #define PXENV_EXIT_SUCCESS      0x0000  /**< No error occurred */
46 #define PXENV_EXIT_FAILURE      0x0001  /**< An error occurred */
47
48 /** A PXE status code.
49  *
50  * Status codes are defined in errno.h.
51  *
52  */
53 typedef UINT16_t PXENV_STATUS_t;
54
55 /** An IPv4 address.
56  *
57  * @note This data type is in network (big-endian) byte order.
58  *
59  */
60 typedef UINT32_t IP4_t;
61
62 /** A UDP port.
63  *
64  * @note This data type is in network (big-endian) byte order.
65  *
66  */
67 typedef UINT16_t UDP_PORT_t;
68
69 /** Maximum length of a MAC address */
70 #define MAC_ADDR_LEN 16
71
72 /** A MAC address */
73 typedef UINT8_t MAC_ADDR_t[MAC_ADDR_LEN];
74
75 #ifndef HAVE_ARCH_ADDR32
76 /** A physical address.
77  *
78  * For x86, this is a 32-bit physical address, and is therefore
79  * limited to the low 4GB.
80  *
81  */
82 typedef UINT32_t ADDR32_t;
83 #endif
84
85 #ifndef HAVE_ARCH_SEGSEL
86 /** A segment selector.
87  *
88  * For x86, this is a real mode segment (0x0000-0xffff), or a
89  * protected-mode segment selector, such as could be loaded into a
90  * segment register.
91  *
92  */
93 typedef UINT16_t SEGSEL_t;
94 #endif
95
96 #ifndef HAVE_ARCH_OFF16
97 /** An offset within a segment identified by #SEGSEL
98  *
99  * For x86, this is a 16-bit offset.
100  *
101  */
102 typedef UINT16_t OFF16_t;
103 #endif
104
105 /** A segment:offset address
106  *
107  * For x86, this is a 16-bit real-mode or protected-mode
108  * segment:offset address.
109  *
110  */
111 typedef struct s_SEGOFF16 {
112         OFF16_t         offset;         /**< Offset within the segment */
113         SEGSEL_t        segment;        /**< Segment selector */
114 } __attribute__ (( packed )) SEGOFF16_t;
115
116 /** A segment descriptor */
117 typedef struct s_SEGDESC {
118         SEGSEL_t        segment_address;        /**< Segment selector */
119         ADDR32_t        Physical_address;       /**< Segment base address */
120         OFF16_t         Seg_size;               /**< Size of the segment */
121 } __attribute__ (( packed )) SEGDESC_t;
122
123 /** @} */ /* pxe_types */
124
125 /** @} */ /* pxe */
126
127 #endif /* PXE_TYPES_H */