Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 24031
b: refs/heads/master
c: 3ed3bce
h: refs/heads/master
i:
  24029: ce688af
  24027: b33f42d
  24023: fdcf750
  24015: ac1c602
  23999: dceb140
v: v3
  • Loading branch information
Matt Domsch authored and Linus Torvalds committed Mar 26, 2006
1 parent 81a1b1a commit 5049efa
Show file tree
Hide file tree
Showing 7 changed files with 84 additions and 34 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 10dbe196a8da6b3196881269c6639c0ec11c36cb
refs/heads/master: 3ed3bce846abc7ef460104b461cac793e41afe5e
90 changes: 58 additions & 32 deletions trunk/arch/i386/kernel/dmi_scan.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include <linux/init.h>
#include <linux/module.h>
#include <linux/dmi.h>
#include <linux/efi.h>
#include <linux/bootmem.h>
#include <linux/slab.h>
#include <asm/dmi.h>
Expand Down Expand Up @@ -185,47 +186,72 @@ static void __init dmi_decode(struct dmi_header *dm)
}
}

void __init dmi_scan_machine(void)
static int __init dmi_present(char __iomem *p)
{
u8 buf[15];
char __iomem *p, *q;
memcpy_fromio(buf, p, 15);
if ((memcmp(buf, "_DMI_", 5) == 0) && dmi_checksum(buf)) {
u16 num = (buf[13] << 8) | buf[12];
u16 len = (buf[7] << 8) | buf[6];
u32 base = (buf[11] << 24) | (buf[10] << 16) |
(buf[9] << 8) | buf[8];

/*
* no iounmap() for that ioremap(); it would be a no-op, but it's
* so early in setup that sucker gets confused into doing what
* it shouldn't if we actually call it.
*/
p = ioremap(0xF0000, 0x10000);
if (p == NULL)
goto out;

for (q = p; q < p + 0x10000; q += 16) {
memcpy_fromio(buf, q, 15);
if ((memcmp(buf, "_DMI_", 5) == 0) && dmi_checksum(buf)) {
u16 num = (buf[13] << 8) | buf[12];
u16 len = (buf[7] << 8) | buf[6];
u32 base = (buf[11] << 24) | (buf[10] << 16) |
(buf[9] << 8) | buf[8];

/*
* DMI version 0.0 means that the real version is taken from
* the SMBIOS version, which we don't know at this point.
*/
if (buf[14] != 0)
printk(KERN_INFO "DMI %d.%d present.\n",
buf[14] >> 4, buf[14] & 0xF);
else
printk(KERN_INFO "DMI present.\n");
/*
* DMI version 0.0 means that the real version is taken from
* the SMBIOS version, which we don't know at this point.
*/
if (buf[14] != 0)
printk(KERN_INFO "DMI %d.%d present.\n",
buf[14] >> 4, buf[14] & 0xF);
else
printk(KERN_INFO "DMI present.\n");
if (dmi_table(base,len, num, dmi_decode) == 0)
return 0;
}
return 1;
}

if (dmi_table(base,len, num, dmi_decode) == 0)
void __init dmi_scan_machine(void)
{
char __iomem *p, *q;
int rc;

if (efi_enabled) {
if (!efi.smbios)
goto out;

/* This is called as a core_initcall() because it isn't
* needed during early boot. This also means we can
* iounmap the space when we're done with it.
*/
p = dmi_ioremap((unsigned long)efi.smbios, 0x10000);
if (p == NULL)
goto out;

rc = dmi_present(p + 0x10); /* offset of _DMI_ string */
iounmap(p);
if (!rc)
return;
}
else {
/*
* no iounmap() for that ioremap(); it would be a no-op, but
* it's so early in setup that sucker gets confused into doing
* what it shouldn't if we actually call it.
*/
p = dmi_ioremap(0xF0000, 0x10000);
if (p == NULL)
goto out;

for (q = p; q < p + 0x10000; q += 16) {
rc = dmi_present(q);
if (!rc)
return;
}
}

out: printk(KERN_INFO "DMI not present or invalid.\n");
out: printk(KERN_INFO "DMI not present or invalid.\n");
}


/**
* dmi_check_system - check system DMI data
* @list: array of dmi_system_id structures to match against
Expand Down
4 changes: 4 additions & 0 deletions trunk/arch/ia64/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ config TIME_INTERPOLATION
bool
default y

config DMI
bool
default y

config EFI
bool
default y
Expand Down
3 changes: 2 additions & 1 deletion trunk/arch/ia64/kernel/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ extra-y := head.o init_task.o vmlinux.lds
obj-y := acpi.o entry.o efi.o efi_stub.o gate-data.o fsys.o ia64_ksyms.o irq.o irq_ia64.o \
irq_lsapic.o ivt.o machvec.o pal.o patch.o process.o perfmon.o ptrace.o sal.o \
salinfo.o semaphore.o setup.o signal.o sys_ia64.o time.o traps.o unaligned.o \
unwind.o mca.o mca_asm.o topology.o
unwind.o mca.o mca_asm.o topology.o dmi_scan.o

obj-$(CONFIG_IA64_BRL_EMU) += brl_emu.o
obj-$(CONFIG_IA64_GENERIC) += acpi-ext.o
Expand All @@ -30,6 +30,7 @@ obj-$(CONFIG_IA64_MCA_RECOVERY) += mca_recovery.o
obj-$(CONFIG_KPROBES) += kprobes.o jprobes.o
obj-$(CONFIG_IA64_UNCACHED_ALLOCATOR) += uncached.o
mca_recovery-y += mca_drv.o mca_drv_asm.o
dmi_scan-y += ../../i386/kernel/dmi_scan.o

# The gate DSO image is built using a special linker script.
targets += gate.so gate-syms.o
Expand Down
8 changes: 8 additions & 0 deletions trunk/arch/ia64/kernel/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#include <linux/string.h>
#include <linux/threads.h>
#include <linux/tty.h>
#include <linux/dmi.h>
#include <linux/serial.h>
#include <linux/serial_core.h>
#include <linux/efi.h>
Expand Down Expand Up @@ -887,3 +888,10 @@ check_bugs (void)
ia64_patch_mckinley_e9((unsigned long) __start___mckinley_e9_bundles,
(unsigned long) __end___mckinley_e9_bundles);
}

static int __init run_dmi_scan(void)
{
dmi_scan_machine();
return 0;
}
core_initcall(run_dmi_scan);
6 changes: 6 additions & 0 deletions trunk/include/asm-ia64/dmi.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#ifndef _ASM_DMI_H
#define _ASM_DMI_H 1

#include <asm/io.h>

#endif
5 changes: 5 additions & 0 deletions trunk/include/asm-ia64/io.h
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,11 @@ iounmap (volatile void __iomem *addr)

#define ioremap_nocache(o,s) ioremap(o,s)

/* Use normal IO mappings for DMI */
#define dmi_ioremap ioremap
#define dmi_iounmap(x,l) iounmap(x)
#define dmi_alloc(l) kmalloc(l, GFP_ATOMIC)

# ifdef __KERNEL__

/*
Expand Down

0 comments on commit 5049efa

Please sign in to comment.