1*53ee8cc1Swenshuai.xi //<MStar Software> 2*53ee8cc1Swenshuai.xi //****************************************************************************** 3*53ee8cc1Swenshuai.xi // MStar Software 4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved. 5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are 6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by 7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties. 8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all 9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written 10*53ee8cc1Swenshuai.xi // permission has been granted by MStar. 11*53ee8cc1Swenshuai.xi // 12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you 13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to 14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations: 15*53ee8cc1Swenshuai.xi // 16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar 17*53ee8cc1Swenshuai.xi // Software and any modification/derivatives thereof. 18*53ee8cc1Swenshuai.xi // No right, ownership, or interest to MStar Software and any 19*53ee8cc1Swenshuai.xi // modification/derivatives thereof is transferred to you under Terms. 20*53ee8cc1Swenshuai.xi // 21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be 22*53ee8cc1Swenshuai.xi // supplied together with third party`s software and the use of MStar 23*53ee8cc1Swenshuai.xi // Software may require additional licenses from third parties. 24*53ee8cc1Swenshuai.xi // Therefore, you hereby agree it is your sole responsibility to separately 25*53ee8cc1Swenshuai.xi // obtain any and all third party right and license necessary for your use of 26*53ee8cc1Swenshuai.xi // such third party`s software. 27*53ee8cc1Swenshuai.xi // 28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as 29*53ee8cc1Swenshuai.xi // MStar`s confidential information and you agree to keep MStar`s 30*53ee8cc1Swenshuai.xi // confidential information in strictest confidence and not disclose to any 31*53ee8cc1Swenshuai.xi // third party. 32*53ee8cc1Swenshuai.xi // 33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any 34*53ee8cc1Swenshuai.xi // kind. Any warranties are hereby expressly disclaimed by MStar, including 35*53ee8cc1Swenshuai.xi // without limitation, any warranties of merchantability, non-infringement of 36*53ee8cc1Swenshuai.xi // intellectual property rights, fitness for a particular purpose, error free 37*53ee8cc1Swenshuai.xi // and in conformity with any international standard. You agree to waive any 38*53ee8cc1Swenshuai.xi // claim against MStar for any loss, damage, cost or expense that you may 39*53ee8cc1Swenshuai.xi // incur related to your use of MStar Software. 40*53ee8cc1Swenshuai.xi // In no event shall MStar be liable for any direct, indirect, incidental or 41*53ee8cc1Swenshuai.xi // consequential damages, including without limitation, lost of profit or 42*53ee8cc1Swenshuai.xi // revenues, lost or damage of data, and unauthorized system use. 43*53ee8cc1Swenshuai.xi // You agree that this Section 4 shall still apply without being affected 44*53ee8cc1Swenshuai.xi // even if MStar Software has been modified by MStar in accordance with your 45*53ee8cc1Swenshuai.xi // request or instruction for your use, except otherwise agreed by both 46*53ee8cc1Swenshuai.xi // parties in writing. 47*53ee8cc1Swenshuai.xi // 48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or 49*53ee8cc1Swenshuai.xi // services in relation with MStar Software to you for your use of 50*53ee8cc1Swenshuai.xi // MStar Software in conjunction with your or your customer`s product 51*53ee8cc1Swenshuai.xi // ("Services"). 52*53ee8cc1Swenshuai.xi // You understand and agree that, except otherwise agreed by both parties in 53*53ee8cc1Swenshuai.xi // writing, Services are provided on an "AS IS" basis and the warranty 54*53ee8cc1Swenshuai.xi // disclaimer set forth in Section 4 above shall apply. 55*53ee8cc1Swenshuai.xi // 56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels 57*53ee8cc1Swenshuai.xi // or otherwise: 58*53ee8cc1Swenshuai.xi // (a) conferring any license or right to use MStar name, trademark, service 59*53ee8cc1Swenshuai.xi // mark, symbol or any other identification; 60*53ee8cc1Swenshuai.xi // (b) obligating MStar or any of its affiliates to furnish any person, 61*53ee8cc1Swenshuai.xi // including without limitation, you and your customers, any assistance 62*53ee8cc1Swenshuai.xi // of any kind whatsoever, or any information; or 63*53ee8cc1Swenshuai.xi // (c) conferring any license or right under any intellectual property right. 64*53ee8cc1Swenshuai.xi // 65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws 66*53ee8cc1Swenshuai.xi // of Taiwan, R.O.C., excluding its conflict of law rules. 67*53ee8cc1Swenshuai.xi // Any and all dispute arising out hereof or related hereto shall be finally 68*53ee8cc1Swenshuai.xi // settled by arbitration referred to the Chinese Arbitration Association, 69*53ee8cc1Swenshuai.xi // Taipei in accordance with the ROC Arbitration Law and the Arbitration 70*53ee8cc1Swenshuai.xi // Rules of the Association by three (3) arbitrators appointed in accordance 71*53ee8cc1Swenshuai.xi // with the said Rules. 72*53ee8cc1Swenshuai.xi // The place of arbitration shall be in Taipei, Taiwan and the language shall 73*53ee8cc1Swenshuai.xi // be English. 74*53ee8cc1Swenshuai.xi // The arbitration award shall be final and binding to both parties. 75*53ee8cc1Swenshuai.xi // 76*53ee8cc1Swenshuai.xi //****************************************************************************** 77*53ee8cc1Swenshuai.xi //<MStar Software> 78*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////////////////////// 79*53ee8cc1Swenshuai.xi // 80*53ee8cc1Swenshuai.xi // Copyright (c) 2008-2009 MStar Semiconductor, Inc. 81*53ee8cc1Swenshuai.xi // All rights reserved. 82*53ee8cc1Swenshuai.xi // 83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained 84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of 85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence 86*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient. 87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure, 88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling, 89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential 90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the 91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom. 92*53ee8cc1Swenshuai.xi // 93*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////////////////////// 94*53ee8cc1Swenshuai.xi #ifndef _HWREG_UTILITY_H_ 95*53ee8cc1Swenshuai.xi #define _HWREG_UTILITY_H_ 96*53ee8cc1Swenshuai.xi 97*53ee8cc1Swenshuai.xi 98*53ee8cc1Swenshuai.xi #include "MsCommon.h" 99*53ee8cc1Swenshuai.xi 100*53ee8cc1Swenshuai.xi //!! Do not include this header in driver or api level 101*53ee8cc1Swenshuai.xi 102*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 103*53ee8cc1Swenshuai.xi // Driver Compiler Options 104*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 105*53ee8cc1Swenshuai.xi #define XC_MUTEX 106*53ee8cc1Swenshuai.xi #define XC_MUTEX_DBG 0 107*53ee8cc1Swenshuai.xi #define SETWINDOW_MUTEX 108*53ee8cc1Swenshuai.xi #define SETWINDOW_MUTEX_DBG 0 109*53ee8cc1Swenshuai.xi #define XC_SEMAPHORE_DBG 0 110*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 111*53ee8cc1Swenshuai.xi // Macro and Define 112*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 113*53ee8cc1Swenshuai.xi extern MS_VIRT _XC_RIU_BASE; // This should be inited before XC library starting. 114*53ee8cc1Swenshuai.xi extern MS_VIRT _PM_RIU_BASE; // This should be inited before XC library starting. 115*53ee8cc1Swenshuai.xi 116*53ee8cc1Swenshuai.xi extern MS_VIRT _HDCP_RIU_BASE; 117*53ee8cc1Swenshuai.xi extern MS_VIRT _DDC_RIU_BASE; 118*53ee8cc1Swenshuai.xi 119*53ee8cc1Swenshuai.xi #define _BITMASK(loc_msb, loc_lsb) ((1U << (loc_msb)) - (1U << (loc_lsb)) + (1U << (loc_msb))) 120*53ee8cc1Swenshuai.xi #define BITMASK(x) _BITMASK(1?x, 0?x) 121*53ee8cc1Swenshuai.xi #define HBMASK 0xFF00 122*53ee8cc1Swenshuai.xi #define LBMASK 0x00FF 123*53ee8cc1Swenshuai.xi 124*53ee8cc1Swenshuai.xi #define RIU_MACRO_START do { 125*53ee8cc1Swenshuai.xi #define RIU_MACRO_END } while (0) 126*53ee8cc1Swenshuai.xi 127*53ee8cc1Swenshuai.xi // Address bus of RIU is 16 bits. 128*53ee8cc1Swenshuai.xi #define RIU_READ_BYTE(addr) ( READ_BYTE( _XC_RIU_BASE + (addr) ) ) 129*53ee8cc1Swenshuai.xi #define RIU_READ_2BYTE(addr) ( READ_WORD( _XC_RIU_BASE + (addr) ) ) 130*53ee8cc1Swenshuai.xi #define RIU_WRITE_BYTE(addr, val) { WRITE_BYTE( _XC_RIU_BASE + (addr), val) } 131*53ee8cc1Swenshuai.xi #define RIU_WRITE_2BYTE(addr, val) { WRITE_WORD( _XC_RIU_BASE + (addr), val) } 132*53ee8cc1Swenshuai.xi 133*53ee8cc1Swenshuai.xi // Address bus of RIU is 16 bits for PM //alex_tung 134*53ee8cc1Swenshuai.xi #define PM_RIU_READ_BYTEM(addr) ( READ_BYTE( _PM_RIU_BASE + (addr) ) ) 135*53ee8cc1Swenshuai.xi #define PM_RIU_READ_2BYTE(addr) ( READ_WORD( _PM_RIU_BASE + (addr) ) ) 136*53ee8cc1Swenshuai.xi #define PM_RIU_WRITE_BYTE(addr, val) { WRITE_BYTE( _PM_RIU_BASE + (addr), val) } 137*53ee8cc1Swenshuai.xi #define PM_RIU_WRITE_2BYTE(addr, val) { WRITE_WORD( _PM_RIU_BASE + (addr), val) } 138*53ee8cc1Swenshuai.xi 139*53ee8cc1Swenshuai.xi //Address bus of RIU for HDCP for T3 140*53ee8cc1Swenshuai.xi #define HDCP_RIU_READ_BYTE(addr) ( READ_BYTE( _HDCP_RIU_BASE + (addr) ) ) 141*53ee8cc1Swenshuai.xi #define HDCP_RIU_READ_2BYTE(addr) ( READ_WORD( _HDCP_RIU_BASE + (addr) ) ) 142*53ee8cc1Swenshuai.xi #define HDCP_RIU_WRITE_BYTE(addr, val) { WRITE_BYTE( _HDCP_RIU_BASE + (addr), val) } 143*53ee8cc1Swenshuai.xi #define HDCP_RIU_WRITE_2BYTE(addr, val) { WRITE_WORD( _HDCP_RIU_BASE + (addr), val) } 144*53ee8cc1Swenshuai.xi 145*53ee8cc1Swenshuai.xi //Address bus of RIU for DDC for T3 146*53ee8cc1Swenshuai.xi #define DDC_RIU_READ_1BYTE(addr) ( READ_BYTE( _HDCP_RIU_BASE + (addr) ) ) 147*53ee8cc1Swenshuai.xi #define DDC_RIU_READ_2BYTE(addr) ( READ_WORD( _HDCP_RIU_BASE + (addr) ) ) 148*53ee8cc1Swenshuai.xi #define DDC_RIU_WRITE_1BYTE(addr, val) { WRITE_BYTE( _HDCP_RIU_BASE + (addr), val) } 149*53ee8cc1Swenshuai.xi #define DDC_RIU_WRITE_2BYTE(addr, val) { WRITE_WORD( _HDCP_RIU_BASE + (addr), val) } 150*53ee8cc1Swenshuai.xi 151*53ee8cc1Swenshuai.xi //Address bus of RIU for GOP 152*53ee8cc1Swenshuai.xi #define GOP_RIU_WRITE_2BYTE(addr, val) { WRITE_WORD( _GOP_RIU_BASE + (addr), val) } 153*53ee8cc1Swenshuai.xi 154*53ee8cc1Swenshuai.xi 155*53ee8cc1Swenshuai.xi #define _XC_SELECT_INTERNAL_VARIABLE(INST_ID) MDrv_XC_Resource_Mapping(INST_ID,E_XC_POOL_ID_INTERNAL_VARIABLE) 156*53ee8cc1Swenshuai.xi #define _XC_SELECT_INTERNAL_REGISTER(INST_ID) MDrv_XC_Resource_Mapping(INST_ID,E_XC_POOL_ID_INTERNAL_REGISTER) 157*53ee8cc1Swenshuai.xi #define _XC_SELECT_INTERNAL_MENULOAD(INST_ID) MDrv_XC_Resource_Mapping(INST_ID,E_XC_POOL_ID_INTERNAL_MENULOAD) 158*53ee8cc1Swenshuai.xi #define _XC_SELECT_INTERNAL_DS(INST_ID) MDrv_XC_Resource_Mapping(INST_ID,E_XC_POOL_ID_INTERNAL_DS) 159*53ee8cc1Swenshuai.xi 160*53ee8cc1Swenshuai.xi #define _dbg_semaphore E_XC_ID_VAR 161*53ee8cc1Swenshuai.xi // if anyone wants to see log inside android, 162*53ee8cc1Swenshuai.xi // please replace the "printf" with "ALOGE" so that it can be printed in android process 163*53ee8cc1Swenshuai.xi #if (XC_SEMAPHORE_DBG) 164*53ee8cc1Swenshuai.xi #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB 165*53ee8cc1Swenshuai.xi #define _XC_SEMAPHORE_ENTRY(pInstance,eID_TYPE) \ 166*53ee8cc1Swenshuai.xi if (eID_TYPE == _dbg_semaphore) \ 167*53ee8cc1Swenshuai.xi printf("1 [%s,%5d]==========================Prepare to get semaphore, ID = %d\n",__func__,__LINE__,eID_TYPE); \ 168*53ee8cc1Swenshuai.xi if(MDrv_XC_Get_Semaphore(g_pDevice0Instance,eID_TYPE) != UTOPIA_STATUS_SUCCESS) \ 169*53ee8cc1Swenshuai.xi { \ 170*53ee8cc1Swenshuai.xi printf("[%s,%5d] Get XC Semaphore device0 failed\n",__FUNCTION__,__LINE__); \ 171*53ee8cc1Swenshuai.xi } \ 172*53ee8cc1Swenshuai.xi if(MDrv_XC_Get_Semaphore(g_pDevice1Instance,eID_TYPE) != UTOPIA_STATUS_SUCCESS) \ 173*53ee8cc1Swenshuai.xi { \ 174*53ee8cc1Swenshuai.xi printf("[%s,%5d] Get XC Semaphore device1 failed\n",__FUNCTION__,__LINE__); \ 175*53ee8cc1Swenshuai.xi } \ 176*53ee8cc1Swenshuai.xi if (eID_TYPE == _dbg_semaphore) \ 177*53ee8cc1Swenshuai.xi printf("[%s,%5d]Semaphore Got\n\n",__func__,__LINE__); 178*53ee8cc1Swenshuai.xi 179*53ee8cc1Swenshuai.xi #define _XC_SEMAPHORE_RETURN(pInstance,eID_TYPE) \ 180*53ee8cc1Swenshuai.xi if (eID_TYPE == _dbg_semaphore) \ 181*53ee8cc1Swenshuai.xi printf("0 [%s,%5d]==========================prepare to release semaphore, ID = %d\n",__func__,__LINE__,eID_TYPE); \ 182*53ee8cc1Swenshuai.xi MDrv_XC_Release_Semaphore(g_pDevice0Instance,eID_TYPE); \ 183*53ee8cc1Swenshuai.xi MDrv_XC_Release_Semaphore(g_pDevice1Instance,eID_TYPE); \ 184*53ee8cc1Swenshuai.xi if (eID_TYPE == _dbg_semaphore) \ 185*53ee8cc1Swenshuai.xi printf("[%s,%5d]Semaphore Returned\n\n",__func__,__LINE__); 186*53ee8cc1Swenshuai.xi 187*53ee8cc1Swenshuai.xi #else 188*53ee8cc1Swenshuai.xi #define _XC_SEMAPHORE_ENTRY(pInstance,eID_TYPE) \ 189*53ee8cc1Swenshuai.xi if (eID_TYPE == _dbg_semaphore) \ 190*53ee8cc1Swenshuai.xi printf("1 [%s,%5d]==========================Prepare to get semaphore, ID = %d\n",__func__,__LINE__,eID_TYPE); \ 191*53ee8cc1Swenshuai.xi if(MDrv_XC_Get_Semaphore(pInstance,eID_TYPE) != UTOPIA_STATUS_SUCCESS) \ 192*53ee8cc1Swenshuai.xi { \ 193*53ee8cc1Swenshuai.xi printf("[%s,%5d] Get XC Semaphore failed\n",__FUNCTION__,__LINE__); \ 194*53ee8cc1Swenshuai.xi } \ 195*53ee8cc1Swenshuai.xi if (eID_TYPE == _dbg_semaphore) \ 196*53ee8cc1Swenshuai.xi printf("[%s,%5d]Semaphore Got\n\n",__func__,__LINE__); 197*53ee8cc1Swenshuai.xi 198*53ee8cc1Swenshuai.xi #define _XC_SEMAPHORE_RETURN(pInstance,eID_TYPE) \ 199*53ee8cc1Swenshuai.xi if (eID_TYPE == _dbg_semaphore) \ 200*53ee8cc1Swenshuai.xi printf("0 [%s,%5d]==========================prepare to release semaphore, ID = %d\n",__func__,__LINE__,eID_TYPE); \ 201*53ee8cc1Swenshuai.xi MDrv_XC_Release_Semaphore(pInstance,eID_TYPE); \ 202*53ee8cc1Swenshuai.xi if (eID_TYPE == _dbg_semaphore) \ 203*53ee8cc1Swenshuai.xi printf("[%s,%5d]Semaphore Returned\n\n",__func__,__LINE__); 204*53ee8cc1Swenshuai.xi #endif 205*53ee8cc1Swenshuai.xi 206*53ee8cc1Swenshuai.xi #else 207*53ee8cc1Swenshuai.xi #if PIP_PATCH_USING_SC1_MAIN_AS_SC0_SUB 208*53ee8cc1Swenshuai.xi #define _XC_SEMAPHORE_ENTRY(pInstance,eID_TYPE) \ 209*53ee8cc1Swenshuai.xi if(MDrv_XC_Get_Semaphore(g_pDevice0Instance,eID_TYPE) != UTOPIA_STATUS_SUCCESS) \ 210*53ee8cc1Swenshuai.xi { } \ 211*53ee8cc1Swenshuai.xi if(MDrv_XC_Get_Semaphore(g_pDevice1Instance,eID_TYPE) != UTOPIA_STATUS_SUCCESS) \ 212*53ee8cc1Swenshuai.xi { } 213*53ee8cc1Swenshuai.xi 214*53ee8cc1Swenshuai.xi 215*53ee8cc1Swenshuai.xi 216*53ee8cc1Swenshuai.xi #define _XC_SEMAPHORE_RETURN(pInstance,eID_TYPE) \ 217*53ee8cc1Swenshuai.xi MDrv_XC_Release_Semaphore(g_pDevice0Instance,eID_TYPE); \ 218*53ee8cc1Swenshuai.xi MDrv_XC_Release_Semaphore(g_pDevice1Instance,eID_TYPE); 219*53ee8cc1Swenshuai.xi #else 220*53ee8cc1Swenshuai.xi #define _XC_SEMAPHORE_ENTRY(pInstance,eID_TYPE) \ 221*53ee8cc1Swenshuai.xi if(MDrv_XC_Get_Semaphore(pInstance,eID_TYPE) != UTOPIA_STATUS_SUCCESS) \ 222*53ee8cc1Swenshuai.xi { } 223*53ee8cc1Swenshuai.xi 224*53ee8cc1Swenshuai.xi #define _XC_SEMAPHORE_RETURN(pInstance,eID_TYPE) \ 225*53ee8cc1Swenshuai.xi MDrv_XC_Release_Semaphore(pInstance,eID_TYPE); 226*53ee8cc1Swenshuai.xi #endif 227*53ee8cc1Swenshuai.xi #endif 228*53ee8cc1Swenshuai.xi 229*53ee8cc1Swenshuai.xi #define _XC_MUTEX_TIME_OUT MSOS_WAIT_FOREVER 230*53ee8cc1Swenshuai.xi 231*53ee8cc1Swenshuai.xi // Mutex function 232*53ee8cc1Swenshuai.xi #define _XC_ENTRY(pInstance) _XC_ENTRY_MUTEX(pInstance,_XC_Mutex) 233*53ee8cc1Swenshuai.xi #define _XC_RETURN(pInstance) _XC_RETURN_MUTEX(pInstance,_XC_Mutex) 234*53ee8cc1Swenshuai.xi 235*53ee8cc1Swenshuai.xi #ifdef XC_MUTEX 236*53ee8cc1Swenshuai.xi #if(XC_MUTEX_DBG) 237*53ee8cc1Swenshuai.xi #define _XC_ENTRY_MUTEX(pInstance,_mutex_) \ 238*53ee8cc1Swenshuai.xi _XC_SEMAPHORE_ENTRY(pInstance,E_XC_ID_REG); \ 239*53ee8cc1Swenshuai.xi printf("1,==========================Prepare to get mutex\n"); \ 240*53ee8cc1Swenshuai.xi printf("[%s][%s][%06d]\n",__FILE__,__FUNCTION__,__LINE__); \ 241*53ee8cc1Swenshuai.xi if(!MsOS_ObtainMutex(_mutex_, _XC_MUTEX_TIME_OUT)) \ 242*53ee8cc1Swenshuai.xi { \ 243*53ee8cc1Swenshuai.xi printf("==========================\n"); \ 244*53ee8cc1Swenshuai.xi printf("[%s][%s][%06d] Mutex taking timeout\n",__FILE__,__FUNCTION__,__LINE__); \ 245*53ee8cc1Swenshuai.xi } 246*53ee8cc1Swenshuai.xi #define _XC_RETURN_MUTEX(pInstance,_mutex_) \ 247*53ee8cc1Swenshuai.xi printf("0,==========================prepare to release mutex\n"); \ 248*53ee8cc1Swenshuai.xi printf("[%s][%s][%06d] \n",__FILE__,__FUNCTION__,__LINE__); \ 249*53ee8cc1Swenshuai.xi MsOS_ReleaseMutex(_mutex_); \ 250*53ee8cc1Swenshuai.xi _XC_SEMAPHORE_RETURN(pInstance,E_XC_ID_REG); 251*53ee8cc1Swenshuai.xi //return _ret; 252*53ee8cc1Swenshuai.xi #else 253*53ee8cc1Swenshuai.xi #define _XC_ENTRY_MUTEX(pInstance,_mutex_) \ 254*53ee8cc1Swenshuai.xi _XC_SEMAPHORE_ENTRY(pInstance,E_XC_ID_REG); \ 255*53ee8cc1Swenshuai.xi if(!MsOS_ObtainMutex(_mutex_, _XC_MUTEX_TIME_OUT)) \ 256*53ee8cc1Swenshuai.xi { \ 257*53ee8cc1Swenshuai.xi } 258*53ee8cc1Swenshuai.xi #define _XC_RETURN_MUTEX(pInstance,_mutex_) \ 259*53ee8cc1Swenshuai.xi MsOS_ReleaseMutex(_mutex_); \ 260*53ee8cc1Swenshuai.xi _XC_SEMAPHORE_RETURN(pInstance,E_XC_ID_REG); 261*53ee8cc1Swenshuai.xi //return _ret; 262*53ee8cc1Swenshuai.xi #endif 263*53ee8cc1Swenshuai.xi #else // #if not def XC_MUTEX 264*53ee8cc1Swenshuai.xi #define _XC_ENTRY_MUTEX(_mutex_) while(0) 265*53ee8cc1Swenshuai.xi #define _XC_RETURN_MUTEX(_mutex_) while(0) 266*53ee8cc1Swenshuai.xi #endif // #ifdef _XC_MUTEX 267*53ee8cc1Swenshuai.xi 268*53ee8cc1Swenshuai.xi #define _SETWINDOW_MUTEX_TIME_OUT MSOS_WAIT_FOREVER 269*53ee8cc1Swenshuai.xi 270*53ee8cc1Swenshuai.xi // Mutex function 271*53ee8cc1Swenshuai.xi #define _SETWINDOW_ENTRY() _SETWINDOW_ENTRY_MUTEX(_SetWindow_Mutex) 272*53ee8cc1Swenshuai.xi #define _SETWINDOW_RETURN() _SETWINDOW_RETURN_MUTEX(_SetWindow_Mutex) 273*53ee8cc1Swenshuai.xi 274*53ee8cc1Swenshuai.xi #ifdef SETWINDOW_MUTEX 275*53ee8cc1Swenshuai.xi #if(SETWINDOW_MUTEX_DBG) 276*53ee8cc1Swenshuai.xi #define _SETWINDOW_ENTRY_MUTEX(_mutex_) \ 277*53ee8cc1Swenshuai.xi printf("1,==========================\n"); \ 278*53ee8cc1Swenshuai.xi printf("[%s][%s][%06d]\n",__FILE__,__FUNCTION__,__LINE__); \ 279*53ee8cc1Swenshuai.xi if(!MsOS_ObtainMutex(_mutex_, _SETWINDOW_MUTEX_TIME_OUT)) \ 280*53ee8cc1Swenshuai.xi { \ 281*53ee8cc1Swenshuai.xi printf("==========================\n"); \ 282*53ee8cc1Swenshuai.xi printf("[%s][%s][%06d] Mutex taking timeout\n",__FILE__,__FUNCTION__,__LINE__); \ 283*53ee8cc1Swenshuai.xi } 284*53ee8cc1Swenshuai.xi #define _SETWINDOW_RETURN_MUTEX(_mutex_) \ 285*53ee8cc1Swenshuai.xi printf("0,==========================\n"); \ 286*53ee8cc1Swenshuai.xi printf("[%s][%s][%06d] \n",__FILE__,__FUNCTION__,__LINE__); \ 287*53ee8cc1Swenshuai.xi MsOS_ReleaseMutex(_mutex_); 288*53ee8cc1Swenshuai.xi //return _ret; 289*53ee8cc1Swenshuai.xi #else 290*53ee8cc1Swenshuai.xi #define _SETWINDOW_ENTRY_MUTEX(_mutex_) \ 291*53ee8cc1Swenshuai.xi if(!MsOS_ObtainMutex(_mutex_, _SETWINDOW_MUTEX_TIME_OUT)) \ 292*53ee8cc1Swenshuai.xi { \ 293*53ee8cc1Swenshuai.xi } 294*53ee8cc1Swenshuai.xi #define _SETWINDOW_RETURN_MUTEX(_mutex_) MsOS_ReleaseMutex(_mutex_); 295*53ee8cc1Swenshuai.xi //return _ret; 296*53ee8cc1Swenshuai.xi #endif 297*53ee8cc1Swenshuai.xi #else // #if not def SETWINDOW_MUTEX 298*53ee8cc1Swenshuai.xi #define _SETWINDOW_ENTRY_MUTEX(_mutex_) while(0) 299*53ee8cc1Swenshuai.xi #define _SETWINDOW_RETURN_MUTEX(_mutex_) while(0) 300*53ee8cc1Swenshuai.xi #endif // #ifdef _SETWINDOW_MUTEX 301*53ee8cc1Swenshuai.xi 302*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 303*53ee8cc1Swenshuai.xi // Function and Variable 304*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 305*53ee8cc1Swenshuai.xi #ifdef MVIDEO_C 306*53ee8cc1Swenshuai.xi #define INTERFACE 307*53ee8cc1Swenshuai.xi INTERFACE MS_S32 _XC_Mutex = -1; 308*53ee8cc1Swenshuai.xi INTERFACE MS_S32 _XC_ISR_Mutex = -1; 309*53ee8cc1Swenshuai.xi INTERFACE MS_S32 _SetWindow_Mutex = -1; 310*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL 311*53ee8cc1Swenshuai.xi INTERFACE wait_queue_head_t _XC_EventQueue; 312*53ee8cc1Swenshuai.xi INTERFACE MS_U32 _XC_EventFlag = 0; 313*53ee8cc1Swenshuai.xi INTERFACE MS_BOOL _XC_VSyncRun = FALSE; 314*53ee8cc1Swenshuai.xi INTERFACE MS_U32 _XC_VSyncCount = 0; 315*53ee8cc1Swenshuai.xi INTERFACE MS_U32 _XC_VSyncMax = 0; 316*53ee8cc1Swenshuai.xi #endif 317*53ee8cc1Swenshuai.xi #else 318*53ee8cc1Swenshuai.xi #define INTERFACE extern 319*53ee8cc1Swenshuai.xi INTERFACE MS_S32 _XC_Mutex; 320*53ee8cc1Swenshuai.xi INTERFACE MS_S32 _XC_ISR_Mutex; 321*53ee8cc1Swenshuai.xi INTERFACE MS_S32 _SetWindow_Mutex; 322*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL 323*53ee8cc1Swenshuai.xi INTERFACE wait_queue_head_t _XC_EventQueue; 324*53ee8cc1Swenshuai.xi INTERFACE MS_U32 _XC_EventFlag; 325*53ee8cc1Swenshuai.xi INTERFACE MS_BOOL _XC_VSyncRun; 326*53ee8cc1Swenshuai.xi INTERFACE MS_U32 _XC_VSyncCount; 327*53ee8cc1Swenshuai.xi INTERFACE MS_U32 _XC_VSyncMax; 328*53ee8cc1Swenshuai.xi #endif 329*53ee8cc1Swenshuai.xi #endif 330*53ee8cc1Swenshuai.xi 331*53ee8cc1Swenshuai.xi INTERFACE MS_U32 _XC_Device_Offset[2];//MAX_XC_DEVICE_NUM 332*53ee8cc1Swenshuai.xi 333*53ee8cc1Swenshuai.xi //============================================================= 334*53ee8cc1Swenshuai.xi // Standard Form 335*53ee8cc1Swenshuai.xi 336*53ee8cc1Swenshuai.xi #define MDrv_ReadByte( u32Reg ) RIU_READ_BYTE(((u32Reg) << 1) - ((u32Reg) & 1)) 337*53ee8cc1Swenshuai.xi 338*53ee8cc1Swenshuai.xi #define MDrv_Read2Byte( u32Reg ) (RIU_READ_2BYTE((u32Reg)<<1)) 339*53ee8cc1Swenshuai.xi 340*53ee8cc1Swenshuai.xi #define MDrv_Read4Byte( u32Reg ) ( (MS_U32)RIU_READ_2BYTE((u32Reg)<<1) | ((MS_U32)RIU_READ_2BYTE(((u32Reg)+2)<<1)<<16 ) ) 341*53ee8cc1Swenshuai.xi 342*53ee8cc1Swenshuai.xi #define MDrv_ReadRegBit( u32Reg, u8Mask ) (RIU_READ_BYTE(((u32Reg)<<1) - ((u32Reg) & 1)) & (u8Mask)) 343*53ee8cc1Swenshuai.xi 344*53ee8cc1Swenshuai.xi #define MDrv_WriteRegBit( u32Reg, bEnable, u8Mask ) \ 345*53ee8cc1Swenshuai.xi RIU_MACRO_START \ 346*53ee8cc1Swenshuai.xi RIU_WRITE_BYTE( (((u32Reg) <<1) - ((u32Reg) & 1)) , (bEnable) ? (RIU_READ_BYTE( (((u32Reg) <<1) - ((u32Reg) & 1)) ) | (u8Mask)) : \ 347*53ee8cc1Swenshuai.xi (RIU_READ_BYTE( (((u32Reg) <<1) - ((u32Reg) & 1)) ) & ~(u8Mask))); \ 348*53ee8cc1Swenshuai.xi RIU_MACRO_END 349*53ee8cc1Swenshuai.xi 350*53ee8cc1Swenshuai.xi #define MDrv_WriteByte( u32Reg, u8Val ) \ 351*53ee8cc1Swenshuai.xi RIU_MACRO_START \ 352*53ee8cc1Swenshuai.xi RIU_WRITE_BYTE(((u32Reg) << 1) - ((u32Reg) & 1), u8Val); \ 353*53ee8cc1Swenshuai.xi RIU_MACRO_END 354*53ee8cc1Swenshuai.xi 355*53ee8cc1Swenshuai.xi #define MDrv_Write2ByteMask( u32Reg, u16Val, u16Mask) \ 356*53ee8cc1Swenshuai.xi RIU_MACRO_START \ 357*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE(u32Reg<<1, (RIU_READ_2BYTE(u32Reg<<1) & ~(u16Mask)) | (u16Val & u16Mask)) \ 358*53ee8cc1Swenshuai.xi RIU_MACRO_END 359*53ee8cc1Swenshuai.xi 360*53ee8cc1Swenshuai.xi #define MDrv_Write2Byte( u32Reg, u16Val ) \ 361*53ee8cc1Swenshuai.xi RIU_MACRO_START \ 362*53ee8cc1Swenshuai.xi if ( ((u32Reg) & 0x01) ) \ 363*53ee8cc1Swenshuai.xi { \ 364*53ee8cc1Swenshuai.xi RIU_WRITE_BYTE(((u32Reg) << 1) - 1, (MS_U8)((u16Val))); \ 365*53ee8cc1Swenshuai.xi RIU_WRITE_BYTE(((u32Reg) + 1) << 1, (MS_U8)((u16Val) >> 8)); \ 366*53ee8cc1Swenshuai.xi } \ 367*53ee8cc1Swenshuai.xi else \ 368*53ee8cc1Swenshuai.xi { \ 369*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( ((u32Reg)<<1) , u16Val); \ 370*53ee8cc1Swenshuai.xi } \ 371*53ee8cc1Swenshuai.xi RIU_MACRO_END 372*53ee8cc1Swenshuai.xi 373*53ee8cc1Swenshuai.xi #define MDrv_Write3Byte( u32Reg, u32Val ) \ 374*53ee8cc1Swenshuai.xi RIU_MACRO_START \ 375*53ee8cc1Swenshuai.xi if ((u32Reg) & 0x01) \ 376*53ee8cc1Swenshuai.xi { \ 377*53ee8cc1Swenshuai.xi RIU_WRITE_BYTE((u32Reg << 1) - 1, u32Val); \ 378*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( (u32Reg + 1)<<1 , ((u32Val) >> 8)); \ 379*53ee8cc1Swenshuai.xi } \ 380*53ee8cc1Swenshuai.xi else \ 381*53ee8cc1Swenshuai.xi { \ 382*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( (u32Reg) << 1, u32Val); \ 383*53ee8cc1Swenshuai.xi RIU_WRITE_BYTE( (u32Reg + 2) << 1 , ((u32Val) >> 16)); \ 384*53ee8cc1Swenshuai.xi } \ 385*53ee8cc1Swenshuai.xi RIU_MACRO_END 386*53ee8cc1Swenshuai.xi 387*53ee8cc1Swenshuai.xi #define MDrv_Write4Byte( u32Reg, u32Val ) \ 388*53ee8cc1Swenshuai.xi RIU_MACRO_START \ 389*53ee8cc1Swenshuai.xi if ((u32Reg) & 0x01) \ 390*53ee8cc1Swenshuai.xi { \ 391*53ee8cc1Swenshuai.xi RIU_WRITE_BYTE( ((u32Reg) << 1) - 1 , u32Val); \ 392*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( ((u32Reg) + 1)<<1 , ( (u32Val) >> 8)); \ 393*53ee8cc1Swenshuai.xi RIU_WRITE_BYTE( (((u32Reg) + 3) << 1) , ((u32Val) >> 24)); \ 394*53ee8cc1Swenshuai.xi } \ 395*53ee8cc1Swenshuai.xi else \ 396*53ee8cc1Swenshuai.xi { \ 397*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( (u32Reg) <<1 , u32Val); \ 398*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( ((u32Reg) + 2)<<1 , ((u32Val) >> 16)); \ 399*53ee8cc1Swenshuai.xi } \ 400*53ee8cc1Swenshuai.xi RIU_MACRO_END 401*53ee8cc1Swenshuai.xi 402*53ee8cc1Swenshuai.xi #define MDrv_WriteByteMask( u32Reg, u8Val, u8Msk ) \ 403*53ee8cc1Swenshuai.xi RIU_MACRO_START \ 404*53ee8cc1Swenshuai.xi RIU_WRITE_BYTE( (((u32Reg) <<1) - ((u32Reg) & 1)), (RIU_READ_BYTE((((u32Reg) <<1) - ((u32Reg) & 1))) & ~(u8Msk)) | ((u8Val) & (u8Msk))); \ 405*53ee8cc1Swenshuai.xi RIU_MACRO_END 406*53ee8cc1Swenshuai.xi 407*53ee8cc1Swenshuai.xi 408*53ee8cc1Swenshuai.xi 409*53ee8cc1Swenshuai.xi 410*53ee8cc1Swenshuai.xi //============================================================= 411*53ee8cc1Swenshuai.xi // Just for Scaler 412*53ee8cc1Swenshuai.xi #if ENABLE_REGISTER_SPREAD 413*53ee8cc1Swenshuai.xi 414*53ee8cc1Swenshuai.xi #define SC_W2BYTE( u32Id, u32Reg, u16Val)\ 415*53ee8cc1Swenshuai.xi CHECK_XC_SWDS_ENABLE_START\ 416*53ee8cc1Swenshuai.xi ({if((((u32Reg) & 0xFFFF) >> 8) >= _XC_Device_Offset[1])\ 417*53ee8cc1Swenshuai.xi {\ 418*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFFFF)) << 1 , u16Val ) ; \ 419*53ee8cc1Swenshuai.xi }\ 420*53ee8cc1Swenshuai.xi else\ 421*53ee8cc1Swenshuai.xi {\ 422*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFFFF) + (_XC_Device_Offset[u32Id] << 8) ) << 1 , u16Val ) ; \ 423*53ee8cc1Swenshuai.xi }})\ 424*53ee8cc1Swenshuai.xi CHECK_XC_SWDS_ENABLE_END 425*53ee8cc1Swenshuai.xi 426*53ee8cc1Swenshuai.xi #define SC_R2BYTE( u32Id, u32Reg ) \ 427*53ee8cc1Swenshuai.xi ( { ((((u32Reg) & 0xFFFF) >> 8) >= _XC_Device_Offset[1])\ 428*53ee8cc1Swenshuai.xi ? RIU_READ_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFFFF) ) << 1 ) \ 429*53ee8cc1Swenshuai.xi : RIU_READ_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFFFF) + (_XC_Device_Offset[u32Id] << 8) ) << 1 ); } ) 430*53ee8cc1Swenshuai.xi 431*53ee8cc1Swenshuai.xi #define SC_W4BYTE( u32Id, u32Reg, u32Val)\ 432*53ee8cc1Swenshuai.xi CHECK_XC_SWDS_ENABLE_START\ 433*53ee8cc1Swenshuai.xi ({if((((u32Reg) & 0xFFFF) >> 8) >= _XC_Device_Offset[1])\ 434*53ee8cc1Swenshuai.xi {\ 435*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFFFF) ) <<1, (MS_U16)((u32Val) & 0x0000FFFF) ) ; \ 436*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFFFF) + 2 ) << 1, (MS_U16)(((u32Val) >> 16) & 0x0000FFFF) );\ 437*53ee8cc1Swenshuai.xi }\ 438*53ee8cc1Swenshuai.xi else\ 439*53ee8cc1Swenshuai.xi {\ 440*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFFFF) + (_XC_Device_Offset[u32Id] << 8) ) <<1, (MS_U16)((u32Val) & 0x0000FFFF) ) ; \ 441*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFFFF) + (_XC_Device_Offset[u32Id] << 8) + 2 ) << 1, (MS_U16)(((u32Val) >> 16) & 0x0000FFFF) );\ 442*53ee8cc1Swenshuai.xi }})\ 443*53ee8cc1Swenshuai.xi CHECK_XC_SWDS_ENABLE_END 444*53ee8cc1Swenshuai.xi 445*53ee8cc1Swenshuai.xi #define SC_R4BYTE( u32Id, u32Reg )\ 446*53ee8cc1Swenshuai.xi ( { ((((u32Reg) & 0xFFFF) >> 8) >= _XC_Device_Offset[1])\ 447*53ee8cc1Swenshuai.xi ? RIU_READ_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFFFF)) << 1 ) | (MS_U32)(RIU_READ_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFFFF) + 2 ) << 1 )) << 16 \ 448*53ee8cc1Swenshuai.xi : RIU_READ_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFFFF) + (_XC_Device_Offset[u32Id] << 8) ) << 1 ) | (MS_U32)(RIU_READ_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFFFF) + (_XC_Device_Offset[u32Id] << 8) + 2 ) << 1 )) << 16 ; } ) 449*53ee8cc1Swenshuai.xi 450*53ee8cc1Swenshuai.xi #define SC_R2BYTEMSK( u32Id, u32Reg, u16mask)\ 451*53ee8cc1Swenshuai.xi ( { ((((u32Reg) & 0xFFFF) >> 8) >= _XC_Device_Offset[1])\ 452*53ee8cc1Swenshuai.xi ? RIU_READ_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFFFF) ) << 1 ) & (u16mask)\ 453*53ee8cc1Swenshuai.xi : RIU_READ_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFFFF) + (_XC_Device_Offset[u32Id] << 8) ) << 1 ) & (u16mask) ; } ) 454*53ee8cc1Swenshuai.xi 455*53ee8cc1Swenshuai.xi #define SC_W2BYTEMSK( u32Id, u32Reg, u16Val, u16Mask)\ 456*53ee8cc1Swenshuai.xi CHECK_XC_SWDS_ENABLE_START\ 457*53ee8cc1Swenshuai.xi ({if((((u32Reg) & 0xFFFF) >> 8) >= _XC_Device_Offset[1])\ 458*53ee8cc1Swenshuai.xi {\ 459*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFFFF) ) << 1, (RIU_READ_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFFFF) ) << 1) & ~(u16Mask) ) | ((u16Val) & (u16Mask)) ) ;\ 460*53ee8cc1Swenshuai.xi }\ 461*53ee8cc1Swenshuai.xi else\ 462*53ee8cc1Swenshuai.xi {\ 463*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFFFF) + (_XC_Device_Offset[u32Id] << 8) ) << 1, (RIU_READ_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFFFF) + (_XC_Device_Offset[u32Id] << 8) ) << 1) & ~(u16Mask) ) | ((u16Val) & (u16Mask)) ) ; \ 464*53ee8cc1Swenshuai.xi }})\ 465*53ee8cc1Swenshuai.xi CHECK_XC_SWDS_ENABLE_END 466*53ee8cc1Swenshuai.xi 467*53ee8cc1Swenshuai.xi 468*53ee8cc1Swenshuai.xi #define GOP_R2BYTEMSK(u32Reg, u16mask)\ 469*53ee8cc1Swenshuai.xi ( { RIU_READ_2BYTE( (REG_GOP_BASE + ((u32Reg) & 0xFFFF) ) << 1) & (u16mask) ; } ) 470*53ee8cc1Swenshuai.xi 471*53ee8cc1Swenshuai.xi #define GOP_W2BYTEMSK(u32Reg, u16Val, u16Mask)\ 472*53ee8cc1Swenshuai.xi ( { RIU_WRITE_2BYTE( (REG_GOP_BASE + ((u32Reg) & 0xFFFF) ) << 1, (RIU_READ_2BYTE( (REG_GOP_BASE + ((u32Reg) & 0xFFFF) ) << 1) & ~(u16Mask) ) | ((u16Val) & (u16Mask)) ) ; }) 473*53ee8cc1Swenshuai.xi 474*53ee8cc1Swenshuai.xi 475*53ee8cc1Swenshuai.xi #else 476*53ee8cc1Swenshuai.xi #define SC_W2BYTE( u32Id, u32Reg, u16Val)\ 477*53ee8cc1Swenshuai.xi CHECK_XC_SWDS_ENABLE_START\ 478*53ee8cc1Swenshuai.xi ({if((((u32Reg) & 0xFFFF) >> 8) >= _XC_Device_Offset[1])\ 479*53ee8cc1Swenshuai.xi {\ 480*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE(REG_SCALER_BASE << 1, ((u32Reg) >> 8) & 0x00FF ) ; \ 481*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( (REG_SCALER_BASE +((u32Reg) & 0xFF) ) << 1 , u16Val ) ;\ 482*53ee8cc1Swenshuai.xi }\ 483*53ee8cc1Swenshuai.xi else\ 484*53ee8cc1Swenshuai.xi {\ 485*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE(REG_SCALER_BASE << 1, (((u32Reg) >> 8) & 0x00FF) + _XC_Device_Offset[u32Id] ) ; \ 486*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( (REG_SCALER_BASE +((u32Reg) & 0xFF) ) << 1 , u16Val ) ;\ 487*53ee8cc1Swenshuai.xi }})\ 488*53ee8cc1Swenshuai.xi CHECK_XC_SWDS_ENABLE_END 489*53ee8cc1Swenshuai.xi 490*53ee8cc1Swenshuai.xi #define SC_R2BYTE( u32Id, u32Reg ) \ 491*53ee8cc1Swenshuai.xi ({if((((u32Reg) & 0xFFFF) >> 8) >= _XC_Device_Offset[1])\ 492*53ee8cc1Swenshuai.xi {\ 493*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE(REG_SCALER_BASE << 1, ( (u32Reg) >> 8) & 0x00FF ) ; \ 494*53ee8cc1Swenshuai.xi }\ 495*53ee8cc1Swenshuai.xi else\ 496*53ee8cc1Swenshuai.xi {\ 497*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE(REG_SCALER_BASE << 1, (( (u32Reg) >> 8) & 0x00FF) + _XC_Device_Offset[u32Id] ) ; \ 498*53ee8cc1Swenshuai.xi }\ 499*53ee8cc1Swenshuai.xi RIU_READ_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFF) )<<1 ) ; } ) 500*53ee8cc1Swenshuai.xi 501*53ee8cc1Swenshuai.xi #define SC_W4BYTE( u32Id, u32Reg, u32Val)\ 502*53ee8cc1Swenshuai.xi CHECK_XC_SWDS_ENABLE_START\ 503*53ee8cc1Swenshuai.xi ({if((((u32Reg) & 0xFFFF) >> 8) >= _XC_Device_Offset[1])\ 504*53ee8cc1Swenshuai.xi {\ 505*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE(REG_SCALER_BASE<<1, ((u32Reg) >> 8) & 0x00FF) ; \ 506*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFF) ) <<1, (MS_U16)((u32Val) & 0x0000FFFF) ) ; \ 507*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFF) + 2 ) << 1, (MS_U16)(((u32Val) >> 16) & 0x0000FFFF) );\ 508*53ee8cc1Swenshuai.xi }\ 509*53ee8cc1Swenshuai.xi else\ 510*53ee8cc1Swenshuai.xi {\ 511*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE(REG_SCALER_BASE<<1, (((u32Reg) >> 8) & 0x00FF) + _XC_Device_Offset[u32Id] ) ; \ 512*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFF) ) <<1, (MS_U16)((u32Val) & 0x0000FFFF) ) ; \ 513*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFF) + 2 ) << 1, (MS_U16)(((u32Val) >> 16) & 0x0000FFFF) );\ 514*53ee8cc1Swenshuai.xi }})\ 515*53ee8cc1Swenshuai.xi CHECK_XC_SWDS_ENABLE_END 516*53ee8cc1Swenshuai.xi 517*53ee8cc1Swenshuai.xi #define SC_R4BYTE( u32Id, u32Reg )\ 518*53ee8cc1Swenshuai.xi ({if((((u32Reg) & 0xFFFF) >> 8) >= _XC_Device_Offset[1])\ 519*53ee8cc1Swenshuai.xi {\ 520*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE(REG_SCALER_BASE << 1, ((u32Reg) >> 8) & 0x00FF ) ; \ 521*53ee8cc1Swenshuai.xi }\ 522*53ee8cc1Swenshuai.xi else\ 523*53ee8cc1Swenshuai.xi {\ 524*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE(REG_SCALER_BASE << 1, (((u32Reg) >> 8) & 0x00FF) + _XC_Device_Offset[u32Id] ) ; \ 525*53ee8cc1Swenshuai.xi }\ 526*53ee8cc1Swenshuai.xi RIU_READ_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFF) ) << 1 ) | (MS_U32)(RIU_READ_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFF) + 2 ) << 1 )) << 16; } ) 527*53ee8cc1Swenshuai.xi 528*53ee8cc1Swenshuai.xi #define SC_R2BYTEMSK( u32Id, u32Reg, u16mask)\ 529*53ee8cc1Swenshuai.xi ({if((((u32Reg) & 0xFFFF) >> 8) >= _XC_Device_Offset[1])\ 530*53ee8cc1Swenshuai.xi {\ 531*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE(REG_SCALER_BASE << 1, ((u32Reg) >> 8) & 0x00FF ) ; \ 532*53ee8cc1Swenshuai.xi }\ 533*53ee8cc1Swenshuai.xi else\ 534*53ee8cc1Swenshuai.xi {\ 535*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE(REG_SCALER_BASE << 1, (((u32Reg) >> 8) & 0x00FF) + _XC_Device_Offset[u32Id] ) ; \ 536*53ee8cc1Swenshuai.xi }\ 537*53ee8cc1Swenshuai.xi RIU_READ_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFF) ) << 1) & (u16mask) ; } ) 538*53ee8cc1Swenshuai.xi 539*53ee8cc1Swenshuai.xi #define SC_W2BYTEMSK( u32Id, u32Reg, u16Val, u16Mask)\ 540*53ee8cc1Swenshuai.xi CHECK_XC_SWDS_ENABLE_START\ 541*53ee8cc1Swenshuai.xi ({if((((u32Reg) & 0xFFFF) >> 8) >= _XC_Device_Offset[1])\ 542*53ee8cc1Swenshuai.xi {\ 543*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE(REG_SCALER_BASE << 1, ((u32Reg) >> 8) & 0x00FF ) ; \ 544*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFF) ) << 1, (RIU_READ_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFF) ) << 1) & ~(u16Mask) ) | ((u16Val) & (u16Mask)) ) ;\ 545*53ee8cc1Swenshuai.xi }\ 546*53ee8cc1Swenshuai.xi else\ 547*53ee8cc1Swenshuai.xi {\ 548*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE(REG_SCALER_BASE << 1, (((u32Reg) >> 8) & 0x00FF) + _XC_Device_Offset[u32Id] ) ; \ 549*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFF) ) << 1, (RIU_READ_2BYTE( (REG_SCALER_BASE + ((u32Reg) & 0xFF) ) << 1) & ~(u16Mask) ) | ((u16Val) & (u16Mask)) ) ;\ 550*53ee8cc1Swenshuai.xi }})\ 551*53ee8cc1Swenshuai.xi CHECK_XC_SWDS_ENABLE_END 552*53ee8cc1Swenshuai.xi 553*53ee8cc1Swenshuai.xi #endif 554*53ee8cc1Swenshuai.xi 555*53ee8cc1Swenshuai.xi //============================================================= 556*53ee8cc1Swenshuai.xi // Just for MOD 557*53ee8cc1Swenshuai.xi 558*53ee8cc1Swenshuai.xi #if ENABLE_REGISTER_SPREAD 559*53ee8cc1Swenshuai.xi #define MOD_W2BYTE( u32Reg, u16Val)\ 560*53ee8cc1Swenshuai.xi ( { RIU_WRITE_2BYTE( (REG_MOD_BASE + ((u32Reg) & 0xFFFF)) << 1 , u16Val ) ; } ) 561*53ee8cc1Swenshuai.xi 562*53ee8cc1Swenshuai.xi #define MOD_R2BYTE( u32Reg ) \ 563*53ee8cc1Swenshuai.xi ( { RIU_READ_2BYTE( (REG_MOD_BASE + ((u32Reg) & 0xFFFF)) <<1 ) ; } ) 564*53ee8cc1Swenshuai.xi 565*53ee8cc1Swenshuai.xi #define MOD_R2BYTEMSK( u32Reg, u16mask)\ 566*53ee8cc1Swenshuai.xi ( { RIU_READ_2BYTE( (REG_MOD_BASE + ((u32Reg) & 0xFFFF)) << 1) & (u16mask) ; } ) 567*53ee8cc1Swenshuai.xi 568*53ee8cc1Swenshuai.xi #define MOD_W2BYTEMSK( u32Reg, u16Val, u16Mask)\ 569*53ee8cc1Swenshuai.xi ( { RIU_WRITE_2BYTE( (REG_MOD_BASE + ((u32Reg) & 0xFFFF)) << 1, (RIU_READ_2BYTE( (REG_MOD_BASE + ((u32Reg) & 0xFFFF) ) << 1) & ~(u16Mask) ) | ((u16Val) & (u16Mask)) ) ; }) 570*53ee8cc1Swenshuai.xi 571*53ee8cc1Swenshuai.xi #define PWM_R2BYTEMSK( u32Reg, u16mask)\ 572*53ee8cc1Swenshuai.xi ( { RIU_READ_2BYTE( (REG_PWM_BASE + ((u32Reg) & 0xFFFF)) << 1) & (u16mask) ; } ) 573*53ee8cc1Swenshuai.xi 574*53ee8cc1Swenshuai.xi #else 575*53ee8cc1Swenshuai.xi #define MOD_W2BYTE( u32Reg, u16Val)\ 576*53ee8cc1Swenshuai.xi ( { RIU_WRITE_2BYTE(REG_MOD_BASE << 1, ((u32Reg) >> 8) & 0x00FF ); \ 577*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( (REG_MOD_BASE + ((u32Reg) & 0xFF) ) << 1, u16Val ); } ) 578*53ee8cc1Swenshuai.xi 579*53ee8cc1Swenshuai.xi #define MOD_R2BYTE( u32Reg ) \ 580*53ee8cc1Swenshuai.xi ( { RIU_WRITE_2BYTE(REG_MOD_BASE << 1, ((u32Reg) >> 8) & 0x00FF ); \ 581*53ee8cc1Swenshuai.xi RIU_READ_2BYTE( (REG_MOD_BASE + ((u32Reg) & 0xFF) ) << 1) ; } ) 582*53ee8cc1Swenshuai.xi 583*53ee8cc1Swenshuai.xi #define MOD_R2BYTEMSK( u32Reg, u16mask)\ 584*53ee8cc1Swenshuai.xi ( { RIU_WRITE_2BYTE(REG_MOD_BASE << 1, ((u32Reg) >> 8) & 0x00FF ); \ 585*53ee8cc1Swenshuai.xi RIU_READ_2BYTE( (REG_MOD_BASE + ((u32Reg) & 0xFF) ) << 1) & (u16mask); }) 586*53ee8cc1Swenshuai.xi 587*53ee8cc1Swenshuai.xi #define MOD_W2BYTEMSK( u32Reg, u16Val, u16Mask)\ 588*53ee8cc1Swenshuai.xi ( { RIU_WRITE_2BYTE(REG_MOD_BASE << 1, ((u32Reg) >> 8) & 0x00FF ); \ 589*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( (REG_MOD_BASE + ((u32Reg) & 0xFF) )<<1 , (RIU_READ_2BYTE( (REG_MOD_BASE + ((u32Reg) & 0xFF) ) << 1 ) & ~(u16Mask)) | ((u16Val) & (u16Mask)) ); } ) 590*53ee8cc1Swenshuai.xi #endif 591*53ee8cc1Swenshuai.xi /// new MOD bank for MOD_A, and original is fo MOD_D, from Monaco 592*53ee8cc1Swenshuai.xi #define MOD_A_W2BYTE( u32Reg, u16Val)\ 593*53ee8cc1Swenshuai.xi ( { RIU_WRITE_2BYTE( (REG_MOD_A_BASE + ((u32Reg) & 0xFF) ) << 1, u16Val ); } ) 594*53ee8cc1Swenshuai.xi 595*53ee8cc1Swenshuai.xi #define MOD_A_R2BYTE( u32Reg ) \ 596*53ee8cc1Swenshuai.xi ( { RIU_READ_2BYTE( (REG_MOD_A_BASE + ((u32Reg) & 0xFF) ) << 1) ; } ) 597*53ee8cc1Swenshuai.xi 598*53ee8cc1Swenshuai.xi #define MOD_A_R2BYTEMSK( u32Reg, u16mask)\ 599*53ee8cc1Swenshuai.xi ( { RIU_READ_2BYTE( (REG_MOD_A_BASE + ((u32Reg) & 0xFF) ) << 1) & (u16mask); }) 600*53ee8cc1Swenshuai.xi 601*53ee8cc1Swenshuai.xi #define MOD_A_W2BYTEMSK( u32Reg, u16Val, u16Mask)\ 602*53ee8cc1Swenshuai.xi ( { RIU_WRITE_2BYTE( (REG_MOD_A_BASE + ((u32Reg) & 0xFF) )<<1 , (RIU_READ_2BYTE( (REG_MOD_A_BASE + ((u32Reg) & 0xFF) ) << 1 ) & ~(u16Mask)) | ((u16Val) & (u16Mask)) ); } ) 603*53ee8cc1Swenshuai.xi 604*53ee8cc1Swenshuai.xi /// VMark banks 605*53ee8cc1Swenshuai.xi #define VMARK_W2BYTE( u32Id, u32Reg, u16Val)\ 606*53ee8cc1Swenshuai.xi RIU_MACRO_START\ 607*53ee8cc1Swenshuai.xi if (u32Id == 0)\ 608*53ee8cc1Swenshuai.xi { RIU_WRITE_2BYTE( (REG_VMARK0_BASE+ ((u32Reg) & 0xFF) ) << 1, u16Val )}\ 609*53ee8cc1Swenshuai.xi else\ 610*53ee8cc1Swenshuai.xi { RIU_WRITE_2BYTE( (REG_VMARK1_BASE+ ((u32Reg) & 0xFF) ) << 1, u16Val )}\ 611*53ee8cc1Swenshuai.xi RIU_MACRO_END 612*53ee8cc1Swenshuai.xi #define VMARK_R2BYTE( u32Id, u32Reg ) \ 613*53ee8cc1Swenshuai.xi (u32Id == 0)? RIU_READ_2BYTE( (REG_VMARK0_BASE + ((u32Reg) & 0xFF) ) << 1): RIU_READ_2BYTE( (REG_VMARK1_BASE + ((u32Reg) & 0xFF) ) << 1); 614*53ee8cc1Swenshuai.xi #define VMARK_R2BYTEMSK( u32Id, u32Reg, u16mask)\ 615*53ee8cc1Swenshuai.xi (u32Id == 0)? (RIU_READ_2BYTE( (REG_VMARK0_BASE + ((u32Reg) & 0xFF) ) << 1) & (u16mask)): (RIU_READ_2BYTE( (REG_VMARK1_BASE + ((u32Reg) & 0xFF) ) << 1) & (u16mask)); 616*53ee8cc1Swenshuai.xi #define VMARK_W2BYTEMSK( u32Id, u32Reg, u16Val, u16Mask)\ 617*53ee8cc1Swenshuai.xi RIU_MACRO_START\ 618*53ee8cc1Swenshuai.xi if (u32Id == 0)\ 619*53ee8cc1Swenshuai.xi { RIU_WRITE_2BYTE( (REG_VMARK0_BASE + ((u32Reg) & 0xFF) )<<1 , (RIU_READ_2BYTE( (REG_VMARK0_BASE + ((u32Reg) & 0xFF) ) << 1 ) & ~(u16Mask)) | ((u16Val) & (u16Mask)) ); }\ 620*53ee8cc1Swenshuai.xi else\ 621*53ee8cc1Swenshuai.xi { RIU_WRITE_2BYTE( (REG_VMARK1_BASE + ((u32Reg) & 0xFF) )<<1 , (RIU_READ_2BYTE( (REG_VMARK1_BASE + ((u32Reg) & 0xFF) ) << 1 ) & ~(u16Mask)) | ((u16Val) & (u16Mask)) ); }\ 622*53ee8cc1Swenshuai.xi RIU_MACRO_END 623*53ee8cc1Swenshuai.xi 624*53ee8cc1Swenshuai.xi //============================================================= 625*53ee8cc1Swenshuai.xi //General ( Make sure u32Reg is not ODD 626*53ee8cc1Swenshuai.xi #define W2BYTE( u32Reg, u16Val) RIU_WRITE_2BYTE( (u32Reg) << 1 , u16Val ) 627*53ee8cc1Swenshuai.xi 628*53ee8cc1Swenshuai.xi 629*53ee8cc1Swenshuai.xi #define R2BYTE( u32Reg ) RIU_READ_2BYTE( (u32Reg) << 1) 630*53ee8cc1Swenshuai.xi 631*53ee8cc1Swenshuai.xi #define W4BYTE( u32Reg, u32Val)\ 632*53ee8cc1Swenshuai.xi ( { RIU_WRITE_2BYTE( (u32Reg) << 1, ((u32Val) & 0x0000FFFF) ); \ 633*53ee8cc1Swenshuai.xi RIU_WRITE_2BYTE( ( (u32Reg) + 2) << 1 , (((u32Val) >> 16) & 0x0000FFFF)) ; } ) 634*53ee8cc1Swenshuai.xi 635*53ee8cc1Swenshuai.xi #define R4BYTE( u32Reg )\ 636*53ee8cc1Swenshuai.xi ( { ((RIU_READ_2BYTE( (u32Reg) << 1)) | ((MS_U32)(RIU_READ_2BYTE( ( (u32Reg) + 2 ) << 1) ) << 16)) ; } ) 637*53ee8cc1Swenshuai.xi 638*53ee8cc1Swenshuai.xi #define R2BYTEMSK( u32Reg, u16mask)\ 639*53ee8cc1Swenshuai.xi ( { RIU_READ_2BYTE( (u32Reg)<< 1) & (u16mask) ; } ) 640*53ee8cc1Swenshuai.xi 641*53ee8cc1Swenshuai.xi #define W2BYTEMSK( u32Reg, u16Val, u16Mask)\ 642*53ee8cc1Swenshuai.xi ( { RIU_WRITE_2BYTE( (u32Reg)<< 1 , (RIU_READ_2BYTE((u32Reg) << 1) & ~(u16Mask)) | ((u16Val) & (u16Mask)) ) ; } ) 643*53ee8cc1Swenshuai.xi 644*53ee8cc1Swenshuai.xi #define W3BYTE( u32Reg, u32Val)\ 645*53ee8cc1Swenshuai.xi ( { RIU_WRITE_2BYTE( (u32Reg) << 1, u32Val); \ 646*53ee8cc1Swenshuai.xi RIU_WRITE_BYTE( (u32Reg + 2) << 1 , ((u32Val) >> 16)); } ) 647*53ee8cc1Swenshuai.xi 648*53ee8cc1Swenshuai.xi 649*53ee8cc1Swenshuai.xi //============================================================= 650*53ee8cc1Swenshuai.xi // Just for PM registers 651*53ee8cc1Swenshuai.xi 652*53ee8cc1Swenshuai.xi /* 653*53ee8cc1Swenshuai.xi R/W register forced to use 8 bit address, everytime need to r/w 2 bytes with mask 654*53ee8cc1Swenshuai.xi 655*53ee8cc1Swenshuai.xi 32bit address 16 bit address 8 bit address 656*53ee8cc1Swenshuai.xi 0 0 0 657*53ee8cc1Swenshuai.xi 1 x 1 658*53ee8cc1Swenshuai.xi 2 659*53ee8cc1Swenshuai.xi 3 660*53ee8cc1Swenshuai.xi 4 1 2 661*53ee8cc1Swenshuai.xi 5 x 3 662*53ee8cc1Swenshuai.xi 6 663*53ee8cc1Swenshuai.xi 7 664*53ee8cc1Swenshuai.xi 8 2 4 665*53ee8cc1Swenshuai.xi 9 x 5 666*53ee8cc1Swenshuai.xi A 667*53ee8cc1Swenshuai.xi B */ 668*53ee8cc1Swenshuai.xi 669*53ee8cc1Swenshuai.xi // to read 0x2F03[3], please use R1BYTE(0x2F03, 3:3) 670*53ee8cc1Swenshuai.xi #define PM_R1BYTE(u32Addr, u8mask) \ 671*53ee8cc1Swenshuai.xi (READ_BYTE (_PM_RIU_BASE + (u32Addr << 1) - (u32Addr & 1)) & BMASK(u8mask)) 672*53ee8cc1Swenshuai.xi 673*53ee8cc1Swenshuai.xi // to write 0x2F02[4:3] with 2'b10, please use W1BYTE(0x2F02, 0x02, 4:3) 674*53ee8cc1Swenshuai.xi #define PM_W1BYTE(u32Addr, u8Val, u8mask) \ 675*53ee8cc1Swenshuai.xi (WRITE_BYTE(_PM_RIU_BASE + (u32Addr << 1) - (u32Addr & 1), (PM_R1BYTE(u32Addr, 7:0) & ~BMASK(u8mask)) | (BITS(u8mask, u8Val) & BMASK(u8mask)))) 676*53ee8cc1Swenshuai.xi #if 1//alex_tung 677*53ee8cc1Swenshuai.xi // access PM registers 678*53ee8cc1Swenshuai.xi // u32Addr must be 16bit aligned 679*53ee8cc1Swenshuai.xi #define PM_R2BYTE( u32Reg, u16mask)\ 680*53ee8cc1Swenshuai.xi ( PM_RIU_READ_2BYTE( (u32Reg)<< 1) & u16mask ) 681*53ee8cc1Swenshuai.xi // u32Addr must be 16bit aligned 682*53ee8cc1Swenshuai.xi #define PM_W2BYTE( u32Reg, u16Val, u16Mask)\ 683*53ee8cc1Swenshuai.xi ( PM_RIU_WRITE_2BYTE( (u32Reg)<< 1 , (PM_RIU_READ_2BYTE((u32Reg) << 1) & ~(u16Mask)) | ((u16Val) & (u16Mask)) ) ) 684*53ee8cc1Swenshuai.xi #else 685*53ee8cc1Swenshuai.xi // u32Addr must be 16bit aligned 686*53ee8cc1Swenshuai.xi #define PM_R2BYTE(u32Addr, u16mask) \ 687*53ee8cc1Swenshuai.xi (READ_WORD (_PM_RIU_BASE + (u32Addr << 1)) & BMASK(u16mask)) 688*53ee8cc1Swenshuai.xi 689*53ee8cc1Swenshuai.xi // u32Addr must be 16bit aligned 690*53ee8cc1Swenshuai.xi #define PM_W2BYTE(u32Addr, u16Val, u16mask) \ 691*53ee8cc1Swenshuai.xi (WRITE_WORD(_PM_RIU_BASE + (u32Addr << 1), (PM_R2BYTE(u32Addr, 15:0) & ~BMASK(u16mask)) | (BITS(u16mask, u16Val) & BMASK(u16mask)))) 692*53ee8cc1Swenshuai.xi #endif 693*53ee8cc1Swenshuai.xi //============================================================= 694*53ee8cc1Swenshuai.xi // Just for HDCP registers for T3 695*53ee8cc1Swenshuai.xi #define HDCP_W2BYTE( u32Reg, u16Val) HDCP_RIU_WRITE_2BYTE( (u32Reg) << 1 , u16Val ) 696*53ee8cc1Swenshuai.xi 697*53ee8cc1Swenshuai.xi #define HDCP_R2BYTE( u32Reg ) HDCP_RIU_READ_2BYTE( (u32Reg) << 1) 698*53ee8cc1Swenshuai.xi 699*53ee8cc1Swenshuai.xi #define HDCP_R2BYTEMSK( u32Reg, u16mask)\ 700*53ee8cc1Swenshuai.xi ( { HDCP_RIU_READ_2BYTE( (u32Reg)<< 1) & u16mask ; } ) 701*53ee8cc1Swenshuai.xi 702*53ee8cc1Swenshuai.xi #define HDCP_W2BYTEMSK( u32Reg, u16Val, u16Mask)\ 703*53ee8cc1Swenshuai.xi ( { HDCP_RIU_WRITE_2BYTE( (u32Reg)<< 1 , (HDCP_RIU_READ_2BYTE((u32Reg) << 1) & ~(u16Mask)) | ((u16Val) & (u16Mask))) ; } ) 704*53ee8cc1Swenshuai.xi 705*53ee8cc1Swenshuai.xi //============================================================= 706*53ee8cc1Swenshuai.xi //for DDC registers for T3 707*53ee8cc1Swenshuai.xi 708*53ee8cc1Swenshuai.xi #define DDC_WRITE( u32Reg, u16Val) DDC_RIU_WRITE_2BYTE( (u32Reg) << 1 , u16Val ) 709*53ee8cc1Swenshuai.xi 710*53ee8cc1Swenshuai.xi #define DDC_READ( u32Reg ) DDC_RIU_READ_2BYTE( (u32Reg) << 1) 711*53ee8cc1Swenshuai.xi #define DDC_READ_MASK( u32Reg, u16mask)\ 712*53ee8cc1Swenshuai.xi ( { DDC_RIU_READ_2BYTE( (u32Reg)<< 1) & u16mask ; } ) 713*53ee8cc1Swenshuai.xi #define DDC_WRITE_MASK( u32Reg, u16Val, u16Mask)\ 714*53ee8cc1Swenshuai.xi ( { DDC_RIU_WRITE_2BYTE( (u32Reg)<< 1 , (DDC_RIU_READ_2BYTE((u32Reg) << 1) & ~(u16Mask)) | ((u16Val) & (u16Mask))) ; } ) 715*53ee8cc1Swenshuai.xi 716*53ee8cc1Swenshuai.xi 717*53ee8cc1Swenshuai.xi 718*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 719*53ee8cc1Swenshuai.xi // Type and Structure 720*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 721*53ee8cc1Swenshuai.xi 722*53ee8cc1Swenshuai.xi 723*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 724*53ee8cc1Swenshuai.xi // Function and Variable 725*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 726*53ee8cc1Swenshuai.xi 727*53ee8cc1Swenshuai.xi 728*53ee8cc1Swenshuai.xi 729*53ee8cc1Swenshuai.xi 730*53ee8cc1Swenshuai.xi 731*53ee8cc1Swenshuai.xi 732*53ee8cc1Swenshuai.xi #undef INTERFACE 733*53ee8cc1Swenshuai.xi 734*53ee8cc1Swenshuai.xi #endif 735*53ee8cc1Swenshuai.xi 736