mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2026-02-20 15:03:58 +00:00
200 lines
9.2 KiB
C
200 lines
9.2 KiB
C
/*
|
|
* SPDX-FileCopyrightText: Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
* SPDX-License-Identifier: MIT
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
* copy of this software and associated documentation files (the "Software"),
|
|
* to deal in the Software without restriction, including without limitation
|
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
* and/or sell copies of the Software, and to permit persons to whom the
|
|
* Software is furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
* DEALINGS IN THE SOFTWARE.
|
|
*
|
|
* File: nvhdmipkt_class.h
|
|
*
|
|
* Purpose: This file contains hdmipkt class definition. Which defines class interfaces.
|
|
*/
|
|
|
|
#ifndef _NVHDMIPKT_CLASS_H_
|
|
#define _NVHDMIPKT_CLASS_H_
|
|
|
|
#include "nvlimits.h"
|
|
#include "nvhdmi_frlInterface.h"
|
|
|
|
/*************************************************************************************************
|
|
* NOTE * This header file to be used only inside this (Hdmi Packet) library. *
|
|
************************************************************************************************/
|
|
// NVHDMIPKT_CLASS_ID: HDMI packet class version
|
|
// NOTE: Anytime a new class comes with upgrades, it needs to be added here.
|
|
// Consult resman\kernel\inc\classhal.h, before adding a class.
|
|
typedef enum
|
|
{
|
|
NVHDMIPKT_0073_CLASS = 0, // pre GK104
|
|
NVHDMIPKT_9171_CLASS = 1, // GK104
|
|
NVHDMIPKT_9271_CLASS = 2, // GK110
|
|
NVHDMIPKT_9471_CLASS = 3, // GM10X
|
|
NVHDMIPKT_9571_CLASS = 4, // GM20X
|
|
NVHDMIPKT_C371_CLASS = 5, // GV100
|
|
NVHDMIPKT_C571_CLASS = 6, // TU102
|
|
NVHDMIPKT_C671_CLASS = 7, // GA102, T234D
|
|
NVHDMIPKT_C771_CLASS = 8, // AD10X
|
|
NVHDMIPKT_C871_CLASS = 9, // T239
|
|
NVHDMIPKT_C971_CLASS = 10, // NVD5.0
|
|
NVHDMIPKT_CA71_CLASS = 11,
|
|
NVHDMIPKT_CB71_CLASS = 12,
|
|
NVHDMIPKT_INVALID_CLASS // Not to be used by client, and always the last entry here.
|
|
} NVHDMIPKT_CLASS_ID;
|
|
|
|
// Hdmi packet class
|
|
struct tagNVHDMIPKT_CLASS
|
|
{
|
|
// data
|
|
NvU32 dispSfUserClassId; // Id from nvidia/class definition
|
|
NvU32 dispSfUserSize;
|
|
NvU32 numSubDevices;
|
|
NvU32 sfUserHandle;
|
|
NVHDMIPKT_RM_CLIENT_HANDLES clientHandles;
|
|
NVHDMIPKT_MEM_MAP memMap[NV_MAX_SUBDEVICES];
|
|
NvHdmiPkt_CBHandle cbHandle;
|
|
NVHDMIPKT_CALLBACK callback;
|
|
NVHDMIPKT_CLASS_ID thisId;
|
|
NvBool isRMCallInternal;
|
|
|
|
// functions
|
|
NVHDMIPKT_RESULT
|
|
(*hdmiPacketCtrl) (NVHDMIPKT_CLASS* pThis,
|
|
NvU32 subDevice,
|
|
NvU32 displayId,
|
|
NvU32 head,
|
|
NVHDMIPKT_TYPE packetType,
|
|
NVHDMIPKT_TC transmitControl);
|
|
|
|
NVHDMIPKT_RESULT
|
|
(*hdmiPacketWrite) (NVHDMIPKT_CLASS* pThis,
|
|
NvU32 subDevice,
|
|
NvU32 displayId,
|
|
NvU32 head,
|
|
NVHDMIPKT_TYPE packetType,
|
|
NVHDMIPKT_TC transmitControl,
|
|
NvU32 packetLen,
|
|
NvU8 const *const pPacket);
|
|
|
|
NVHDMIPKT_RESULT
|
|
(*hdmiPacketRead) (NVHDMIPKT_CLASS* pThis,
|
|
NvU32 subDevice,
|
|
NvU32 head,
|
|
NVHDMIPKT_TYPE packetReg,
|
|
NvU32 bufferLen,
|
|
NvU8 *const pOutPktBuffer);
|
|
|
|
NVHDMIPKT_RESULT
|
|
(*programAdvancedInfoframe) (NVHDMIPKT_CLASS* pThis,
|
|
NvU32 subDevice,
|
|
NvU32 head,
|
|
NVHDMIPKT_TYPE packetReg,
|
|
const ADVANCED_INFOFRAME* pInfoframe);
|
|
|
|
// HW functions - that read/write registers
|
|
NvBool
|
|
(*hdmiReadPacketStatus) (NVHDMIPKT_CLASS* pThis,
|
|
NvU32* pBaseReg,
|
|
NvU32 head,
|
|
NvU32 pktTypeNative);
|
|
|
|
NVHDMIPKT_RESULT
|
|
(*hdmiWritePacketCtrl) (NVHDMIPKT_CLASS* pThis,
|
|
NvU32* pBaseReg,
|
|
NvU32 head,
|
|
NvU32 pktTypeNative,
|
|
NvU32 transmitControl,
|
|
NvBool bDisable);
|
|
|
|
void
|
|
(*hdmiWriteAviPacket) (NVHDMIPKT_CLASS* pThis,
|
|
NvU32* pBaseReg,
|
|
NvU32 head,
|
|
NvU32 packetLen,
|
|
NvU8 const *const pPacket);
|
|
|
|
void
|
|
(*hdmiWriteAudioPacket) (NVHDMIPKT_CLASS* pThis,
|
|
NvU32* pBaseReg,
|
|
NvU32 head,
|
|
NvU32 packetLen,
|
|
NvU8 const *const pPacket);
|
|
|
|
void
|
|
(*hdmiWriteGenericPacket) (NVHDMIPKT_CLASS* pThis,
|
|
NvU32* pBaseReg,
|
|
NvU32 head,
|
|
NvU32 packetLen,
|
|
NvU8 const *const pPacket);
|
|
|
|
void
|
|
(*hdmiWriteGeneralCtrlPacket)(NVHDMIPKT_CLASS* pThis,
|
|
NvU32* pBaseReg,
|
|
NvU32 head,
|
|
NvU32 packetLen,
|
|
NvU8 const *const pPacket);
|
|
|
|
void
|
|
(*hdmiWriteVendorPacket) (NVHDMIPKT_CLASS* pThis,
|
|
NvU32* pBaseReg,
|
|
NvU32 head,
|
|
NvU32 packetLen,
|
|
NvU8 const *const pPacket);
|
|
|
|
// utility functions to translate the generic packet type and transmit control
|
|
// to corresponding rm ctrl or hw define types.
|
|
NvU32
|
|
(*translatePacketType) (NVHDMIPKT_CLASS* pThis,
|
|
NVHDMIPKT_TYPE packetType);
|
|
|
|
NvU32
|
|
(*translateTransmitControl) (NVHDMIPKT_CLASS* pThis,
|
|
NVHDMIPKT_TC transmitControl);
|
|
|
|
//
|
|
// HDMI FRL functions to enable/disable HDMI FRL and calculate the bandwidth
|
|
// capacity required for target timing.
|
|
//
|
|
NVHDMIPKT_RESULT
|
|
(*hdmiAssessLinkCapabilities) (NVHDMIPKT_CLASS *pThis,
|
|
NvU32 subDevice,
|
|
NvU32 displayId,
|
|
NVT_EDID_INFO const * const pSinkEdid,
|
|
HDMI_SRC_CAPS *pSrcCaps,
|
|
HDMI_SINK_CAPS *pSinkCaps);
|
|
NVHDMIPKT_RESULT
|
|
(*hdmiQueryFRLConfig) (NVHDMIPKT_CLASS *pThis,
|
|
HDMI_VIDEO_TRANSPORT_INFO const * const pVidTransInfo,
|
|
HDMI_QUERY_FRL_CLIENT_CONTROL const * const pClientCtrl,
|
|
HDMI_SRC_CAPS const * const pSrcCaps,
|
|
HDMI_SINK_CAPS const * const pSinkCaps,
|
|
HDMI_FRL_CONFIG *pFRLConfig);
|
|
|
|
NVHDMIPKT_RESULT
|
|
(*hdmiSetFRLConfig) (NVHDMIPKT_CLASS *pThis,
|
|
NvU32 subDevice,
|
|
NvU32 displayId,
|
|
NvBool bFakeLt,
|
|
HDMI_FRL_CONFIG *pFRLConfig);
|
|
|
|
NVHDMIPKT_RESULT
|
|
(*hdmiClearFRLConfig) (NVHDMIPKT_CLASS* pThis,
|
|
NvU32 subDevice,
|
|
NvU32 displayId);
|
|
};
|
|
|
|
#endif //_NVHDMIPKT_CLASS_H_
|