]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
Allowed zero-cost enforced ordering of features in startup banner
authorMichael Brown <mcb30@etherboot.org>
Thu, 2 Aug 2007 13:51:03 +0000 (14:51 +0100)
committerMichael Brown <mcb30@etherboot.org>
Thu, 2 Aug 2007 13:51:03 +0000 (14:51 +0100)
list.

Added FEATURE() macros to most relevant (non-driver) files.

13 files changed:
src/arch/i386/image/bzimage.c
src/arch/i386/image/multiboot.c
src/arch/i386/image/nbi.c
src/arch/i386/image/pxe_image.c
src/hci/shell_banner.c
src/include/gpxe/features.h
src/net/aoe.c
src/net/tcp/ftp.c
src/net/tcp/http.c
src/net/tcp/https.c
src/net/tcp/iscsi.c
src/net/udp/dns.c
src/net/udp/tftp.c

index 979eb2d7d754bc99961c13296f897b79f775d5fb..8a8b254b5638f16bb2d8656a7ef5fc3e0e9c1734 100644 (file)
@@ -36,6 +36,9 @@
 #include <gpxe/init.h>
 #include <gpxe/initrd.h>
 #include <gpxe/cpio.h>
+#include <gpxe/features.h>
+
+FEATURE ( FEATURE_IMAGE, "bzImage", DHCP_EB_FEATURE_BZIMAGE, 1 );
 
 struct image_type bzimage_image_type __image_type ( PROBE_NORMAL );
 
index 546de365ddcf8091d75483d560284c6ff25ebc38..76114130fddbc7b739a6988e298176ee2c1b2ea3 100644 (file)
@@ -33,6 +33,9 @@
 #include <gpxe/memmap.h>
 #include <gpxe/elf.h>
 #include <gpxe/init.h>
+#include <gpxe/features.h>
+
+FEATURE ( FEATURE_IMAGE, "Multiboot", DHCP_EB_FEATURE_MULTIBOOT, 1 );
 
 struct image_type multiboot_image_type __image_type ( PROBE_MULTIBOOT );
 
index 2de381d070605c32aba87e08507ebdfb32e44637..a1d74553de59f2d5d3cfbd662e0e59352d140dd5 100644 (file)
@@ -10,6 +10,7 @@
 #include <gpxe/netdevice.h>
 #include <gpxe/dhcp.h>
 #include <gpxe/image.h>
+#include <gpxe/features.h>
 
 /** @file
  *
@@ -26,6 +27,8 @@
  *
  */
 
