int main( int argc, char *argv[] ) { unsigned short fp; for( fp = 0; fp < 0xFFF0; fp += 16 ) { u8 *cur = ((u8 far *)0xf0000000) + fp; if( memcmp( cur, "_SM_", 4 ) == 0 ) { printf( "SMBIOS %d.%d rev %d present at 0x%04X.\n", cur[6], cur[7], cur[10], fp ); printf( "Max structure size of 0x%04X bytes.\n", get_LSBF16( cur + 8 )); } } for( fp = 0; fp < 0xFFF0; fp += 16 ) { u8 *cur = ((u8 far *)0xf0000000) + fp; if(memcmp( cur, "_DMI_", 5 ) == 0 ) { u16 num = get_LSBF16( cur + 12 ); u16 len = get_LSBF16( cur + 6 ); u32 base = get_LSBF32( cur + 8 ); printf( "\nDMI %d.%d present at 0x%04X.\n", cur[14] >> 4, cur[14] & 0x0F, fp ); printf( "%d structures occupying %d bytes.\n", num, len ); printf( "DMI table at 0x%08lX.\n", base ); dmi_table( base, len, num ); } }
static int __init dmi_walk_early(void (*decode)(const struct dmi_header *, void *)) { u8 *buf; buf = dmi_ioremap(dmi_base, dmi_len); if (buf == NULL) return -1; dmi_table(buf, dmi_len, dmi_num, decode, NULL); add_device_randomness(buf, dmi_len); dmi_iounmap(buf, dmi_len); return 0; }