[Settings] Convert code in src/usr to use settings API.
authorMichael Brown <mcb30@etherboot.org>
Thu, 20 Mar 2008 23:42:11 +0000 (23:42 +0000)
committerMichael Brown <mcb30@etherboot.org>
Thu, 20 Mar 2008 23:42:11 +0000 (23:42 +0000)
src/core/settings.c
src/include/gpxe/settings.h
src/usr/aoeboot.c
src/usr/autoboot.c
src/usr/iscsiboot.c

index 458ba11..3f961bc 100644 (file)
@@ -156,16 +156,14 @@ static void reprioritise_settings ( struct settings *settings ) {
                return;
 
        /* Read priority, if present */
-       priority = 0;
-       fetch_int_setting ( settings, DHCP_EB_PRIORITY, &priority );
+       priority = fetch_intz_setting ( settings, DHCP_EB_PRIORITY );
 
        /* Remove from siblings list */
        list_del ( &settings->siblings );
 
        /* Reinsert after any existing blocks which have a higher priority */
        list_for_each_entry ( tmp, &parent->children, siblings ) {
-               tmp_priority = 0;
-               fetch_int_setting ( tmp, DHCP_EB_PRIORITY, &tmp_priority );
+               tmp_priority = fetch_intz_setting ( tmp, DHCP_EB_PRIORITY );
                if ( priority > tmp_priority )
                        break;
        }
@@ -441,6 +439,35 @@ int fetch_uint_setting ( struct settings *settings, unsigned int tag,
        return len;
 }
 
+/**
+ * Fetch value of signed integer setting, or zero
+ *
+ * @v settings         Settings block, or NULL to search all blocks
+ * @v tag              Setting tag number
+ * @ret value          Setting value, or zero
+ */
+long fetch_intz_setting ( struct settings *settings, unsigned int tag ) {
+       long value = 0;
+
+       fetch_int_setting ( settings, tag, &value );
+       return value;
+}
+
+/**
+ * Fetch value of unsigned integer setting, or zero
+ *
+ * @v settings         Settings block, or NULL to search all blocks
+ * @v tag              Setting tag number
+ * @ret value          Setting value, or zero
+ */
+unsigned long fetch_uintz_setting ( struct settings *settings,
+                                   unsigned int tag ) {
+       unsigned long value = 0;
+
+       fetch_uint_setting ( settings, tag, &value );
+       return value;
+}
+
 /******************************************************************************
  *
  * Named and typed setting routines
index 94ca9e0..b79ce50 100644 (file)
@@ -160,6 +160,9 @@ extern int fetch_int_setting ( struct settings *settings, unsigned int tag,
                               long *value );
 extern int fetch_uint_setting ( struct settings *settings, unsigned int tag,
                                unsigned long *value );
+extern long fetch_intz_setting ( struct settings *settings, unsigned int tag );
+extern unsigned long fetch_uintz_setting ( struct settings *settings,
+                                          unsigned int tag );
 extern struct settings * find_settings ( const char *name );
 extern int store_typed_setting ( struct settings *settings,
                                 unsigned int tag, struct setting_type *type,
index 82b63e7..6bf56a8 100644 (file)
@@ -6,6 +6,7 @@
 #include <gpxe/ata.h>
 #include <gpxe/netdevice.h>
 #include <gpxe/dhcp.h>
+#include <gpxe/settings.h>
 #include <gpxe/abft.h>
 #include <int13.h>
 #include <usr/aoeboot.h>
@@ -55,7 +56,7 @@ int aoeboot ( const char *root_path ) {
                container_of ( ata.backend, struct aoe_session, refcnt );
        abft_fill_data ( aoe );
 
-       drive.drive = find_global_dhcp_num_option ( DHCP_EB_BIOS_DRIVE );
+       drive.drive = fetch_uintz_setting ( NULL, DHCP_EB_BIOS_DRIVE );
        drive.blockdev = &ata.blockdev;
 
        register_int13_drive ( &drive );
index b84bd7b..bc86d05 100644 (file)
@@ -21,6 +21,7 @@
 #include <errno.h>
 #include <gpxe/netdevice.h>
 #include <gpxe/dhcp.h>
+#include <gpxe/settings.h>
 #include <gpxe/image.h>
 #include <gpxe/embedded.h>
 #include <usr/ifmgmt.h>
@@ -146,16 +147,14 @@ static int netboot ( struct net_device *netdev ) {
                return rc;
 
        /* Try to download and boot whatever we are given as a filename */
-       dhcp_snprintf ( buf, sizeof ( buf ),
-                       find_global_dhcp_option ( DHCP_BOOTFILE_NAME ) );
+       fetch_string_setting ( NULL, DHCP_BOOTFILE_NAME, buf, sizeof ( buf ) );
        if ( buf[0] ) {
                printf ( "Booting from filename \"%s\"\n", buf );
                return boot_filename ( buf );
        }
        
        /* No filename; try the root path */
-       dhcp_snprintf ( buf, sizeof ( buf ),
-                       find_global_dhcp_option ( DHCP_ROOT_PATH ) );
+       fetch_string_setting ( NULL, DHCP_ROOT_PATH, buf, sizeof ( buf ) );
        if ( buf[0] ) {
                printf ( "Booting from root path \"%s\"\n", buf );
                return boot_root_path ( buf );
index a7caeba..c3a477c 100644 (file)
@@ -3,6 +3,7 @@
 #include <stdio.h>
 #include <gpxe/iscsi.h>
 #include <gpxe/dhcp.h>
+#include <gpxe/settings.h>
 #include <gpxe/netdevice.h>
 #include <gpxe/ibft.h>
 #include <int13.h>
@@ -45,7 +46,7 @@ int iscsiboot ( const char *root_path ) {
                goto error_init;
        }
 
-       drive.drive = find_global_dhcp_num_option ( DHCP_EB_BIOS_DRIVE );
+       drive.drive = fetch_uintz_setting ( NULL, DHCP_EB_BIOS_DRIVE );
        drive.blockdev = &scsi.blockdev;
 
        /* FIXME: ugly, ugly hack */