blob: 4a41b91214295d26352bd5e2a123f024337b317b [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) 2007
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 * rfc2507_lib.h
40 *
41 * Project:
42 * --------------------------------------------------------
43 * MONZA
44 *
45 * Description:
46 * --------------------------------------------------------
47 * RFC2507 library extern function declaration.
48 *
49 * Author:
50 * --------------------------------------------------------
51 * -------
52 *
53 * --------------------------------------------------------
54 * $Log$
55 *
56 * 12 12 2014 tc.chang
57 * [MOLY00087434] [Universal Bin] Check in.
58 * RFC2507
59 *
60 * 08 03 2011 tc.chang
61 * removed!
62 * .
63 *
64 * 05 25 2011 tc.chang
65 * removed!
66 * .
67 *
68 * 05 23 2011 tc.chang
69 * removed!
70 * .
71 *
72 * 12 14 2010 max.yin
73 * removed!
74 * .
75 *
76 * 10 18 2010 max.yin
77 * removed!
78 * .
79 *
80 * 09 03 2010 max.yin
81 * removed!
82 * .
83 *
84 * removed!
85 * removed!
86 *
87 *
88 * removed!
89 * removed!
90 *
91 *
92 * removed!
93 * removed!
94 *
95 *
96 * removed!
97 * removed!
98 *
99 *
100 * removed!
101 * removed!
102 *
103 *
104 * removed!
105 * removed!
106 *
107 *
108 ******************************************************************************/
109
110#ifndef _RFC2507_LIB_H
111#define _RFC2507_LIB_H
112
113#include "kal_general_types.h"
114#include "kal_public_api.h"
115
116#define RFC2507_ASSERT(x) DEBUG_ASSERT(x)
117
118typedef kal_uint32 RFC2507_TIME_OF_DAY;
119typedef kal_uint32 RFC2507_TIME_DIFFERENCE;
120
121/*
122 * Macro for definitions for RFC2507 PID references.
123 *
124 * The number of RFC2507 PIDs.
125 */
126#define RFC2507_NO_OF_PIDS 5
127
128#define IP_V4_HEADER_LEN 20
129#define IP_V6_HEADER_LEN 40
130
131#define RFC2507_DEBUG_FULL_HEADER_LEN 40
132#define RFC2507_DEBUG_HEADER_LEN 10
133#define RFC2507_COMPRESSED_MAX_HEADER_LEN 40
134
135#define RFC2507_PACKET_FLOW_TCP_MASK 0X01
136#define RFC2507_PACKET_FLOW_NONTCP_MASK 0X02
137
138#define RFC2507_SKIPPED_CID_NUMBER 0xFF
139
140#define CID_COUNT(_CID_LIST_) (_CID_LIST_.uCount)
141
142typedef void (*rfc2507_reg_callback_func_ptr)(kal_uint32, kal_uint8 *);
143
144typedef enum
145{
146 RFC2507_DECOMPRESS_SUCCESS,
147 RFC2507_DECOMPRESS_SUCCESS_MORE_TO_GO,
148 RFC2507_DECOMPRESS_SUCCESS_RCV_CONTEXT_STATE,
149 RFC2507_DECOMPRESS_FAIL_FREED,
150 RFC2507_DECOMPRESS_FAIL_STORED,
151 RFC2507_DECOMPRESS_FAIL_FREED_SEND_CONTEXT_STATE,
152 RFC2507_DECOMPRESS_FAIL_STORED_SEND_CONTEXT_STATE
153} RFC2507_DECOMPRESS_RESULT_ENUM;
154
155typedef enum
156{
157 RFC2507_FULL_HEADER,
158 RFC2507_COMPRESSED_TCP,
159 RFC2507_COMPRESS_TCP_NO_DELTA,
160 RFC2507_COMPRESS_NON_TCP,
161 RFC2507_CONTEXT_STATE
162} RFC2507_PACKET_TYPE_ENUM;
163
164typedef struct _RFC2507_COMMON_CID
165{
166 struct _RFC2507_COMMON_CID *pPrev;
167 struct _RFC2507_COMMON_CID *pNext;
168} RFC2507_COMMON_CID;
169
170typedef struct _RFC2507_CID_LIST
171{
172 kal_uint32 uCount;
173 struct _RFC2507_COMMON_CID *pFirst;
174 struct _RFC2507_COMMON_CID *pLast;
175} RFC2507_CID_LIST;
176
177typedef struct
178{
179 kal_uint16 Rfc2507MaxPeriod; /*
180 * Largest number of
181 * COMPRESSED_NON_TCP
182 * packets that may be
183 * sent without sending
184 * a FULL_HEADER packet
185 */
186 kal_uint8 Rfc2507MaxTime; /*
187 * COMRESSED_NON_TCP
188 * packets may not be
189 * sent more than this
190 * number of seconds
191 * after sending a
192 * FULL_HEADER packet
193 */
194 kal_uint16 Rfc2507MaxHeader; /*
195 * The largest header
196 * size (in bytes) that
197 * may be compressed
198 */
199 kal_uint8 Rfc2507MaxTcpSpace; /*
200 * The maximum TCP CID
201 * value
202 */
203 kal_uint16 Rfc2507MaxNonTcpSpace; /*
204 * The maximum non-TCP
205 * CID value
206 */
207 kal_bool Rfc2507ExpectReordering; /*
208 * Whether the algorithm
209 * shall re-order PDCP
210 * SDUs, or not
211 */
212
213 /* New: Register callback function to free memory of stored compressed packets */
214 kal_uint32 u4DecompSrcId;
215 rfc2507_reg_callback_func_ptr pfDeallocDecompSrc;
216} RFC2507_ENTITY_PARAMS;
217
218/*
219 * RFC2507 information structure.
220 */
221typedef struct
222{
223 RFC2507_TIME_OF_DAY BootingTime;
224
225 RFC2507_ENTITY_PARAMS Params; /*
226 * The RFC2507 parameters received
227 * when the PDCP entity was created
228 * or reconfigured
229 */
230 kal_uint8 FirstPid; /*
231 * The first protocol identifier
232 * used with RFC2507 - this value
233 * identifies FULL_HEADER packets
234 * and other packet type PIDs are
235 * offsets from this value
236 */
237 RFC2507_CID_LIST TcpCompressorInfo; /*
238 * List of compressor TCP CIDs
239 */
240 RFC2507_CID_LIST TcpDecompressorInfo; /*
241 * List of decompressor TCP CIDs
242 */
243 RFC2507_CID_LIST NonTcpCompressorInfo; /*
244 * List of compressor non-TCP CIDs
245 */
246 RFC2507_CID_LIST NonTcpDecompressorInfo; /*
247 * List of decompressor non-TCP CIDs
248 */
249 void *pSubHdrChain;
250 kal_uint8 *pDecompressedHeader;
251} RFC2507_ENTITY_INFO;
252
253typedef struct
254{
255 kal_uint8* pSrc;
256 kal_uint8* pDst;
257 kal_uint16 SrcLen;
258 kal_uint16 DstLen;
259 kal_uint16 CompressedLength;
260 kal_uint8 DesiredCompressType;
261 kal_uint16 CidNumber; // Output: CidNumber for this PDU
262 kal_bool TcpPDU; // Output: KAL_FALSE for NonTCP, KAL_TRUE for Tcp
263 kal_uint8 CompressedHdr[RFC2507_COMPRESSED_MAX_HEADER_LEN];
264} RFC2507_COMPRESS_INPUT_INFO;
265
266typedef struct
267{
268 kal_uint8* pSrc;
269 kal_uint16 SrcOffset;
270 kal_uint16 SrcLen;
271 kal_uint8 SrcPid;
272 kal_uint8 SrcInfo;
273 kal_uint8* pDst;
274 kal_uint8* pCid;
275 kal_uint16 DstLen;
276 kal_uint16 DecompressedLength;
277 kal_uint8* pNextSrc;
278 kal_uint16 NextSrcOffset;
279 kal_uint16 NextSrcLen;
280 kal_uint8 NextSrcPid;
281 kal_uint8 NextSrcInfo;
282 kal_uint8 L2HdrLength;
283 kal_uint32 NextSrcNonTcpTime;
284} RFC2507_DECOMPRESS_INPUT_INFO;
285
286extern RFC2507_DECOMPRESS_INPUT_INFO Rfc2507DecompInputBuff;
287extern RFC2507_COMPRESS_INPUT_INFO Rfc2507CompInputBuff;
288
289extern RFC2507_ENTITY_INFO *rfc2507_create(void);
290extern kal_bool rfc2507_config(RFC2507_ENTITY_INFO *pEntity, RFC2507_ENTITY_PARAMS* pRfc2507Params, kal_uint8 ucFirstPid);
291extern kal_uint8 rfc2507_compress(RFC2507_ENTITY_INFO *pEntity, RFC2507_COMPRESS_INPUT_INFO* pInput);
292extern kal_uint8 rfc2507_decompress(RFC2507_ENTITY_INFO *pEntity, RFC2507_DECOMPRESS_INPUT_INFO *pInput);
293extern kal_uint8 rfc2507_get_first_pid(RFC2507_ENTITY_INFO *pEntity);
294extern void rfc2507_reset(RFC2507_ENTITY_INFO *pEntity);
295extern void rfc2507_release(RFC2507_ENTITY_INFO *pEntity);
296extern void rfc2507_set_full_header_status(RFC2507_ENTITY_INFO *pEntity, kal_bool bTcp, kal_uint8 CidNumber, kal_bool bSendFullHeader);
297#endif /* _RFC2507_LIB_H */