/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\ File: oct6100_interrupts_priv.h Copyright (c) 2001-2011 Octasic Inc. Description: File containing all private defines, macros, structures and prototypes pertaining to the file oct6100_interrupts.c. All elements defined in this file are for private usage of the API. All public elements are defined in the oct6100_interrupts_pub.h file. This file is part of the Octasic OCT6100 GPL API . The OCT6100 GPL API is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The OCT6100 GPL API is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with the OCT6100 GPL API; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. $Octasic_Release: OCT612xAPI-01.04.05 $ $Octasic_Revision: 13 $ \*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/ #ifndef __OCT6100_INTERRUPTS_PRIV_H__ #define __OCT6100_INTERRUPTS_PRIV_H__ /***************************** INCLUDE FILES *******************************/ /***************************** DEFINES *************************************/ #define mOCT6100_GET_INTRPT_ENABLE_TIME( \ ulRegMclkTimeHigh, \ ulRegMclkTimeLow, \ ulIntrptState, \ ulIntrptEnableMclkHigh, \ ulIntrptEnableMclkLow, \ ulIntrptTimeoutMclk, \ ulTimeDiff ) \ if ( ulIntrptState == cOCT6100_INTRPT_WILL_TIMEOUT ) \ { \ ulIntrptEnableMclkLow = ulRegMclkTimeLow + ulIntrptTimeoutMclk; \ if ( ulIntrptEnableMclkLow < ulRegMclkTimeLow ) \ ulIntrptEnableMclkHigh = (ulRegMclkTimeHigh + 1) & 0xFF; \ else \ ulIntrptEnableMclkHigh = ulRegMclkTimeHigh; \ \ ulIntrptState = cOCT6100_INTRPT_IN_TIMEOUT; \ } \ \ if ( ulIntrptEnableMclkLow < ulRegMclkTimeLow ) \ { \ ulTimeDiff = (cOCT6100_FFFFFFFF - ulRegMclkTimeLow - 1) + ulIntrptEnableMclkLow; \ } \ else \ { \ ulTimeDiff = ulIntrptEnableMclkLow - ulRegMclkTimeLow; \ } #define mOCT6100_CHECK_INTRPT_TIMEOUT( \ ulRegMclkTimePlus5MsHigh, \ ulRegMclkTimePlus5MsLow, \ ulIntrptDisableMclkHigh, \ ulIntrptDisableMclkLow, \ ulIntrptEnableMclkHigh, \ ulIntrptEnableMclkLow, \ ulIntrptState, \ fIntrptChange ) \ /* Branch depending on whether the disable time is lesser or greater than the timeout time. */ \ if ( ulIntrptDisableMclkLow < ulIntrptEnableMclkLow ) \ { \ /* Disable period is over if mclk is greater than timeout time or less than disabled time. */ \ if ( ulRegMclkTimePlus5MsLow > ulIntrptEnableMclkLow || \ ulRegMclkTimePlus5MsLow < ulIntrptDisableMclkLow || \ ulRegMclkTimePlus5MsHigh != ulIntrptEnableMclkHigh ) \ { \ fIntrptChange = TRUE; \ ulIntrptState = cOCT6100_INTRPT_ACTIVE; \ } \ } \ else \ { \ /* Disable period is over if mclk is lesser than disable time and greater than timeout. */ \ if ( (ulRegMclkTimePlus5MsLow > ulIntrptEnableMclkLow && ulRegMclkTimePlus5MsLow < ulIntrptDisableMclkLow) || \ (ulRegMclkTimePlus5MsHigh != ulIntrptDisableMclkHigh && ulRegMclkTimePlus5MsHigh != ulIntrptEnableMclkHigh) ) \ { \ fIntrptChange = TRUE; \ ulIntrptState = cOCT6100_INTRPT_ACTIVE; \ } \ } /***************************** TYPES ***************************************/ /************************** FUNCTION PROTOTYPES *****************************/ UINT32 Oct6100ApiIsrSwInit( IN tPOCT6100_INSTANCE_API f_pApiInstance ); UINT32 Oct6100ApiIsrHwInit( IN tPOCT6100_INSTANCE_API f_pApiInstance, IN tPOCT6100_INTERRUPT_CONFIGURE f_pIntrptConfig ); UINT32 Oct6100InterruptConfigureSer( IN tPOCT6100_INSTANCE_API f_pApiInstance, IN tPOCT6100_INTERRUPT_CONFIGURE f_pIntrptConfig, IN BOOL f_fCheckParams ); UINT32 Oct6100ApiClearEnabledInterrupts( IN tPOCT6100_INSTANCE_API f_pApiInstance ); UINT32 Oct6100InterruptServiceRoutineSer( IN tPOCT6100_INSTANCE_API f_pApiInstance, OUT tPOCT6100_INTERRUPT_FLAGS f_pIntFlags ); UINT32 Oct6100ApiWriteIeRegs( IN tPOCT6100_INSTANCE_API f_pApiInstance ); UINT32 Oct6100ApiReadIntrptRegs( IN tPOCT6100_INSTANCE_API f_pApiInstance, OUT tPOCT6100_INTERRUPT_FLAGS f_pIntFlags, IN UINT32 f_ulRegister210h ); UINT32 Oct6100ApiUpdateIntrptStates( IN tPOCT6100_INSTANCE_API f_pApiInstance, OUT tPOCT6100_INTERRUPT_FLAGS f_pIntFlags ); UINT32 Oct6100ApiWriteIntrptRegs( IN tPOCT6100_INSTANCE_API f_pApiInstance ); UINT32 Oct6100ApiReadChipMclkTime( IN tPOCT6100_INSTANCE_API f_pApiInstance ); UINT32 Oct6100ApiUpdateIntrptTimeouts( IN tPOCT6100_INSTANCE_API f_pApiInstance ); UINT32 Oct6100ApiScheduleNextMclkIntrpt( IN tPOCT6100_INSTANCE_API f_pApiInstance, IN UINT32 f_ulIntrptToSet ); UINT32 Oct6100ApiScheduleNextMclkIntrptSer( IN tPOCT6100_INSTANCE_API f_pApiInstance ); UINT32 Oct6100ApiCheckProcessorState( IN tPOCT6100_INSTANCE_API f_pApiInstance, IN tPOCT6100_INTERRUPT_FLAGS f_pIntFlags ); #endif /* __OCT6100_INTERRUPTS_PRIV_H__ */