hc
2024-03-22 a0752693d998599af469473b8dc239ef973a012f
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
/** @file
  SA Platform Lib implementation.
 
  Copyright (c) 2019 Intel Corporation. All rights reserved. <BR>
 
  SPDX-License-Identifier: BSD-2-Clause-Patent
**/
 
#include "SaPlatformLibrary.h"
#include <Library/PciSegmentLib.h>
#include <SaRegs.h>
#include <Library/CpuPlatformLib.h>
 
/**
  Determine if PCH Link is DMI/OPI
 
  @param[in] CpuModel             CPU model
 
  @retval TRUE                    DMI
  @retval FALSE                   OPI
**/
BOOLEAN
IsPchLinkDmi (
  IN CPU_FAMILY  CpuModel
  )
{
  if ((CpuModel == EnumCpuCflDtHalo) || (CpuModel == EnumCpuCnlDtHalo)) {
    return TRUE; // DMI
  }
  return FALSE;  // OPI
}
 
 
/**
  Returns the number of DMI lanes for current CPU
 
  @retval UINT8
**/
UINT8
GetMaxDmiLanes (
  )
{
    return SA_DMI_CFL_MAX_LANE;
}
 
 
/**
  Returns the number of DMI bundles for current CPU
 
  @retval UINT8
**/
UINT8
GetMaxDmiBundles (
  )
{
    return SA_DMI_CFL_MAX_BUNDLE;
}
 
 
/**
  Returns the function numbers for current CPU
 
  @retval UINT8
**/
UINT8
GetMaxPegFuncs (
  )
{
  if (GetCpuFamily() == EnumCpuCnlDtHalo) {
    return SA_PEG_CNL_H_MAX_FUN;
  } else {
    return SA_PEG_NON_CNL_H_MAX_FUN;
  }
}
 
 
/**
  Returns the number of PEG lanes for current CPU
 
  @retval UINT8
**/
UINT8
GetMaxPegLanes (
  )
{
  if (GetCpuFamily() == EnumCpuCnlDtHalo) {
    return SA_PEG_CNL_H_MAX_LANE;
  } else {
    return SA_PEG_NON_CNL_H_MAX_LANE;
  }
}
 
 
/**
  Returns the number of PEG bundles for current CPU
 
  @retval UINT8
**/
UINT8
GetMaxPegBundles (
  )
{
  if (GetCpuFamily() == EnumCpuCnlDtHalo) {
    return  SA_PEG_CNL_H_MAX_BUNDLE;
  } else {
    return  SA_PEG_NON_CNL_H_MAX_BUNDLE;
  }
}
 
/**
  Checks if PEG port is present
 
  @retval TRUE     PEG is presented
  @retval FALSE    PEG is not presented
**/
BOOLEAN
IsPegPresent (
  VOID
  )
{
  UINT64  PegBaseAddress;
 
  PegBaseAddress  = PCI_SEGMENT_LIB_ADDRESS (SA_SEG_NUM, SA_PEG_BUS_NUM, SA_PEG_DEV_NUM, 0, 0);
  if (PciSegmentRead16 (PegBaseAddress) != 0xFFFF) {
    return TRUE;
  }
  return FALSE;
}