/* ------------------------------------------------------------- */
-static int xenstore_scan(const char *type, int dom, struct XenDevOps *ops)
+int xenstore_scan(const char *type, int dom, struct XenDevOps *ops)
{
struct XenDevice *xendev;
char path[XEN_BUFSIZE], token[XEN_BUFSIZE];
/* xen backend driver bits */
int xen_be_init(void);
int xen_be_register(const char *type, struct XenDevOps *ops);
+int xenstore_scan(const char *type, int dom, struct XenDevOps *ops);
int xen_be_set_state(struct XenDevice *xendev, enum xenbus_state state);
int xen_be_bind_evtchn(struct XenDevice *xendev);
void xen_be_unbind_evtchn(struct XenDevice *xendev);
#include "sysemu.h"
#include "boards.h"
#include "xen_backend.h"
+#include "qemu-xen.h"
#ifndef CONFIG_STUBDOM
#include <hw/xen_blktap.h>
const char *direct_pci)
{
CPUState *env;
+ uint32_t domid_target;
#ifndef CONFIG_STUBDOM
/* Initialize tapdisk client */
xen_be_register("vkbd", &xen_kbdmouse_ops);
xen_be_register("vfb", &xen_framebuffer_ops);
xen_be_register("qdisk", &xen_blkdev_ops);
+ domid_target = xenstore_read_target();
+ if (domid_target)
+ xenstore_scan("qdisk", domid_target, &xen_blkdev_ops);
/* setup framebuffer */
xen_init_display(xen_domid);
/* xenstore.c */
void xenstore_init(void);
+uint32_t xenstore_read_target(void);
void xenstore_parse_domain_config(int domid);
int xenstore_parse_disable_pf_config(void);
int xenstore_fd(void);
return already_computed;
}
+uint32_t xenstore_read_target(void)
+{
+ char *domain_path = NULL, *target_path = NULL, *target_value = NULL, *p = NULL;
+ unsigned int len;
+ uint32_t target_domid = 0;
+
+ if (xsh == NULL)
+ return 0;
+
+ domain_path = xs_get_domain_path(xsh, domid);
+ if (domain_path == NULL) {
+ fprintf(logfile, "xs_get_domain_path() error. domid %d.\n", domid);
+ goto out;
+ }
+
+ if (pasprintf(&target_path, "%s/target", domain_path) == -1) {
+ fprintf(logfile, "xenstore_get_guest_uuid(): out of memory.\n");
+ goto out;
+ }
+ target_value = xs_read(xsh, XBT_NULL, target_path, &len);
+ if (target_value == NULL) {
+ fprintf(logfile, "xs_read(): target get error. %s.\n", target_path);
+ goto out;
+ }
+
+ fprintf(logfile, "target = %s\n", target_value);
+ target_domid = strtoul(target_value, NULL, 10);
+
+ out:
+ free(domain_path);
+ free(target_path);
+ free(target_value);
+
+ return target_domid;
+}
+
#define PT_PCI_MSITRANSLATE_DEFAULT 1
#define PT_PCI_POWER_MANAGEMENT_DEFAULT 0
int direct_pci_msitranslate;