summaryrefslogtreecommitdiffstats
path: root/MdePkg/Include/IndustryStandard/PciExpress50.h
blob: 2ed68dc12ab1502add351ec2d53e0ac458965d9c (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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/** @file
Support for the PCI Express 5.0 standard.

This header file may not define all structures.  Please extend as required.

Copyright (c) 2020, American Megatrends International LLC. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef _PCIEXPRESS50_H_
#define _PCIEXPRESS50_H_

#include <IndustryStandard/PciExpress40.h>

#pragma pack(1)

/// The Physical Layer PCI Express Extended Capability definitions.
///
/// Based on section 7.7.6 of PCI Express Base Specification 5.0.
///@{
#define PCI_EXPRESS_EXTENDED_CAPABILITY_PHYSICAL_LAYER_32_0_ID    0x002A
#define PCI_EXPRESS_EXTENDED_CAPABILITY_PHYSICAL_LAYER_32_0_VER1  0x1

// Register offsets from Physical Layer PCI-E Ext Cap Header
#define PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_CAPABILITIES_OFFSET               0x04
#define PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_CONTROL_OFFSET                    0x08
#define PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_STATUS_OFFSET                     0x0C
#define PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_RCVD_MODIFIED_TS_DATA1_OFFSET     0x10
#define PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_RCVD_MODIFIED_TS_DATA2_OFFSET     0x14
#define PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_TRANS_MODIFIED_TS_DATA1_OFFSET    0x18
#define PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_TRANS_MODIFIED_TS_DATA2_OFFSET    0x1C
#define PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_LANE_EQUALIZATION_CONTROL_OFFSET  0x20

typedef union {
  struct {
    UINT32    EqualizationByPassToHighestRateSupport : 1;               // bit 0
    UINT32    NoEqualizationNeededSupport            : 1;               // bit 1
    UINT32    Reserved1                              : 6;               // Reserved bit 2:7
    UINT32    ModifiedTSUsageMode0Support            : 1;               // bit 8
    UINT32    ModifiedTSUsageMode1Support            : 1;               // bit 9
    UINT32    ModifiedTSUsageMode2Support            : 1;               // bit 10
    UINT32    ModifiedTSReservedUsageModes           : 5;               // bit 11:15
    UINT32    Reserved2                              : 16;              // Reserved bit 16:31
  } Bits;
  UINT32    Uint32;
} PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_CAPABILITIES;

typedef union {
  struct {
    UINT32    EqualizationByPassToHighestRateDisable : 1;               // bit 0
    UINT32    NoEqualizationNeededDisable            : 1;               // bit 1
    UINT32    Reserved1                              : 6;               // Reserved bit 2:7
    UINT32    ModifiedTSUsageModeSelected            : 3;               // bit 8:10
    UINT32    Reserved2                              : 21;              // Reserved bit 11:31
  } Bits;
  UINT32    Uint32;
} PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_CONTROL;

typedef union {
  struct {
    UINT32    EqualizationComplete      : 1;  // bit 0
    UINT32    EqualizationPhase1Success : 1;  // bit 1
    UINT32    EqualizationPhase2Success : 1;  // bit 2
    UINT32    EqualizationPhase3Success : 1;  // bit 3
    UINT32    LinkEqualizationRequest   : 1;  // bit 4
    UINT32    ModifiedTSRcvd            : 1;  // bit 5
    UINT32    RcvdEnhancedLinkControl   : 2;  // bit 6:7
    UINT32    TransmitterPrecodingOn    : 1;  // bit 8
    UINT32    TransmitterPrecodeRequest : 1;  // bit 9
    UINT32    NoEqualizationNeededRcvd  : 1;  // bit 10
    UINT32    Reserved                  : 21; // Reserved bit 11:31
  } Bits;
  UINT32    Uint32;
} PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_STATUS;

typedef union {
  struct {
    UINT32    RcvdModifiedTSUsageMode  : 3;  // bit 0:2
    UINT32    RcvdModifiedTSUsageInfo1 : 13; // bit 3:15
    UINT32    RcvdModifiedTSVendorId   : 16; // bit 16:31
  } Bits;
  UINT32    Uint32;
} PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_RCVD_MODIFIED_TS_DATA1;

typedef union {
  struct {
    UINT32    RcvdModifiedTSUsageInfo2     : 24; // bit 0:23
    UINT32    AltProtocolNegotiationStatus : 2;  // bit 24:25
    UINT32    Reserved                     : 6;  // Reserved bit 26:31
  } Bits;
  UINT32    Uint32;
} PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_RCVD_MODIFIED_TS_DATA2;

typedef union {
  struct {
    UINT32    TransModifiedTSUsageMode  : 3;  // bit 0:2
    UINT32    TransModifiedTSUsageInfo1 : 13; // bit 3:15
    UINT32    TransModifiedTSVendorId   : 16; // bit 16:31
  } Bits;
  UINT32    Uint32;
} PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_TRANS_MODIFIED_TS_DATA1;

typedef union {
  struct {
    UINT32    TransModifiedTSUsageInfo2    : 24; // bit 0:23
    UINT32    AltProtocolNegotiationStatus : 2;  // bit 24:25
    UINT32    Reserved                     : 6;  // Reserved bit 26:31
  } Bits;
  UINT32    Uint32;
} PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_TRANS_MODIFIED_TS_DATA2;

typedef union {
  struct {
    UINT8    DownstreamPortTransmitterPreset : 4; // bit 0..3
    UINT8    UpstreamPortTransmitterPreset   : 4; // bit 4..7
  } Bits;
  UINT8    Uint8;
} PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_LANE_EQUALIZATION_CONTROL;

typedef struct {
  PCI_EXPRESS_EXTENDED_CAPABILITIES_HEADER                         Header;
  PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_CAPABILITIES                 Capablities;
  PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_CONTROL                      Control;
  PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_STATUS                       Status;
  PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_RCVD_MODIFIED_TS_DATA1       RcvdModifiedTs1Data;
  PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_RCVD_MODIFIED_TS_DATA2       RcvdModifiedTs2Data;
  PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_TRANS_MODIFIED_TS_DATA1      TransModifiedTs1Data;
  PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_TRANS_MODIFIED_TS_DATA2      TransModifiedTs2Data;
  PCI_EXPRESS_REG_PHYSICAL_LAYER_32_0_LANE_EQUALIZATION_CONTROL    LaneEqualizationControl[1];
} PCI_EXPRESS_EXTENDED_CAPABILITIES_PHYSICAL_LAYER_32_0;
///@}

#pragma pack()

#endif