+FEATURE ( FEATURE_IMAGE, "NBI", DHCP_EB_FEATURE_NBI, 1 );
+
 struct image_type nbi_image_type __image_type ( PROBE_NORMAL );
 
 /**
index 3da38e09e1956863f1e6f2fe6906e40841dee3ec..9e634f1493bfc0ef3af1f686548f4778ef6cdcc8 100644 (file)
@@ -29,6 +29,9 @@
 #include <gpxe/image.h>
 #include <gpxe/segment.h>
 #include <gpxe/netdevice.h>
+#include <gpxe/features.h>
+
+FEATURE ( FEATURE_IMAGE, "PXE", DHCP_EB_FEATURE_PXE, 1 );
 
 struct image_type pxe_image_type __image_type ( PROBE_PXE );
 
index bb8166db5ba06a7c28d1f5fef9a44bdccc7dba53..d313d4dd036cd99c4ca127ee74da92ce101cf67b 100644 (file)
@@ -34,8 +34,8 @@
 #define BOLD   "\033[1m"
 #define CYAN   "\033[36m"
 
-static char * features[0] __table_start ( char *, features );
-static char * features_end[0] __table_end ( char *, features );
+static struct feature features[0] __table_start ( struct feature, features );
+static struct feature features_end[0] __table_end ( struct feature, features );
 
 /**
  * Print shell banner and prompt for shell entry
@@ -44,7 +44,7 @@ static char * features_end[0] __table_end ( char *, features );
  */
 int shell_banner ( void ) {
        unsigned long timeout = ( currticks() + BANNER_TIMEOUT );
-       char **feature;
+       struct feature *feature;
        int key;
        int enter_shell = 0;
 
@@ -54,7 +54,7 @@ int shell_banner ( void ) {
                 CYAN "http://etherboot.org" NORMAL "\n"
                 "Features:" );
        for ( feature = features ; feature < features_end ; feature++ ) {
-               printf ( " %s", *feature );
+               printf ( " %s", feature->name );
        }
        printf ( "\nPress Ctrl-B for the gPXE command line..." );
 
index b8d2d6044ac28f09d1a68406c16d2eadf515957f..a520131f10bf66427372c7bb7c4ab15db8bc7b3a 100644 (file)
  *
  */
 
+/**
+ * @defgroup featurecat Feature categories
+ * @{
+ */
+
+#define FEATURE_PROTOCOL               01 /**< Network protocols */
+#define FEATURE_IMAGE                  02 /**< Image formats */
+#define FEATURE_MISC                   03 /**< Miscellaneous */
+
+/** @} */
+
 /**
  * @defgroup dhcpfeatures DHCP feature option tags
  *
  * @{
  */
 
-/** PXE API extensions */
-#define DHCP_EB_FEATURE_PXE_EXT 0x10
-
-/** iSCSI */
-#define DHCP_EB_FEATURE_ISCSI 0x11
-
-/** AoE */
-#define DHCP_EB_FEATURE_AOE 0x12
-
-/** HTTP */
-#define DHCP_EB_FEATURE_HTTP 0x13
-
-/** HTTPS */
-#define DHCP_EB_FEATURE_HTTPS 0x14
+#define DHCP_EB_FEATURE_PXE_EXT                0x10 /**< PXE API extensions */
+#define DHCP_EB_FEATURE_ISCSI          0x11 /**< iSCSI protocol */
+#define DHCP_EB_FEATURE_AOE            0x12 /**< AoE protocol */
+#define DHCP_EB_FEATURE_HTTP           0x13 /**< HTTP protocol */
+#define DHCP_EB_FEATURE_HTTPS          0x14 /**< HTTPS protocol */
+#define DHCP_EB_FEATURE_TFTP           0x15 /**< TFTP protocol */
+#define DHCP_EB_FEATURE_FTP            0x16 /**< FTP protocol */
+#define DHCP_EB_FEATURE_DNS            0x17 /**< DNS protocol */
+#define DHCP_EB_FEATURE_BZIMAGE                0x18 /**< bzImage format */
+#define DHCP_EB_FEATURE_MULTIBOOT      0x19 /**< Multiboot format */
+#define DHCP_EB_FEATURE_NBI            0x20 /**< NBI format */
+#define DHCP_EB_FEATURE_PXE            0x21 /**< PXE format */
 
 /** @} */
 
 /** Declare a feature code for DHCP */
-#define __dhcp_feature __table ( uint8_t, dhcp_features, 01 )
+#define __dhcp_feature( category )                                         \
+        __table ( uint8_t, dhcp_features, category )
 
 /** Construct a DHCP feature table entry */
-#define DHCP_FEATURE( feature_opt, version ) \
-       _DHCP_FEATURE ( OBJECT, feature_opt, version )
-#define _DHCP_FEATURE( _name, feature_opt, version ) \
-       __DHCP_FEATURE ( _name, feature_opt, version )
-#define __DHCP_FEATURE( _name, feature_opt, version )          \
-       uint8_t __dhcp_feature_ ## _name [] __dhcp_feature = {  \
-               feature_opt, DHCP_BYTE ( version )              \
+#define DHCP_FEATURE( category, feature_opt, version )                     \
+       _DHCP_FEATURE ( category, OBJECT, feature_opt, version )
+#define _DHCP_FEATURE( category, _name, feature_opt, version )             \
+       __DHCP_FEATURE ( category, _name, feature_opt, version )
+#define __DHCP_FEATURE( category, _name, feature_opt, version )                    \
+       uint8_t __dhcp_feature_ ## _name [] __dhcp_feature ( category ) = { \
+               feature_opt, DHCP_BYTE ( version )                          \
        };
 
+/** A named feature */
+struct feature {
+       /** Feature name */
+       char *name;
+};
+
 /** Declare a named feature */
-#define __feature_name __table ( char *, features, 01 )
+#define __feature_name( category )                                         \
+       __table ( struct feature, features, category )
 
 /** Construct a named feature */
-#define FEATURE_NAME( text ) \
-       _FEATURE_NAME ( OBJECT, text )
-#define _FEATURE_NAME( _name, text ) \
-       __FEATURE_NAME ( _name, text )
-#define __FEATURE_NAME( _name, text )                          \
-       char * __feature_ ## _name __feature_name = text;
+#define FEATURE_NAME( category, text )                                     \
+       _FEATURE_NAME ( category, OBJECT, text )
+#define _FEATURE_NAME( category, _name, text )                             \
+       __FEATURE_NAME ( category, _name, text )
+#define __FEATURE_NAME( category, _name, text )                                    \
+       struct feature __feature_ ## _name __feature_name ( category ) = {  \
+               .name = text,                                               \
+       };
 
 /** Declare a feature */
