]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[settings] Extend numerical setting tags to 64 bits
authorMichael Brown <mcb30@ipxe.org>
Tue, 16 May 2017 15:58:01 +0000 (16:58 +0100)
committerMichael Brown <mcb30@ipxe.org>
Mon, 22 May 2017 12:54:13 +0000 (13:54 +0100)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/core/memmap_settings.c
src/core/settings.c
src/include/ipxe/settings.h

index 1098bd756e1cb919d6963627c90a7360619dcd8c..c620a0343e7c1a0b5454dcd24a64d0c6fa5de91b 100644 (file)
@@ -142,28 +142,36 @@ static int memmap_settings_fetch ( struct settings *settings,
        struct memory_map memmap;
        struct memory_region *region;
        uint64_t result = 0;
-       unsigned int i;
+       unsigned int start;
        unsigned int count;
+       unsigned int scale;
+       int include_start;
+       int include_length;
+       int ignore_nonexistent;
+       unsigned int i;
 
-       DBGC ( settings, "MEMMAP start %ld count %ld %s%s%s%s scale %ld\n",
-              MEMMAP_START ( setting->tag ), MEMMAP_COUNT ( setting->tag ),
-              ( MEMMAP_INCLUDE_START ( setting->tag ) ? "start" : "" ),
-              ( ( MEMMAP_INCLUDE_START ( setting->tag ) &&
-                  MEMMAP_INCLUDE_LENGTH ( setting->tag ) ) ? "+" : "" ),
-              ( MEMMAP_INCLUDE_LENGTH ( setting->tag ) ? "length" : "" ),
-              ( MEMMAP_IGNORE_NONEXISTENT ( setting->tag ) ? " ignore" : "" ),
-              MEMMAP_SCALE ( setting->tag ) );
+       /* Parse settings tag */
+       start = MEMMAP_START ( setting->tag );
+       count = MEMMAP_COUNT ( setting->tag );
+       scale = MEMMAP_SCALE ( setting->tag );
+       include_start = MEMMAP_INCLUDE_START ( setting->tag );
+       include_length = MEMMAP_INCLUDE_LENGTH ( setting->tag );
+       ignore_nonexistent = MEMMAP_IGNORE_NONEXISTENT ( setting->tag );
+       DBGC ( settings, "MEMMAP start %d count %d %s%s%s%s scale %d\n",
+              start, count, ( include_start ? "start" : "" ),
+              ( ( include_start && include_length ) ? "+" : "" ),
+              ( include_length ? "length" : "" ),
+              ( ignore_nonexistent ? " ignore" : "" ), scale );
 
        /* Fetch memory map */
        get_memmap ( &memmap );
 
        /* Extract results from memory map */
-       count = MEMMAP_COUNT ( setting->tag );
-       for ( i = MEMMAP_START ( setting->tag ) ; count-- ; i++ ) {
+       for ( i = start ; count-- ; i++ ) {
 
                /* Check that region exists */
                if ( i >= memmap.count ) {
-                       if ( MEMMAP_IGNORE_NONEXISTENT ( setting->tag ) ) {
+                       if ( ignore_nonexistent ) {
                                continue;
                        } else {
                                DBGC ( settings, "MEMMAP region %d does not "
@@ -174,12 +182,12 @@ static int memmap_settings_fetch ( struct settings *settings,
 
                /* Extract results from this region */
                region = &memmap.regions[i];
-               if ( MEMMAP_INCLUDE_START ( setting->tag ) ) {
+               if ( include_start ) {
                        result += region->start;
                        DBGC ( settings, "MEMMAP %d start %08llx\n",
                               i, region->start );
                }
-               if ( MEMMAP_INCLUDE_LENGTH ( setting->tag ) ) {
+               if ( include_length ) {
                        result += ( region->end - region->start );
                        DBGC ( settings, "MEMMAP %d length %08llx\n",
                               i, ( region->end - region->start ) );
@@ -187,7 +195,7 @@ static int memmap_settings_fetch ( struct settings *settings,
        }
 
        /* Scale result */
-       result >>= MEMMAP_SCALE ( setting->tag );
+       result >>= scale;
 
        /* Return result */
        result = cpu_to_be64 ( result );
index 879057224e93cdd6eb78b0f88f1bc45cd9917160..3e5d416e7ba551c11ce636d564db5d24b271353d 100644 (file)
@@ -1478,9 +1478,9 @@ struct setting * find_setting ( const char *name ) {
  * @v name             Name
  * @ret tag            Tag number, or 0 if not a valid number
  */
-static unsigned long parse_setting_tag ( const char *name ) {
+static uint64_t parse_setting_tag ( const char *name ) {
        char *tmp = ( ( char * ) name );
-       unsigned long tag = 0;
+       uint64_t tag = 0;
 
        while ( 1 ) {
                tag = ( ( tag << 8 ) | strtoul ( tmp, &tmp, 0 ) );
index 36b4c2410db4824093076097218048835c523e6a..f463e6674dc34f0961eabf45081f0829638382dc 100644 (file)
@@ -40,7 +40,7 @@ struct setting {
         * (such as a DHCP option number, or an SMBIOS structure and
         * field number).
         */
-       unsigned long tag;
+       uint64_t tag;
        /** Setting scope (or NULL)
         *
         * For historic reasons, a NULL scope with a non-zero tag