blob: dbbfd6cf23543a3ef4a9e7e733f13dfd52869f85 [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001/*****************************************************************************
2* Copyright Statement:
3* --------------------
4* This software is protected by Copyright and the information contained
5* herein is confidential. The software may not be copied and the information
6* contained herein may not be used or disclosed except with the written
7* permission of MediaTek Inc. (C) 2005
8*
9* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
10* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
11* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
12* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
13* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
14* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
15* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
16* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
17* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
18* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
19* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
20* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
21*
22* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
23* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
24* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
25* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
26* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
27*
28* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
29* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
30* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
31* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
32* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
33*
34*****************************************************************************/
35
36/*****************************************************************************
37 *
38 * Filename:
39 * ---------
40 * intrCtrl.h
41 *
42 * Project:
43 * --------
44 * Maui_Software
45 *
46 * Description:
47 * ------------
48 * Common type and structure definition for MediaTek GSM/GPRS software
49 *
50 * Author:
51 * -------
52 * -------
53 *
54 *============================================================================
55 * HISTORY
56 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
57 *------------------------------------------------------------------------------
58 * removed!
59 * removed!
60 * removed!
61 *
62 * removed!
63 * removed!
64 * removed!
65 *
66 * removed!
67 * removed!
68 * removed!
69 *
70 * removed!
71 * removed!
72 * removed!
73 *
74 * removed!
75 * removed!
76 * removed!
77 *
78 * removed!
79 * removed!
80 * removed!
81 *
82 * removed!
83 * removed!
84 * removed!
85 *
86 * removed!
87 * removed!
88 * removed!
89 *
90 *------------------------------------------------------------------------------
91 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
92 *============================================================================
93 ****************************************************************************/
94
95#ifndef _INTRCTRL_H
96#define _INTRCTRL_H
97
98/*******************************************************************************
99 * Include header files
100 *******************************************************************************/
101#include "kal_general_types.h"
102#include "mips_ia_utils_public.h"
103#include "us_timer.h"
104#include "kal_public_api.h"
105
106#if defined(MT6295M)
107#if defined(__MIPS_IA__)
108#include "intrCtrl_MT6295M.h"
109#else
110#error "No CPU version select. Need to specify CPU version in project MT6295M MDSYS."
111#endif
112#endif
113
114#if defined(MT3967)
115#if defined(__MIPS_IA__)
116#include "intrCtrl_MT3967.h"
117#else
118#error "No CPU version select. Need to specify CPU version in project MT3967 MDSYS."
119#endif
120#endif
121
122#if defined(MT6779)
123#if defined(__MIPS_IA__)
124#include "intrCtrl_MT6779.h"
125#else
126#error "No CPU version select. Need to specify CPU version in project MT6779 MDSYS."
127#endif
128#endif
129/*******************************************************************************
130 * Declarations and Definitions
131 *******************************************************************************/
132
133#define EDGE_SENSITIVE KAL_TRUE
134#define LEVEL_SENSITIVE KAL_FALSE
135
136#define IRQ_NOT_LISR_CONTEXT (0xFFFF)
137
138#if defined(__CIRQ_MASK_REG_NR_1_NEW__) || defined(__CIRQ_MASK_REG_NR_2_NEW__) || defined(__CIRQ_MASK_REG_NR_3_NEW__) || defined(__CIRQ_MASK_REG_NR_4_NEW__) || defined(__CIRQ_MASK_REG_NR_5_NEW__)
139#define __CIRQ_DESIGN_NEW__
140#endif
141
142typedef struct CIRQ_MASK_VALUE_STRUCT
143{
144 kal_uint32 irq_mask[8];
145} CIRQ_MASK_VALUE_T;
146
147/* To enable SW Trigger Interrupt for new BB chips
148 Need to modify 3 files
149 1. add a file intrCtrl_MTxxxx_SW_Handler.h
150 2. add an entry on intrCtrl_SW_Handler.h
151 3. modify IRQ_SetSWRegister & IRQ_ResetSWRegister to support BB Chips on intrCtrl.c */
152#if defined(__ENABLE_SW_TRIGGER_INTERRUPT__)
153typedef enum
154{
155#define X_SW_HANDLE_CONST(a, b, c) a=(b),
156#include "intrCtrl_SW_Handle.h"
157#undef X_SW_HANDLE_CONST
158 SW_HANDLE_END
159} SW_CODE_HANDLE;
160
161#define Activate_LISR(code) MDCIRQ_Activate_LISR(code)
162#define Deactivate_LISR(code) MDCIRQ_Deactivate_LISR(code)
163
164extern void MDCIRQ_Activate_LISR(SW_CODE_HANDLE code);
165extern void MDCIRQ_Deactivate_LISR(SW_CODE_HANDLE code);
166extern const kal_uint8 SW_Code_Handle2Code[NUM_IRQ_SOURCES];
167
168/* Use to translate the mapping between software handler to hardware interrupt code */
169#define SW_code_handle2code(a) (a)
170
171extern kal_uint32 SW_INT_Counter[NUM_IRQ_SOURCES];
172
173#endif /* __ENABLE_SW_TRIGGER_INTERRUPT__ */
174
175
176#define IRQClearInt(vector) MDCIRQ_IRQClearInt(vector)
177#define IRQMask(vector) MDCIRQ_IRQMask(vector)
178#define IRQUnmask(vector) MDCIRQ_IRQUnmask(vector)
179#define IRQSensitivity(vector, e) MDCIRQ_IRQSensitivity(vector, e)
180#define IRQ_VPE_SPL_Compare_with_IRQ_Priority(VPE, code) MDCIRQ_VPE_SPL_Compare_with_IRQ_Priority(VPE, code)
181
182
183extern kal_uint32 SaveAndSetIRQMask(void);
184extern void RestoreIRQMask(kal_uint32);
185extern void MDCIRQ_IRQClearInt(kal_uint8);
186extern void MDCIRQ_IRQMask(kal_uint8);
187extern void MDCIRQ_IRQUnmask(kal_uint8);
188extern void MDCIRQ_IRQSensitivity(kal_uint8, kal_bool);
189extern void initINTR(void);
190extern kal_uint32 IRQMask_Status(kal_uint8 code);
191extern kal_uint32 IRQ_Status(void);
192extern kal_bool MDCIRQ_VPE_SPL_Compare_with_IRQ_Priority(kal_uint32 VPE, kal_uint32 code);
193
194
195#define IRQ_Register_LISR(code, lisr, description) \
196 MDCIRQ_IRQ_Register_LISR(code, (void*)lisr, description)
197extern void MDCIRQ_IRQ_Register_LISR(kal_uint32 code, void (*reg_lisr)(kal_uint32 vector), char* description);
198//extern void IRQ_Register_LISR(kal_uint32 code, void (*reg_lisr)(kal_uint32 vector), char* description);
199
200extern void initVPEIRQ(void);
201
202extern kal_uint32 sst_dhl_irq_count[];
203extern kal_uint32 sst_dhl_irq_caller[];
204extern kal_uint32 DHLIrqCounter[];
205
206extern kal_int32 INC_Initialize_State;
207
208typedef enum
209{
210#define IRQ_PRIORITY_CONST(a) a##_PRIORITY,
211#include "irqPriority.h"
212#undef IRQ_PRIORITY_CONST
213 IRQ_PRIORITY_END,
214 IRQ_NORMAL_DOMAIN_HRT_PRIORITY_THRESHOLD = IRQ_USIP1_1_CODE_PRIORITY + 1,
215} IRQ_PRIORITY;
216
217typedef enum {
218 MDCIRQ_To_BUS_Normal = 0x0,
219 MDCIRQ_To_BUS_PreUltra = 0x1,
220 MDCIRQ_To_BUS_Ultra =0x2,
221} MDCIRQ_Bus_QoS_Signal;
222
223/***********************************
224NOTE:
2251. below API is only for L1 logging, please not use
2262. if you want to use, please confirm with CIRQ owner first
227***********************************/
228#define IF_DI_OR_LISR() (Ibit_Status()==0 || kal_if_lisr())
229
230/***********************************
231NOTE:
2321. below API is only for L2 logging, please not use
2332. if you want to use, please confirm with CIRQ owner first
234***********************************/
235#define __IRQ_LOCK_WITHOUT_CHECK__
236// #define __NESTED_DI_CHECK__
237
238#if defined(__L2_LOGGING_IRQ_LOC__)
239#if defined(__IRQ_LOCK_WITHOUT_CHECK__) && defined(__MIPS_IA__)
240#if defined(__NESTED_DI_CHECK__)
241#define LOCK_CPU_INTERRUPT(oldmask, newmask) \
242do{\
243 kal_uint32 vpe_num = 0;\
244 miu_mt_dmt();\
245 __asm__ __volatile__\
246 (\
247 "di %0\n\t"\
248 "ehb\n\t"\
249 :"=&r"(oldmask), "=&r"(newmask)\
250 :\
251 :"$31","memory"\
252 );\
253 oldmask &= 0x1;\
254 vpe_num = miu_get_current_vpe_id();\
255 sst_dhl_irq_count[vpe_num]++;\
256 sst_dhl_irq_caller[vpe_num] = (kal_uint32)__builtin_return_address(0);\
257 DHLIrqCounter[vpe_num] = ust_get_current_time();\
258} while(0)
259
260#define UNLOCK_CPU_INTERRUPT(oldmask) \
261do{\
262 kal_uint32 tmp=1;\
263 sst_dhl_irq_count[miu_get_current_vpe_id()]--;\
264 __asm__ __volatile__\
265 (\
266 "bne %0, %1, END\n\t"\
267 "ei\n\t"\
268 "ehb\n\t"\
269 "END:emt\n\t"\
270 "ehb\n\t"\
271 :\
272 :"r"(oldmask), "r"(tmp)\
273 :"memory"\
274 );\
275} while(0)
276#else
277#define LOCK_CPU_INTERRUPT(oldmask, newmask) \
278do{\
279 miu_mt_dmt();\
280 __asm__ __volatile__\
281 (\
282 "di %0\n\t"\
283 "ehb\n\t"\
284 :"=&r"(oldmask), "=&r"(newmask)\
285 :\
286 :"$31","memory"\
287 );\
288 oldmask &= 0x1;\
289} while(0)
290
291#define UNLOCK_CPU_INTERRUPT(oldmask) \
292do{\
293 kal_uint32 tmp=1;\
294 __asm__ __volatile__\
295 (\
296 "bne %0, %1, END\n\t"\
297 "ei\n\t"\
298 "ehb\n\t"\
299 "END:emt\n\t"\
300 "ehb\n\t"\
301 :\
302 :"r"(oldmask), "r"(tmp)\
303 :"memory"\
304 );\
305} while(0)
306#endif
307
308#else
309
310#define LOCK_CPU_INTERRUPT(oldmask, newmask) \
311do{ \
312 oldmask = kal_hrt_SaveAndSetIRQMask(); \
313}while(0);
314
315#define UNLOCK_CPU_INTERRUPT(oldmask) \
316do{ \
317 kal_hrt_RestoreIRQMask(oldmask); \
318}while(0);
319
320#endif
321#endif
322
323#endif /* _INTRCTRL_H */
324