summaryrefslogtreecommitdiff
path: root/MdePkg/Include/IndustryStandard/IoVirtualizationTable.h
blob: f2568c3d2bf025422e3b419185a9742de1e44f4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/** @file
  LoongArch I/O Virtualization Table (IOVT) definitions.

  Copyright (C) 2026, Loongson Technology Corporation Limited. All rights reserved.<BR>

  SPDX-License-Identifier: BSD-2-Clause-Patent

  @par Reference(s):
  - LoongArch I/O Virtualization Table Specification, Version v0.1
    (https://www.loongson.cn/uploads/images/2024110517404135188.LoongArch-IO-Virtualization-Table-Specification.pdf)
  - Advanced Configuration and Power Interface (ACPI) specification, Version 6.6
    (https://uefi.org/specs/ACPI/6.6/)

**/

#pragma once

#include <IndustryStandard/Acpi.h>

#pragma pack (1)

typedef struct {
  EFI_ACPI_DESCRIPTION_HEADER    Header;
  UINT16                         IommuCount;
  UINT16                         IommuOffset;
  UINT64                         Reserved;
} EFI_ACPI_IOVT_HEADER;

#define EFI_ACPI_LOONGARCH_IOVT_REVISION  0x01

typedef struct {
  UINT16    Type;
  UINT16    Length;
  UINT32    Flags;
  UINT16    PciSegmentNumber;
  UINT16    PhysicalAddressWidth;
  UINT16    VirtualAddressWidth;
  UINT16    MaxPageLevel;
  UINT64    PageSizeSupported;
  UINT32    IommuDeviceId;
  UINT64    IommuBaseAddress;
  UINT32    IommuRegisterSize;
  UINT8     InterruptType;
  UINT8     Reserved[3];
  UINT32    GlobalSystemInterrupt;
  UINT32    ProximityDomain;
  UINT32    MaxDeviceNum;
  UINT32    NumberOfDeviceEntries;
  UINT32    OffsetOfDeviceEntries;
} EFI_ACPI_IOVT_IOMMU;

#define EFI_ACPI_IOVT_TYPE_LOONGARCH_V1  0x0000

#define EFI_ACPI_IOVT_FLAG_PCI_DEVICE            BIT0
#define EFI_ACPI_IOVT_FLAG_PROXIMITY_VALID       BIT1
#define EFI_ACPI_IOVT_FLAG_DEVICE_SCOPE_SEGMENT  BIT2
#define EFI_ACPI_IOVT_FLAG_HW_CAPABILITY         BIT3
#define EFI_ACPI_IOVT_FLAG_MSI_ADDR_BYPASS       BIT4

typedef struct {
  UINT8     Type;
  UINT8     Length;
  UINT8     Flags;
  UINT8     Reserved[3];
  UINT16    DevId;
} EFI_ACPI_IOVT_DEVICE_ENTRY;

#define EFI_ACPI_IOVT_DEVICE_ENTRY_TYPE_PCI_DEVICE   0x00
#define EFI_ACPI_IOVT_DEVICE_ENTRY_TYPE_RANGE_START  0x01
#define EFI_ACPI_IOVT_DEVICE_ENTRY_TYPE_RANGE_END    0x02

#define EFI_ACPI_IOVT_IOMMU_LENGTH         64
#define EFI_ACPI_IOVT_DEVICE_ENTRY_LENGTH  8

#pragma pack ()