Skip to content

Commit

Permalink
Added definition of a UUID and uuid_ntoa() (for debugging), and
Browse files Browse the repository at this point in the history
implemented smbios_get_uuid().
  • Loading branch information
Michael Brown committed Nov 21, 2007
1 parent 68c4389 commit 899f5b8
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 19 deletions.
27 changes: 8 additions & 19 deletions src/arch/i386/firmware/pcbios/smbios.c
Expand Up @@ -21,6 +21,7 @@
#include <stdio.h>
#include <errno.h>
#include <gpxe/uaccess.h>
#include <gpxe/uuid.h>
#include <realmode.h>
#include <pnpbios.h>
#include <smbios.h>
Expand Down Expand Up @@ -301,34 +302,22 @@ int find_smbios_string ( struct smbios_strings *strings, unsigned int index,
}

/**
* Find SMBIOS serial number
* Get UUID from SMBIOS
*
* @v uuid UUID to fill in
* @ret rc Return status code
*/
int dump_smbios_info ( void ) {
int smbios_get_uuid ( union uuid *uuid ) {
struct smbios_system_information sysinfo;
struct smbios_strings strings;
char buf[64];
int rc;

if ( ( rc = find_smbios_structure ( SMBIOS_TYPE_SYSTEM_INFORMATION,
&sysinfo, sizeof ( sysinfo ),
&strings ) ) != 0 )
return rc;

DBG_HD ( &sysinfo, sizeof ( sysinfo ) );

if ( ( rc = find_smbios_string ( &strings, sysinfo.manufacturer,
buf, sizeof ( buf ) ) ) != 0 )
return rc;
DBG ( "Manufacturer: \"%s\"\n", buf );

if ( ( rc = find_smbios_string ( &strings, sysinfo.product,
buf, sizeof ( buf ) ) ) != 0 )
NULL ) ) != 0 )
return rc;
DBG ( "Product: \"%s\"\n", buf );

DBG ( "UUID:\n" );
DBG_HD ( &sysinfo.uuid, sizeof ( sysinfo.uuid ) );
memcpy ( uuid, sysinfo.uuid, sizeof ( *uuid ) );
DBG ( "SMBIOS found UUID %s\n", uuid_ntoa ( uuid ) );

return 0;
}
2 changes: 2 additions & 0 deletions src/arch/i386/include/smbios.h
Expand Up @@ -32,6 +32,8 @@ struct smbios_system_information {
uint8_t serial;
/** UUID */
uint8_t uuid[16];
/** Wake-up type */
uint8_t wakeup;
} __attribute__ (( packed ));

/** SMBIOS system information structure type */
Expand Down
48 changes: 48 additions & 0 deletions src/core/uuid.c
@@ -0,0 +1,48 @@
/*
* Copyright (C) 2007 Michael Brown <mbrown@fensystems.co.uk>.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#include <stdint.h>
#include <stdio.h>
#include <byteswap.h>
#include <gpxe/uuid.h>

/** @file
*
* Universally unique IDs
*
*/

/**
* Convert UUID to printable string
*
* @v uuid UUID
* @ret string UUID in canonical form
*/
char * uuid_ntoa ( union uuid *uuid ) {
static char buf[37]; /* "00000000-0000-0000-0000-000000000000" */

sprintf ( buf, "%08lx-%04x-%04x-%04x-%02x%02x%02x%02x%02x%02x",
le32_to_cpu ( uuid->canonical.a ),
le16_to_cpu ( uuid->canonical.b ),
le16_to_cpu ( uuid->canonical.c ),
be16_to_cpu ( uuid->canonical.d ),
uuid->canonical.e[0], uuid->canonical.e[1],
uuid->canonical.e[2], uuid->canonical.e[3],
uuid->canonical.e[4], uuid->canonical.e[5] );
return buf;
}
31 changes: 31 additions & 0 deletions src/include/gpxe/uuid.h
@@ -0,0 +1,31 @@
#ifndef _GPXE_UUID_H
#define _GPXE_UUID_H

/** @file
*
* Universally unique IDs
*/

#include <stdint.h>

/** A universally unique ID */
union uuid {
/** Canonical form (00000000-0000-0000-0000-000000000000) */
struct {
/** 8 hex digits, little-endian */
uint32_t a;
/** 2 hex digits, little-endian */
uint16_t b;
/** 2 hex digits, little-endian */
uint16_t c;
/** 2 hex digits, big-endian */
uint16_t d;
/** 12 hex digits, big-endian */
uint8_t e[6];
} canonical;
uint8_t raw[16];
};

extern char * uuid_ntoa ( union uuid *uuid );

#endif /* _GPXE_UUID_H */

0 comments on commit 899f5b8

Please sign in to comment.