aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/arch/i386/include/efi/ipxe/dhcp_arch.h3
-rw-r--r--src/arch/i386/include/pcbios/ipxe/dhcp_arch.h3
-rw-r--r--src/arch/x86_64/include/efi/ipxe/dhcp_arch.h5
-rw-r--r--src/include/ipxe/dhcp.h33
4 files changed, 40 insertions, 4 deletions
diff --git a/src/arch/i386/include/efi/ipxe/dhcp_arch.h b/src/arch/i386/include/efi/ipxe/dhcp_arch.h
index 902caff95..184177219 100644
--- a/src/arch/i386/include/efi/ipxe/dhcp_arch.h
+++ b/src/arch/i386/include/efi/ipxe/dhcp_arch.h
@@ -33,7 +33,8 @@ FILE_LICENCE ( GPL2_OR_LATER );
'A', 'r', 'c', 'h', ':', '0', '0', '0', '0', '6', ':', \
'U', 'N', 'D', 'I', ':', '0', '0', '3', '0', '1', '0' )
-#define DHCP_ARCH_CLIENT_ARCHITECTURE DHCP_WORD ( 6 )
+#define DHCP_ARCH_CLIENT_ARCHITECTURE \
+ DHCP_WORD ( DHCP_CLIENT_ARCHITECTURE_IA32 )
#define DHCP_ARCH_CLIENT_NDI DHCP_OPTION ( 1 /* UNDI */ , 3, 10 /* v3.10 */ )
diff --git a/src/arch/i386/include/pcbios/ipxe/dhcp_arch.h b/src/arch/i386/include/pcbios/ipxe/dhcp_arch.h
index 822b3eba9..a36d9cfa1 100644
--- a/src/arch/i386/include/pcbios/ipxe/dhcp_arch.h
+++ b/src/arch/i386/include/pcbios/ipxe/dhcp_arch.h
@@ -33,7 +33,8 @@ FILE_LICENCE ( GPL2_OR_LATER );
'A', 'r', 'c', 'h', ':', '0', '0', '0', '0', '0', ':', \
'U', 'N', 'D', 'I', ':', '0', '0', '2', '0', '0', '1' )
-#define DHCP_ARCH_CLIENT_ARCHITECTURE DHCP_WORD ( 0 )
+#define DHCP_ARCH_CLIENT_ARCHITECTURE \
+ DHCP_WORD ( DHCP_CLIENT_ARCHITECTURE_X86 )
#define DHCP_ARCH_CLIENT_NDI DHCP_OPTION ( 1 /* UNDI */ , 2, 1 /* v2.1 */ )
diff --git a/src/arch/x86_64/include/efi/ipxe/dhcp_arch.h b/src/arch/x86_64/include/efi/ipxe/dhcp_arch.h
index af41b195e..9a4790fdc 100644
--- a/src/arch/x86_64/include/efi/ipxe/dhcp_arch.h
+++ b/src/arch/x86_64/include/efi/ipxe/dhcp_arch.h
@@ -30,10 +30,11 @@ FILE_LICENCE ( GPL2_OR_LATER );
#define DHCP_ARCH_VENDOR_CLASS_ID \
DHCP_STRING ( 'P', 'X', 'E', 'C', 'l', 'i', 'e', 'n', 't', ':', \
- 'A', 'r', 'c', 'h', ':', '0', '0', '0', '0', '7', ':', \
+ 'A', 'r', 'c', 'h', ':', '0', '0', '0', '0', '9', ':', \
'U', 'N', 'D', 'I', ':', '0', '0', '3', '0', '1', '0' )
-#define DHCP_ARCH_CLIENT_ARCHITECTURE DHCP_WORD ( 7 )
+#define DHCP_ARCH_CLIENT_ARCHITECTURE \
+ DHCP_WORD ( DHCP_CLIENT_ARCHITECTURE_X86_64 )
#define DHCP_ARCH_CLIENT_NDI DHCP_OPTION ( 1 /* UNDI */ , 3, 10 /* v3.10 */ )
diff --git a/src/include/ipxe/dhcp.h b/src/include/ipxe/dhcp.h
index 148e3d66f..dbca8e633 100644
--- a/src/include/ipxe/dhcp.h
+++ b/src/include/ipxe/dhcp.h
@@ -240,6 +240,39 @@ struct dhcp_client_id {
/** Client system architecture */
#define DHCP_CLIENT_ARCHITECTURE 93
+/** DHCP client architecture */
+struct dhcp_client_architecture {
+ uint16_t arch;
+} __attribute__ (( packed ));
+
+/** DHCP client architecture values
+ *
+ * These are defined by the PXE specification and redefined by
+ * RFC4578.
+ */
+enum dhcp_client_architecture_values {
+ /** Intel x86 PC */
+ DHCP_CLIENT_ARCHITECTURE_X86 = 0x0000,
+ /** NEC/PC98 */
+ DHCP_CLIENT_ARCHITECTURE_PC98 = 0x0001,
+ /** EFI Itanium */
+ DHCP_CLIENT_ARCHITECTURE_IA64 = 0x0002,
+ /** DEC Alpha */
+ DHCP_CLIENT_ARCHITECTURE_ALPHA = 0x0003,
+ /** Arc x86 */
+ DHCP_CLIENT_ARCHITECTURE_ARCX86 = 0x0004,
+ /** Intel Lean Client */
+ DHCP_CLIENT_ARCHITECTURE_LC = 0x0005,
+ /** EFI IA32 */
+ DHCP_CLIENT_ARCHITECTURE_IA32 = 0x0006,
+ /** EFI BC */
+ DHCP_CLIENT_ARCHITECTURE_EFI = 0x0007,
+ /** EFI Xscale */
+ DHCP_CLIENT_ARCHITECTURE_XSCALE = 0x0008,
+ /** EFI x86-64 */
+ DHCP_CLIENT_ARCHITECTURE_X86_64 = 0x0009,
+};
+
/** Client network device interface */
#define DHCP_CLIENT_NDI 94