index
:
litmus-rt.git
archive/unc-master-3.0
archived-2013.1
archived-private-master
archived-semi-part
demo
ecrts-pgm-final
ecrts14-pgm-final
gpusync-rtss12
gpusync/staging
linux-tip
litmus2008-patch-series
master
pgm
prop/litmus-signals
prop/robust-tie-break
staging
test
tracing-devel
v2.6.34-with-arm-patches
v2015.1
wip-2011.2-bbb
wip-2011.2-bbb-trace
wip-2012.3-gpu
wip-2012.3-gpu-preport
wip-2012.3-gpu-rtss13
wip-2012.3-gpu-sobliv-budget-w-kshark
wip-aedzl-final
wip-aedzl-revised
wip-arbit-deadline
wip-aux-tasks
wip-bbb
wip-bbb-prio-don
wip-better-break
wip-binary-heap
wip-budget
wip-color
wip-color-jlh
wip-d10-hz1000
wip-default-clustering
wip-dissipation-jerickso
wip-dissipation2-jerickso
wip-ecrts14-pgm
wip-edf-hsb
wip-edf-os
wip-edf-tie-break
wip-edzl-critique
wip-edzl-final
wip-edzl-revised
wip-events
wip-extra-debug
wip-fix-switch-jerickso
wip-fix3
wip-fmlp-dequeue
wip-ft-irq-flag
wip-gpu-cleanup
wip-gpu-interrupts
wip-gpu-rtas12
wip-gpu-rtss12
wip-gpu-rtss12-srp
wip-gpusync-merge
wip-ikglp
wip-k-fmlp
wip-kernel-coloring
wip-kernthreads
wip-klmirqd-to-aux
wip-kshark
wip-litmus-3.2
wip-litmus2011.2
wip-litmus3.0-2011.2
wip-master-2.6.33-rt
wip-mc
wip-mc-bipasa
wip-mc-jerickso
wip-mc2-cache-slack
wip-mcrit-mac
wip-merge-3.0
wip-merge-v3.0
wip-migration-affinity
wip-mmap-uncache
wip-modechange
wip-nested-locking
wip-omlp-gedf
wip-pai
wip-percore-lib
wip-performance
wip-pgm
wip-pgm-split
wip-pm-ovd
wip-prio-inh
* 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; either version 2 of the License.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef __KVM_IODEV_H__
#define __KVM_IODEV_H__
#include <linux/kvm_types.h>
#include <asm/errno.h>
struct
kvm_io_device
;
/**
* kvm_io_device_ops are called under kvm slots_lock.
* read and write handlers return 0 if the transaction has been handled,
* or non-zero to have it passed to the next device.
**/
struct
kvm_io_device_ops
{
int
(*
read
)(
struct
kvm_io_device
*
this
,
gpa_t addr
,
int
len
,
void
*
val
);
int
(*
write
)(
struct
kvm_io_device
*
this
,
gpa_t addr
,
int
len
,
const void
*
val
);
void
(*
destructor
)(
struct
kvm_io_device
*
this
);
};
struct
kvm_io_device
{
const struct
kvm_io_device_ops
*
ops
;
};
static
inline
void
kvm_iodevice_init
(
struct
kvm_io_device
*
dev
,
const struct
kvm_io_device_ops
*
ops
)
{
dev
->
ops
=
ops
;
}
static
inline
int
kvm_iodevice_read
(
struct
kvm_io_device
*
dev
,
gpa_t addr
,
int
l
,
void
*
v
)
{
return
dev
->
ops
->
read
?
dev
->
ops
->
read
(
dev
,
addr
,
l
,
v
) : -
EOPNOTSUPP
;
}
static
inline
int
kvm_iodevice_write
(
struct
kvm_io_device
*
dev
,
gpa_t addr
,
int
l
,
const void
*
v
)
{
return
dev
->
ops
->
write
?
dev
->
ops
->
write
(
dev
,
addr
,
l
,
v
) : -
EOPNOTSUPP
;
}
static
inline
void
kvm_iodevice_destructor
(
struct
kvm_io_device
*
dev
)
{
if
(
dev
->
ops
->
destructor
)
dev
->
ops
->
destructor
(
dev
);
}
#endif
/* __KVM_IODEV_H__ */