-#define FEATURE( text, feature_opt, version )                  \
-       FEATURE_NAME ( text );                                  \
-       DHCP_FEATURE ( feature_opt, version );
+#define FEATURE( category, text, feature_opt, version )                            \
+       FEATURE_NAME ( category, text );                                    \
+       DHCP_FEATURE ( category, feature_opt, version );
 
 #endif /* _GPXE_FEATURES_H */
index 2e2199b3fe637ae3b8ce80c0e57350b12763e387..e3f84e5ae0744f676d5e3a3ba62a78b3d1cba0f7 100644 (file)
@@ -40,7 +40,7 @@
  *
  */
 
-FEATURE ( "AoE", DHCP_EB_FEATURE_AOE, 1 );
+FEATURE ( FEATURE_PROTOCOL, "AoE", DHCP_EB_FEATURE_AOE, 1 );
 
 struct net_protocol aoe_protocol;
 
index 646638aba76cbc9612f1ef451b9737aad6d151e0..0e4d969f1e4eed9cd2c42aca54ae53536a7c147f 100644 (file)
@@ -11,6 +11,7 @@
 #include <gpxe/xfer.h>
 #include <gpxe/open.h>
 #include <gpxe/uri.h>
+#include <gpxe/features.h>
 #include <gpxe/ftp.h>
 
 /** @file
@@ -19,6 +20,8 @@
  *
  */
 
+FEATURE ( FEATURE_PROTOCOL, "FTP", DHCP_EB_FEATURE_FTP, 1 );
+
 /**
  * FTP states
  *
index 0aecc7b51dacbe6f881ffe20d021526247c286ce..2a5450eda94e60a4c21b34f5628ef7f0296c75f0 100644 (file)
@@ -43,7 +43,7 @@
 #include <gpxe/features.h>
 #include <gpxe/http.h>
 
-FEATURE ( "HTTP", DHCP_EB_FEATURE_HTTP, 1 );
+FEATURE ( FEATURE_PROTOCOL, "HTTP", DHCP_EB_FEATURE_HTTP, 1 );
 
 /** HTTP receive state */
 enum http_rx_state {
index a59e94dc12f43485c0bf08ed930e41c3102d7ad0..15ab32ef8d856fefa94d93e2c96d342a5871490f 100644 (file)
@@ -29,7 +29,7 @@
 #include <gpxe/http.h>
 #include <gpxe/features.h>
 
-FEATURE ( "HTTPS", DHCP_EB_FEATURE_HTTPS, 1 );
+FEATURE ( FEATURE_PROTOCOL, "HTTPS", DHCP_EB_FEATURE_HTTPS, 1 );
 
 /**
  * Initiate an HTTPS connection
index a96331a6657a1d489eb220fff735822d5759b74b..ccb6cffe0a3e804dcfdda7e18f498a179acfc030 100644 (file)
@@ -41,7 +41,7 @@
  *
  */
 
-FEATURE ( "iSCSI", DHCP_EB_FEATURE_ISCSI, 1 );
+FEATURE ( FEATURE_PROTOCOL, "iSCSI", DHCP_EB_FEATURE_ISCSI, 1 );
 
 /** iSCSI initiator name (explicitly specified) */
 static char *iscsi_explicit_initiator_iqn;
index b141eea422231360c5fa3ad0116a7fd3528e874d..f32b2e055a666f33a80a8b967ede92a52b09b978 100644 (file)
@@ -31,6 +31,7 @@
 #include <gpxe/retry.h>
 #include <gpxe/tcpip.h>
 #include <gpxe/dhcp.h>
+#include <gpxe/features.h>
 #include <gpxe/dns.h>
 
 /** @file
@@ -39,6 +40,8 @@
  *
  */
 
+FEATURE ( FEATURE_PROTOCOL, "DNS", DHCP_EB_FEATURE_DNS, 1 );
+
 /** The DNS server */
 static struct sockaddr_tcpip nameserver = {
        .st_port = htons ( DNS_PORT ),
index 106c70475a29d530b2cdf2cf8ea6a3c56c1c4d4b..ea4d1df304634b3d954576c5de929a6d1d20e7e5 100644 (file)
@@ -30,6 +30,7 @@
 #include <gpxe/uri.h>
 #include <gpxe/tcpip.h>
 #include <gpxe/retry.h>
+#include <gpxe/features.h>
 #include <gpxe/tftp.h>
 
 /** @file
@@ -38,6 +39,8 @@
  *
  */
 
+FEATURE ( FEATURE_PROTOCOL, "TFTP", DHCP_EB_FEATURE_TFTP, 1 );
+
 /**
  * A TFTP request
  *