/******************************************************************************* * * Copyright (C) 2015 Xilinx, Inc. All rights reserved. * * 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. * * Use of the Software is limited solely to applications: * (a) running on a Xilinx device, or * (b) that interact with a Xilinx device through a bus or interconnect. * * 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 * XILINX CONSORTIUM 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. * * Except as contained in this notice, the name of the Xilinx shall not be used * in advertising or otherwise to promote the sale, use or other dealings in * this Software without prior written authorization from Xilinx. * *******************************************************************************/ /******************************************************************************/ /** * * @file xdprx.h * * The Xilinx DisplayPort receiver (DPRX) driver. This driver supports the * Xilinx DisplayPort soft IP core in receive (RX) mode. * * Driver description * * The device driver enables higher-level software (e.g., an application) to * configure and control a DisplayPort RX soft IP. * * This driver gives applications the ability to configure the RX using various * settings, handle and issue interrupts, and modify a subset of its DisplayPort * Configuration Data (DPCD) fields. * * Interrupt processing * * The DisplayPort RX driver may generate a pulse on the hot-plug-detect (HPD) * signal line using the XDprx_GenerateHpdInterrupt function. This allows the RX * to send an interrupt to the upstream TX device, useful for signaling the TX * that it needs to do some checks for changes in downstream devices or a loss * of link training. * * For RX interrupt handling of HPD events or events that happen internal to the * RX, the user hardware design must contain an interrupt controller which the * DisplayPort RX instance's interrupt signal is connected to. The user * application must enable interrupts in the system and set up the interrupt * controller such that the XDprx_InterruptHandler handler will service * interrupts. When the XDprx_InterruptHandler function is invoked, the handler * will identify what type of interrupt has occurred, and will call the * appropriate interrupt handler. * * The DisplayPort RX's XDPRX_INTERRUPT_CAUSE register indicates the type of * interrupt that has occured, and the XDprx_InterruptHandler will use this * information to decide which handler to call. * * The handlers are set up using the XDprx_SetIntr* functions. * * Specific interrupts may be enabled or disabled using the * XDprx_InterruptEnable and XDprx_InterruptDisable functions. * * Multi-stream transport (MST) mode * * The DisplayPort RX driver does not support MST functionality in 2015.1. * * Audio * * The driver does not handle audio. * * @note None. * *
 * MODIFICATION HISTORY:
 * 
* *******************************************************************************/ #ifndef XDPRX_H_ /* Prevent circular inclusions by using protection macros. */ #define XDPRX_H_ /******************************* Include Files ********************************/ #include "xdp.h" #include "xdprx_hw.h" /****************************** Type Definitions ******************************/ /** * This typedef contains configuration information about the main link settings. */ typedef struct { u8 LaneCount; /**< The current lane count of the main link. */ u8 LinkRate; /**< The current link rate of the main link. */ } XDprx_LinkConfig; /******************************************************************************/ /** * Callback type which represents the handler for interrupts. * * @param InstancePtr is a pointer to the XDprx instance. * * @note None. * *******************************************************************************/ typedef void (*XDprx_IntrHandler)(void *InstancePtr); /** * The XDprx driver instance data. The user is required to allocate a variable * of this type for every XDprx device in the system. A pointer to a variable of * this type is then passed to the driver API functions. */ typedef struct { XDp_Config Config; /**< Configuration structure for the DisplayPort RX core. It is important to keep this member first in the XDprx order. */ u32 IsReady; /**< Device is initialized and ready. */ XDprx_LinkConfig LinkConfig; /**< Configuration structure for the main link. */ XDp_TimerHandler UserTimerWaitUs; /**< Custom user function for delay/sleep. */ void *UserTimerPtr; /**< Pointer to a timer instance used by the custom user delay/sleep function. */ XDprx_IntrHandler IntrVmChangeHandler; /**< Callback function for video mode change interrupts. */ void *IntrVmChangeCallbackRef; /**< A pointer to the user data passed to the video mode change callback function. */ XDprx_IntrHandler IntrPowerStateHandler; /**< Callback function for power state change interrupts. */ void *IntrPowerStateCallbackRef; /**< A pointer to the user data passed to the power state change callback function. */ XDprx_IntrHandler IntrNoVideoHandler; /**< Callback function for no video interrupts. */ void *IntrNoVideoCallbackRef; /**< A pointer to the user data passed to the no video callback function. */ XDprx_IntrHandler IntrVBlankHandler; /**< Callback function for vertical blanking interrupts. */ void *IntrVBlankCallbackRef; /**< A pointer to the user data passed to the vertical blanking callback function. */ XDprx_IntrHandler IntrTrainingLostHandler; /**< Callback function for training lost interrupts. */ void *IntrTrainingLostCallbackRef; /**< A pointer to the user data passed to the training lost callback function. */ XDprx_IntrHandler IntrVideoHandler; /**< Callback function for valid video interrupts. */ void *IntrVideoCallbackRef; /**< A pointer to the user data passed to the valid video callback function. */ XDprx_IntrHandler IntrTrainingDoneHandler; /**< Callback function for training done interrupts. */ void *IntrTrainingDoneCallbackRef; /**< A pointer to the user data passed to the training done callback function. */ XDprx_IntrHandler IntrBwChangeHandler; /**< Callback function for bandwidth change interrupts. */ void *IntrBwChangeCallbackRef; /**< A pointer to the user data passed to the bandwidth change callback function. */ XDprx_IntrHandler IntrTp1Handler; /**< Callback function for training pattern 1 interrupts. */ void *IntrTp1CallbackRef; /**< A pointer to the user data passed to the training pattern 1 callback function. */ XDprx_IntrHandler IntrTp2Handler; /**< Callback function for training pattern 2 interrupts. */ void *IntrTp2CallbackRef; /**< A pointer to the user data passed to the training pattern 2 callback function. */ XDprx_IntrHandler IntrTp3Handler; /**< Callback function for training pattern 3 interrupts. */ void *IntrTp3CallbackRef; /**< A pointer to the user data passed to the training pattern 3 callback function. */ } XDprx; /**************************** Function Prototypes *****************************/ /* xdprx.c: Setup and initialization functions. */ void XDprx_CfgInitialize(XDprx *InstancePtr, XDp_Config *ConfigPtr, u32 EffectiveAddr); u32 XDprx_InitializeRx(XDprx *InstancePtr); /* xdprx.c: General usage functions. */ u32 XDprx_CheckLinkStatus(XDprx *InstancePtr); void XDprx_DtgEn(XDprx *InstancePtr); void XDprx_DtgDis(XDprx *InstancePtr); void XDprx_SetLinkRate(XDprx *InstancePtr, u8 LinkRate); void XDprx_SetLaneCount(XDprx *InstancePtr, u8 LaneCount); void XDprx_SetUserPixelWidth(XDprx *InstancePtr, u8 UserPixelWidth); void XDprx_SetUserTimerHandler(XDprx *InstancePtr, XDp_TimerHandler CallbackFunc, void *CallbackRef); void XDprx_WaitUs(XDprx *InstancePtr, u32 MicroSeconds); /* xdprx_intr.c: Interrupt handling functions. */ void XDprx_InterruptHandler(XDprx *InstancePtr); void XDprx_GenerateHpdInterrupt(XDprx *InstancePtr, u16 DurationUs); void XDprx_InterruptEnable(XDprx *InstancePtr, u32 Mask); void XDprx_InterruptDisable(XDprx *InstancePtr, u32 Mask); void XDprx_SetIntrVmChangeHandler(XDprx *InstancePtr, XDprx_IntrHandler CallbackFunc, void *CallbackRef); void XDprx_SetIntrPowerStateHandler(XDprx *InstancePtr, XDprx_IntrHandler CallbackFunc, void *CallbackRef); void XDprx_SetIntrNoVideoHandler(XDprx *InstancePtr, XDprx_IntrHandler CallbackFunc, void *CallbackRef); void XDprx_SetIntrVBlankHandler(XDprx *InstancePtr, XDprx_IntrHandler CallbackFunc, void *CallbackRef); void XDprx_SetIntrTrainingLostHandler(XDprx *InstancePtr, XDprx_IntrHandler CallbackFunc, void *CallbackRef); void XDprx_SetIntrVideoHandler(XDprx *InstancePtr, XDprx_IntrHandler CallbackFunc, void *CallbackRef); void XDprx_SetIntrTrainingDoneHandler(XDprx *InstancePtr, XDprx_IntrHandler CallbackFunc, void *CallbackRef); void XDprx_SetIntrBwChangeHandler(XDprx *InstancePtr, XDprx_IntrHandler CallbackFunc, void *CallbackRef); void XDprx_SetIntrTp1Handler(XDprx *InstancePtr, XDprx_IntrHandler CallbackFunc, void *CallbackRef); void XDprx_SetIntrTp2Handler(XDprx *InstancePtr, XDprx_IntrHandler CallbackFunc, void *CallbackRef); void XDprx_SetIntrTp3Handler(XDprx *InstancePtr, XDprx_IntrHandler CallbackFunc, void *CallbackRef); #endif /* XDPRX_H_ */