qemu
1/*
2* Support for virtio hypercalls on s390
3*
4* Copyright 2012 IBM Corp.
5* Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
6*
7* This work is licensed under the terms of the GNU GPL, version 2 or (at
8* your option) any later version. See the COPYING file in the top-level
9* directory.
10*/
11
12#include "qemu/osdep.h"13#include "cpu.h"14#include "hw/s390x/s390-virtio-hcall.h"15
16#define MAX_DIAG_SUBCODES 25517
18static s390_virtio_fn s390_diag500_table[MAX_DIAG_SUBCODES];19
20void s390_register_virtio_hypercall(uint64_t code, s390_virtio_fn fn)21{
22assert(code < MAX_DIAG_SUBCODES);23assert(!s390_diag500_table[code]);24
25s390_diag500_table[code] = fn;26}
27
28int s390_virtio_hypercall(CPUS390XState *env)29{
30s390_virtio_fn fn;31
32if (env->regs[1] < MAX_DIAG_SUBCODES) {33fn = s390_diag500_table[env->regs[1]];34if (fn) {35env->regs[2] = fn(&env->regs[2]);36return 0;37}38}39
40return -EINVAL;41}
42