static int cmd_vcpu_exec(vmm_chardev_t *cdev, int argc, char **argv) { int id = -1; int index = 0; if (argc > 3) { cmd_vcpu_usage(cdev); return VMM_EFAIL; } if (argc == 3) { id = vmm_str2int(argv[2], 10); } while (command[index].name) { if (vmm_strcmp(argv[1], command[index].name) == 0) { return command[index].function(cdev, id); } index++; } cmd_vcpu_usage(cdev); return VMM_EFAIL; }
int cmd_ram_exec(vmm_chardev_t *cdev, int argc, char **argv) { int colcnt; if (1 < argc) { if (vmm_strcmp(argv[1], "help") == 0) { cmd_ram_usage(cdev); return VMM_OK; } else if (vmm_strcmp(argv[1], "stats") == 0) { cmd_ram_stats(cdev); return VMM_OK; } else if (vmm_strcmp(argv[1], "bitmap") == 0) { if (2 < argc) { colcnt = vmm_str2int(argv[2], 10); } else { colcnt = 64; } cmd_ram_bitmap(cdev, colcnt); return VMM_OK; } } cmd_ram_usage(cdev); return VMM_EFAIL; }
int cmd_rtcdev_set_time(struct vmm_chardev *cdev, const char * name, int targc, char **targv) { int rc; char * s; struct vmm_rtc_time tm; struct vmm_rtcdev * rtc = vmm_rtcdev_find(name); if (!rtc) { vmm_cprintf(cdev, "Error: cannot find rtc %s\n", name); return VMM_EFAIL; } s = targv[0]; rc = 0; tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; while (*s) { if (*s == ':') { rc++; } else if ('0' <= *s && *s <= '9') { switch(rc) { case 0: tm.tm_hour = tm.tm_hour * 10 + (*s - '0'); break; case 1: tm.tm_min = tm.tm_min * 10 + (*s - '0'); break; case 2: tm.tm_sec = tm.tm_sec * 10 + (*s - '0'); break; default: break; }; } s++; } rc = 0; tm.tm_mday = vmm_str2int(targv[1], 10); vmm_str2lower(targv[2]); if (vmm_strcmp(targv[2], "jan") == 0) { tm.tm_mon = 0; } else if (vmm_strcmp(targv[2], "feb") == 0) { tm.tm_mon = 1; } else if (vmm_strcmp(targv[2], "mar") == 0) { tm.tm_mon = 2; } else if (vmm_strcmp(targv[2], "apr") == 0) { tm.tm_mon = 3; } else if (vmm_strcmp(targv[2], "may") == 0) { tm.tm_mon = 4; } else if (vmm_strcmp(targv[2], "jun") == 0) { tm.tm_mon = 5; } else if (vmm_strcmp(targv[2], "jul") == 0) { tm.tm_mon = 6; } else if (vmm_strcmp(targv[2], "aug") == 0) { tm.tm_mon = 7; } else if (vmm_strcmp(targv[2], "sep") == 0) { tm.tm_mon = 8; } else if (vmm_strcmp(targv[2], "oct") == 0) { tm.tm_mon = 9; } else if (vmm_strcmp(targv[2], "nov") == 0) { tm.tm_mon = 10; } else if (vmm_strcmp(targv[2], "dec") == 0) { tm.tm_mon = 11; } else { tm.tm_mon = vmm_str2int(targv[2], 10); } tm.tm_year = vmm_str2int(targv[3], 10) - 1900; if (!vmm_rtc_valid_tm(&tm)) { vmm_cprintf(cdev, "Error: invalid date-time\n"); return VMM_EFAIL; } rc = vmm_rtcdev_set_time(rtc, &tm); if (rc) { vmm_cprintf(cdev, "Error: set_time failed for rtc %s\n", name); return rc; } return VMM_OK; }