Zephyr API Documentation  2.7.0-rc2
A Scalable Open Source RTOS
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_ARCH_X86_INTEL_VTD_H
7#define ZEPHYR_INCLUDE_ARCH_X86_INTEL_VTD_H
8
9#ifndef _ASMLANGUAGE
10
11/*************\
12 * Registers *
13\*************/
14
15#define VTD_VER_REG 0x000 /* Version */
16#define VTD_CAP_REG 0x008 /* Capability */
17#define VTD_ECAP_REG 0x010 /* Extended Capability */
18#define VTD_GCMD_REG 0x018 /* Global Command */
19#define VTD_GSTS_REG 0x01C /* Global Status */
20#define VTD_RTADDR_REG 0x020 /* Root Table Address */
21#define VTD_CCMD_REG 0x028 /* Context Command */
22#define VTD_FSTS_REG 0x034 /* Fault Status */
23#define VTD_FECTL_REG 0x038 /* Fault Event Control Register*/
24#define VTD_FEDATA_REG 0x03C /* Fault Event Data */
25#define VTD_FEADDR_REG 0x040 /* Fault Event Address */
26#define VTD_FEUADDR_REG 0x044 /* Fault Event Upper Address */
27#define VTD_AFLOG_REG 0x058 /* Advanced Fault Log */
28#define VTD_PMEN_REG 0x064 /* Protected Memory Enable */
29#define VTD_PLMBASE_REG 0x068 /* Protected Low Memory Base */
30#define VTD_PLMLIMIT_REG 0x06C /* Protected Low Memory Limit */
31#define VTD_PHMBASE_REG 0x070 /* Protected High Memory Base */
32#define VTD_PHMLIMIT_REG 0x078 /* Protected High Memory Limit */
33#define VTD_IQH_REG 0x080 /* Invalidation Queue Head */
34#define VTD_IQT_REG 0x088 /* Invalidation Queue Tail */
35#define VTD_IQA_REG 0x090 /* Invalidation Queue Address */
36#define VTD_ICS_REG 0x09C /* Invalidation Completion Status */
37#define VTD_IECTL_REG 0x0A0 /* Invalidation Completion Event Control */
38#define VTD_IEDATA_REG 0x0A4 /* Invalidation Completion Event Data */
39#define VTD_IEADDR_REG 0x0A8 /* Invalidation Completion Event Address */
40#define VTD_IEUADDR_REG 0x0AC /* Invalidation Completion Event Upper Address */
41#define VTD_IQERCD_REG 0x0B0 /* Invalidation Queue Error Record */
42#define VTD_IRTA_REG 0x0B8 /* Interrupt Remapping Table Address */
43#define VTD_PQH_REG 0x0C0 /* Page Request Queue Head */
44#define VTD_PQT_REG 0x0C8 /* Page Request Queue Tail */
45#define VTD_PQA_REG 0x0D0 /* Page Request Queue Address */
46#define VTD_PRS_REG 0x0DC /* Page Request Status */
47#define VTD_PECTL_REG 0x0E0 /* Page Request Event Control */
48#define VTD_PEDATA_REG 0x0E4 /* Page Request Event Data */
49#define VTD_PEADDR_REG 0x0E8 /* Page Request Event Address */
50#define VTD_PEUADDR_REG 0x0EC /* Page Request Event Upper Address */
51#define VTD_MTRRCAP_REG 0x100 /* MTRR Capability */
52#define VTD_MTRRDEF_REG 0x108 /* MTRR Default Type */
53#define VTD_MTRR_FIX64K_00000_REG 0x120 /* Fixed-range MTRR for 64K_00000 */
54#define VTD_MTRR_FIX16K_80000_REG 0x128 /* Fixed-range MTRR for 16K_80000 */
55#define VTD_MTRR_FIX16K_A0000_REG 0x130 /* Fixed-range MTRR for 16K_A0000 */
56#define VTD_MTRR_FIX4K_C0000_REG 0x138 /* Fixed-range MTRR for 4K_C0000 */
57#define VTD_MTRR_FIX4K_C8000_REG 0x140 /* Fixed-range MTRR for 4K_C8000 */
58#define VTD_MTRR_FIX4K_D0000_REG 0x148 /* Fixed-range MTRR for 4K_D0000 */
59#define VTD_MTRR_FIX4K_D8000_REG 0x150 /* Fixed-range MTRR for 4K_D8000 */
60#define VTD_MTRR_FIX4K_E0000_REG 0x158 /* Fixed-range MTRR for 4K_E0000 */
61#define VTD_MTRR_FIX4K_E8000_REG 0x160 /* Fixed-range MTRR for 4K_E8000 */
62#define VTD_MTRR_FIX4K_F0000_REG 0x168 /* Fixed-range MTRR for 4K_F0000 */
63#define VTD_MTRR_FIX4K_F8000_REG 0x170 /* Fixed-range MTRR for 4K_F8000 */
64#define VTD_MTRR_PHYSBASE0_REG 0x180 /* Variable-range MTRR Base0 */
65#define VTD_MTRR_PHYSMASK0_REG 0x188 /* Variable-range MTRR Mask0 */
66#define VTD_MTRR_PHYSBASE1_REG 0x190 /* Variable-range MTRR Base1 */
67#define VTD_MTRR_PHYSMASK1_REG 0x198 /* Variable-range MTRR Mask1 */
68#define VTD_MTRR_PHYSBASE2_REG 0x1A0 /* Variable-range MTRR Base2 */
69#define VTD_MTRR_PHYSMASK2_REG 0x1A8 /* Variable-range MTRR Mask2 */
70#define VTD_MTRR_PHYSBASE3_REG 0x1B0 /* Variable-range MTRR Base3 */
71#define VTD_MTRR_PHYSMASK3_REG 0x1B8 /* Variable-range MTRR Mask3 */
72#define VTD_MTRR_PHYSBASE4_REG 0x1C0 /* Variable-range MTRR Base4 */
73#define VTD_MTRR_PHYSMASK4_REG 0x1C8 /* Variable-range MTRR Mask4 */
74#define VTD_MTRR_PHYSBASE5_REG 0x1D0 /* Variable-range MTRR Base5 */
75#define VTD_MTRR_PHYSMASK5_REG 0x1D8 /* Variable-range MTRR Mask5 */
76#define VTD_MTRR_PHYSBASE6_REG 0x1E0 /* Variable-range MTRR Base6 */
77#define VTD_MTRR_PHYSMASK6_REG 0x1E8 /* Variable-range MTRR Mask6 */
78#define VTD_MTRR_PHYSBASE7_REG 0x1F0 /* Variable-range MTRR Base7 */
79#define VTD_MTRR_PHYSMASK7_REG 0x1F8 /* Variable-range MTRR Mask7 */
80#define VTD_MTRR_PHYSBASE8_REG 0x200 /* Variable-range MTRR Base8 */
81#define VTD_MTRR_PHYSMASK8_REG 0x208 /* Variable-range MTRR Mask8 */
82#define VTD_MTRR_PHYSBASE9_REG 0x210 /* Variable-range MTRR Base9 */
83#define VTD_MTRR_PHYSMASK9_REG 0x218 /* Variable-range MTRR Mask9 */
84#define VTD_VCCAP_REG 0xE00 /* Virtual Command Capability */
85#define VTD_VCMD 0xE10 /* Virtual Command */
86#define VTD_VCRSP 0xE20 /* Virtual Command Response */
87
88/* Global Command Register details */
89#define VTD_GCMD_CFI 23
90#define VTD_GCMD_SIRTP 24
91#define VTD_GCMD_IRE 25
92#define VTD_GCMD_QIE 26
93#define VTD_GCMD_WBF 27
94#define VTD_GCMD_EAFL 28
95#define VTD_GCMD_SFL 29
96#define VTD_GCMD_SRTP 30
97#define VTD_GCMD_TE 31
98
99/* Global Status Register details */
100#define VTD_GSTS_CFIS 23
101#define VTD_GSTS_SIRTPS 24
102#define VTD_GSTS_IRES 25
103#define VTD_GSTS_QIES 26
104#define VTD_GSTS_WBFS 27
105#define VTD_GSTS_EAFLS 28
106#define VTD_GSTS_SFLS 29
107#define VTD_GSTS_SRTPS 30
108#define VTD_GSTS_TES 31
109
110/* Interrupt Remapping Table Address Register details */
111#define VTD_IRTA_SIZE_MASK 0x00000000000000FF
112#define VTD_IRTA_EIME 11
113#define VTD_IRTA_ADDR_SHIFT 12
114
115#define VTD_IRTA_REG_GEN_CONTENT(addr, size, mode) \
116 (0 | \
117 (addr << VTD_IRTA_ADDR_SHIFT) | \
118 (mode) | (size & VTD_IRTA_SIZE_MASK))
119
120#endif /* _ASMLANGUAGE */
121
122#endif /* ZEPHYR_INCLUDE_ARCH_X86_INTEL_VTD_H */