1/* SPDX-License-Identifier: MIT */
2/*
3 * ioreq.h: I/O request definitions for device models
4 * Copyright (c) 2004, Intel Corporation.
5 */
6
7#ifndef __XEN_PUBLIC_HVM_IOREQ_H__
8#define __XEN_PUBLIC_HVM_IOREQ_H__
9
10#define IOREQ_READ 1
11#define IOREQ_WRITE 0
12
13#define STATE_IOREQ_NONE 0
14#define STATE_IOREQ_READY 1
15#define STATE_IOREQ_INPROCESS 2
16#define STATE_IORESP_READY 3
17
18#define IOREQ_TYPE_PIO 0 /* pio */
19#define IOREQ_TYPE_COPY 1 /* mmio ops */
20#define IOREQ_TYPE_PCI_CONFIG 2
21#define IOREQ_TYPE_TIMEOFFSET 7
22#define IOREQ_TYPE_INVALIDATE 8 /* mapcache */
23
24/*
25 * VMExit dispatcher should cooperate with instruction decoder to
26 * prepare this structure and notify service OS and DM by sending
27 * virq.
28 *
29 * For I/O type IOREQ_TYPE_PCI_CONFIG, the physical address is formatted
30 * as follows:
31 *
32 * 63....48|47..40|39..35|34..32|31........0
33 * SEGMENT |BUS |DEV |FN |OFFSET
34 */
35struct ioreq {
36 uint64_t addr; /* physical address */
37 uint64_t data; /* data (or paddr of data) */
38 uint32_t count; /* for rep prefixes */
39 uint32_t size; /* size in bytes */
40 uint32_t vp_eport; /* evtchn for notifications to/from device model */
41 uint16_t _pad0;
42 uint8_t state:4;
43 uint8_t data_is_ptr:1; /* if 1, data above is the guest paddr
44 * of the real data to use. */
45 uint8_t dir:1; /* 1=read, 0=write */
46 uint8_t df:1;
47 uint8_t _pad1:1;
48 uint8_t type; /* I/O type */
49};
50
51#endif /* __XEN_PUBLIC_HVM_IOREQ_H__ */
52

source code of linux/include/xen/interface/hvm/ioreq.h