Пример #1
0
__checkReturn
XEN_API
NTSTATUS
HvmGetParam(
    IN  ULONG               Parameter,
    OUT PULONG_PTR          Value
    )
{
    struct xen_hvm_param    op;
    LONG_PTR                rc;
    NTSTATUS                status;

    op.domid = DOMID_SELF;
    op.index = Parameter;
    op.value = 0xFEEDFACE;

    rc = HvmOp(HVMOP_get_param, &op);
    
    if (rc < 0) {
        ERRNO_TO_STATUS(-rc, status);
        goto fail1;
    }

    ASSERT(op.value != 0xFEEDFACE);
    *Value = (ULONG_PTR)op.value;

    return STATUS_SUCCESS;

fail1:
    Error("fail1 (%08x)\n", status);

    return status;
}
Пример #2
0
__checkReturn
XEN_API
NTSTATUS
SchedShutdown(
    ULONG                   Reason
    )
{
    struct sched_shutdown   op;
    LONG_PTR                rc;
    NTSTATUS                status;

    op.reason = Reason;

    rc = SchedOp(SCHEDOP_shutdown, &op);
    
    if (rc < 0) {
        ERRNO_TO_STATUS(-rc, status);
        goto fail1;
    }

    return STATUS_SUCCESS;

fail1:
    Error("fail1 (%08x)\n", status);

    return status;
}
Пример #3
0
__checkReturn
XEN_API
NTSTATUS
HvmSetParam(
    IN  ULONG               Parameter,
    IN  ULONG_PTR           Value
    )
{
    struct xen_hvm_param    op;
    LONG_PTR                rc;
    NTSTATUS                status;

    op.domid = DOMID_SELF;
    op.index = Parameter;
    op.value = Value;

    rc = HvmOp(HVMOP_set_param, &op);
    
    if (rc < 0) {
        ERRNO_TO_STATUS(-rc, status);
        goto fail1;
    }

    return STATUS_SUCCESS;

fail1:
    Error("fail1 (%08x)\n", status);

    return status;
}
Пример #4
0
__checkReturn
XEN_API
NTSTATUS
HvmPagetableDying(
    IN  PHYSICAL_ADDRESS            Address
    )
{
    struct xen_hvm_pagetable_dying  op;
    LONG_PTR                        rc;
    NTSTATUS                        status;

    op.domid = DOMID_SELF;
    op.gpa = Address.QuadPart;

    rc = HvmOp(HVMOP_pagetable_dying, &op);
    
    if (rc < 0) {
        ERRNO_TO_STATUS(-rc, status);
        goto fail1;
    }

    return STATUS_SUCCESS;

fail1:
    return status;
}
Пример #5
0
__checkReturn
XEN_API
NTSTATUS
HvmGetTime(
    OUT PLARGE_INTEGER      Now
    )
{
    struct xen_hvm_get_time op;
    LONG_PTR                rc;
    NTSTATUS                status;

    rc = HvmOp(HVMOP_get_time, &op);
    
    if (rc < 0) {
        ERRNO_TO_STATUS(-rc, status);
        goto fail1;
    }

    Now->QuadPart = op.now;

    return STATUS_SUCCESS;

fail1:
    Error("fail1 (%08x)\n", status);

    return status;
}
Пример #6
0
NTSTATUS
HvmGetParameter(
    IN  ULONG               Param,
    OUT PULONGLONG          Value
    )
{
    struct xen_hvm_param    op;
    LONG_PTR                rc;
    NTSTATUS                status;

    op.domid = DOMID_SELF;
    op.index = Param;
    op.value = 0xf001dead;

    rc = HvmOp(HVMOP_get_param, &op);
    if (rc < 0)
        goto fail1;

    /* Horrible hack to cope with the transition from
       return parameters through the hypercall return
       value to returning them through an in-memory
       structure. */
    if (op.value != 0xf001dead)
        *Value = (ULONG_PTR)op.value;
    else
        *Value = (ULONG_PTR)rc;

    return STATUS_SUCCESS;

fail1:
    ERRNO_TO_STATUS(-rc, status);
    LogError("fail1 (%08x)\n", status);

    return status;
}
Пример #7
0
static FORCEINLINE NTSTATUS
MemoryOp(
    IN  ULONG       Command,
    IN  PVOID       Argument
    )
{
    LONG_PTR ret;
    NTSTATUS Status;

    ret = Hypercall2(LONG_PTR, memory_op, Command, Argument);
    if (ret < 0) {
        ERRNO_TO_STATUS(-ret, Status);
        goto fail;
    }

    return STATUS_SUCCESS;

fail:
    return Status;
}