mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2026-02-03 06:57:27 +00:00
570.123.07
This commit is contained in:
@@ -690,6 +690,10 @@ void nvEvo1SendHdmiInfoFrame(const NVDispEvoRec *pDispEvo,
|
||||
nvkms_memcpy(&infoframe[1], &((const NvU8*) pInfoFrameHeader)[1],
|
||||
headerSize - 1);
|
||||
|
||||
/* copy the payload, starting after the 3-byte header and checksum */
|
||||
nvkms_memcpy(&infoframe[headerSize + (needChecksum ? sizeof(checksum) : 0)],
|
||||
pPayload, infoframeSize - headerSize /* payload size */);
|
||||
|
||||
/*
|
||||
* XXX Redundant since needsChecksum implies
|
||||
* _HDMI_PKT_TRANSMIT_CTRL_CHKSUM_HW_EN via
|
||||
@@ -705,10 +709,6 @@ void nvEvo1SendHdmiInfoFrame(const NVDispEvoRec *pDispEvo,
|
||||
infoframe[headerSize] = ~checksum + 1;
|
||||
}
|
||||
|
||||
/* copy the payload, starting after the 3-byte header and checksum */
|
||||
nvkms_memcpy(&infoframe[headerSize + (needChecksum ? sizeof(checksum) : 0)],
|
||||
pPayload, infoframeSize - headerSize /* payload size */);
|
||||
|
||||
ret = NvHdmiPkt_PacketWrite(pDevEvo->hdmiLib.handle,
|
||||
pDispEvo->displayOwner,
|
||||
pHeadState->activeRmId,
|
||||
|
||||
@@ -2521,7 +2521,8 @@ static NvBool ConstructAdvancedInfoFramePacket(
|
||||
* XXX If required, add support for the large infoframe with
|
||||
* multiple infoframes grouped together.
|
||||
*/
|
||||
nvAssert((infoframeSize + (needChecksum ? 1 : 0)) <= packetLen);
|
||||
nvAssert((infoframeSize + 1 /* + HB3 */ + (needChecksum ? 1 : 0)) <=
|
||||
packetLen);
|
||||
|
||||
pPacket[0] = hdmiPacketType; /* HB0 */
|
||||
|
||||
@@ -2554,10 +2555,8 @@ static NvBool ConstructAdvancedInfoFramePacket(
|
||||
if (needChecksum) {
|
||||
pPacket[4] = 0; /* PB0: checksum */
|
||||
|
||||
/*
|
||||
* XXX Redundant since we always call with swChecksum=FALSE and
|
||||
* _HDMI_PKT_TRANSMIT_CTRL_CHKSUM_HW_EN
|
||||
*/
|
||||
nvkms_memcpy(&pPacket[5], pPayload, payloadLen); /* PB1~ */
|
||||
|
||||
if (swChecksum) {
|
||||
NvU8 checksum = 0;
|
||||
|
||||
@@ -2566,8 +2565,6 @@ static NvBool ConstructAdvancedInfoFramePacket(
|
||||
}
|
||||
pPacket[4] = ~checksum + 1;
|
||||
}
|
||||
|
||||
nvkms_memcpy(&pPacket[5], pPayload, payloadLen); /* PB1~ */
|
||||
} else {
|
||||
nvAssert(!swChecksum);
|
||||
nvkms_memcpy(&pPacket[4], pPayload, payloadLen); /* PB0~ */
|
||||
@@ -2587,6 +2584,7 @@ static void SendHdmiInfoFrameCA(const NVDispEvoRec *pDispEvo,
|
||||
NVHDMIPKT_TYPE hdmiLibType;
|
||||
NVHDMIPKT_RESULT ret;
|
||||
ADVANCED_INFOFRAME advancedInfoFrame = { };
|
||||
NvBool swChecksum;
|
||||
/*
|
||||
* These structures are weird. The NVT_VIDEO_INFOFRAME,
|
||||
* NVT_VENDOR_SPECIFIC_INFOFRAME,
|
||||
@@ -2616,10 +2614,21 @@ static void SendHdmiInfoFrameCA(const NVDispEvoRec *pDispEvo,
|
||||
advancedInfoFrame.location = INFOFRAME_CTRL_LOC_VBLANK;
|
||||
advancedInfoFrame.hwChecksum = needChecksum;
|
||||
|
||||
// Large infoframes are incompatible with hwChecksum
|
||||
nvAssert(!(advancedInfoFrame.isLargeInfoframe &&
|
||||
advancedInfoFrame.hwChecksum));
|
||||
|
||||
// XXX WAR bug 5124145 by always computing checksum in software if needed.
|
||||
swChecksum = needChecksum;
|
||||
|
||||
// If we need a checksum: hwChecksum, swChecksum, or both must be enabled.
|
||||
nvAssert(!needChecksum ||
|
||||
(advancedInfoFrame.hwChecksum || swChecksum));
|
||||
|
||||
if (!ConstructAdvancedInfoFramePacket(pInfoFrameHeader,
|
||||
infoFrameSize,
|
||||
needChecksum,
|
||||
FALSE /* swChecksum */,
|
||||
swChecksum,
|
||||
packet,
|
||||
sizeof(packet))) {
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user