static int cmd_vscreen_device_list(struct vmm_chardev *cdev, const char *guest_name) { struct vmm_guest *guest = NULL; struct vscreen_iter iter; guest = vmm_manager_guest_find(guest_name); if (!guest) { vmm_cprintf(cdev, "Failed to find guest %s\n", guest_name); return VMM_ENOTAVAIL; } vmm_cprintf(cdev, "Virtual Display List\n"); iter.found = FALSE; iter.print = TRUE; iter.cdev = cdev; iter.guest = guest; iter.vdis = NULL; iter.vkbd = NULL; iter.vmou = NULL; vmm_vdisplay_iterate(NULL, &iter, cmd_vscreen_vdisplay_iter); vmm_cprintf(cdev, "\n"); vmm_cprintf(cdev, "Virtual Keyboard List\n"); iter.found = FALSE; iter.print = TRUE; iter.cdev = cdev; iter.guest = guest; iter.vdis = NULL; iter.vkbd = NULL; iter.vmou = NULL; vmm_vkeyboard_iterate(NULL, &iter, cmd_vscreen_vkeyboard_iter); vmm_cprintf(cdev, "\n"); vmm_cprintf(cdev, "Virtual Mouse List\n"); iter.found = FALSE; iter.print = TRUE; iter.cdev = cdev; iter.guest = guest; iter.vdis = NULL; iter.vkbd = NULL; iter.vmou = NULL; vmm_vmouse_iterate(NULL, &iter, cmd_vscreen_vmouse_iter); vmm_cprintf(cdev, "\n"); return VMM_OK; }
static int cmd_vscreen_bind(struct vmm_chardev *cdev, bool is_hard, const char *guest_name, const char *refresh_rate, const char *fb_name, const char *vdisplay_name, const char *vkeyboard_name, const char *vmouse_name) { int rc; u32 rate, ekey[3]; struct fb_info *info; struct vmm_guest *guest = NULL; struct vmm_vdisplay *vdis = NULL; struct vmm_vkeyboard *vkbd = NULL; struct vmm_vmouse *vmou = NULL; struct vscreen_iter iter; guest = vmm_manager_guest_find(guest_name); if (!guest) { vmm_cprintf(cdev, "Failed to find guest %s\n", guest_name); return VMM_ENOTAVAIL; } if (refresh_rate) { rate = (u32)strtoul(refresh_rate, NULL, 10); } else { rate = VSCREEN_REFRESH_RATE_GOOD; } if ((rate < VSCREEN_REFRESH_RATE_MIN) || (VSCREEN_REFRESH_RATE_MAX < rate)) { vmm_cprintf(cdev, "Invalid refresh rate %d\n", rate); vmm_cprintf(cdev, "Refresh rate should be " "between %d and %d\n", VSCREEN_REFRESH_RATE_MIN, VSCREEN_REFRESH_RATE_MAX); return VMM_EINVALID; } if (fb_name) { info = fb_find(fb_name); } else { info = fb_find("fb0"); } if (!info) { vmm_cprintf(cdev, "Failed to find fb_info %s\n", fb_name); return VMM_ENOTAVAIL; } if (vdisplay_name) { vdis = vmm_vdisplay_find(vdisplay_name); } else { iter.found = FALSE; iter.print = FALSE; iter.cdev = cdev; iter.guest = guest; iter.vdis = NULL; iter.vkbd = NULL; iter.vmou = NULL; vmm_vdisplay_iterate(NULL, &iter, cmd_vscreen_vdisplay_iter); vdis = (iter.found) ? iter.vdis : NULL; } if (!vdis) { vmm_cprintf(cdev, "Failed to find virtual display%s %s\n", (vdisplay_name) ? "" : " for guest", (vdisplay_name) ? vdisplay_name : guest->name); return VMM_ENOTAVAIL; } if (vkeyboard_name) { vkbd = vmm_vkeyboard_find(vkeyboard_name); } else { iter.found = FALSE; iter.print = FALSE; iter.cdev = cdev; iter.guest = guest; iter.vdis = NULL; iter.vkbd = NULL; iter.vmou = NULL; vmm_vkeyboard_iterate(NULL, &iter, cmd_vscreen_vkeyboard_iter); vkbd = (iter.found) ? iter.vkbd : NULL; } if (!vkbd && vkeyboard_name) { vmm_cprintf(cdev, "Failed to find virtual keyboard %s\n", vkeyboard_name); return VMM_ENOTAVAIL; } if (vmouse_name) { vmou = vmm_vmouse_find(vmouse_name); } else { iter.found = FALSE; iter.print = FALSE; iter.cdev = cdev; iter.guest = guest; iter.vdis = NULL; iter.vkbd = NULL; iter.vmou = NULL; vmm_vmouse_iterate(NULL, &iter, cmd_vscreen_vmouse_iter); vmou = (iter.found) ? iter.vmou : NULL; } if (!vmou && vmouse_name) { vmm_cprintf(cdev, "Failed to find virtual mouse %s\n", vmouse_name); return VMM_ENOTAVAIL; } ekey[0] = KEY_ESC; ekey[1] = KEY_X; ekey[2] = KEY_Q; vmm_cprintf(cdev, "Guest name : %s\n", guest->name); if (!is_hard) { vmm_cprintf(cdev, "Refresh rate : %d per-second\n", rate); } vmm_cprintf(cdev, "Escape Keys : ESC+X+Q\n"); vmm_cprintf(cdev, "Frame buffer : %s\n", info->name); vmm_cprintf(cdev, "Virtual display : %s\n", vdis->name); vmm_cprintf(cdev, "Virtual keyboard: %s\n", (vkbd) ? vkbd->name : "---"); vmm_cprintf(cdev, "Virtual mouse : %s\n", (vmou) ? vmou->name : "---"); if (is_hard) { rc = vscreen_hard_bind(ekey[0], ekey[1], ekey[2], info, vdis, vkbd, vmou); } else { rc = vscreen_soft_bind(rate, ekey[0], ekey[1], ekey[2], info, vdis, vkbd, vmou); } return rc; }
static int cmd_vfs_exec(struct vmm_chardev *cdev, int argc, char **argv) { u32 off, len; physical_addr_t pa; struct vmm_guest *guest; if (argc < 2) { cmd_vfs_usage(cdev); return VMM_EFAIL; } if (strcmp(argv[1], "help") == 0) { cmd_vfs_usage(cdev); return VMM_OK; } else if ((strcmp(argv[1], "fslist") == 0) && (argc == 2)) { return cmd_vfs_fslist(cdev); } else if ((strcmp(argv[1], "mplist") == 0) && (argc == 2)) { return cmd_vfs_mplist(cdev); } else if ((strcmp(argv[1], "mount") == 0) && (argc == 4)) { return cmd_vfs_mount(cdev, argv[2], argv[3]); } else if ((strcmp(argv[1], "umount") == 0) && (argc == 3)) { return cmd_vfs_umount(cdev, argv[2]); } else if ((strcmp(argv[1], "ls") == 0) && (argc == 3)) { return cmd_vfs_ls(cdev, argv[2]); } else if ((strcmp(argv[1], "run") == 0) && (argc == 3)) { return cmd_vfs_run(cdev, argv[2]); #if CONFIG_CRYPTO_HASH_MD5 } else if ((strcmp(argv[1], "md5") == 0) && (argc == 3)) { return cmd_vfs_md5(cdev, argv[2]); #endif #if CONFIG_CRYPTO_HASH_SHA256 } else if ((strcmp(argv[1], "sha256") == 0) && (argc == 3)) { return cmd_vfs_sha256(cdev, argv[2]); #endif } else if ((strcmp(argv[1], "cat") == 0) && (argc == 3)) { return cmd_vfs_cat(cdev, argv[2]); } else if ((strcmp(argv[1], "mv") == 0) && (argc == 4)) { return cmd_vfs_mv(cdev, argv[2], argv[3]); } else if ((strcmp(argv[1], "rm") == 0) && (argc == 3)) { return cmd_vfs_rm(cdev, argv[2]); } else if ((strcmp(argv[1], "mkdir") == 0) && (argc == 3)) { return cmd_vfs_mkdir(cdev, argv[2]); } else if ((strcmp(argv[1], "rmdir") == 0) && (argc == 3)) { return cmd_vfs_rmdir(cdev, argv[2]); } else if ((strcmp(argv[1], "fdt_load") == 0) && (argc >= 5)) { return cmd_vfs_fdt_load(cdev, argv[2], argv[3], argv[4], argc-5, (argc-5) ? &argv[5] : NULL); } else if ((strcmp(argv[1], "host_load") == 0) && (argc > 3)) { pa = (physical_addr_t)strtoull(argv[2], NULL, 0); off = (argc > 4) ? strtoul(argv[4], NULL, 0) : 0; len = (argc > 5) ? strtoul(argv[5], NULL, 0) : 0xFFFFFFFF; return cmd_vfs_load(cdev, NULL, pa, argv[3], off, len); } else if ((strcmp(argv[1], "host_load_list") == 0) && (argc == 3)) { return cmd_vfs_load_list(cdev, NULL, argv[2]); } else if ((strcmp(argv[1], "guest_load") == 0) && (argc > 4)) { guest = vmm_manager_guest_find(argv[2]); if (!guest) { vmm_cprintf(cdev, "Failed to find guest %s\n", argv[2]); return VMM_ENOTAVAIL; } pa = (physical_addr_t)strtoull(argv[3], NULL, 0); off = (argc > 5) ? strtoul(argv[5], NULL, 0) : 0; len = (argc > 6) ? strtoul(argv[6], NULL, 0) : 0xFFFFFFFF; return cmd_vfs_load(cdev, guest, pa, argv[4], off, len); } else if ((strcmp(argv[1], "guest_load_list") == 0) && (argc == 4)) { guest = vmm_manager_guest_find(argv[2]); if (!guest) { vmm_cprintf(cdev, "Failed to find guest %s\n", argv[2]); return VMM_ENOTAVAIL; } return cmd_vfs_load_list(cdev, guest, argv[3]); } cmd_vfs_usage(cdev); return VMM_EFAIL; }