static void cmd_host_info(struct vmm_chardev *cdev) { const char *attr; struct vmm_devtree_node *node; u32 total = vmm_host_ram_total_frame_count(); attr = NULL; node = vmm_devtree_getnode(VMM_DEVTREE_PATH_SEPARATOR_STRING); if (node) { vmm_devtree_read_string(node, VMM_DEVTREE_MODEL_ATTR_NAME, &attr); } if (attr) { vmm_cprintf(cdev, "%-20s: %s\n", "Host Name", attr); } else { vmm_cprintf(cdev, "%-20s: %s\n", "Host Name", CONFIG_BOARD); } vmm_cprintf(cdev, "%-20s: %u\n", "Boot CPU", vmm_smp_bootcpu_id()); vmm_cprintf(cdev, "%-20s: %u\n", "Total Online CPUs", vmm_num_online_cpus()); vmm_cprintf(cdev, "%-20s: %u MB\n", "Total VAPOOL", CONFIG_VAPOOL_SIZE_MB); vmm_cprintf(cdev, "%-20s: %u MB\n", "Total RAM", ((total *VMM_PAGE_SIZE) >> 20)); arch_board_print_info(cdev); }
static int cmd_host_cpu_info(struct vmm_chardev *cdev) { int rc; u32 c, khz; unsigned long hwid; char name[25]; vmm_cprintf(cdev, "%-25s: %s\n", "CPU Type", CONFIG_CPU); vmm_cprintf(cdev, "%-25s: %d\n", "CPU Present Count", vmm_num_present_cpus()); vmm_cprintf(cdev, "%-25s: %d\n", "CPU Possible Count", vmm_num_possible_cpus()); vmm_cprintf(cdev, "%-25s: %u\n", "CPU Online Count", vmm_num_online_cpus()); vmm_cprintf(cdev, "\n"); for_each_online_cpu(c) { rc = vmm_smp_map_hwid(c, &hwid); if (rc) return rc; vmm_sprintf(name, "CPU%d Hardware ID", c); vmm_cprintf(cdev, "%-25s: 0x%lx\n", name, hwid); vmm_sprintf(name, "CPU%d Estimated Speed", c); khz = vmm_delay_estimate_cpu_khz(c); vmm_cprintf(cdev, "%-25s: %d.%03d MHz\n", name, udiv32(khz, 1000), umod32(khz, 1000)); } vmm_cprintf(cdev, "\n"); arch_cpu_print_info(cdev); return VMM_OK; }
static void cmd_host_cpu_info(struct vmm_chardev *cdev) { u32 c, khz; char name[25]; vmm_cprintf(cdev, "%-25s: %s\n", "CPU Type", CONFIG_CPU); vmm_cprintf(cdev, "%-25s: %d\n", "CPU Present Count", vmm_num_present_cpus()); vmm_cprintf(cdev, "%-25s: %d\n", "CPU Possible Count", vmm_num_possible_cpus()); vmm_cprintf(cdev, "%-25s: %u\n", "CPU Online Count", vmm_num_online_cpus()); for_each_online_cpu(c) { khz = vmm_delay_estimate_cpu_khz(c); vmm_sprintf(name, "CPU%d Speed", c); vmm_cprintf(cdev, "%-25s: %d.%d MHz (Estimated)\n", name, udiv32(khz, 1000), umod32(khz, 1000)); } arch_cpu_print_info(cdev); }
static int cmd_host_info(struct vmm_chardev *cdev) { int rc; const char *attr; unsigned long hwid; struct vmm_devtree_node *node; u32 total = vmm_host_ram_total_frame_count(); attr = NULL; node = vmm_devtree_getnode(VMM_DEVTREE_PATH_SEPARATOR_STRING); if (node) { vmm_devtree_read_string(node, VMM_DEVTREE_MODEL_ATTR_NAME, &attr); vmm_devtree_dref_node(node); } if (attr) { vmm_cprintf(cdev, "%-25s: %s\n", "Host Name", attr); } else { vmm_cprintf(cdev, "%-25s: %s\n", "Host Name", CONFIG_BOARD); } rc = vmm_smp_map_hwid(vmm_smp_bootcpu_id(), &hwid); if (rc) return rc; vmm_cprintf(cdev, "%-25s: 0x%lx\n", "Boot CPU Hardware ID", hwid); vmm_cprintf(cdev, "%-25s: %u\n", "Total Online CPUs", vmm_num_online_cpus()); vmm_cprintf(cdev, "%-25s: %u MB\n", "Total VAPOOL", CONFIG_VAPOOL_SIZE_MB); vmm_cprintf(cdev, "%-25s: %lu MB\n", "Total RAM", ((total *VMM_PAGE_SIZE) >> 20)); arch_board_print_info(cdev); return VMM_OK; }
static void system_init_work(struct vmm_work *work) { #define BOOTCMD_WIDTH 256 int ret; char bcmd[BOOTCMD_WIDTH]; const char *str; u32 c, freed; struct vmm_chardev *cdev; #if defined(CONFIG_RTC) struct vmm_rtcdev *rdev; #endif struct vmm_devtree_node *node, *node1; /* Initialize command manager */ vmm_printf("Initialize Command Manager\n"); ret = vmm_cmdmgr_init(); if (ret) { vmm_panic("Error %d\n", ret); } /* Initialize device driver framework */ vmm_printf("Initialize Device Driver Framework\n"); ret = vmm_devdrv_init(); if (ret) { vmm_panic("Error %d\n", ret); } /* Initialize device emulation framework */ vmm_printf("Initialize Device Emulation Framework\n"); ret = vmm_devemu_init(); if (ret) { vmm_panic("Error %d\n", ret); } /* Initialize character device framework */ vmm_printf("Initialize Character Device Framework\n"); ret = vmm_chardev_init(); if (ret) { vmm_panic("Error %d\n", ret); } /* Initialize virtual serial port framework */ vmm_printf("Initialize Virtual Serial Port Framework\n"); ret = vmm_vserial_init(); if (ret) { vmm_panic("Error %d\n", ret); } #if defined(CONFIG_SMP) /* Poll for all present CPUs to become online */ /* Note: There is a timeout of 1 second */ /* Note: The modules might use SMP IPIs or might have per-cpu context * so, we do this before vmm_modules_init() in-order to make sure that * correct number of online CPUs are visible to all modules. */ ret = 1000; while(ret--) { int all_cpu_online = 1; for_each_present_cpu(c) { if (!vmm_cpu_online(c)) { all_cpu_online = 0; } } if (all_cpu_online) { break; } vmm_mdelay(1); } #endif /* Initialize hypervisor modules */ vmm_printf("Initialize Hypervisor Modules\n"); ret = vmm_modules_init(); if (ret) { vmm_panic("Error %d\n", ret); } /* Initialize cpu final */ vmm_printf("Initialize CPU Final\n"); ret = arch_cpu_final_init(); if (ret) { vmm_panic("Error %d\n", ret); } /* Intialize board final */ vmm_printf("Initialize Board Final\n"); ret = arch_board_final_init(); if (ret) { vmm_panic("Error %d\n", ret); } /* Print status of present host CPUs */ for_each_present_cpu(c) { if (vmm_cpu_online(c)) { vmm_printf("CPU%d: Online\n", c); } else { vmm_printf("CPU%d: Possible\n", c); } } vmm_printf("Brought Up %d CPUs\n", vmm_num_online_cpus()); /* Free init memory */ vmm_printf("Freeing init memory: "); freed = vmm_host_free_initmem(); vmm_printf("%dK\n", freed); /* Process attributes in chosen node */ node = vmm_devtree_getnode(VMM_DEVTREE_PATH_SEPARATOR_STRING VMM_DEVTREE_CHOSEN_NODE_NAME); if (node) { /* Find character device based on console attribute */ str = vmm_devtree_attrval(node, VMM_DEVTREE_CONSOLE_ATTR_NAME); if (!(cdev = vmm_chardev_find(str))) { if ((node1 = vmm_devtree_getnode(str))) { cdev = vmm_chardev_find(node1->name); } } /* Set chosen console device as stdio device */ if (cdev) { vmm_printf("Change stdio device to %s\n", cdev->name); vmm_stdio_change_device(cdev); } #if defined(CONFIG_RTC) /* Find rtc device based on rtcdev attribute */ str = vmm_devtree_attrval(node, VMM_DEVTREE_RTCDEV_ATTR_NAME); if (!(rdev = vmm_rtcdev_find(str))) { if ((node1 = vmm_devtree_getnode(str))) { rdev = vmm_rtcdev_find(node1->name); } } /* Syncup wallclock time with chosen rtc device */ if (rdev) { ret = vmm_rtcdev_sync_wallclock(rdev); vmm_printf("Syncup wallclock using %s", rdev->name); if (ret) { vmm_printf("(error %d)", ret); } vmm_printf("\n"); } #endif /* Execute boot commands */ str = vmm_devtree_attrval(node, VMM_DEVTREE_BOOTCMD_ATTR_NAME); if (str) { c = vmm_devtree_attrlen(node, VMM_DEVTREE_BOOTCMD_ATTR_NAME); while (c) { #if defined(CONFIG_VERBOSE_MODE) /* Print boot command */ vmm_printf("bootcmd: %s\n", str); #endif /* Execute boot command */ strlcpy(bcmd, str, sizeof(bcmd)); cdev = vmm_stdio_device(); vmm_cmdmgr_execute_cmdstr(cdev, bcmd, NULL); /* Next boot command */ c -= strlen(str) + 1; str += strlen(str) + 1; } } } }