/** @file
This file contains internal PSF routines for PCH PSF VER2 lib usage
Copyright (c) 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include
#include
#include
#include
#include
#include
#include
#include
#include "PsfLibInternal.h"
#include
/**
Get EOI register data for given PSF ID
@param[in] PsfId PSF ID (1 - PSF1, 2 - PSF2, ...)
@param[out] EoiTargetBase EOI Target register
@param[out] EoiControlBase EOI Control register
@retval MaxTargets Number of supported targets
**/
UINT8
PsfEoiRegData (
UINT32 PsfId,
UINT16 *EoiTargetBase,
UINT16 *EoiControlBase
)
{
UINT8 MaxTargets;
MaxTargets = 0;
*EoiTargetBase = 0;
*EoiControlBase = 0;
switch (PsfId) {
case 1:
break;
case 3:
break;
case 7:
break;
case 8:
break;
case 9:
break;
default:
break;
}
return MaxTargets;
}
GLOBAL_REMOVE_IF_UNREFERENCED PSF_PORT_DEST_ID PchLpRpDestId[] =
{
{0x18000}, {0x18001}, {0x18002}, {0x18003}, // SPA: PSF1, PortID = 0
{0x18100}, {0x18101}, {0x18102}, {0x18103}, // SPB: PSF1, PortID = 1
{0x18200}, {0x18201}, {0x18202}, {0x18203}, // SPC: PSF1, PortID = 2
};
/**
PCIe PSF port destination ID (psf_id:port_group_id:port_id:channel_id)
@param[in] RpIndex PCIe Root Port Index (0 based)
@retval Destination ID
**/
PSF_PORT_DEST_ID
PsfPcieDestinationId (
IN UINT32 RpIndex
)
{
if (RpIndex < ARRAY_SIZE (PchLpRpDestId)) {
return PchLpRpDestId[RpIndex];
}
ASSERT (FALSE);
return (PSF_PORT_DEST_ID){0};
}
GLOBAL_REMOVE_IF_UNREFERENCED PSF_SEGMENT mPchLpPsfTable[] =
{
{1, PID_PSF1},
{2, PID_PSF2},
{3, PID_PSF3},
{4, PID_PSF4},
{5, PID_CSME_PSF},
{6, PID_PSF6}
};
/**
Get list of supported PSF segments.
@param[out] PsfTable Array of supported PSF segments
@param[out] PsfTableLength Length of PsfTable
**/
VOID
PsfSegments (
OUT PSF_SEGMENT **PsfTable,
OUT UINT32 *PsfTableLength
)
{
*PsfTable = mPchLpPsfTable;
*PsfTableLength = ARRAY_SIZE (mPchLpPsfTable);
}