Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at nocache-cleanup 51 lines 1.5 kB view raw
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__ */