mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2026-02-22 07:53:58 +00:00
580.82.07
This commit is contained in:
@@ -1200,6 +1200,10 @@ NVT_STATUS NV_STDCALL NvTiming_ParseEDIDInfo(NvU8 *pEdid, NvU32 length, NVT_EDID
|
||||
|
||||
getEdidHDM1_4bVsdbTiming(pInfo);
|
||||
|
||||
#if defined(NVT_USE_NVKMS)
|
||||
prioritizeEdidHDMIExtTiming(pInfo);
|
||||
#endif
|
||||
|
||||
// Assert if no timings were found (due to a bad EDID) or if we mistakenly
|
||||
// assigned more timings than we allocated space for (due to bad logic above)
|
||||
nvt_assert(pInfo->total_timings &&
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//*****************************************************************************
|
||||
//
|
||||
// SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
// SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||
@@ -2838,122 +2838,148 @@ NVT_STATUS NvTiming_ConstructVendorSpecificInfoframe(NVT_EDID_INFO *pEdidInfo, N
|
||||
return NVT_STATUS_ERR;
|
||||
}
|
||||
|
||||
if ((pCtrl->VSIFVersion != NVT_VSIF_VERSION_HF_VSIF) && (pCtrl->VSIFVersion != NVT_VSIF_VERSION_H14B_VSIF))
|
||||
{
|
||||
return NVT_STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
// initialize the infoframe buffer
|
||||
nvt_nvu8_set_bits(pInfoFrame->Header.type, NVT_HDMI_VS_HB0_VALUE, NVT_HDMI_VS_HB0_MASK, NVT_HDMI_VS_HB0_SHIFT);
|
||||
nvt_nvu8_set_bits(pInfoFrame->Header.version, NVT_HDMI_VS_HB1_VALUE, NVT_HDMI_VS_HB1_MASK, NVT_HDMI_VS_HB1_SHIFT);
|
||||
nvt_nvu8_set_bits(pInfoFrame->Header.length, NVT_HDMI_VS_HB2_VALUE, NVT_HDMI_VS_HB2_MASK, NVT_HDMI_VS_HB2_SHIFT);
|
||||
|
||||
if (pCtrl->VSIFVersion == NVT_VSIF_VERSION_H14B_VSIF)
|
||||
{
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte1, NVT_HDMI_VS_BYTE1_OUI_VER_1_4, NVT_HDMI_VS_BYTE1_OUI_MASK, NVT_HDMI_VS_BYTE1_OUI_SHIFT);
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte2, NVT_HDMI_VS_BYTE2_OUI_VER_1_4, NVT_HDMI_VS_BYTE2_OUI_MASK, NVT_HDMI_VS_BYTE2_OUI_SHIFT);
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte3, NVT_HDMI_VS_BYTE3_OUI_VER_1_4, NVT_HDMI_VS_BYTE3_OUI_MASK, NVT_HDMI_VS_BYTE3_OUI_SHIFT);
|
||||
}
|
||||
else if (pCtrl->VSIFVersion == NVT_VSIF_VERSION_HF_VSIF)
|
||||
{
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte1, NVT_HDMI_VS_BYTE1_OUI_VER_2_0, NVT_HDMI_VS_BYTE1_OUI_MASK, NVT_HDMI_VS_BYTE1_OUI_SHIFT);
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte2, NVT_HDMI_VS_BYTE2_OUI_VER_2_0, NVT_HDMI_VS_BYTE2_OUI_MASK, NVT_HDMI_VS_BYTE2_OUI_SHIFT);
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte3, NVT_HDMI_VS_BYTE3_OUI_VER_2_0, NVT_HDMI_VS_BYTE3_OUI_MASK, NVT_HDMI_VS_BYTE3_OUI_SHIFT);
|
||||
}
|
||||
|
||||
// init the header (mostly done in default Infoframe)
|
||||
pInfoFrame->Header.length = offsetof(NVT_VENDOR_SPECIFIC_INFOFRAME_PAYLOAD, optionalBytes);
|
||||
|
||||
// construct the desired infoframe contents based on the control
|
||||
|
||||
// clear all static reserved fields
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte4, 0, NVT_HDMI_VS_BYTE4_RSVD_MASK, NVT_HDMI_VS_BYTE4_RSVD_SHIFT);
|
||||
|
||||
// setup the parameters
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte4, pCtrl->HDMIFormat, NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_MASK, NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_SHIFT);
|
||||
|
||||
// determine what the format is -- if disabled, force the format to NONE.
|
||||
if (pCtrl->Enable)
|
||||
if (pCtrl->VSIFVersion == NVT_VSIF_VERSION_HF_VSIF)
|
||||
{
|
||||
HDMIFormat = pCtrl->HDMIFormat;
|
||||
}
|
||||
else
|
||||
{
|
||||
HDMIFormat = NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_NONE;
|
||||
}
|
||||
|
||||
switch(HDMIFormat)
|
||||
{
|
||||
case NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_NONE:
|
||||
// infoframe is only supported on 861F and later
|
||||
if (pEdidInfo->ext861.revision < NVT_CEA861_REV_F)
|
||||
{
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte5, 0, NVT_HDMI_VS_BYTENv_RSVD_MASK, NVT_HDMI_VS_BYTENv_RSVD_SHIFT);
|
||||
break;
|
||||
return NVT_STATUS_ERR;
|
||||
}
|
||||
case NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_EXT:
|
||||
{
|
||||
// Note: extended resolution frames are not yet fully supported
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte5, pCtrl->HDMI_VIC, NVT_HDMI_VS_BYTE5_HDMI_VIC_MASK, NVT_HDMI_VS_BYTE5_HDMI_VIC_SHIFT);
|
||||
break;
|
||||
}
|
||||
case NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_3D:
|
||||
{
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte5, 0, NVT_HDMI_VS_BYTE5_HDMI_RSVD_MASK, NVT_HDMI_VS_BYTE5_HDMI_RSVD_SHIFT);
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte5, pCtrl->ThreeDStruc, NVT_HDMI_VS_BYTE5_HDMI_3DS_MASK, NVT_HDMI_VS_BYTE5_HDMI_3DS_SHIFT);
|
||||
|
||||
// side by side half requires additional format data in the infoframe.
|
||||
if (NVT_HDMI_VS_BYTE5_HDMI_3DS_SIDEBYSIDEHALF == pCtrl->ThreeDStruc)
|
||||
if (pCtrl->Enable && (pCtrl->HDMIFormat != NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_NONE))
|
||||
{
|
||||
return NVT_STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte1, NVT_HDMI_VS_BYTE1_OUI_VER_2_0, NVT_HDMI_VS_BYTE1_OUI_MASK, NVT_HDMI_VS_BYTE1_OUI_SHIFT);
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte2, NVT_HDMI_VS_BYTE2_OUI_VER_2_0, NVT_HDMI_VS_BYTE2_OUI_MASK, NVT_HDMI_VS_BYTE2_OUI_SHIFT);
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte3, NVT_HDMI_VS_BYTE3_OUI_VER_2_0, NVT_HDMI_VS_BYTE3_OUI_MASK, NVT_HDMI_VS_BYTE3_OUI_SHIFT);
|
||||
|
||||
// construct the desired HF-VSIF infoframe contents based on the control
|
||||
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte4, NVT_HDMI_HF_VS_BYTE4_VER_1_0, NVT_HDMI_HF_VS_BYTE4_VER_MASK, NVT_HDMI_HF_VS_BYTE4_VER_SHIFT);
|
||||
|
||||
if (pCtrl->Enable)
|
||||
{
|
||||
if (pCtrl->ALLMEnable == 1)
|
||||
{
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.optionalBytes[optIdx], pCtrl->ThreeDDetail, NVT_HDMI_VS_BYTE_OPT1_HDMI_3DEX_MASK, NVT_HDMI_VS_BYTE_OPT1_HDMI_3DEX_SHIFT);
|
||||
optIdx++;
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte5, NVT_HDMI_VS_BYTE5_ALLM_MODE_EN, NVT_HDMI_VS_BYTE5_ALLM_MODE_MASK, NVT_HDMI_VS_BYTE5_ALLM_MODE_SHIFT);
|
||||
}
|
||||
if (pCtrl->MetadataPresent)
|
||||
else if (pCtrl->ALLMEnable == 0)
|
||||
{
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte5, NVT_HDMI_VS_BYTE5_HDMI_META_PRESENT_PRES, NVT_HDMI_VS_BYTE5_3D_META_PRESENT_MASK, NVT_HDMI_VS_BYTE5_3D_META_PRESENT_SHIFT);
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte5, NVT_HDMI_VS_BYTE5_ALLM_MODE_DIS, NVT_HDMI_VS_BYTE5_ALLM_MODE_MASK, NVT_HDMI_VS_BYTE5_ALLM_MODE_SHIFT);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte5, NVT_HDMI_VS_BYTENv_RSVD, NVT_HDMI_VS_BYTENv_RSVD_MASK, NVT_HDMI_VS_BYTENv_RSVD_SHIFT);
|
||||
}
|
||||
}
|
||||
else if (pCtrl->VSIFVersion == NVT_VSIF_VERSION_H14B_VSIF)
|
||||
{
|
||||
// construct the desired H14b-VSIF infoframe contents based on the control
|
||||
|
||||
switch(pCtrl->MetadataType)
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte1, NVT_HDMI_VS_BYTE1_OUI_VER_1_4, NVT_HDMI_VS_BYTE1_OUI_MASK, NVT_HDMI_VS_BYTE1_OUI_SHIFT);
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte2, NVT_HDMI_VS_BYTE2_OUI_VER_1_4, NVT_HDMI_VS_BYTE2_OUI_MASK, NVT_HDMI_VS_BYTE2_OUI_SHIFT);
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte3, NVT_HDMI_VS_BYTE3_OUI_VER_1_4, NVT_HDMI_VS_BYTE3_OUI_MASK, NVT_HDMI_VS_BYTE3_OUI_SHIFT);
|
||||
|
||||
// clear all static reserved fields
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte4, 0, NVT_HDMI_VS_BYTE4_RSVD_MASK, NVT_HDMI_VS_BYTE4_RSVD_SHIFT);
|
||||
|
||||
// setup the parameters
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte4, pCtrl->HDMIFormat, NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_MASK, NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_SHIFT);
|
||||
|
||||
// determine what the format is -- if disabled, force the format to NONE.
|
||||
if (pCtrl->Enable)
|
||||
{
|
||||
HDMIFormat = pCtrl->HDMIFormat;
|
||||
}
|
||||
else
|
||||
{
|
||||
HDMIFormat = NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_NONE;
|
||||
}
|
||||
|
||||
switch(HDMIFormat)
|
||||
{
|
||||
case NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_NONE:
|
||||
{
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte5, 0, NVT_HDMI_VS_BYTENv_RSVD_MASK, NVT_HDMI_VS_BYTENv_RSVD_SHIFT);
|
||||
break;
|
||||
}
|
||||
case NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_EXT:
|
||||
{
|
||||
// Note: extended resolution frames are not yet fully supported
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte5, pCtrl->HDMI_VIC, NVT_HDMI_VS_BYTE5_HDMI_VIC_MASK, NVT_HDMI_VS_BYTE5_HDMI_VIC_SHIFT);
|
||||
break;
|
||||
}
|
||||
case NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_3D:
|
||||
{
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte5, 0, NVT_HDMI_VS_BYTE5_HDMI_RSVD_MASK, NVT_HDMI_VS_BYTE5_HDMI_RSVD_SHIFT);
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte5, pCtrl->ThreeDStruc, NVT_HDMI_VS_BYTE5_HDMI_3DS_MASK, NVT_HDMI_VS_BYTE5_HDMI_3DS_SHIFT);
|
||||
|
||||
// side by side half requires additional format data in the infoframe.
|
||||
if (NVT_HDMI_VS_BYTE5_HDMI_3DS_SIDEBYSIDEHALF == pCtrl->ThreeDStruc)
|
||||
{
|
||||
case NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_TYPE_PARALLAX:
|
||||
{
|
||||
if (sizeof(pCtrl->Metadata) >= NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_LEN_PARALLAX &&
|
||||
sizeof(pInfoFrame->Data.optionalBytes) - (optIdx + 1) >= NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_LEN_PARALLAX)
|
||||
{
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.optionalBytes[optIdx], NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_LEN_PARALLAX, NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_LEN_MASK, NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_LEN_SHIFT);
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.optionalBytes[optIdx], NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_TYPE_PARALLAX, NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_TYPE_MASK, NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_TYPE_SHIFT);
|
||||
++optIdx;
|
||||
|
||||
NVMISC_MEMCPY(pCtrl->Metadata, &pInfoFrame->Data.optionalBytes[optIdx], NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_LEN_PARALLAX);
|
||||
optIdx += NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_LEN_PARALLAX;
|
||||
}
|
||||
else
|
||||
{
|
||||
// not enough data in the control struct or not enough room in the infoframe -- BOTH compile time issues!!
|
||||
// ignore metadata.
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte5, NVT_HDMI_VS_BYTE5_HDMI_META_PRESENT_NOTPRES, NVT_HDMI_VS_BYTE5_3D_META_PRESENT_MASK, NVT_HDMI_VS_BYTE5_3D_META_PRESENT_SHIFT);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
// unrecognised metadata, recover the best we can.
|
||||
// note -- can not copy whatever is there because type implies length.
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte5, NVT_HDMI_VS_BYTE5_HDMI_META_PRESENT_NOTPRES, NVT_HDMI_VS_BYTE5_3D_META_PRESENT_MASK, NVT_HDMI_VS_BYTE5_3D_META_PRESENT_SHIFT);
|
||||
RetCode = NVT_STATUS_ERR;
|
||||
}
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.optionalBytes[optIdx], pCtrl->ThreeDDetail, NVT_HDMI_VS_BYTE_OPT1_HDMI_3DEX_MASK, NVT_HDMI_VS_BYTE_OPT1_HDMI_3DEX_SHIFT);
|
||||
optIdx++;
|
||||
}
|
||||
if (pCtrl->MetadataPresent)
|
||||
{
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte5, NVT_HDMI_VS_BYTE5_HDMI_META_PRESENT_PRES, NVT_HDMI_VS_BYTE5_3D_META_PRESENT_MASK, NVT_HDMI_VS_BYTE5_3D_META_PRESENT_SHIFT);
|
||||
|
||||
switch(pCtrl->MetadataType)
|
||||
{
|
||||
case NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_TYPE_PARALLAX:
|
||||
{
|
||||
if (sizeof(pCtrl->Metadata) >= NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_LEN_PARALLAX &&
|
||||
sizeof(pInfoFrame->Data.optionalBytes) - (optIdx + 1) >= NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_LEN_PARALLAX)
|
||||
{
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.optionalBytes[optIdx], NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_LEN_PARALLAX, NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_LEN_MASK, NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_LEN_SHIFT);
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.optionalBytes[optIdx], NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_TYPE_PARALLAX, NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_TYPE_MASK, NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_TYPE_SHIFT);
|
||||
++optIdx;
|
||||
|
||||
NVMISC_MEMCPY(pCtrl->Metadata, &pInfoFrame->Data.optionalBytes[optIdx], NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_LEN_PARALLAX);
|
||||
optIdx += NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_LEN_PARALLAX;
|
||||
}
|
||||
else
|
||||
{
|
||||
// not enough data in the control struct or not enough room in the infoframe -- BOTH compile time issues!!
|
||||
// ignore metadata.
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte5, NVT_HDMI_VS_BYTE5_HDMI_META_PRESENT_NOTPRES, NVT_HDMI_VS_BYTE5_3D_META_PRESENT_MASK, NVT_HDMI_VS_BYTE5_3D_META_PRESENT_SHIFT);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
// unrecognised metadata, recover the best we can.
|
||||
// note -- can not copy whatever is there because type implies length.
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte5, NVT_HDMI_VS_BYTE5_HDMI_META_PRESENT_NOTPRES, NVT_HDMI_VS_BYTE5_3D_META_PRESENT_MASK, NVT_HDMI_VS_BYTE5_3D_META_PRESENT_SHIFT);
|
||||
RetCode = NVT_STATUS_ERR;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte5, NVT_HDMI_VS_BYTE5_HDMI_META_PRESENT_NOTPRES, NVT_HDMI_VS_BYTE5_3D_META_PRESENT_MASK, NVT_HDMI_VS_BYTE5_3D_META_PRESENT_SHIFT);
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte5, NVT_HDMI_VS_BYTE5_HDMI_META_PRESENT_NOTPRES, NVT_HDMI_VS_BYTE5_3D_META_PRESENT_MASK, NVT_HDMI_VS_BYTE5_3D_META_PRESENT_SHIFT);
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (pCtrl->ALLMEnable == 1)
|
||||
{
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte5, NVT_HDMI_VS_BYTE5_ALLM_MODE_EN, NVT_HDMI_VS_BYTE5_ALLM_MODE_MASK, NVT_HDMI_VS_BYTE5_ALLM_MODE_SHIFT);
|
||||
}
|
||||
else if (pCtrl->ALLMEnable == 0)
|
||||
{
|
||||
nvt_nvu8_set_bits(pInfoFrame->Data.byte5, NVT_HDMI_VS_BYTE5_ALLM_MODE_DIS, NVT_HDMI_VS_BYTE5_ALLM_MODE_MASK, NVT_HDMI_VS_BYTE5_ALLM_MODE_SHIFT);
|
||||
}
|
||||
|
||||
// clear last byte of infoframe (reserved per spec).
|
||||
@@ -3599,6 +3625,27 @@ void parseEdidHDMILLCTiming(NVT_EDID_INFO *pInfo, VSDB_DATA *pVsdb, NvU32 *pMapS
|
||||
}
|
||||
}
|
||||
|
||||
CODE_SEGMENT(PAGE_DD_CODE)
|
||||
void prioritizeEdidHDMIExtTiming(NVT_EDID_INFO *pInfo)
|
||||
{
|
||||
NvU16 i, j;
|
||||
|
||||
nvt_assert(pInfo->total_timings <= COUNT(pInfo->timing));
|
||||
|
||||
for (i = 0; i < pInfo->total_timings; ++i)
|
||||
{
|
||||
if (NVT_GET_TIMING_STATUS_TYPE(pInfo->timing[i].etc.status) == NVT_TYPE_HDMI_EXT)
|
||||
{
|
||||
const NVT_TIMING extTimings = pInfo->timing[i];
|
||||
for (j = i; j > 0; j--)
|
||||
{
|
||||
pInfo->timing[j] = pInfo->timing[j - 1];
|
||||
}
|
||||
pInfo->timing[0] = extTimings;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// get HDMI 1.4 3D mandatory stereo format datail base on the input vic.
|
||||
// If the vic is not in the mandatory format list, return error.
|
||||
CODE_SEGMENT(PAGE_DD_CODE)
|
||||
|
||||
@@ -3807,6 +3807,11 @@ typedef struct tagNVT_VENDOR_SPECIFIC_INFOFRAME
|
||||
#define NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_NONE 0x00
|
||||
#define NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_EXT 0x01
|
||||
#define NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_3D 0x02
|
||||
|
||||
#define NVT_HDMI_HF_VS_BYTE4_VER_MASK 0xff
|
||||
#define NVT_HDMI_HF_VS_BYTE4_VER_SHIFT 0x00
|
||||
#define NVT_HDMI_HF_VS_BYTE4_VER_1_0 0x01
|
||||
|
||||
// 0x03-0x07 reserved
|
||||
//
|
||||
#define NVT_HDMI_VS_BYTE5_HDMI_VIC_MASK 0xff // HDMI_VID_FMT = HDMI_VID_FMT_EXT
|
||||
|
||||
@@ -88,6 +88,7 @@ void parseEdidHdmiLlcBasicInfo(VSDB_DATA *pVsdb, NVT_HDMI_LLC_INFO *pHdmiL
|
||||
void parseEdidHdmiForumVSDB(VSDB_DATA *pVsdb, NVT_HDMI_FORUM_INFO *pHdmiInfo);
|
||||
void getEdidHDM1_4bVsdbTiming(NVT_EDID_INFO *pInfo);
|
||||
void parseEdidHDMILLCTiming(NVT_EDID_INFO *pInfo, VSDB_DATA *pVsdb, NvU32 *pSupported, HDMI3DSUPPORTMAP * pM);
|
||||
void prioritizeEdidHDMIExtTiming(NVT_EDID_INFO *pInfo);
|
||||
void parseEdidNvidiaVSDBBlock(VSDB_DATA *pVsdb, NVDA_VSDB_PARSED_INFO *vsdbInfo);
|
||||
void parseCta861HdrStaticMetadataDataBlock(NVT_EDID_CEA861_INFO *pExt861, void *pRawInfo, NVT_CTA861_ORIGIN flag);
|
||||
void parseCta861DvStaticMetadataDataBlock(VSVDB_DATA* pVsvdb, NVT_DV_STATIC_METADATA* pDvInfo);
|
||||
|
||||
Reference in New Issue
Block a user