mirror of
https://github.com/xcat2/xNBA.git
synced 2025-01-05 19:15:05 +00:00
Added definition of a UUID and uuid_ntoa() (for debugging), and
implemented smbios_get_uuid().
This commit is contained in:
parent
68c438954d
commit
899f5b8ab2
@ -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>
|
||||
@ -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 )
|
||||
NULL ) ) != 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 )
|
||||
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;
|
||||
}
|
||||
|
@ -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 */
|
||||
|
48
src/core/uuid.c
Normal file
48
src/core/uuid.c
Normal file
@ -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
src/include/gpxe/uuid.h
Normal file
31
src/include/gpxe/uuid.h
Normal file
@ -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 */
|
Loading…
Reference in New Issue
Block a user