1
/******************************************************************************
4
* Copyright (C) 2005, 2006 IBM Corporation, R Sailer
6
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
7
* Use is subject to license terms.
9
* This program is free software; you can redistribute it and/or
10
* modify it under the terms of the GNU General Public License as
11
* published by the Free Software Foundation, version 2 of the
15
#include "xc_private.h"
17
int xc_acm_op(int xc_handle, int cmd, void *arg, unsigned long arg_size)
21
struct xen_acmctl acmctl;
24
case ACMOP_setpolicy: {
25
struct acm_setpolicy *setpolicy = (struct acm_setpolicy *)arg;
26
memcpy(&acmctl.u.setpolicy,
28
sizeof(struct acm_setpolicy));
32
case ACMOP_getpolicy: {
33
struct acm_getpolicy *getpolicy = (struct acm_getpolicy *)arg;
34
memcpy(&acmctl.u.getpolicy,
36
sizeof(struct acm_getpolicy));
40
case ACMOP_dumpstats: {
41
struct acm_dumpstats *dumpstats = (struct acm_dumpstats *)arg;
42
memcpy(&acmctl.u.dumpstats,
44
sizeof(struct acm_dumpstats));
49
struct acm_getssid *getssid = (struct acm_getssid *)arg;
50
memcpy(&acmctl.u.getssid,
52
sizeof(struct acm_getssid));
56
case ACMOP_getdecision: {
57
struct acm_getdecision *getdecision = (struct acm_getdecision *)arg;
58
memcpy(&acmctl.u.getdecision,
60
sizeof(struct acm_getdecision));
64
case ACMOP_chgpolicy: {
65
struct acm_change_policy *change_policy = (struct acm_change_policy *)arg;
66
memcpy(&acmctl.u.change_policy,
68
sizeof(struct acm_change_policy));
72
case ACMOP_relabeldoms: {
73
struct acm_relabel_doms *relabel_doms = (struct acm_relabel_doms *)arg;
74
memcpy(&acmctl.u.relabel_doms,
76
sizeof(struct acm_relabel_doms));
82
acmctl.interface_version = ACM_INTERFACE_VERSION;
84
hypercall.op = __HYPERVISOR_xsm_op;
85
hypercall.arg[0] = (unsigned long)&acmctl;
86
if ( lock_pages(&acmctl, sizeof(acmctl)) != 0)
88
PERROR("Could not lock memory for Xen hypercall");
91
if ( (ret = do_xen_hypercall(xc_handle, &hypercall)) < 0)
93
if ( errno == EACCES )
94
DPRINTF("acmctl operation failed -- need to"
95
" rebuild the user-space tool set?\n");
97
unlock_pages(&acmctl, sizeof(acmctl));
100
case ACMOP_getdecision: {
101
struct acm_getdecision *getdecision = (struct acm_getdecision *)arg;
103
&acmctl.u.getdecision,
104
sizeof(struct acm_getdecision));
118
* indent-tabs-mode: nil