Zephyr API Documentation 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
intel_vtd.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2020 Intel Corporation
3 * SPDX-License-Identifier: Apache-2.0
4 */
5
6#ifndef ZEPHYR_INCLUDE_DRIVERS_INTEL_VTD_H_
7#define ZEPHYR_INCLUDE_DRIVERS_INTEL_VTD_H_
8
10
11typedef int (*vtd_alloc_entries_f)(const struct device *dev,
12 uint8_t n_entries);
13
14typedef uint32_t (*vtd_remap_msi_f)(const struct device *dev,
15 msi_vector_t *vector,
16 uint8_t n_vector);
17
18typedef int (*vtd_remap_f)(const struct device *dev,
19 uint8_t irte_idx,
20 uint16_t vector,
22 uint16_t src_id);
23
24typedef int (*vtd_set_irte_vector_f)(const struct device *dev,
25 uint8_t irte_idx,
26 uint16_t vector);
27
28typedef int (*vtd_get_irte_by_vector_f)(const struct device *dev,
29 uint16_t vector);
30
31typedef uint16_t (*vtd_get_irte_vector_f)(const struct device *dev,
32 uint8_t irte_idx);
33
34typedef int (*vtd_set_irte_irq_f)(const struct device *dev,
35 uint8_t irte_idx,
36 unsigned int irq);
37
38typedef int (*vtd_get_irte_by_irq_f)(const struct device *dev,
39 unsigned int irq);
40
41typedef void (*vtd_set_irte_msi_f)(const struct device *dev,
42 uint8_t irte_idx,
43 bool msi);
44
45typedef bool (*vtd_irte_is_msi_f)(const struct device *dev,
46 uint8_t irte_idx);
47
60
71static inline int vtd_allocate_entries(const struct device *dev,
72 uint8_t n_entries)
73{
74 return DEVICE_API_GET(vtd, dev)->allocate_entries(dev, n_entries);
75}
76
86static inline uint32_t vtd_remap_msi(const struct device *dev,
87 msi_vector_t *vector,
88 uint8_t n_vector)
89{
90 return DEVICE_API_GET(vtd, dev)->remap_msi(dev, vector, n_vector);
91}
92
104static inline int vtd_remap(const struct device *dev,
105 uint8_t irte_idx,
106 uint16_t vector,
108 uint16_t src_id)
109{
110 return DEVICE_API_GET(vtd, dev)->remap(dev, irte_idx, vector, flags, src_id);
111}
112
122static inline int vtd_set_irte_vector(const struct device *dev,
123 uint8_t irte_idx,
124 uint16_t vector)
125{
126 return DEVICE_API_GET(vtd, dev)->set_irte_vector(dev, irte_idx, vector);
127}
128
137static inline int vtd_get_irte_by_vector(const struct device *dev,
138 uint16_t vector)
139{
140 return DEVICE_API_GET(vtd, dev)->get_irte_by_vector(dev, vector);
141}
142
151static inline uint16_t vtd_get_irte_vector(const struct device *dev,
152 uint8_t irte_idx)
153{
154 return DEVICE_API_GET(vtd, dev)->get_irte_vector(dev, irte_idx);
155}
156
166static inline int vtd_set_irte_irq(const struct device *dev,
167 uint8_t irte_idx,
168 unsigned int irq)
169{
170 return DEVICE_API_GET(vtd, dev)->set_irte_irq(dev, irte_idx, irq);
171}
172
181static inline int vtd_get_irte_by_irq(const struct device *dev,
182 unsigned int irq)
183{
184 return DEVICE_API_GET(vtd, dev)->get_irte_by_irq(dev, irq);
185}
186
187static inline void vtd_set_irte_msi(const struct device *dev,
188 uint8_t irte_idx,
189 bool msi)
190{
191 DEVICE_API_GET(vtd, dev)->set_irte_msi(dev, irte_idx, msi);
192}
193
194static inline bool vtd_irte_is_msi(const struct device *dev,
195 uint8_t irte_idx)
196{
197 return DEVICE_API_GET(vtd, dev)->irte_is_msi(dev, irte_idx);
198}
199
200
201#endif /* ZEPHYR_INCLUDE_DRIVERS_INTEL_VTD_H_ */
#define DEVICE_API_GET(_class, _dev)
Expands to the pointer of a device's API for a given class.
Definition device.h:1375
void(* vtd_set_irte_msi_f)(const struct device *dev, uint8_t irte_idx, bool msi)
Definition intel_vtd.h:41
int(* vtd_set_irte_vector_f)(const struct device *dev, uint8_t irte_idx, uint16_t vector)
Definition intel_vtd.h:24
int(* vtd_get_irte_by_irq_f)(const struct device *dev, unsigned int irq)
Definition intel_vtd.h:38
static int vtd_get_irte_by_irq(const struct device *dev, unsigned int irq)
Get the irte allocated for the given irq.
Definition intel_vtd.h:181
static int vtd_set_irte_vector(const struct device *dev, uint8_t irte_idx, uint16_t vector)
Set the vector on the allocated irte.
Definition intel_vtd.h:122
int(* vtd_alloc_entries_f)(const struct device *dev, uint8_t n_entries)
Definition intel_vtd.h:11
static int vtd_remap(const struct device *dev, uint8_t irte_idx, uint16_t vector, uint32_t flags, uint16_t src_id)
Remap the given vector.
Definition intel_vtd.h:104
static int vtd_get_irte_by_vector(const struct device *dev, uint16_t vector)
Get the irte allocated for the given vector.
Definition intel_vtd.h:137
bool(* vtd_irte_is_msi_f)(const struct device *dev, uint8_t irte_idx)
Definition intel_vtd.h:45
int(* vtd_set_irte_irq_f)(const struct device *dev, uint8_t irte_idx, unsigned int irq)
Definition intel_vtd.h:34
static uint16_t vtd_get_irte_vector(const struct device *dev, uint8_t irte_idx)
Get the vector given to the IRTE.
Definition intel_vtd.h:151
static bool vtd_irte_is_msi(const struct device *dev, uint8_t irte_idx)
Definition intel_vtd.h:194
static int vtd_allocate_entries(const struct device *dev, uint8_t n_entries)
Allocate contiguous IRTEs.
Definition intel_vtd.h:71
int(* vtd_get_irte_by_vector_f)(const struct device *dev, uint16_t vector)
Definition intel_vtd.h:28
uint32_t(* vtd_remap_msi_f)(const struct device *dev, msi_vector_t *vector, uint8_t n_vector)
Definition intel_vtd.h:14
static int vtd_set_irte_irq(const struct device *dev, uint8_t irte_idx, unsigned int irq)
Set the irq on the allocated irte.
Definition intel_vtd.h:166
static uint32_t vtd_remap_msi(const struct device *dev, msi_vector_t *vector, uint8_t n_vector)
Generate the MSI Message Address data for the given vector.
Definition intel_vtd.h:86
static void vtd_set_irte_msi(const struct device *dev, uint8_t irte_idx, bool msi)
Definition intel_vtd.h:187
uint16_t(* vtd_get_irte_vector_f)(const struct device *dev, uint8_t irte_idx)
Definition intel_vtd.h:31
int(* vtd_remap_f)(const struct device *dev, uint8_t irte_idx, uint16_t vector, uint32_t flags, uint16_t src_id)
Definition intel_vtd.h:18
struct msi_vector msi_vector_t
Definition msi.h:60
flags
Definition parser.h:97
#define bool
Definition stdbool.h:13
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
Definition intel_vtd.h:48
vtd_set_irte_vector_f set_irte_vector
Definition intel_vtd.h:52
vtd_alloc_entries_f allocate_entries
Definition intel_vtd.h:49
vtd_get_irte_by_vector_f get_irte_by_vector
Definition intel_vtd.h:53
vtd_remap_msi_f remap_msi
Definition intel_vtd.h:50
vtd_irte_is_msi_f irte_is_msi
Definition intel_vtd.h:58
vtd_remap_f remap
Definition intel_vtd.h:51
vtd_set_irte_msi_f set_irte_msi
Definition intel_vtd.h:57
vtd_get_irte_vector_f get_irte_vector
Definition intel_vtd.h:54
vtd_set_irte_irq_f set_irte_irq
Definition intel_vtd.h:55
vtd_get_irte_by_irq_f get_irte_by_irq
Definition intel_vtd.h:56