aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxc/ia64/xc_ia64_stubs.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/libxc/ia64/xc_ia64_stubs.c')
-rw-r--r--tools/libxc/ia64/xc_ia64_stubs.c282
1 files changed, 0 insertions, 282 deletions
diff --git a/tools/libxc/ia64/xc_ia64_stubs.c b/tools/libxc/ia64/xc_ia64_stubs.c
deleted file mode 100644
index 9691acb03e..0000000000
--- a/tools/libxc/ia64/xc_ia64_stubs.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "xg_private.h"
-#include "xc_efi.h"
-#include "xc_ia64.h"
-
-/* this is a very ugly way of getting FPSR_DEFAULT. struct ia64_fpreg is
- * mysteriously declared in two places: /usr/include/asm/fpu.h and
- * /usr/include/bits/sigcontext.h. The former also defines FPSR_DEFAULT,
- * the latter doesn't but is included (indirectly) by xg_private.h */
-#define __ASSEMBLY__
-#include <asm/fpu.h>
-#undef __IA64_UL
-#define __IA64_UL(x) ((unsigned long)(x))
-#undef __ASSEMBLY__
-
-unsigned long
-xc_ia64_fpsr_default(void)
-{
- return FPSR_DEFAULT;
-}
-
-
-/* It is possible to get memmap_info and memmap by
- foreign domain page mapping. But it's racy. Use hypercall to avoid race. */
-static int
-xc_ia64_get_memmap(xc_interface *xch,
- uint32_t domid, char *buf, unsigned long bufsize)
-{
- privcmd_hypercall_t hypercall;
- DECLARE_HYPERCALL_BOUNCE(buf, bufsize, XC_HYPERCALL_BUFFER_BOUNCE_OUT);
- int ret;
-
- if ( xc_hypercall_bounce_pre(xch, pfn_buf) )
- {
- PERROR("xc_get_pfn_list: pfn_buf bounce failed");
- return -1;
- }
-
- hypercall.op = __HYPERVISOR_ia64_dom0vp_op;
- hypercall.arg[0] = IA64_DOM0VP_get_memmap;
- hypercall.arg[1] = domid;
- hypercall.arg[2] = HYPERCALL_BUFFER_AS_ARG(buf);
- hypercall.arg[3] = bufsize;
- hypercall.arg[4] = 0;
-
- ret = do_xen_hypercall(xch, &hypercall);
- xc_hypercall_bounce_post(xc, buf);
- return ret;
-}
-
-int
-xc_ia64_copy_memmap(xc_interface *xch, uint32_t domid, shared_info_t *live_shinfo,
- xen_ia64_memmap_info_t **memmap_info_p,
- unsigned long *memmap_info_num_pages_p)
-{
- unsigned long gpfn_max_prev;
- unsigned long gpfn_max_post;
-
- unsigned long num_pages;
- unsigned long num_pages_post;
- unsigned long memmap_size;
- xen_ia64_memmap_info_t *memmap_info;
-
- int ret;
-
- gpfn_max_prev = xc_domain_maximum_gpfn(xch, domid);
- if (gpfn_max_prev < 0)
- return -1;
-
- again:
- num_pages = live_shinfo->arch.memmap_info_num_pages;
- if (num_pages == 0) {
- ERROR("num_pages 0x%x", num_pages);
- return -1;
- }
-
- memmap_size = num_pages << PAGE_SHIFT;
- memmap_info = malloc(memmap_size);
- if (memmap_info == NULL)
- return -1;
- ret = xc_ia64_get_memmap(xch,
- domid, (char*)memmap_info, memmap_size);
- if (ret != 0) {
- free(memmap_info);
- return -1;
- }
- xen_rmb();
- num_pages_post = live_shinfo->arch.memmap_info_num_pages;
- if (num_pages != num_pages_post) {
- free(memmap_info);
- num_pages = num_pages_post;
- goto again;
- }
-
- gpfn_max_post = xc_domain_maximum_gpfn(xch, domid);
- if (gpfn_max_prev < 0) {
- free(memmap_info);
- return -1;
- }
- if (gpfn_max_post > gpfn_max_prev) {
- free(memmap_info);
- gpfn_max_prev = gpfn_max_post;
- goto again;
- }
-
- /* reject unknown memmap */
- if (memmap_info->efi_memdesc_size != sizeof(efi_memory_desc_t) ||
- (memmap_info->efi_memmap_size / memmap_info->efi_memdesc_size) == 0 ||
- memmap_info->efi_memmap_size >
- (num_pages << PAGE_SHIFT) - sizeof(memmap_info) ||
- memmap_info->efi_memdesc_version != EFI_MEMORY_DESCRIPTOR_VERSION) {
- PERROR("unknown memmap header. defaulting to compat mode.");
- free(memmap_info);
- return -1;
- }
-
- *memmap_info_p = memmap_info;
- if (memmap_info_num_pages_p != NULL)
- *memmap_info_num_pages_p = num_pages;
-
- return 0;
-}
-
-/*
- * XXX from xen/include/asm-ia64/linux-xen/asm/pgtable.h
- * Should PTRS_PER_PTE be exported by arch-ia64.h?
- */
-#define PTRS_PER_PTE (1UL << (PAGE_SHIFT - 3))
-
-static void*
-xc_ia64_map_foreign_p2m(xc_interface *xch, uint32_t dom,
- struct xen_ia64_memmap_info *memmap_info,
- unsigned long flags, unsigned long *p2m_size_p)
-{
- DECLARE_HYPERCALL_BOUNCE(memmap_info, sizeof(*memmap_info) + memmap_info->efi_memmap_size, XC_HYPERCALL_BOUNCE_BUFFER_IN);
- unsigned long gpfn_max;
- unsigned long p2m_size;
- void *addr;
- privcmd_hypercall_t hypercall;
- int ret;
- int saved_errno;
-
- gpfn_max = xc_domain_maximum_gpfn(xch, dom);
- if (gpfn_max < 0)
- return NULL;
- p2m_size =
- (((gpfn_max + 1) + PTRS_PER_PTE - 1) / PTRS_PER_PTE) << PAGE_SHIFT;
- addr = mmap(NULL, p2m_size, PROT_READ, MAP_SHARED, xch->fd, 0);
- if (addr == MAP_FAILED)
- return NULL;
- if (xc_hypercall_bounce_pre(xc, memmap_info)) {
- saved_errno = errno;
- munmap(addr, p2m_size);
- errno = saved_errno;
- return NULL;
- }
-
- hypercall.op = __HYPERVISOR_ia64_dom0vp_op;
- hypercall.arg[0] = IA64_DOM0VP_expose_foreign_p2m;
- hypercall.arg[1] = (unsigned long)addr;
- hypercall.arg[2] = dom;
- hypercall.arg[3] = HYPERCALL_BUFFER_AS_ARG(memmap_info);
- hypercall.arg[4] = flags;
-
- ret = do_xen_hypercall(xch, &hypercall);
- saved_errno = errno;
- xc_hypercall_bounce_post(xch, memmap_info);
- if (ret < 0) {
- munmap(addr, p2m_size);
- errno = saved_errno;
- return NULL;
- }
-
- *p2m_size_p = p2m_size;
- return addr;
-}
-
-void
-xc_ia64_p2m_init(struct xen_ia64_p2m_table *p2m_table)
-{
- p2m_table->size = 0;
- p2m_table->p2m = NULL;
-}
-
-int
-xc_ia64_p2m_map(struct xen_ia64_p2m_table *p2m_table, xc_interface *xch,
- uint32_t domid, struct xen_ia64_memmap_info *memmap_info,
- unsigned long flag)
-{
- p2m_table->p2m = xc_ia64_map_foreign_p2m(xch, domid, memmap_info,
- flag, &p2m_table->size);
- if (p2m_table->p2m == NULL) {
- PERROR("Could not map foreign p2m. falling back to old method");
- return -1;
- }
- return 0;
-}
-
-void
-xc_ia64_p2m_unmap(struct xen_ia64_p2m_table *p2m_table)
-{
- if (p2m_table->p2m == NULL)
- return;
- munmap(p2m_table->p2m, p2m_table->size);
- //p2m_table->p2m = NULL;
- //p2m_table->size = 0;
-}
-
-/*
- * XXX from xen/include/asm-ia64/linux-xen/asm/pgtable.h
- * Should those be exported by arch-ia64.h?
- */
-#define _PAGE_P_BIT 0
-#define _PAGE_P (1UL << _PAGE_P_BIT) /* page present bit */
-#define _PAGE_PGC_ALLOCATED_BIT 59 /* _PGC_allocated */
-#define _PAGE_PGC_ALLOCATED (1UL << _PAGE_PGC_ALLOCATED_BIT)
-#define _PAGE_IO_BIT 60
-#define _PAGE_IO (1UL << _PAGE_IO_BIT)
-
-#define IA64_MAX_PHYS_BITS 50 /* max. number of physical address bits (architected) */
-#define _PAGE_PPN_MASK (((1UL << IA64_MAX_PHYS_BITS) - 1) & ~0xfffUL)
-
-int
-xc_ia64_p2m_present(struct xen_ia64_p2m_table *p2m_table, unsigned long gpfn)
-{
- if (sizeof(p2m_table->p2m[0]) * gpfn < p2m_table->size) {
- unsigned long pte = p2m_table->p2m[gpfn];
- return !!((pte & _PAGE_P) && !(pte & _PAGE_IO));
- }
- return 0;
-}
-
-int
-xc_ia64_p2m_allocated(struct xen_ia64_p2m_table *p2m_table, unsigned long gpfn)
-{
- if (sizeof(p2m_table->p2m[0]) * gpfn < p2m_table->size) {
- unsigned long pte = p2m_table->p2m[gpfn];
- return !!((pte & _PAGE_P) && (pte & _PAGE_PGC_ALLOCATED) &&
- !(pte & _PAGE_IO));
- }
- return 0;
-}
-
-unsigned long
-xc_ia64_p2m_mfn(struct xen_ia64_p2m_table *p2m_table, unsigned long gpfn)
-{
- unsigned long pte;
-
- if (sizeof(p2m_table->p2m[0]) * gpfn >= p2m_table->size)
- return INVALID_MFN;
- pte = p2m_table->p2m[gpfn];
- if (pte & _PAGE_IO)
- return INVALID_MFN;
- if (!(pte & _PAGE_P))
- return INVALID_MFN;
- return (pte & _PAGE_PPN_MASK) >> PAGE_SHIFT;
-}
-
-/*
- * Local variables:
- * mode: C
- * c-set-style: "BSD"
- * c-basic-offset: 4
- * tab-width: 4
- * indent-tabs-mode: nil
- * End:
- */