blob: 06fdc92adacc186a4a06ad6560d5688c669f9c21 [file] [log] [blame]
yu.dongc33b3072024-08-21 23:14:49 -07001/*****************************************************************************
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) 2015
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 * Filename:
38 * ---------
39 * dpfm_api.h
40 *
41 * Project:
42 * --------
43 * UMOLY
44 *
45 * Description:
46 * ------------
47 *
48 *
49 * Author:
50 * -------
51 * -------
52 *
53 *==============================================================================
54 * HISTORY
55 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
56 *------------------------------------------------------------------------------
57 * removed!
58 *
59 * removed!
60 * removed!
61 * removed!
62 *
63 * removed!
64 * removed!
65 * removed!
66 * removed!
67 *
68 * removed!
69 * removed!
70 * removed!
71 *
72 * removed!
73 * removed!
74 * removed!
75 *
76 * removed!
77 * removed!
78 * removed!
79 *
80 * removed!
81 * removed!
82 * removed!
83 *
84 * removed!
85 * removed!
86 * removed!
87 *
88 * removed!
89 * removed!
90 * removed!
91 *
92 * removed!
93 * removed!
94 * removed!
95 * removed!
96 * removed!
97 * removed!
98 *
99 * removed!
100 * removed!
101 * removed!
102 *
103 * removed!
104 * removed!
105 * removed!
106 *
107 * removed!
108 * removed!
109 * removed!
110 * removed!
111 * removed!
112 * removed!
113 *
114 * removed!
115 * removed!
116 * removed!
117 *
118 * removed!
119 * removed!
120 * removed!
121 * removed!
122 *
123 * removed!
124 * removed!
125 * removed!
126 *
127 * removed!
128 * removed!
129 * removed!
130 *
131 * removed!
132 * removed!
133 * removed!
134 *
135 * removed!
136 * removed!
137 * removed!
138 *
139 * removed!
140 * removed!
141 * removed!
142 *
143 *------------------------------------------------------------------------------
144 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
145 *==============================================================================
146 *******************************************************************************/
147#ifndef __DPFM_API_H
148#define __DPFM_API_H
149
150#include "hif_ior.h"
151#include "hif_mw_msgid.h"
152#include "ipc_api.h"
153#include "ipc_defs_public.h"
154#include "ipc_enums.h"
155
156#include "dpfm_enums.h"
157#include "dpfm_struct.h"
158
159/*------------------------------------------------------------------------------
160 * Constant definition.
161 *----------------------------------------------------------------------------*/
162#define DPFM_VERSION 2
163#define DPFM_MAX_CT_TABLE_NUM 64
164
165#define DPFM_PKT_TYPE_FILTER_DEL_ACK 0x1
166
167/*------------------------------------------------------------------------------
168 * Global variables.
169 *----------------------------------------------------------------------------*/
170
171/*------------------------------------------------------------------------------
172 * Helper Macro.
173 *----------------------------------------------------------------------------*/
174#define DPFM_GET_PKT_TYPE_FROM_PSN(_psn) (((_psn) & 0x0F00) >> 8)
175
176/*------------------------------------------------------------------------------
177 * Public fucntions.
178 *----------------------------------------------------------------------------*/
179kal_bool dpfm_init(void);
180kal_bool dpfm_reset(void);
181void dpfm_on_ilm(ilm_struct *ilm);
182kal_int32 dpfm_enable(void *info);
183kal_int32 dpfm_disable(void *info);
184kal_int32 dpfm_activate(void *info);
185kal_int32 dpfm_deactivate(void *info);
186
187/*!
188 * Update global alert data usage base on the received packet.
189 *
190 * @param packet_len [IN] Length of the packet
191 * @param netif_id [IN] netif_id for the packet.
192 */
193void dpfm_update_global_alert_data_usage(kal_uint32 packet_len, kal_uint32 netif_id);
194
195/*!
196 * Update iquota data usage base on the received packet.
197 *
198 * @param uplink [IN] Is uplink traffic. false for downlink traffic.
199 * @param in_netif_id [IN] Source netif_id for the packet.
200 * @param out_netif_id [IN] Destination netif_id for the packet.
201 * @param protocol [IN] Protocol of the packet
202 * @param packet_len [IN] Length of the packet
203 */
204void dpfm_update_iquota_data_usage(kal_bool uplink, kal_uint32 in_netif_id, kal_uint32 out_netif_id, kal_uint8 protocol, kal_uint32 packet_len);
205
206/*!
207 * Check the packet should be sent to which netif.
208 *
209 * @param uplink [IN] Is uplink traffic. false for downlink traffic.
210 * @param ip_type [IN] IP type of the packet.
211 * @param pkt_des [IN] Descriptor of the packet.
212 * @param in_netif_id [IN] Source netif_id for the packet.
213 * @param out_netif_id [OUT] Destination netif_id for the packet.
214 *
215 * @return KAL_TRUE if match DPFM SW filter. KAL_FALSE otherwise.
216 */
217kal_bool dpfm_check_route(kal_bool uplink, kal_uint8 ip_type, ipc_pkt_des_t *pkt_des, kal_uint32 in_netif_id, kal_uint32 *out_netif_id);
218
219/*!
220 * Check if the packet needed to add filter.
221 *
222 * @param uplink [IN] Is uplink traffic. false for downlink traffic.
223 * @param pkt_des [IN] Descriptor of the packet.
224 * @param in_netif_id [IN] Source netif_id for the packet.
225 */
226void dpfm_track_packet(kal_bool uplink, ipc_pkt_des_t *pkt_des, kal_uint32 in_netif_id);
227
228/*!
229 * Process SW filter according to HW filter command result.
230 *
231 * @param pkt_des [IN] Descriptor of the packet.
232 */
233void dpfm_process_filter_cmd_result(ipc_pkt_des_t *pkt_des);
234
235/*!
236 * Register to DPFM LAN device.
237 *
238 * @param lan_dev_id [IN] DPFM LAN device id.
239 * @param dev_info [IN] lan device information.
240 *
241 * @return KAL_TRUE if register successfully. KAL_FALSE otherwise.
242 */
243kal_bool dpfm_lan_dev_register(kal_uint8 lan_dev_id, dpfm_lan_dev_info_t *dev_info);
244
245/*!
246 * Query DPFM is activated.
247 *
248 * @return KAL_TRUE if DPFM is activated. KAL_FALSE otherwise.
249 */
250kal_bool dpfm_is_active(void);
251
252/*!
253 * Get DPFM SW filter according to filter id.
254 *
255 * @param filter_id [IN] DPFM SW filter id.
256 *
257 * @return SW filter if found. NULL otherwise.
258 */
259dpfm_filter_t* dpfm_find_filter_by_id(kal_int16 filter_id);
260
261/*!
262 * Remove DPFM sensitive data.
263 */
264void dpfm_module_clean(void);
265
266#endif