FreeCalypso > hg > leo2moko-debug
diff chipsetsw/drivers/drv_core/inth/sys_inth.c @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/chipsetsw/drivers/drv_core/inth/sys_inth.c Mon Jun 01 03:24:05 2015 +0000 @@ -0,0 +1,209 @@ +/* @(#) nom : sys_inth.c SID: 1.2 date : 05/23/03 */ +/* Filename: sys_inth.c */ +/* Version: 1.2 */ +/****************************************************************************** + * WIRELESS COMMUNICATION SYSTEM DEVELOPMENT + * + * (C) 2002 Texas Instruments France. All rights reserved + * + * Author : Francois AMAND + * + * + * Important Note + * -------------- + * + * This S/W is a preliminary version. It contains information on a product + * under development and is issued for evaluation purposes only. Features + * characteristics, data and other information are subject to change. + * + * The S/W is furnished under Non Disclosure Agreement and may be used or + * copied only in accordance with the terms of the agreement. It is an offence + * to copy the software in any way except as specifically set out in the + * agreement. No part of this document may be reproduced or transmitted in any + * form or by any means, electronic or mechanical, including photocopying and + * recording, for any purpose without the express written permission of Texas + * Instruments Inc. + * + ****************************************************************************** + * + * FILE NAME: sys_inth.c + * + * + * PURPOSE: Interrupt Handler driver compiled in 32-bits mode. + * + * + * FILE REFERENCES: + * + * Name IO Description + * ------------- -- --------------------------------------------- + * + * + * + * EXTERNAL VARIABLES: + * + * Source: + * + * Name Type IO Description + * ------------- --------------- -- ------------------------------ + * + * + * + * EXTERNAL REFERENCES: + * + * Name Description + * ------------------ ------------------------------------------------------- + * + * + * + * ABNORMAL TERMINATION CONDITIONS, ERROR AND WARNING MESSAGES: + * + * + * + * ASSUMPTION, CONSTRAINTS, RESTRICTIONS: + * + * + * + * NOTES: + * + * + * + * REQUIREMENTS/FUNCTIONAL SPECIFICATION REFERENCES: + * + * + * + * + * DEVELOPMENT HISTORY: + * + * Date Name(s) Version Description + * ----------- -------------- ------- ------------------------------------- + * 11-Oct-2002 Francois AMAND 0.0.1 First implementation + * + * ALGORITHM: + * + * + *****************************************************************************/ + +#include "l1sw.cfg" +#include "chipset.cfg" + +#if (CHIPSET == 12) + +#if (OP_L1_STANDALONE == 0) + #include "main/sys_types.h" +#else + #include "sys_types.h" +#endif +#include "sys_inth.h" + + + /****************************************************************************** + * + * FUNCTION NAME: f_inth_init + * Setup interrupt handler configuration. + * + * + * ARGUMENT LIST: + * + * Argument Type IO Description + * ------------ ------------------- -- --------------------------------- + * + * RETURN VALUE: None + * + *****************************************************************************/ + + static void f_inth_init(SYS_UWORD16 d_it_num, T_INTH_CONFIG *p_config) + { + volatile SYS_UWORD16 *p_inth_level_reg; + SYS_UWORD8 d_it_num_temp = d_it_num; + + /* + * Get interrupt handler main address between INTH and SEC_INTH + */ + if (d_it_num < C_INTH_NUM_INT) + p_inth_level_reg = (SYS_UWORD16 *) C_INTH_EXT_REG; + + else if (d_it_num < (C_INTH_NUM_INT + C_INTH_2ND_NUM_INT)) { + p_inth_level_reg = (SYS_UWORD16 *) C_INTH2_EXT_REG; + d_it_num_temp= d_it_num - C_INTH_NUM_INT; + } + else + return; + + /* + * Set the configuration of the selected interrupt + */ + p_inth_level_reg[d_it_num_temp] = p_config->d_fiq_nirq | + (p_config->d_edge_nlevel << 1) | + (p_config->d_priority << 2); + + /* + * Set indirect table + */ + /* Is main interrupt handler? */ + if (d_it_num < C_INTH_NUM_INT) + if (p_config->d_fiq_nirq == C_INTH_IRQ) + a_inth_it_handlers[d_it_num_temp][C_INTH_IRQ] = p_config->d_it_handler; + else + a_inth_it_handlers[d_it_num_temp][C_INTH_FIQ] = p_config->d_it_handler; + /* This is the 2nd level interrupt handler */ + else + a_inth2_irq_handlers[d_it_num_temp] = p_config->d_it_handler; + + } /* f_inth_init() */ + + + + /****************************************************************************** + * + * FUNCTION NAME: f_inth_setup + * Setup interrupt handler configuration. + * + * + * ARGUMENT LIST: + * + * Argument Type IO Description + * ------------- ---------------- -- ---------------------------------- + * p_inth_config T_INTH_CONFIG * I Interrupt handler configuration. + * + * RETURN VALUE: None + * + *****************************************************************************/ + + void f_inth_setup(T_INTH_CONFIG *p_inth_config) + { + SYS_UWORD8 d_i; + + /* Setup all interrupts to IRQ or FIQ with different levels and priority */ + for (d_i = 0 ; d_i < (C_INTH_NUM_INT + C_INTH_2ND_NUM_INT) ; d_i++) { + if (p_inth_config[d_i].d_priority != 0xFF) { + f_inth_init(d_i, (T_INTH_CONFIG *)&p_inth_config[d_i]); + } + F_INTH_DISABLE_ONE_IT(d_i); + } + + } /* f_inth_setup() */ + + + + /****************************************************************************** + * + * FUNCTION NAME: f_inth_get_version + * Return the version of the interrupt handler driver. + * + * + * ARGUMENT LIST: + * + * Argument Type IO Description + * ------------ ------------------- -- --------------------------------- + * + * RETURN VALUE: Version of the INTH driver + * + *****************************************************************************/ + + SYS_UWORD16 f_inth_get_version(void) { + return(C_INTH_DRIVER_VERSION); + } + + +#endif /* (CHIPSET == 12) */ +