brintos

brintos / linux-shallow public Read only

0
0
Text · 3.8 KiB · 1ff357f Raw
172 lines · c
1/* SPDX-License-Identifier: BSD-3-Clause */2/*3 * Virtio-iommu definition v0.124 *5 * Copyright (C) 2019 Arm Ltd.6 */7#ifndef _UAPI_LINUX_VIRTIO_IOMMU_H8#define _UAPI_LINUX_VIRTIO_IOMMU_H9 10#include <linux/types.h>11 12/* Feature bits */13#define VIRTIO_IOMMU_F_INPUT_RANGE		014#define VIRTIO_IOMMU_F_DOMAIN_RANGE		115#define VIRTIO_IOMMU_F_MAP_UNMAP		216#define VIRTIO_IOMMU_F_BYPASS			317#define VIRTIO_IOMMU_F_PROBE			418#define VIRTIO_IOMMU_F_MMIO			519#define VIRTIO_IOMMU_F_BYPASS_CONFIG		620 21struct virtio_iommu_range_64 {22	__le64					start;23	__le64					end;24};25 26struct virtio_iommu_range_32 {27	__le32					start;28	__le32					end;29};30 31struct virtio_iommu_config {32	/* Supported page sizes */33	__le64					page_size_mask;34	/* Supported IOVA range */35	struct virtio_iommu_range_64		input_range;36	/* Max domain ID size */37	struct virtio_iommu_range_32		domain_range;38	/* Probe buffer size */39	__le32					probe_size;40	__u8					bypass;41	__u8					reserved[3];42};43 44/* Request types */45#define VIRTIO_IOMMU_T_ATTACH			0x0146#define VIRTIO_IOMMU_T_DETACH			0x0247#define VIRTIO_IOMMU_T_MAP			0x0348#define VIRTIO_IOMMU_T_UNMAP			0x0449#define VIRTIO_IOMMU_T_PROBE			0x0550 51/* Status types */52#define VIRTIO_IOMMU_S_OK			0x0053#define VIRTIO_IOMMU_S_IOERR			0x0154#define VIRTIO_IOMMU_S_UNSUPP			0x0255#define VIRTIO_IOMMU_S_DEVERR			0x0356#define VIRTIO_IOMMU_S_INVAL			0x0457#define VIRTIO_IOMMU_S_RANGE			0x0558#define VIRTIO_IOMMU_S_NOENT			0x0659#define VIRTIO_IOMMU_S_FAULT			0x0760#define VIRTIO_IOMMU_S_NOMEM			0x0861 62struct virtio_iommu_req_head {63	__u8					type;64	__u8					reserved[3];65};66 67struct virtio_iommu_req_tail {68	__u8					status;69	__u8					reserved[3];70};71 72#define VIRTIO_IOMMU_ATTACH_F_BYPASS		(1 << 0)73 74struct virtio_iommu_req_attach {75	struct virtio_iommu_req_head		head;76	__le32					domain;77	__le32					endpoint;78	__le32					flags;79	__u8					reserved[4];80	struct virtio_iommu_req_tail		tail;81};82 83struct virtio_iommu_req_detach {84	struct virtio_iommu_req_head		head;85	__le32					domain;86	__le32					endpoint;87	__u8					reserved[8];88	struct virtio_iommu_req_tail		tail;89};90 91#define VIRTIO_IOMMU_MAP_F_READ			(1 << 0)92#define VIRTIO_IOMMU_MAP_F_WRITE		(1 << 1)93#define VIRTIO_IOMMU_MAP_F_MMIO			(1 << 2)94 95#define VIRTIO_IOMMU_MAP_F_MASK			(VIRTIO_IOMMU_MAP_F_READ |	\96						 VIRTIO_IOMMU_MAP_F_WRITE |	\97						 VIRTIO_IOMMU_MAP_F_MMIO)98 99struct virtio_iommu_req_map {100	struct virtio_iommu_req_head		head;101	__le32					domain;102	__le64					virt_start;103	__le64					virt_end;104	__le64					phys_start;105	__le32					flags;106	struct virtio_iommu_req_tail		tail;107};108 109struct virtio_iommu_req_unmap {110	struct virtio_iommu_req_head		head;111	__le32					domain;112	__le64					virt_start;113	__le64					virt_end;114	__u8					reserved[4];115	struct virtio_iommu_req_tail		tail;116};117 118#define VIRTIO_IOMMU_PROBE_T_NONE		0119#define VIRTIO_IOMMU_PROBE_T_RESV_MEM		1120 121#define VIRTIO_IOMMU_PROBE_T_MASK		0xfff122 123struct virtio_iommu_probe_property {124	__le16					type;125	__le16					length;126};127 128#define VIRTIO_IOMMU_RESV_MEM_T_RESERVED	0129#define VIRTIO_IOMMU_RESV_MEM_T_MSI		1130 131struct virtio_iommu_probe_resv_mem {132	struct virtio_iommu_probe_property	head;133	__u8					subtype;134	__u8					reserved[3];135	__le64					start;136	__le64					end;137};138 139struct virtio_iommu_req_probe {140	struct virtio_iommu_req_head		head;141	__le32					endpoint;142	__u8					reserved[64];143 144	__u8					properties[];145 146	/*147	 * Tail follows the variable-length properties array. No padding,148	 * property lengths are all aligned on 8 bytes.149	 */150};151 152/* Fault types */153#define VIRTIO_IOMMU_FAULT_R_UNKNOWN		0154#define VIRTIO_IOMMU_FAULT_R_DOMAIN		1155#define VIRTIO_IOMMU_FAULT_R_MAPPING		2156 157#define VIRTIO_IOMMU_FAULT_F_READ		(1 << 0)158#define VIRTIO_IOMMU_FAULT_F_WRITE		(1 << 1)159#define VIRTIO_IOMMU_FAULT_F_EXEC		(1 << 2)160#define VIRTIO_IOMMU_FAULT_F_ADDRESS		(1 << 8)161 162struct virtio_iommu_fault {163	__u8					reason;164	__u8					reserved[3];165	__le32					flags;166	__le32					endpoint;167	__u8					reserved2[4];168	__le64					address;169};170 171#endif172