diff options
author | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2006-05-24 14:24:57 +0100 |
---|---|---|
committer | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2006-05-24 14:24:57 +0100 |
commit | 1ac7d8afca7e4136796e8fccb495b83cfce9e2c8 (patch) | |
tree | add4283e9c486289b894403a76ef5f4c6e5304bd /tools/xenstore/xenstored_linux.c | |
parent | 04f28b0fc70ebd68a8db4b62ebaae492ae5aeca6 (diff) | |
download | xen-1ac7d8afca7e4136796e8fccb495b83cfce9e2c8.tar.gz xen-1ac7d8afca7e4136796e8fccb495b83cfce9e2c8.tar.bz2 xen-1ac7d8afca7e4136796e8fccb495b83cfce9e2c8.zip |
[XENSTORE] Make use of /proc/xen/xsd_{port,kva} private to the Linux implementation.
Signed-off-by: John Levon <john.levon@sun.com>
Diffstat (limited to 'tools/xenstore/xenstored_linux.c')
-rw-r--r-- | tools/xenstore/xenstored_linux.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/tools/xenstore/xenstored_linux.c b/tools/xenstore/xenstored_linux.c new file mode 100644 index 0000000000..dabc5ff1a4 --- /dev/null +++ b/tools/xenstore/xenstored_linux.c @@ -0,0 +1,69 @@ +/****************************************************************************** + * + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + * + * Copyright (C) 2005 Rusty Russell IBM Corporation + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#include <fcntl.h> +#include <unistd.h> +#include <stdlib.h> +#include <sys/mman.h> + +#include "xenstored_core.h" + +#define XENSTORED_PROC_KVA "/proc/xen/xsd_kva" +#define XENSTORED_PROC_PORT "/proc/xen/xsd_port" + +evtchn_port_t xenbus_evtchn(void) +{ + int fd; + int rc; + evtchn_port_t port; + char str[20]; + + fd = open(XENSTORED_PROC_PORT, O_RDONLY); + if (fd == -1) + return -1; + + rc = read(fd, str, sizeof(str)); + if (rc == -1) + { + int err = errno; + close(fd); + errno = err; + return -1; + } + + str[rc] = '\0'; + port = strtoul(str, NULL, 0); + + close(fd); + return port; +} + +void *xenbus_map(void) +{ + int fd; + void *addr; + + fd = open(XENSTORED_PROC_KVA, O_RDWR); + if (fd == -1) + return NULL; + + addr = mmap(NULL, getpagesize(), PROT_READ|PROT_WRITE, + MAP_SHARED, fd, 0); + + if (addr == MAP_FAILED) + addr = NULL; + + close(fd); + + return addr; +} |