dahdi-tools/xpp/oct612x/octdeviceapi/oct6100api/oct6100_apimi/oct6100_mask_interrupts.c

117 lines
3.9 KiB
C

/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\
File: oct6100_mask_interrupts.c
Copyright (c) 2001-2007 Octasic Inc.
Description:
This file contains the mask interrupts function.
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.00-PR49 $
$Octasic_Revision: 8 $
\*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
/***************************** INCLUDE FILES *******************************/
#include "oct6100api/oct6100_apimi.h"
#include "oct6100api/oct6100_apiud.h"
#include "oct6100api/oct6100_errors.h"
#include "oct6100api/oct6100_defines.h"
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\
Function: Oct6100InterruptMask
Description: The function is used to mask out the interrupt pin of the chip.
This function is used when a deferred procedure call treats the
interrupt (new interrupts must not be generated until the
signaled interrupt is treated). Which chip is to have its
interrupts masked is determined by the mask structure,
f_pInterruptMask.
-------------------------------------------------------------------------------
| Argument | Description
-------------------------------------------------------------------------------
f_pInterruptMask Pointer to the interrupt masking structure.
\*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
UINT32 Oct6100InterruptMaskDef(
OUT tPOCT6100_INTERRUPT_MASK f_pInterruptMask )
{
f_pInterruptMask->ulUserChipIndex = cOCT6100_INVALID_VALUE;
f_pInterruptMask->pProcessContext = NULL;
return cOCT6100_ERR_OK;
}
UINT32 Oct6100InterruptMask(
IN tPOCT6100_INTERRUPT_MASK f_pInterruptMask )
{
tOCT6100_WRITE_PARAMS WriteParams;
tOCT6100_READ_PARAMS ReadParams;
UINT32 result;
UINT16 usReadData;
/* Determine if the chip's interrupt pin is active.*/
ReadParams.ulReadAddress = 0x210;
ReadParams.pusReadData = &usReadData;
ReadParams.pProcessContext = f_pInterruptMask->pProcessContext;
ReadParams.ulUserChipId = f_pInterruptMask->ulUserChipIndex;
result = Oct6100UserDriverReadOs( &ReadParams );
if ( result != cOCT6100_ERR_OK )
return cOCT6100_ERR_INTRPTS_RW_ERROR;
if ( (usReadData & 0xFFFF) != 0 )
{
/* Chip's interrupt pin is active, so mask interrupt pin. */
ReadParams.ulReadAddress = 0x214;
result = Oct6100UserDriverReadOs( &ReadParams );
if ( result != cOCT6100_ERR_OK )
return cOCT6100_ERR_INTRPTS_RW_ERROR;
/* Determine if the chip's interrupt pin is active. */
WriteParams.pProcessContext = f_pInterruptMask->pProcessContext;
WriteParams.ulUserChipId = f_pInterruptMask->ulUserChipIndex;
WriteParams.ulWriteAddress = 0x214;
WriteParams.usWriteData = (UINT16)( (usReadData & 0xC000) | 0x3FFF );
result = Oct6100UserDriverWriteOs( &WriteParams );
if ( result != cOCT6100_ERR_OK )
return cOCT6100_ERR_INTRPTS_RW_ERROR;
WriteParams.ulWriteAddress = 0x212;
WriteParams.usWriteData = 0x8000;
result = Oct6100UserDriverWriteOs( &WriteParams );
if ( result != cOCT6100_ERR_OK )
return cOCT6100_ERR_INTRPTS_RW_ERROR;
return cOCT6100_ERR_OK;
}
return cOCT6100_ERR_INTRPTS_NOT_ACTIVE;
}