static int vmt_match(device_t parent, cfdata_t match, void *aux) { struct cpufeature_attach_args *cfaa = aux; struct cpu_info *ci = cfaa->ci; if (strcmp(cfaa->name, "vm") != 0) return 0; if ((ci->ci_flags & (CPUF_BSP|CPUF_SP|CPUF_PRIMARY)) == 0) return 0; return vmt_probe(NULL); }
static const char * vmt_type(void) { uint32_t vmwaretype = 0; vmt_probe(&vmwaretype); switch (vmwaretype) { case 1: return "Express"; case 2: return "ESX Server"; case 3: return "VMware Server"; case 4: return "Workstation"; default: return "Unknown"; } }
/* * Attach the mainbus. */ void mainbus_attach(struct device *parent, struct device *self, void *aux) { union mainbus_attach_args mba; extern void (*setperf_setup)(struct cpu_info *); extern void (*cpusensors_setup)(struct cpu_info *); printf("\n"); #if NBIOS > 0 { mba.mba_bios.ba_name = "bios"; mba.mba_bios.ba_iot = I386_BUS_SPACE_IO; mba.mba_bios.ba_memt = I386_BUS_SPACE_MEM; config_found(self, &mba.mba_bios, mainbus_print); } #endif #if NIPMI > 0 { memset(&mba.mba_iaa, 0, sizeof(mba.mba_iaa)); mba.mba_iaa.iaa_name = "ipmi"; mba.mba_iaa.iaa_iot = I386_BUS_SPACE_IO; mba.mba_iaa.iaa_memt = I386_BUS_SPACE_MEM; if (ipmi_probe(&mba.mba_iaa)) config_found(self, &mba.mba_iaa, mainbus_print); } #endif #if NVMT > 0 if (vmt_probe()) { mba.mba_busname = "vmware"; config_found(self, &mba.mba_busname, mainbus_print); } #endif #if NMPBIOS > 0 if (mpbios_probe(self)) mpbios_scan(self); #endif if ((cpu_info_primary.ci_flags & CPUF_PRESENT) == 0) { struct cpu_attach_args caa; memset(&caa, 0, sizeof(caa)); caa.caa_name = "cpu"; caa.cpu_number = 0; caa.cpu_role = CPU_ROLE_SP; caa.cpu_func = 0; caa.cpu_signature = cpu_id; caa.feature_flags = cpu_feature; config_found(self, &caa, mainbus_print); } #if NAMDMSR > 0 if (amdmsr_probe()) { mba.mba_busname = "amdmsr"; config_found(self, &mba.mba_busname, mainbus_print); } #endif #if NACPI > 0 if (!acpi_hasprocfvs) #endif { if (setperf_setup != NULL) setperf_setup(&cpu_info_primary); } #ifdef MULTIPROCESSOR mp_setperf_init(); #endif if (cpusensors_setup != NULL) cpusensors_setup(&cpu_info_primary); #if NVESABIOS > 0 if (vbeprobe()) { mba.mba_busname = "vesabios"; config_found(self, &mba.mba_busname, NULL); } #endif #if NESM > 0 { memset(&mba.mba_eaa, 0, sizeof(mba.mba_eaa)); mba.mba_eaa.eaa_name = "esm"; mba.mba_eaa.eaa_iot = I386_BUS_SPACE_IO; mba.mba_eaa.eaa_memt = I386_BUS_SPACE_MEM; if (esm_probe(&mba.mba_eaa)) config_found(self, &mba.mba_eaa, mainbus_print); } #endif /* * XXX Note also that the presence of a PCI bus should * XXX _always_ be checked, and if present the bus should be * XXX 'found'. However, because of the structure of the code, * XXX that's not currently possible. */ #if NPCI > 0 if (pci_mode_detect() != 0) { mba.mba_pba.pba_busname = "pci"; mba.mba_pba.pba_iot = I386_BUS_SPACE_IO; mba.mba_pba.pba_memt = I386_BUS_SPACE_MEM; mba.mba_pba.pba_dmat = &pci_bus_dma_tag; mba.mba_pba.pba_domain = pci_ndomains++; mba.mba_pba.pba_bus = 0; mba.mba_pba.pba_bridgetag = NULL; config_found(self, &mba.mba_pba, mainbus_print); } #endif if (!bcmp(ISA_HOLE_VADDR(EISA_ID_PADDR), EISA_ID, EISA_ID_LEN)) { mba.mba_eba.eba_busname = "eisa"; mba.mba_eba.eba_iot = I386_BUS_SPACE_IO; mba.mba_eba.eba_memt = I386_BUS_SPACE_MEM; #if NEISA > 0 mba.mba_eba.eba_dmat = &eisa_bus_dma_tag; #endif config_found(self, &mba.mba_eba, mainbus_print); } if (isa_has_been_seen == 0) { mba.mba_iba.iba_busname = "isa"; mba.mba_iba.iba_iot = I386_BUS_SPACE_IO; mba.mba_iba.iba_memt = I386_BUS_SPACE_MEM; #if NISADMA > 0 mba.mba_iba.iba_dmat = &isa_bus_dma_tag; #endif config_found(self, &mba.mba_iba, mainbus_print); } }