mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2026-02-25 01:13:59 +00:00
580.82.07
This commit is contained in:
@@ -51,7 +51,8 @@ NvBool nvValidateModeForModeset(NVDpyEvoRec *pDpyEvo,
|
||||
const struct NvKmsRect *pViewPortOut,
|
||||
NVDpyAttributeColor *pDpyColor,
|
||||
NVHwModeTimingsEvo *pTimingsEvo,
|
||||
NVT_VIDEO_INFOFRAME_CTRL *pInfoFrameCtrl);
|
||||
NVT_VIDEO_INFOFRAME_CTRL *pInfoFrameCtrl,
|
||||
NVT_VENDOR_SPECIFIC_INFOFRAME_CTRL *pVSInfoFrameCtrl);
|
||||
|
||||
const NVT_TIMING *nvFindEdidNVT_TIMING(
|
||||
const NVDpyEvoRec *pDpyEvo,
|
||||
|
||||
@@ -37,7 +37,8 @@ nvGetHwModeTimings(const NVDispEvoRec *pDispEvo,
|
||||
const struct NvKmsSetModeOneHeadRequest *pRequestHead,
|
||||
NVHwModeTimingsEvo *pTimings,
|
||||
NVDpyAttributeColor *pDpyColor,
|
||||
NVT_VIDEO_INFOFRAME_CTRL *pInfoFrameCtrl);
|
||||
NVT_VIDEO_INFOFRAME_CTRL *pInfoFrameCtrl,
|
||||
NVT_VENDOR_SPECIFIC_INFOFRAME_CTRL *pVSInfoFrameCtrl);
|
||||
|
||||
NvBool nvGetAllowHeadSurfaceInNvKms(const NVDevEvoRec *pDevEvo,
|
||||
const struct NvKmsPerOpenDev *pOpenDev,
|
||||
|
||||
@@ -1843,6 +1843,7 @@ typedef struct _NVDispHeadAudioStateEvoRec {
|
||||
|
||||
typedef struct _NVDispHeadInfoFrameStateEvoRec {
|
||||
NVT_VIDEO_INFOFRAME_CTRL ctrl;
|
||||
NVT_VENDOR_SPECIFIC_INFOFRAME_CTRL vendorSpecificCtrl;
|
||||
NvBool hdTimings;
|
||||
} NVDispHeadInfoFrameStateEvoRec;
|
||||
|
||||
@@ -2568,6 +2569,15 @@ static inline NvBool nvIs3DVisionStereoEvo(const enum NvKmsStereoMode stereo)
|
||||
stereo == NVKMS_STEREO_NVIDIA_3D_VISION_PRO);
|
||||
}
|
||||
|
||||
static inline NvBool nvGetPreferHdmiFrlMode(
|
||||
const NVDevEvoRec *pDevEvo,
|
||||
const struct NvKmsModeValidationParams *pParams)
|
||||
{
|
||||
const NvBool preferHDMIFrlMode =
|
||||
!!(pParams->overrides & NVKMS_MODE_VALIDATION_PREFER_HDMI_FRL_MODE);
|
||||
return preferHDMIFrlMode;
|
||||
}
|
||||
|
||||
/*
|
||||
* Utility macro for iterating over all head bits set in a head bit mask
|
||||
*/
|
||||
|
||||
@@ -362,6 +362,7 @@ enum NvKmsModeValidationOverrides {
|
||||
NVKMS_MODE_VALIDATION_ALLOW_DP_INTERLACED = (1 << 17),
|
||||
NVKMS_MODE_VALIDATION_NO_INTERLACED_MODES = (1 << 18),
|
||||
NVKMS_MODE_VALIDATION_MAX_ONE_HARDWARE_HEAD = (1 << 19),
|
||||
NVKMS_MODE_VALIDATION_PREFER_HDMI_FRL_MODE = (1 << 20),
|
||||
};
|
||||
|
||||
/*!
|
||||
|
||||
@@ -42,8 +42,21 @@ void dpFree(void *p)
|
||||
|
||||
static NVEvoLogType dpSeverityToNvkmsMap(DP_LOG_LEVEL severity)
|
||||
{
|
||||
NVEvoLogType level = EVO_LOG_INFO;
|
||||
return level;
|
||||
switch (severity) {
|
||||
case DP_SILENT:
|
||||
case DP_INFO:
|
||||
case DP_NOTICE:
|
||||
return EVO_LOG_INFO;
|
||||
case DP_WARNING:
|
||||
return EVO_LOG_WARN;
|
||||
case DP_ERROR:
|
||||
case DP_HW_ERROR:
|
||||
case DP_FATAL:
|
||||
return EVO_LOG_ERROR;
|
||||
}
|
||||
|
||||
nvAssert(!"Invalid DP_LOG_LEVEL enumerant passed");
|
||||
return EVO_LOG_ERROR;
|
||||
}
|
||||
|
||||
void dpPrintf(DP_LOG_LEVEL severity, const char *format, ...)
|
||||
|
||||
@@ -6893,17 +6893,18 @@ static NvBool GetDefaultFrlDpyColor(
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static NvBool GetDfpHdmiProtocol(const NVDpyEvoRec *pDpyEvo,
|
||||
const NvU32 overrides,
|
||||
NVDpyAttributeColor *pDpyColor,
|
||||
NVHwModeTimingsEvoPtr pTimings,
|
||||
enum nvKmsTimingsProtocol *pTimingsProtocol)
|
||||
static NvBool GetDfpHdmiProtocol(
|
||||
const NVDpyEvoRec *pDpyEvo,
|
||||
const struct NvKmsModeValidationParams *pValidationParams,
|
||||
NVDpyAttributeColor *pDpyColor,
|
||||
NVHwModeTimingsEvoPtr pTimings,
|
||||
enum nvKmsTimingsProtocol *pTimingsProtocol)
|
||||
{
|
||||
NVConnectorEvoPtr pConnectorEvo = pDpyEvo->pConnectorEvo;
|
||||
const NVDevEvoRec *pDevEvo = pConnectorEvo->pDispEvo->pDevEvo;
|
||||
const NvU32 rmProtocol = pConnectorEvo->or.protocol;
|
||||
const NvKmsDpyOutputColorFormatInfo colorFormatsInfo =
|
||||
nvDpyGetOutputColorFormatInfo(pDpyEvo);
|
||||
const NvBool forceHdmiFrlIfSupported = FALSE;
|
||||
|
||||
nvAssert(rmProtocol == NV0073_CTRL_SPECIFIC_OR_PROTOCOL_SOR_DUAL_TMDS ||
|
||||
rmProtocol == NV0073_CTRL_SPECIFIC_OR_PROTOCOL_SOR_SINGLE_TMDS_A ||
|
||||
@@ -6911,11 +6912,12 @@ static NvBool GetDfpHdmiProtocol(const NVDpyEvoRec *pDpyEvo,
|
||||
|
||||
/* Override protocol if this mode requires HDMI FRL. */
|
||||
/* If we don't require boot clocks... */
|
||||
if (((overrides & NVKMS_MODE_VALIDATION_REQUIRE_BOOT_CLOCKS) == 0) &&
|
||||
if (((pValidationParams->overrides &
|
||||
NVKMS_MODE_VALIDATION_REQUIRE_BOOT_CLOCKS) == 0) &&
|
||||
(!nvHdmiIsTmdsPossible(pDpyEvo, pTimings, pDpyColor) ||
|
||||
forceHdmiFrlIfSupported) &&
|
||||
/* If FRL is supported... */
|
||||
nvHdmiDpySupportsFrl(pDpyEvo)) {
|
||||
nvGetPreferHdmiFrlMode(pDevEvo, pValidationParams)) &&
|
||||
/* If FRL is supported... */
|
||||
nvHdmiDpySupportsFrl(pDpyEvo)) {
|
||||
|
||||
/* Hardware does not support HDMI FRL with YUV422 */
|
||||
if ((pDpyColor->format ==
|
||||
@@ -6977,7 +6979,7 @@ static NvBool GetDfpProtocol(const NVDpyEvoRec *pDpyEvo,
|
||||
|
||||
if (pConnectorEvo->or.type == NV0073_CTRL_SPECIFIC_OR_TYPE_SOR) {
|
||||
if (nvDpyIsHdmiEvo(pDpyEvo)) {
|
||||
if (!GetDfpHdmiProtocol(pDpyEvo, overrides, pDpyColor, pTimings,
|
||||
if (!GetDfpHdmiProtocol(pDpyEvo, pParams, pDpyColor, pTimings,
|
||||
&timingsProtocol)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -427,38 +427,28 @@ static void SendVideoInfoFrame(const NVDispEvoRec *pDispEvo,
|
||||
}
|
||||
|
||||
/*
|
||||
* SendHDMI3DVendorSpecificInfoFrame() - Construct vendor specific infoframe
|
||||
* using provided EDID and call ->SendHdmiInfoFrame() to send it to RM. Currently
|
||||
* hardcoded to send the infoframe necessary for HDMI 3D.
|
||||
* SendVendorSpecificInfoFrame() - Construct vendor specific infoframe using
|
||||
* provided EDID and call ->SendHdmiInfoFrame() to send it to RM.
|
||||
*/
|
||||
|
||||
static void
|
||||
SendHDMI3DVendorSpecificInfoFrame(const NVDispEvoRec *pDispEvo,
|
||||
const NvU32 head, NVT_EDID_INFO *pEdidInfo)
|
||||
SendVendorSpecificInfoFrame(const NVDispEvoRec *pDispEvo,
|
||||
const NvU32 head,
|
||||
const NVDispHeadInfoFrameStateEvoRec *pInfoFrameState,
|
||||
NVT_EDID_INFO *pEdidInfo)
|
||||
{
|
||||
const NVDevEvoRec *pDevEvo = pDispEvo->pDevEvo;
|
||||
const NVDispHeadStateEvoRec *pHeadState =
|
||||
&pDispEvo->headState[head];
|
||||
NVT_VENDOR_SPECIFIC_INFOFRAME_CTRL vendorCtrl = {
|
||||
.Enable = 1,
|
||||
.HDMIFormat = NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_3D,
|
||||
.HDMI_VIC = NVT_HDMI_VS_BYTE5_HDMI_VIC_NA,
|
||||
.ThreeDStruc = NVT_HDMI_VS_BYTE5_HDMI_3DS_FRAMEPACK,
|
||||
.ThreeDDetail = NVT_HDMI_VS_BYTE_OPT1_HDMI_3DEX_NA,
|
||||
.MetadataPresent = 0,
|
||||
.MetadataType = NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_TYPE_NA,
|
||||
};
|
||||
NVT_VENDOR_SPECIFIC_INFOFRAME_CTRL vendorCtrl = pInfoFrameState->vendorSpecificCtrl;
|
||||
NVT_VENDOR_SPECIFIC_INFOFRAME vendorInfoFrame;
|
||||
NVT_STATUS status;
|
||||
|
||||
if (!pEdidInfo->HDMI3DSupported) {
|
||||
// Only send the HDMI 3D infoframe if the display supports HDMI 3D
|
||||
return;
|
||||
}
|
||||
|
||||
// Send the infoframe with HDMI 3D configured if we're setting an HDMI 3D
|
||||
// mode.
|
||||
if (!pHeadState->timings.hdmi3D) {
|
||||
/*
|
||||
* Disable the vendor specific infoframe if not requested to be
|
||||
* enabled, or if HDMI 3D is requested but not supported by the monitor.
|
||||
*/
|
||||
if (!vendorCtrl.Enable ||
|
||||
((vendorCtrl.HDMIFormat == NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_3D) &&
|
||||
!pEdidInfo->HDMI3DSupported)) {
|
||||
pDevEvo->hal->DisableHdmiInfoFrame(pDispEvo, head,
|
||||
NVT_INFOFRAME_TYPE_VENDOR_SPECIFIC);
|
||||
return;
|
||||
@@ -575,9 +565,10 @@ void nvUpdateHdmiInfoFrames(const NVDispEvoRec *pDispEvo,
|
||||
pInfoFrameState,
|
||||
&pDpyEvo->parsedEdid.info);
|
||||
|
||||
SendHDMI3DVendorSpecificInfoFrame(pDispEvo,
|
||||
head,
|
||||
&pDpyEvo->parsedEdid.info);
|
||||
SendVendorSpecificInfoFrame(pDispEvo,
|
||||
head,
|
||||
pInfoFrameState,
|
||||
&pDpyEvo->parsedEdid.info);
|
||||
|
||||
SendHDRInfoFrame(pDispEvo,
|
||||
head,
|
||||
@@ -2146,7 +2137,9 @@ static NvBool nvHdmiFrlQueryConfigOneBpc(
|
||||
|
||||
nvAssert(nvDpyIsHdmiEvo(pDpyEvo));
|
||||
nvAssert(nvHdmiDpySupportsFrl(pDpyEvo));
|
||||
nvAssert(!nvHdmiIsTmdsPossible(pDpyEvo, pHwTimings, pDpyColor));
|
||||
|
||||
nvAssert(!nvHdmiIsTmdsPossible(pDpyEvo, pHwTimings, pDpyColor) ||
|
||||
nvGetPreferHdmiFrlMode(pDevEvo, pValidationParams));
|
||||
|
||||
/* See if we can find an NVT_TIMING for this mode from the EDID. */
|
||||
pNvtTiming = nvFindEdidNVT_TIMING(pDpyEvo, pModeTimings, pValidationParams);
|
||||
|
||||
@@ -833,7 +833,8 @@ NvBool nvHsConfigInitModeset(
|
||||
|
||||
if (!nvGetHwModeTimings(pDispEvo, apiHead, pRequestHead,
|
||||
pTimings, NULL /* pDpyColor */,
|
||||
NULL /* pInfoFrameCtrl */)) {
|
||||
NULL /* pInfoFrameCtrl */,
|
||||
NULL /* pVSInfoFrameCtrl */)) {
|
||||
nvPreallocRelease(pDevEvo, PREALLOC_TYPE_HS_INIT_CONFIG_HW_TIMINGS);
|
||||
return FALSE;
|
||||
}
|
||||
@@ -1250,7 +1251,8 @@ NvBool nvHsConfigDowngrade(
|
||||
|
||||
if (!nvGetHwModeTimings(pDispEvo, apiHead, pRequestHead,
|
||||
pTimings, NULL /* pDpyColor */,
|
||||
NULL /* pInfoFrameCtrl */)) {
|
||||
NULL /* pInfoFrameCtrl */,
|
||||
NULL /* pVSInfoFrameCtrl */)) {
|
||||
nvPreallocRelease(pDevEvo, PREALLOC_TYPE_HS_INIT_CONFIG_HW_TIMINGS);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -71,7 +71,8 @@ static NvBool ConstructModeTimingsMetaData(
|
||||
const struct NvKmsModeValidationParams *pParams,
|
||||
struct NvKmsMode *pKmsMode,
|
||||
EvoValidateModeFlags *pFlags,
|
||||
NVT_VIDEO_INFOFRAME_CTRL *pInfoFrameCtrl);
|
||||
NVT_VIDEO_INFOFRAME_CTRL *pInfoFrameCtrl,
|
||||
NVT_VENDOR_SPECIFIC_INFOFRAME_CTRL *pVSInfoFrameCtrl);
|
||||
|
||||
static NvBool ValidateMode(NVDpyEvoPtr pDpyEvo,
|
||||
const struct NvKmsMode *pKmsMode,
|
||||
@@ -143,7 +144,6 @@ nvValidateModeEvo(NVDpyEvoPtr pDpyEvo,
|
||||
.timings = pRequest->mode.timings,
|
||||
};
|
||||
EvoValidateModeFlags evoFlags;
|
||||
NVT_VIDEO_INFOFRAME_CTRL dummyInfoFrameCtrl;
|
||||
|
||||
nvkms_memset(pReply, 0, sizeof(*pReply));
|
||||
|
||||
@@ -151,7 +151,8 @@ nvValidateModeEvo(NVDpyEvoPtr pDpyEvo,
|
||||
&pRequest->modeValidation,
|
||||
&kmsMode,
|
||||
&evoFlags,
|
||||
&dummyInfoFrameCtrl)) {
|
||||
NULL /* pInfoFrameCtrl */,
|
||||
NULL /* pVSInfoFrameCtrl */)) {
|
||||
pReply->valid = FALSE;
|
||||
return;
|
||||
}
|
||||
@@ -1837,13 +1838,27 @@ const NVT_TIMING *nvFindEdidNVT_TIMING
|
||||
const struct NvKmsModeValidationParams *pParams
|
||||
)
|
||||
{
|
||||
const NVParsedEdidEvoRec *pParsedEdid = &pDpyEvo->parsedEdid;
|
||||
const NVT_HDMI_FORUM_INFO *pHdmiInfo = &pParsedEdid->info.hdmiForumInfo;
|
||||
NvModeTimings tmpModeTimings;
|
||||
int match861stOnly;
|
||||
int i;
|
||||
|
||||
if (!pDpyEvo->parsedEdid.valid) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* In the first pass, attempt to match the pModeTimings with CEA/CTA 861
|
||||
* video formats if the monitor prefers them, or if HDMI 3D is requested.
|
||||
*/
|
||||
if (nvDpyIsHdmiEvo(pDpyEvo) &&
|
||||
(pModeTimings->hdmi3D || pHdmiInfo->uhd_vic)) {
|
||||
match861stOnly = 1;
|
||||
} else {
|
||||
match861stOnly = 0;
|
||||
}
|
||||
|
||||
tmpModeTimings = *pModeTimings;
|
||||
|
||||
/*
|
||||
@@ -1860,22 +1875,62 @@ const NVT_TIMING *nvFindEdidNVT_TIMING
|
||||
*/
|
||||
tmpModeTimings.yuv420Mode = NV_YUV420_MODE_NONE;
|
||||
|
||||
for (i = 0; i < pDpyEvo->parsedEdid.info.total_timings; i++) {
|
||||
const NVT_TIMING *pTiming = &pDpyEvo->parsedEdid.info.timing[i];
|
||||
if (NVT_TIMINGmatchesNvModeTimings(pTiming, &tmpModeTimings, pParams) &&
|
||||
/*
|
||||
* Only consider the mode a match if the yuv420
|
||||
* configuration of pTiming would match pModeTimings.
|
||||
*/
|
||||
(pModeTimings->yuv420Mode ==
|
||||
GetYUV420Value(pDpyEvo, pParams, pTiming))) {
|
||||
return pTiming;
|
||||
for (; match861stOnly >= 0; match861stOnly--) {
|
||||
for (i = 0; i < pDpyEvo->parsedEdid.info.total_timings; i++) {
|
||||
const NVT_TIMING *pTiming = &pDpyEvo->parsedEdid.info.timing[i];
|
||||
|
||||
if (match861stOnly &&
|
||||
(NVT_GET_TIMING_STATUS_TYPE(pTiming->etc.status) !=
|
||||
NVT_TYPE_EDID_861ST)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (NVT_TIMINGmatchesNvModeTimings(pTiming, &tmpModeTimings, pParams) &&
|
||||
/*
|
||||
* Only consider the mode a match if the yuv420
|
||||
* configuration of pTiming would match pModeTimings.
|
||||
*/
|
||||
(pModeTimings->yuv420Mode ==
|
||||
GetYUV420Value(pDpyEvo, pParams, pTiming))) {
|
||||
return pTiming;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void ConstructVSInfoFrameCtrls(
|
||||
const NVT_TIMING *pTiming,
|
||||
const NvBool hdmi3D,
|
||||
NVT_VENDOR_SPECIFIC_INFOFRAME_CTRL *pVSCtrl)
|
||||
{
|
||||
if (!hdmi3D && (NVT_GET_TIMING_STATUS_TYPE(pTiming->etc.status) !=
|
||||
NVT_TYPE_HDMI_EXT)) {
|
||||
pVSCtrl->Enable = FALSE;
|
||||
pVSCtrl->VSIFVersion = NVT_VSIF_VERSION_NONE;
|
||||
return;
|
||||
}
|
||||
|
||||
pVSCtrl->Enable = TRUE;
|
||||
pVSCtrl->VSIFVersion = NVT_VSIF_VERSION_H14B_VSIF;
|
||||
|
||||
if (hdmi3D) {
|
||||
pVSCtrl->HDMIFormat = NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_3D;
|
||||
pVSCtrl->HDMI_VIC = NVT_HDMI_VS_BYTE5_HDMI_VIC_NA;
|
||||
pVSCtrl->ThreeDStruc = NVT_HDMI_VS_BYTE5_HDMI_3DS_FRAMEPACK;
|
||||
} else if (NVT_GET_TIMING_STATUS_TYPE(pTiming->etc.status) ==
|
||||
NVT_TYPE_HDMI_EXT) {
|
||||
pVSCtrl->HDMIFormat = NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_EXT;
|
||||
pVSCtrl->HDMI_VIC = NVT_GET_TIMING_STATUS_SEQ(pTiming->etc.status);
|
||||
pVSCtrl->ThreeDStruc = NVT_HDMI_VS_BYTE5_HDMI_3DS_NA;
|
||||
}
|
||||
|
||||
pVSCtrl->ThreeDDetail = NVT_HDMI_VS_BYTE_OPT1_HDMI_3DEX_NA;
|
||||
pVSCtrl->MetadataPresent = 0;
|
||||
pVSCtrl->MetadataType = NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_TYPE_NA;
|
||||
}
|
||||
|
||||
/*!
|
||||
* Construct mode-timing's meta data required for mode validation
|
||||
* logic. This meta data involves EvoValidateModeFlags, patched stereo
|
||||
@@ -1896,11 +1951,13 @@ static NvBool ConstructModeTimingsMetaData(
|
||||
const struct NvKmsModeValidationParams *pParams,
|
||||
struct NvKmsMode *pKmsMode,
|
||||
EvoValidateModeFlags *pFlags,
|
||||
NVT_VIDEO_INFOFRAME_CTRL *pInfoFrameCtrl)
|
||||
NVT_VIDEO_INFOFRAME_CTRL *pInfoFrameCtrl,
|
||||
NVT_VENDOR_SPECIFIC_INFOFRAME_CTRL *pVSInfoFrameCtrl)
|
||||
{
|
||||
const NVDispEvoRec *pDispEvo = pDpyEvo->pDispEvo;
|
||||
EvoValidateModeFlags flags = { 0 };
|
||||
NVT_VIDEO_INFOFRAME_CTRL infoFrameCtrl;
|
||||
NVT_VENDOR_SPECIFIC_INFOFRAME_CTRL vsInfoFrameCtrl = { };
|
||||
NvModeTimings modeTimings = pKmsMode->timings;
|
||||
const NVT_TIMING *pTiming;
|
||||
|
||||
@@ -1981,6 +2038,7 @@ static NvBool ConstructModeTimingsMetaData(
|
||||
*/
|
||||
if (nvDpyIsHdmiEvo(pDpyEvo)) {
|
||||
NvTiming_ConstructVideoInfoframeCtrl(&timing, &infoFrameCtrl);
|
||||
ConstructVSInfoFrameCtrls(&timing, hdmi3D, &vsInfoFrameCtrl);
|
||||
}
|
||||
|
||||
goto done;
|
||||
@@ -2000,7 +2058,12 @@ static NvBool ConstructModeTimingsMetaData(
|
||||
|
||||
done:
|
||||
*pFlags = flags;
|
||||
*pInfoFrameCtrl = infoFrameCtrl;
|
||||
if (pInfoFrameCtrl != NULL) {
|
||||
*pInfoFrameCtrl = infoFrameCtrl;
|
||||
}
|
||||
if (pVSInfoFrameCtrl != NULL) {
|
||||
*pVSInfoFrameCtrl = vsInfoFrameCtrl;
|
||||
}
|
||||
pKmsMode->timings = modeTimings;
|
||||
|
||||
return TRUE;
|
||||
@@ -2024,11 +2087,11 @@ NvBool nvValidateModeForModeset(NVDpyEvoRec *pDpyEvo,
|
||||
const struct NvKmsRect *pViewPortOut,
|
||||
NVDpyAttributeColor *pDpyColor,
|
||||
NVHwModeTimingsEvo *pTimingsEvo,
|
||||
NVT_VIDEO_INFOFRAME_CTRL *pInfoFrameCtrl)
|
||||
NVT_VIDEO_INFOFRAME_CTRL *pInfoFrameCtrl,
|
||||
NVT_VENDOR_SPECIFIC_INFOFRAME_CTRL *pVSInfoFrameCtrl)
|
||||
{
|
||||
EvoValidateModeFlags flags;
|
||||
struct NvKmsMode kmsMode = *pKmsMode;
|
||||
NVT_VIDEO_INFOFRAME_CTRL infoFrameCtrl;
|
||||
struct NvKmsModeValidationValidSyncs dummyValidSyncs;
|
||||
|
||||
nvkms_memset(pTimingsEvo, 0, sizeof(*pTimingsEvo));
|
||||
@@ -2037,7 +2100,8 @@ NvBool nvValidateModeForModeset(NVDpyEvoRec *pDpyEvo,
|
||||
pParams,
|
||||
&kmsMode,
|
||||
&flags,
|
||||
&infoFrameCtrl)) {
|
||||
pInfoFrameCtrl,
|
||||
pVSInfoFrameCtrl)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -2062,9 +2126,5 @@ NvBool nvValidateModeForModeset(NVDpyEvoRec *pDpyEvo,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (pInfoFrameCtrl != NULL) {
|
||||
*pInfoFrameCtrl = infoFrameCtrl;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -180,7 +180,8 @@ nvGetHwModeTimings(const NVDispEvoRec *pDispEvo,
|
||||
const struct NvKmsSetModeOneHeadRequest *pRequestHead,
|
||||
NVHwModeTimingsEvo *pTimings,
|
||||
NVDpyAttributeColor *pDpyColor,
|
||||
NVT_VIDEO_INFOFRAME_CTRL *pInfoFrameCtrl)
|
||||
NVT_VIDEO_INFOFRAME_CTRL *pInfoFrameCtrl,
|
||||
NVT_VENDOR_SPECIFIC_INFOFRAME_CTRL *pVSInfoFrameCtrl)
|
||||
{
|
||||
NVDpyEvoPtr pDpyEvo;
|
||||
NVDpyAttributeColor dpyColor = { };
|
||||
@@ -208,7 +209,8 @@ nvGetHwModeTimings(const NVDispEvoRec *pDispEvo,
|
||||
&pRequestHead->viewPortOut : NULL,
|
||||
&dpyColor,
|
||||
pTimings,
|
||||
pInfoFrameCtrl)) {
|
||||
pInfoFrameCtrl,
|
||||
pVSInfoFrameCtrl)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -1128,7 +1130,8 @@ AssignProposedModeSetHwState(NVDevEvoRec *pDevEvo,
|
||||
pRequestHead,
|
||||
&pProposedApiHead->timings,
|
||||
&pProposedApiHead->attributes.color,
|
||||
&pProposedApiHead->infoFrame.ctrl)) {
|
||||
&pProposedApiHead->infoFrame.ctrl,
|
||||
&pProposedApiHead->infoFrame.vendorSpecificCtrl)) {
|
||||
pReply->disp[sd].head[apiHead].status =
|
||||
NVKMS_SET_MODE_ONE_HEAD_STATUS_INVALID_MODE;
|
||||
ret = FALSE;
|
||||
|
||||
Reference in New Issue
Block a user