Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/smbios/smbios.c
Show First 20 Lines • Show All 45 Lines • ▼ Show 20 Lines | |||||
#include <vm/vm_param.h> | #include <vm/vm_param.h> | ||||
#include <vm/pmap.h> | #include <vm/pmap.h> | ||||
#include <machine/md_var.h> | #include <machine/md_var.h> | ||||
#if defined(__amd64__) || defined(__i386__) | #if defined(__amd64__) || defined(__i386__) | ||||
#include <machine/pc/bios.h> | #include <machine/pc/bios.h> | ||||
#endif | #endif | ||||
#include <dev/smbios/smbios.h> | #include <dev/smbios/smbios.h> | ||||
static struct smbios_softc *smbios; | |||||
/* | /* | ||||
* System Management BIOS Reference Specification, v2.4 Final | * System Management BIOS Reference Specification, v2.4 Final | ||||
* http://www.dmtf.org/standards/published_documents/DSP0134.pdf | * http://www.dmtf.org/standards/published_documents/DSP0134.pdf | ||||
*/ | */ | ||||
struct smbios_softc { | struct smbios_softc { | ||||
device_t dev; | device_t dev; | ||||
struct resource * res; | struct resource * res; | ||||
▲ Show 20 Lines • Show All 152 Lines • ▼ Show 20 Lines | device_printf(dev, "Version: %u.%u", | ||||
sc->eps->major_version, sc->eps->minor_version); | sc->eps->major_version, sc->eps->minor_version); | ||||
if (bcd2bin(sc->eps->BCD_revision)) | if (bcd2bin(sc->eps->BCD_revision)) | ||||
printf(", BCD Revision: %u.%u", | printf(", BCD Revision: %u.%u", | ||||
bcd2bin(sc->eps->BCD_revision >> 4), | bcd2bin(sc->eps->BCD_revision >> 4), | ||||
bcd2bin(sc->eps->BCD_revision & 0x0f)); | bcd2bin(sc->eps->BCD_revision & 0x0f)); | ||||
} | } | ||||
printf("\n"); | printf("\n"); | ||||
smbios = sc; | |||||
return (0); | return (0); | ||||
bad: | bad: | ||||
if (sc->res) | if (sc->res) | ||||
bus_release_resource(dev, SYS_RES_MEMORY, sc->rid, sc->res); | bus_release_resource(dev, SYS_RES_MEMORY, sc->rid, sc->res); | ||||
return (error); | return (error); | ||||
} | } | ||||
static int | static int | ||||
smbios_detach (device_t dev) | smbios_detach (device_t dev) | ||||
{ | { | ||||
struct smbios_softc *sc; | struct smbios_softc *sc; | ||||
smbios = NULL; | |||||
sc = device_get_softc(dev); | sc = device_get_softc(dev); | ||||
if (sc->res) | if (sc->res) | ||||
bus_release_resource(dev, SYS_RES_MEMORY, sc->rid, sc->res); | bus_release_resource(dev, SYS_RES_MEMORY, sc->rid, sc->res); | ||||
return (0); | return (0); | ||||
} | } | ||||
int | |||||
smbios_get_structure_table(vm_paddr_t *table, vm_size_t *size) | |||||
{ | |||||
if (smbios == NULL) | |||||
return (ENXIO); | |||||
if (smbios->eps_64bit) { | |||||
*table = smbios->eps3->structure_table_address; | |||||
*size = smbios->eps3->structure_table_max_size; | |||||
} else { | |||||
*table = smbios->eps->structure_table_address; | |||||
*size = smbios->eps->structure_table_length; | |||||
} | |||||
return (0); | |||||
} | |||||
static int | static int | ||||
smbios_modevent (mod, what, arg) | smbios_modevent (mod, what, arg) | ||||
module_t mod; | module_t mod; | ||||
int what; | int what; | ||||
void * arg; | void * arg; | ||||
{ | { | ||||
device_t * devs; | device_t * devs; | ||||
▲ Show 20 Lines • Show All 72 Lines • Show Last 20 Lines |