blob: d9a37ddc2dadabe68b34964bbc691ba276f68a9c [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) 2012
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 * mt_task.c
41 *
42 * Project:
43 * --------
44 * UMOLYA
45 *
46 * Description:
47 * ------------
48 * MT_Framework task implement
49 *
50 * Author:
51 * -------
52 * -------
53 *
54 *
55 * ==========================================================================
56 * $Log$
57 *
58 *
59 ****************************************************************************/
60
61/*****************************************************************************/
62/* Includes */
63/*****************************************************************************/
64
65#include "mt.h"
66#include "mt_dispatcher.h"
67
68/*****************************************************************************/
69/* Define */
70/*****************************************************************************/
71
72/*****************************************************************************/
73/* Global variables */
74/*****************************************************************************/
75
76/*****************************************************************************/
77/* External functions */
78/*****************************************************************************/
79
80/*****************************************************************************/
81/* Internal functions */
82/*****************************************************************************/
83
84/*****************************************************************************/
85/* Function Body */
86/*****************************************************************************/
87
88int
89mt_dispatcher_entry_init(void* entry, kal_uint16 magic, kal_uint32 dispatch_key, kal_uint32 dispatch_key_mask)
90{
91 mt_dispatcher_entry_head_t *h = entry;
92 if (h->inited) {
93 return -1;
94 }
95
96 h->magic = magic;
97 h->inited = KAL_TRUE;
98 h->dispatch_key = dispatch_key;
99 h->next = NULL;
100 h->dispatch_key_mask= dispatch_key_mask;
101
102 return 0;
103}
104
105int
106mt_dispatcher_add_entry(mt_dispatcher_list_t *list, kal_uint32 code, void* entry)
107{
108 mt_dispatcher_entry_head_t *e = entry;
109 e->next = NULL;
110 e->dispatch_key = code;
111 if (list->tail == NULL) {
112 list->head = list->tail = e;
113 } else {
114 list->tail = ((mt_dispatcher_entry_head_t *)list->tail)->next = e;
115 }
116
117 return 0;
118}
119
120void*
121mt_dispatcher_find_entry(mt_dispatcher_list_t *list, kal_uint32 code, void* last_entry)
122{
123 mt_dispatcher_entry_head_t *e = (last_entry?((mt_dispatcher_entry_head_t *)last_entry)->next:list->head);
124 while(e) {
125 if (e->dispatch_key_mask == RULE_CODE_MASK_FLAG_ALL_ON && e->dispatch_key == code)
126 {
127 return e;
128 }
129 else if (e->dispatch_key_mask == RULE_CODE_MASK_FLAG_ALL_OFF)
130 {
131 return e;
132 }
133 else if(((e->dispatch_key_mask & RULE_CODE_MASK_ICD_TYPE_FLAG_ON)?(GET_ICD_TYPE_FROM_RULE_CODE(e->dispatch_key) == GET_ICD_TYPE_FROM_RULE_CODE(code)):KAL_TRUE)
134 && ((e->dispatch_key_mask & RULE_CODE_MASK_ICD_CODE_FLAG_ON)?(GET_ICD_CODE_FROM_RULE_CODE(e->dispatch_key) == GET_ICD_CODE_FROM_RULE_CODE(code)):KAL_TRUE)
135 && ((e->dispatch_key_mask & RULE_CODE_MASK_ICD_PROTOCOL_FLAG_ON)?(GET_ICD_PROTOCOL_FROM_RULE_CODE(e->dispatch_key) == GET_ICD_PROTOCOL_FROM_RULE_CODE(code)):KAL_TRUE))
136 {
137 return e;
138 }
139 e = e->next;
140 }
141 return NULL;
142}
143void
144mt_dispatcher_verify(void* d, kal_uint16 magic)
145{
146 mt_dispatcher_entry_head_t *e = d;
147 EXT_ASSERT(e->magic == magic, e->magic, magic, 0);
148}
149
150void
151mt_dispatcher_init()
152{
153 EXT_ASSERT(MT_DISPATCHER_ENTRY_RESERVED_SIZE >= sizeof(mt_dispatcher_entry_head_t), MT_DISPATCHER_ENTRY_RESERVED_SIZE, sizeof(mt_dispatcher_entry_head_t), 0);
154}