|
|
1.1 root 1: /*
2: * Copyright (C) 2008 Michael Brown <[email protected]>.
3: *
4: * This program is free software; you can redistribute it and/or
5: * modify it under the terms of the GNU General Public License as
6: * published by the Free Software Foundation; either version 2 of the
7: * License, or any later version.
8: *
9: * This program is distributed in the hope that it will be useful, but
10: * WITHOUT ANY WARRANTY; without even the implied warranty of
11: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12: * General Public License for more details.
13: *
14: * You should have received a copy of the GNU General Public License
15: * along with this program; if not, write to the Free Software
16: * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17: */
18:
19: FILE_LICENCE ( GPL2_OR_LATER );
20:
21: #include <errno.h>
22: #include <ipxe/smbios.h>
23: #include <ipxe/efi/efi.h>
24: #include <ipxe/efi/Guid/SmBios.h>
25:
26: /** @file
27: *
28: * iPXE SMBIOS API for EFI
29: *
30: */
31:
32: /** SMBIOS configuration table */
33: static struct smbios_entry *smbios_entry;
34: EFI_USE_TABLE ( SMBIOS_TABLE, &smbios_entry, 0 );
35:
36: /**
37: * Find SMBIOS
38: *
39: * @v smbios SMBIOS entry point descriptor structure to fill in
40: * @ret rc Return status code
41: */
42: static int efi_find_smbios ( struct smbios *smbios ) {
43:
44: if ( ! smbios_entry ) {
45: DBG ( "No SMBIOS table provided\n" );
46: return -ENODEV;
47: }
48:
49: if ( smbios_entry->signature != SMBIOS_SIGNATURE ) {
50: DBG ( "Invalid SMBIOS signature\n" );
51: return -ENODEV;
52: }
53:
54: smbios->address = phys_to_user ( smbios_entry->smbios_address );
55: smbios->len = smbios_entry->smbios_len;
56: smbios->count = smbios_entry->smbios_count;
57: DBG ( "Found SMBIOS v%d.%d entry point at %p (%x+%zx)\n",
58: smbios_entry->major, smbios_entry->minor, smbios_entry,
59: smbios_entry->smbios_address, smbios->len );
60:
61: return 0;
62: }
63:
64: PROVIDE_SMBIOS ( efi, find_smbios, efi_find_smbios );
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.