dptx: Added function header comments describing new functionality.
Signed-off-by: Andrei-Liviu Simion <andrei.simion@xilinx.com>
This commit is contained in:
parent
fe2c47e815
commit
139854677e
2 changed files with 181 additions and 4 deletions
|
@ -130,6 +130,27 @@ u32 XDptx_GetRemoteEdid(XDptx *InstancePtr, u8 LinkCountTotal,
|
|||
return Status;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/**
|
||||
* Retrieve an immediately connected RX device's Extended Display Identification
|
||||
* Data (EDID) block given the block number. A block number of 0 represents the
|
||||
* base EDID and subsequent block numbers represent EDID extension blocks.
|
||||
*
|
||||
* @param InstancePtr is a pointer to the XDptx instance.
|
||||
* @param Data is a pointer to the data buffer to save the block data to.
|
||||
* @param BlockNum is the EDID block number to retrieve.
|
||||
*
|
||||
* @return
|
||||
* - XST_SUCCESS if the block read has successfully completed with
|
||||
* no errors.
|
||||
* - XST_ERROR_COUNT_MAX if a time out occurred while attempting to
|
||||
* read the requested block.
|
||||
* - XST_DEVICE_NOT_FOUND if no RX device is connected.
|
||||
* - XST_FAILURE otherwise.
|
||||
*
|
||||
* @note None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
u32 XDptx_GetEdidBlock(XDptx *InstancePtr, u8 *Data, u8 BlockNum)
|
||||
{
|
||||
u32 Status;
|
||||
|
@ -145,6 +166,31 @@ u32 XDptx_GetEdidBlock(XDptx *InstancePtr, u8 *Data, u8 BlockNum)
|
|||
return Status;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/**
|
||||
* Retrieve a downstream DisplayPort device's Extended Display Identification
|
||||
* Data (EDID) block given the block number. A block number of 0 represents the
|
||||
* base EDID and subsequent block numbers represent EDID extension blocks.
|
||||
*
|
||||
* @param InstancePtr is a pointer to the XDptx instance.
|
||||
* @param Data is a pointer to the data buffer to save the block data to.
|
||||
* @param BlockNum is the EDID block number to retrieve.
|
||||
* @param LinkCountTotal is the total DisplayPort links connecting the
|
||||
* DisplayPort TX to the targeted downstream device.
|
||||
* @param RelativeAddress is the relative address from the DisplayPort
|
||||
* source to the targeted DisplayPort device.
|
||||
*
|
||||
* @return
|
||||
* - XST_SUCCESS if the block read has successfully completed with
|
||||
* no errors.
|
||||
* - XST_ERROR_COUNT_MAX if a time out occurred while attempting to
|
||||
* read the requested block.
|
||||
* - XST_DEVICE_NOT_FOUND if no RX device is connected.
|
||||
* - XST_FAILURE otherwise.
|
||||
*
|
||||
* @note None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
u32 XDptx_GetRemoteEdidBlock(XDptx *InstancePtr, u8 *Data, u8 BlockNum,
|
||||
u8 LinkCountTotal, u8 *RelativeAddress)
|
||||
{
|
||||
|
@ -162,6 +208,29 @@ u32 XDptx_GetRemoteEdidBlock(XDptx *InstancePtr, u8 *Data, u8 BlockNum,
|
|||
return Status;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/**
|
||||
* Search for and retrieve a downstream DisplayPort device's Extended Display
|
||||
* Identification Data (EDID) extension block of type DisplayID.
|
||||
*
|
||||
* @param InstancePtr is a pointer to the XDptx instance.
|
||||
* @param Data is a pointer to the data buffer to save the DisplayID to.
|
||||
* @param LinkCountTotal is the total DisplayPort links connecting the
|
||||
* DisplayPort TX to the targeted downstream device.
|
||||
* @param RelativeAddress is the relative address from the DisplayPort
|
||||
* source to the targeted DisplayPort device.
|
||||
*
|
||||
* @return
|
||||
* - XST_SUCCESS a DisplayID extension block was found.
|
||||
* - XST_ERROR_COUNT_MAX if a time out occurred while attempting to
|
||||
* read an extension block.
|
||||
* - XST_DEVICE_NOT_FOUND if no RX device is connected.
|
||||
* - XST_FAILURE if no DisplayID extension block was found or some
|
||||
* error occurred in the search.
|
||||
*
|
||||
* @note None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
u32 XDptx_GetRemoteEdidDispIdExt(XDptx *InstancePtr, u8 *Data,
|
||||
u8 LinkCountTotal, u8 *RelativeAddress)
|
||||
{
|
||||
|
@ -196,6 +265,27 @@ u32 XDptx_GetRemoteEdidDispIdExt(XDptx *InstancePtr, u8 *Data,
|
|||
return XST_FAILURE;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/**
|
||||
* Given a section tag, search for and retrieve the appropriate section data
|
||||
* block that is part of the specified DisplayID structure.
|
||||
*
|
||||
* @param DisplayIdRaw is a pointer to the DisplayID data.
|
||||
* @param SectionTag is the tag to search for that represents the desired
|
||||
* section data block.
|
||||
* @param DataBlockPtr will be set by this function to point to the
|
||||
* appropriate section data block that is part of the DisplayIdRaw.
|
||||
*
|
||||
* @return
|
||||
* - XST_SUCCESS if the section data block with the specified tag
|
||||
* was found.
|
||||
* - XST_FAILURE otherwise.
|
||||
*
|
||||
* @note The DataBlockPtr argument is modified to point to the entry
|
||||
* in DisplayIdRaw that represents the beginning of the desired
|
||||
* section data block.
|
||||
*
|
||||
*******************************************************************************/
|
||||
u32 XDptx_GetDispIdDataBlock(u8 *DisplayIdRaw, u8 SectionTag, u8 **DataBlockPtr)
|
||||
{
|
||||
u8 Index;
|
||||
|
@ -230,6 +320,36 @@ u32 XDptx_GetDispIdDataBlock(u8 *DisplayIdRaw, u8 SectionTag, u8 **DataBlockPtr)
|
|||
return XST_FAILURE;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/**
|
||||
* Search for and retrieve a downstream DisplayPort device's Tiled Display
|
||||
* Topology (TDT) section data block that is part of the downstream device's
|
||||
* DisplayID structure. The DisplayID structure is part of the Extended Display
|
||||
* Identification Data (EDID) in the form of an extension block.
|
||||
*
|
||||
* @param InstancePtr is a pointer to the XDptx instance.
|
||||
* @param EdidExt is a pointer to the data area that will be filled by the
|
||||
* retrieved DisplayID extension block.
|
||||
* @param LinkCountTotal is the total DisplayPort links connecting the
|
||||
* DisplayPort TX to the targeted downstream device.
|
||||
* @param RelativeAddress is the relative address from the DisplayPort
|
||||
* source to the targeted DisplayPort device.
|
||||
* @param DataBlockPtr will be set by this function to point to the TDT
|
||||
* data block that is part of the EdidExt extension block.
|
||||
*
|
||||
* @return
|
||||
* - XST_SUCCESS a DisplayID extension block was found.
|
||||
* - XST_ERROR_COUNT_MAX if a time out occurred while attempting to
|
||||
* read an extension block.
|
||||
* - XST_DEVICE_NOT_FOUND if no RX device is connected.
|
||||
* - XST_FAILURE if no DisplayID extension block was found or some
|
||||
* error occurred in the search.
|
||||
*
|
||||
* @note The EdidExt will be filled with the DisplayID EDID extension
|
||||
* block and the DataBlockPtr argument is modified to point to the
|
||||
* EdidExt entry representing the TDT section data block.
|
||||
*
|
||||
*******************************************************************************/
|
||||
u32 XDptx_GetRemoteTiledDisplayDb(XDptx *InstancePtr, u8 *EdidExt,
|
||||
u8 LinkCountTotal, u8 *RelativeAddress, u8 **DataBlockPtr)
|
||||
{
|
||||
|
@ -240,7 +360,7 @@ u32 XDptx_GetRemoteTiledDisplayDb(XDptx *InstancePtr, u8 *EdidExt,
|
|||
Status = XDptx_GetRemoteEdidDispIdExt(InstancePtr, EdidExt,
|
||||
LinkCountTotal, RelativeAddress);
|
||||
if (Status != XST_SUCCESS) {
|
||||
/* The sink does not possess a DisplayID EDID extension block. */
|
||||
/* The sink does not have a DisplayID EDID extension block. */
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
|
|
@ -707,6 +707,25 @@ u32 XDptx_FindAccessibleDpDevices(XDptx *InstancePtr, u8 LinkCountTotal,
|
|||
return XST_SUCCESS;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/**
|
||||
* Swap the ordering of the sinks in the topology's sink list. All sink
|
||||
* information is preserved in the node table - the swapping takes place only on
|
||||
* the pointers to the sinks in the node table. The reason this swapping is done
|
||||
* is so that functions that use the sink list will act on the sinks in a
|
||||
* different order.
|
||||
*
|
||||
* @param InstancePtr is a pointer to the XDptx instance.
|
||||
* @param Index0 is the sink list's index of one of the sink pointers to
|
||||
* be swapped.
|
||||
* @param Index1 is the sink list's index of the other sink pointer to be
|
||||
* swapped.
|
||||
*
|
||||
* @return None.
|
||||
*
|
||||
* @note None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
void XDptx_TopologySwapSinks(XDptx *InstancePtr, u8 Index0, u8 Index1)
|
||||
{
|
||||
XDptx_TopologyNode *TmpSink = InstancePtr->Topology.SinkList[Index0];
|
||||
|
@ -717,6 +736,26 @@ void XDptx_TopologySwapSinks(XDptx *InstancePtr, u8 Index0, u8 Index1)
|
|||
InstancePtr->Topology.SinkList[Index1] = TmpSink;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/**
|
||||
* Order the sink list with all sinks of the same tiled display being sorted by
|
||||
* 'tile order'. Refer to the XDptx_GetDispIdTdtTileOrder macro on how to
|
||||
* determine the 'tile order'. Sinks of a tiled display will have an index in
|
||||
* the sink list that is lower than all indices of other sinks within that same
|
||||
* tiled display that have a greater 'tile order'.
|
||||
* When operations are done on the sink list, this ordering will ensure that
|
||||
* sinks within the same tiled display will be acted upon in a consistent
|
||||
* manner - with an incrementing sink list index, sinks with a lower 'tile
|
||||
* order' will be acted upon first relative to the other sinks in the same tiled
|
||||
* display. Multiple tiled displays may exist in the sink list.
|
||||
*
|
||||
* @param InstancePtr is a pointer to the XDptx instance.
|
||||
*
|
||||
* @return None.
|
||||
*
|
||||
* @note None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
u32 XDptx_TopologySortSinksByTiling(XDptx *InstancePtr)
|
||||
{
|
||||
u32 Status;
|
||||
|
@ -735,7 +774,7 @@ u32 XDptx_TopologySortSinksByTiling(XDptx *InstancePtr)
|
|||
CurrSink->LinkCountTotal,
|
||||
CurrSink->RelativeAddress, &CurrTdt);
|
||||
if (Status != XST_SUCCESS) {
|
||||
/* No tiled display topology data block exists. */
|
||||
/* No Tiled Display Topology (TDT) data block exists. */
|
||||
return XST_FAILURE;
|
||||
}
|
||||
|
||||
|
@ -747,7 +786,7 @@ u32 XDptx_TopologySortSinksByTiling(XDptx *InstancePtr)
|
|||
SameTileDispNum = XDptx_GetDispIdTdtNumTiles(CurrTdt);
|
||||
|
||||
/* Try to find a sink that is part of the same tiled display,
|
||||
* but has a smaller tile location - the sink with a smaller
|
||||
* but has a smaller tile location - the sink with a smallest
|
||||
* tile location should be ordered first in the topology's sink
|
||||
* list. */
|
||||
for (CmpIndex = (CurrIndex + 1);
|
||||
|
@ -761,7 +800,7 @@ u32 XDptx_TopologySortSinksByTiling(XDptx *InstancePtr)
|
|||
CmpSink->LinkCountTotal,
|
||||
CmpSink->RelativeAddress, &CmpTdt);
|
||||
if (Status != XST_SUCCESS) {
|
||||
/* No tiled display topology data block. */
|
||||
/* No TDT data block. */
|
||||
return XST_FAILURE;
|
||||
}
|
||||
|
||||
|
@ -2890,6 +2929,24 @@ static u8 XDptx_CrcCalculate(const u8 *Data, u32 NumberOfBits, u8 Polynomial)
|
|||
return Remainder & 0xFF;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/**
|
||||
* Check whether or not the two specified Tiled Display Topology (TDT) data
|
||||
* blocks represent devices that are part of the same tiled display. This is
|
||||
* done by comparing the TDT ID descriptor (tiled display manufacturer/vendor
|
||||
* ID, product ID and serial number fields).
|
||||
*
|
||||
* @param TileDisp0 is one of the TDT data blocks to be compared.
|
||||
* @param TileDisp1 is the other TDT data block to be compared.
|
||||
*
|
||||
* @return
|
||||
* - 1 if the two TDT sections represent devices that are part of
|
||||
* the same tiled display.
|
||||
* - 0 otherwise.
|
||||
*
|
||||
* @note None.
|
||||
*
|
||||
*******************************************************************************/
|
||||
static u32 XDptx_IsSameTileDisplay(u8 *TileDisp0, u8 *TileDisp1)
|
||||
{
|
||||
if ((TileDisp0[XDPTX_DISPID_TDT_VENID0] !=
|
||||
|
|
Loading…
Add table
Reference in a new issue