Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F133333602
D28738.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
8 KB
Referenced Files
None
Subscribers
None
D28738.diff
View Options
diff --git a/sys/amd64/conf/GENERIC b/sys/amd64/conf/GENERIC
--- a/sys/amd64/conf/GENERIC
+++ b/sys/amd64/conf/GENERIC
@@ -129,6 +129,7 @@
# Bus support.
device acpi
+device smbios
options IOMMU
device pci
options PCI_HP # PCI-Express native HotPlug
diff --git a/sys/amd64/conf/MINIMAL b/sys/amd64/conf/MINIMAL
--- a/sys/amd64/conf/MINIMAL
+++ b/sys/amd64/conf/MINIMAL
@@ -103,6 +103,7 @@
# Bus support.
device acpi
+device smbios
options IOMMU
device pci
diff --git a/sys/amd64/include/pc/bios.h b/sys/amd64/include/pc/bios.h
--- a/sys/amd64/include/pc/bios.h
+++ b/sys/amd64/include/pc/bios.h
@@ -64,38 +64,6 @@
u_int32_t xattr;
} __packed;
-/*
- * System Management BIOS
- */
-#define SMBIOS_START 0xf0000
-#define SMBIOS_STEP 0x10
-#define SMBIOS_OFF 0
-#define SMBIOS_LEN 4
-#define SMBIOS_SIG "_SM_"
-
-struct smbios_eps {
- uint8_t anchor_string[4]; /* '_SM_' */
- uint8_t checksum;
- uint8_t length;
- uint8_t major_version;
- uint8_t minor_version;
- uint16_t maximum_structure_size;
- uint8_t entry_point_revision;
- uint8_t formatted_area[5];
- uint8_t intermediate_anchor_string[5]; /* '_DMI_' */
- uint8_t intermediate_checksum;
- uint16_t structure_table_length;
- uint32_t structure_table_address;
- uint16_t number_structures;
- uint8_t BCD_revision;
-};
-
-struct smbios_structure_header {
- uint8_t type;
- uint8_t length;
- uint16_t handle;
-};
-
#ifdef _KERNEL
#define BIOS_PADDRTOVADDR(x) ((x) + KERNBASE)
#define BIOS_VADDRTOPADDR(x) ((x) - KERNBASE)
diff --git a/sys/conf/files b/sys/conf/files
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -3096,6 +3096,7 @@
dev/siis/siis.c optional siis pci
dev/sis/if_sis.c optional sis pci
dev/sk/if_sk.c optional sk pci
+dev/smbios/smbios.c optional smbios
dev/smbus/smb.c optional smb
dev/smbus/smbconf.c optional smbus
dev/smbus/smbus.c optional smbus
diff --git a/sys/conf/files.x86 b/sys/conf/files.x86
--- a/sys/conf/files.x86
+++ b/sys/conf/files.x86
@@ -293,7 +293,6 @@
x86/acpica/acpi_apm.c optional acpi
x86/acpica/acpi_wakeup.c optional acpi
x86/acpica/srat.c optional acpi
-x86/bios/smbios.c optional smbios
x86/bios/vpd.c optional vpd
x86/cpufreq/est.c optional cpufreq
x86/cpufreq/hwpstate_amd.c optional cpufreq
diff --git a/sys/dev/ipmi/ipmi_smbios.c b/sys/dev/ipmi/ipmi_smbios.c
--- a/sys/dev/ipmi/ipmi_smbios.c
+++ b/sys/dev/ipmi/ipmi_smbios.c
@@ -39,7 +39,10 @@
#include <vm/vm.h>
#include <vm/pmap.h>
+#if defined(__amd64__) || defined(__i386__)
#include <machine/pc/bios.h>
+#endif
+#include <dev/smbios/smbios.h>
#ifdef LOCAL_MODULE
#include <ipmi.h>
diff --git a/sys/amd64/include/pc/bios.h b/sys/dev/smbios/smbios.h
copy from sys/amd64/include/pc/bios.h
copy to sys/dev/smbios/smbios.h
--- a/sys/amd64/include/pc/bios.h
+++ b/sys/dev/smbios/smbios.h
@@ -29,40 +29,8 @@
* $FreeBSD$
*/
-#ifndef _MACHINE_PC_BIOS_H_
-#define _MACHINE_PC_BIOS_H_
-
-/*
- * Int 15:E820 'SMAP' structure
- */
-#define SMAP_SIG 0x534D4150 /* 'SMAP' */
-
-#define SMAP_TYPE_MEMORY 1
-#define SMAP_TYPE_RESERVED 2
-#define SMAP_TYPE_ACPI_RECLAIM 3
-#define SMAP_TYPE_ACPI_NVS 4
-#define SMAP_TYPE_ACPI_ERROR 5
-#define SMAP_TYPE_DISABLED 6
-#define SMAP_TYPE_PMEM 7
-#define SMAP_TYPE_PRAM 12
-
-#define SMAP_XATTR_ENABLED 0x00000001
-#define SMAP_XATTR_NON_VOLATILE 0x00000002
-#define SMAP_XATTR_MASK (SMAP_XATTR_ENABLED | SMAP_XATTR_NON_VOLATILE)
-
-struct bios_smap {
- u_int64_t base;
- u_int64_t length;
- u_int32_t type;
-} __packed;
-
-/* Structure extended to include extended attribute field in ACPI 3.0. */
-struct bios_smap_xattr {
- u_int64_t base;
- u_int64_t length;
- u_int32_t type;
- u_int32_t xattr;
-} __packed;
+#ifndef _SMBIOS_H_
+#define _SMBIOS_H_
/*
* System Management BIOS
@@ -96,31 +64,4 @@
uint16_t handle;
};
-#ifdef _KERNEL
-#define BIOS_PADDRTOVADDR(x) ((x) + KERNBASE)
-#define BIOS_VADDRTOPADDR(x) ((x) - KERNBASE)
-
-struct bios_oem_signature {
- char * anchor; /* search anchor string in BIOS memory */
- size_t offset; /* offset from anchor (may be negative) */
- size_t totlen; /* total length of BIOS string to copy */
-} __packed;
-
-struct bios_oem_range {
- u_int from; /* shouldn't be below 0xe0000 */
- u_int to; /* shouldn't be above 0xfffff */
-} __packed;
-
-struct bios_oem {
- struct bios_oem_range range;
- struct bios_oem_signature signature[];
-} __packed;
-
-int bios_oem_strings(struct bios_oem *oem, u_char *buffer, size_t maxlen);
-uint32_t bios_sigsearch(uint32_t start, u_char *sig, int siglen, int paralen,
- int sigofs);
-void bios_add_smap_entries(struct bios_smap *smapbase, u_int32_t smapsize,
- vm_paddr_t *physmap, int *physmap_idx);
-#endif
-
-#endif /* _MACHINE_PC_BIOS_H_ */
+#endif /* _SMBIOS_H_ */
diff --git a/sys/x86/bios/smbios.c b/sys/dev/smbios/smbios.c
rename from sys/x86/bios/smbios.c
rename to sys/dev/smbios/smbios.c
--- a/sys/x86/bios/smbios.c
+++ b/sys/dev/smbios/smbios.c
@@ -46,7 +46,10 @@
#include <vm/vm_param.h>
#include <vm/pmap.h>
#include <machine/md_var.h>
+#if defined(__amd64__) || defined(__i386__)
#include <machine/pc/bios.h>
+#endif
+#include <dev/smbios/smbios.h>
/*
* System Management BIOS Reference Specification, v2.4 Final
@@ -62,7 +65,6 @@
};
#define RES2EPS(res) ((struct smbios_eps *)rman_get_virtual(res))
-#define ADDR2EPS(addr) ((struct smbios_eps *)BIOS_PADDRTOVADDR(addr))
static devclass_t smbios_devclass;
@@ -77,25 +79,32 @@
static void
smbios_identify (driver_t *driver, device_t parent)
{
+ struct smbios_eps *eps;
device_t child;
- u_int32_t addr;
+ vm_paddr_t addr;
int length;
int rid;
if (!device_is_alive(parent))
return;
+#if defined(__amd64__) || defined(__i386__)
addr = bios_sigsearch(SMBIOS_START, SMBIOS_SIG, SMBIOS_LEN,
- SMBIOS_STEP, SMBIOS_OFF);
+ SMBIOS_STEP, SMBIOS_OFF);
+#else
+ addr = 0;
+#endif
+
if (addr != 0) {
+ eps = pmap_mapbios(addr, 0x1f);
rid = 0;
- length = ADDR2EPS(addr)->length;
+ length = eps->length;
if (length != 0x1f) {
u_int8_t major, minor;
- major = ADDR2EPS(addr)->major_version;
- minor = ADDR2EPS(addr)->minor_version;
+ major = eps->major_version;
+ minor = eps->minor_version;
/* SMBIOS v2.1 implementation might use 0x1e. */
if (length == 0x1e && major == 2 && minor == 1)
@@ -108,6 +117,7 @@
device_set_driver(child, driver);
bus_set_resource(child, SYS_RES_MEMORY, rid, addr, length);
device_set_desc(child, "System Management BIOS");
+ pmap_unmapbios((vm_offset_t)eps, 0x1f);
}
return;
diff --git a/sys/i386/conf/GENERIC b/sys/i386/conf/GENERIC
--- a/sys/i386/conf/GENERIC
+++ b/sys/i386/conf/GENERIC
@@ -115,6 +115,7 @@
# Bus support.
device acpi
+device smbios
device pci
options PCI_HP # PCI-Express native HotPlug
options PCI_IOV # PCI SR-IOV support
diff --git a/sys/i386/conf/MINIMAL b/sys/i386/conf/MINIMAL
--- a/sys/i386/conf/MINIMAL
+++ b/sys/i386/conf/MINIMAL
@@ -104,6 +104,7 @@
# Bus support.
device acpi
+device smbios
device pci
# atkbdc0 controls both the keyboard and the PS/2 mouse
diff --git a/sys/i386/include/pc/bios.h b/sys/i386/include/pc/bios.h
--- a/sys/i386/include/pc/bios.h
+++ b/sys/i386/include/pc/bios.h
@@ -234,38 +234,6 @@
u_int32_t xattr;
} __packed;
-/*
- * System Management BIOS
- */
-#define SMBIOS_START 0xf0000
-#define SMBIOS_STEP 0x10
-#define SMBIOS_OFF 0
-#define SMBIOS_LEN 4
-#define SMBIOS_SIG "_SM_"
-
-struct smbios_eps {
- uint8_t anchor_string[4]; /* '_SM_' */
- uint8_t checksum;
- uint8_t length;
- uint8_t major_version;
- uint8_t minor_version;
- uint16_t maximum_structure_size;
- uint8_t entry_point_revision;
- uint8_t formatted_area[5];
- uint8_t intermediate_anchor_string[5]; /* '_DMI_' */
- uint8_t intermediate_checksum;
- uint16_t structure_table_length;
- uint32_t structure_table_address;
- uint16_t number_structures;
- uint8_t BCD_revision;
-};
-
-struct smbios_structure_header {
- uint8_t type;
- uint8_t length;
- uint16_t handle;
-};
-
#ifdef _KERNEL
#define BIOS_PADDRTOVADDR(x) ((x) + PMAP_MAP_LOW)
#define BIOS_VADDRTOPADDR(x) ((x) - PMAP_MAP_LOW)
diff --git a/sys/modules/bios/smbios/Makefile b/sys/modules/bios/smbios/Makefile
--- a/sys/modules/bios/smbios/Makefile
+++ b/sys/modules/bios/smbios/Makefile
@@ -1,7 +1,7 @@
# $FreeBSD$
#
-.PATH: ${SRCTOP}/sys/x86/bios
+.PATH: ${SRCTOP}/sys/dev/smbios
KMOD= smbios
SRCS= smbios.c \
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Oct 26, 12:19 AM (16 h, 47 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
24169821
Default Alt Text
D28738.diff (8 KB)
Attached To
Mode
D28738: smbios: Move smbios driver out from x86 machdep code
Attached
Detach File
Event Timeline
Log In to Comment