blob: 098388c56f19221db28230883e816ccd5b0232ed [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) 2016
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#ifndef _CPHEVDOSCH_H_
36#define _CPHEVDOSCH_H_
37
38//#include "cl1common.h"
39#include "kal_general_types.h"
40
41#define SCH_MAX_PILOTS 56
42#define SCH_KEPT_PILOTS 20
43#define SYS_MAX_ACTIVE_LIST_PILOTS 6 /* max number of pilot pn's in acitve list */
44#define SYS_MAX_CANDIDATE_LIST_PILOTS 10 /* max number of pilot pn's in candidate list */
45#define SYS_MAX_NEIGHBOR_LIST_PILOTS 56 /* max number of pilot pn's in neighbor list */
46#define SYS_MAX_REMAINING_LIST_PILOTS 5 /* max number of pilots in remaining set */
47
48
49#define SCH_MAX_PER_PILOT_PATHS 16
50#define SCH_VERIF_NUM_PILOTS_FOUR 4
51#define SCH_VERIF_NUM_PILOTS_ONE 1
52#define SCH_ALWAYS_SRCH 1
53#define SCH_NOT_ALWAYS_SRCH 0
54#define SCH_MAX_USABLE_PATHS 42
55#define SCH_MAX_PER_PILOT_USABLE_PATHS 7
56
57#define SCH_USABLE_PATH_SPY_UPDATE_CNT 10
58
59#define SCH_KEPT_PILOTS 20
60#define SCH_PILOT_ENABLE 1
61#define SCH_PILOT_DISABLE 0
62#define SCH_PILOT_KEEP 1
63#define SCH_PILOT_DONT_KEEP 0
64#define SCH_PPM_SLOT_Q6 15625
65/* #define SCH_STAT_TO_ECIO_Q29 23981*/
66#define SCH_STAT_TO_ECIO_Q29 (31655*2) /*temp fix for pilot fluctuation, match shift 1 change */
67
68#define SCH_MINUS8DBQ16 10387
69#define SCH_MINUS11DBQ16 5206
70#define SCH_MINUS12DBQ16 4135
71#define SCH_MINUS14DBQ16 2609
72#define SCH_MINUS14p5DBQ16 2325
73#define SCH_MINUS15DBQ16 2072
74#define SCH_MINUS18DBQ16 1038
75#define SCH_MINUS21DBQ16 520
76#define SCH_MAX_NUM_FINGERS 6
77#define SCH_MIN_OFFSET_DIST_TC2 2
78#define SCH_HALF_CHIP_TC2 1
79#define SCH_ONE_CHIP_TC2 2
80
81#define SCH_FINGER_ALLOC_CNT 3
82
83/*Sch HW programming for SRDO_INBUF_CTL:BUFFCAPT: Period in half-slots before next buffer capture NOTE: the CAPLEN<= BUFFCAPT period
84define ONLINE search mode values */
85#define SCH_HW_PROG_ONL_INBUF_CTL_CAPT_PERIOD 7 /* Capture at (M+1) half slots intervals, i.e., 6.668ms */
86
87/*Sch HW programming for SRDO_INBUF_CTL:BUFFCAPINT: Num of buffers captured before INTR is triggered
88define ONLINE search mode values */
89#define SCH_HW_PROG_ONL_INBUF_CTL_CAPTURES_PER_INTR 8 /* Interrupt to CP every N*(M+1) half slots, 53.3ms */
90
91
92/*Sch HW programming for SRDO_INBUF_CTL:BUFFCAPT: Period in half-slots before next buffer capture NOTE: the CAPLEN<= BUFFCAPT period
93define DFS search mode values */
94#define SCH_HW_PROG_DFS_INBUF_CTL_CAPT_PERIOD 3 /* Capture at (M+1) half slots intervals, i.e., 3.334ms */
95
96/*Sch HW programming for SRDO_INBUF_CTL:BUFFCAPINT: Num of buffers captured before INTR is triggered
97define DFS search mode values */
98#define SCH_HW_PROG_DFS_INBUF_CTL_CAPTURES_PER_INTR 2 /* Interrupt to CP every N*(M+1) half slots, 6.668ms */
99
100/* Sch HW programming for SRDO_INBUF_CTL:ANTENNA_INIT_EN :-
101 Enable changing the source antenna (main OR diversity, based on the value in
102 SRDO_INBUF_CTL:ANTENNA_INIT ), in Antenna-toggle search mode
103 (SRDO_INBUF_CTL:ANT_MODE = 0x2/ 0x3)
104 NOTE: IMD requires last buffer to be captured as MAIN hence based on the
105 number of buffers captured, change the starting source accordingly
106*/
107#define SCH_HW_INBUF_CTL_ANTENNA_INIT_EN_USED 1
108#define SCH_HW_INBUF_CTL_ANTENNA_INIT_EN_NOTUSED 0
109#define SCH_HW_INBUF_CTL_ANTENNA_INIT_NOTUSED SCH_HW_PROG_INBUF_ANT_MODE_MAIN //Don't care value for SRDO_INBUF_CTL:ANTENNA_INIT field
110
111#define RMC_SCH_LOGIQ_MAX_BUFFER_LENGTH 0x8C0 /*1024+96chip 2x*/
112
113/* Sch HW programming for SRDO_INBUF_CTL:ANT_MODE :-
114Define type to indicate input source antenna */
115typedef enum
116{
117 SCH_HW_PROG_INBUF_ANT_MODE_MAIN = 0,
118 SCH_HW_PROG_INBUF_ANT_MODE_DIV = 1,
119 SCH_HW_PROG_INBUF_ANT_MODE_ALTERNATE_PER_CAPT = 2, /* Alternate antenna after each capture NOTE: Multiple captures before search HW interrupt is triggered. Also each cpature can be multiple half-slots long */
120 SCH_HW_PROG_INBUF_ANT_MODE_ALTERNATE_PER_HFSLOT = 3, /* Alternate antenna after each half slot*/
121}SchHwProgInBufAntModeT;
122
123typedef enum
124{
125 HW_RESET,
126 HW_PAUSE,
127 INIT_ACQ_PN_SRCH,
128 INIT_ACQ_ONLINE_PN_SRCH,
129 INIT_ACQ_VERIF_SRCH,
130 MINI_ACQ,
131 FAST_SEARCH,
132 ONLINE,
133 OFFSET_ADJ,
134 FAST_FULL_SEARCH,
135 SCH_MODE_UNUSED_1,
136 SCH_MODE_UNUSED_2,
137 DFS,
138 MEAS_6MS_SRCH,
139 MEAS_ONLINE_SCAN
140} SchModeT;
141
142typedef struct
143{
144 kal_uint16 PilotPN; /* PilotPN 0 to 511 */
145 kal_int16 StartOffset; /* Start offset to search, Tc/2 (-1024,...,+1023.5 chips) */
146} SchCfgPnListT;
147
148typedef struct
149{
150 kal_int8 NumPilots; /* Number of Pilots in the Active list */
151 kal_uint16 WinSize; /* Window Size */
152 SchCfgPnListT PnListQ[SYS_MAX_ACTIVE_LIST_PILOTS];
153} SchCfgActListT;
154
155typedef struct
156{
157 kal_int8 NumPilots; /* Number of Pilots in the Candidate list */
158 kal_uint16 WinSize; /* Window Size */
159 SchCfgPnListT PnListQ[SYS_MAX_CANDIDATE_LIST_PILOTS];
160} SchCfgCandListT;
161
162typedef struct
163{
164 kal_int8 NumPilots; /* Number of Pilots in the Neighbor list */
165 kal_uint16 WinSize[SYS_MAX_NEIGHBOR_LIST_PILOTS]; /* Window information */
166 SchCfgPnListT PnListQ[SYS_MAX_NEIGHBOR_LIST_PILOTS];
167} SchCfgNeighListT;
168
169typedef struct
170{
171 kal_int8 NumPilots; /* Number of Pilots in the Remaining list */
172 kal_uint16 WinSize; /* Window Size */
173 SchCfgPnListT PnListQ[SYS_MAX_REMAINING_LIST_PILOTS];
174} SchCfgRemListT;
175
176
177typedef struct
178{
179 kal_int16 ListNum; /* total search list number (A+C+N+R) */
180 SchCfgActListT Active;
181 SchCfgCandListT Candidate;
182 SchCfgNeighListT Neighbor;
183 SchCfgRemListT Remaining;
184} SchListT;
185
186typedef struct
187{
188 kal_uint16 WinSize; /* Window Size */
189 kal_int16 WinOffset; /* Window Offset */
190} WinT;
191
192typedef struct
193{
194 kal_uint16 PilotPN; /* PilotPN 0 to 511 */
195 kal_int16 Offset; /* Tc/2 resolution */
196} AcqListQT;
197
198typedef struct
199{
200 kal_int16 ListNum;
201 AcqListQT PnListQ[SCH_VERIF_NUM_PILOTS_FOUR];
202} SchAcqListT;
203
204typedef struct
205{
206 SchModeT SchMode;
207 kal_uint16 SchInitAcqNumHalfSlotBufCap;
208 kal_uint8 Antenna;
209 kal_bool antenna_init_en;
210 kal_uint32 antenna_init; //Not Valid as antenna_init_en is FALSE
211 kal_bool Div_only;
212 kal_uint16 SchInitAcqWinSizeTc;
213 kal_uint16 SchInitAcqWinOffsetTc;
214 kal_uint16 SchMiniAcqWinSizeIndex;
215 //intkal_bool bHwdPwrSavingDoPwrUp;//no this mode for 93
216 kal_bool SchStartDlyEn;
217 kal_uint32 SchStartDlyCnt;
218 SchListT SchList;
219 SchAcqListT SchAcqSrch;
220} CphEvdoSchModeConfigStruct;
221
222typedef struct
223{
224 kal_uint16 Metric;
225 kal_uint16 PilotPN;
226 kal_int16 Offset; /* Offset in Tc/2 (-1024,...,+1023.5 chips) */
227} SchSortQT;
228
229typedef struct
230{
231 kal_uint16 Count;
232 SchSortQT SortQ[SCH_MAX_PILOTS];
233} SchSortT;
234
235typedef struct
236{
237 kal_uint16 Stat; /* Stat for path */
238 kal_int16 StatOffset; /* Stat Offset in Tc/2 (-1024,...,+1023.5 chips) */
239 kal_uint8 PathValid; /* Indicates if path is valid (passes thresh) */
240 kal_uint8 NumAvg; /* Number of times offset was found */
241 kal_uint8 Ant; /* Source antenna */
242} SchPathQT;
243
244typedef struct
245{
246 kal_uint16 PilotPN; /* PilotPN 0 to 511 */
247 kal_int16 Offset; /* strongest offset found, Tc/2 (-1024,...,+1023.5 chips) */
248 kal_int16 StartOffset; /* Start offset to search, Tc/2 (-1024,...,+1023.5 chips) */
249 kal_uint16 MaxStat; /* Maximum statistic in the path buffer */
250 kal_uint16 PwrEst; /* Sum of usable path power */
251#ifdef MTK_PLT_ON_PC
252 kal_int16 Strength_db; /* pilot strength in db */
253#endif
254 kal_uint8 NumWinSearch; /* Number of times the pilot was searched */
255 kal_uint8 PilotFound; /* Indicates if the H/W found the pilot */
256 SchPathQT PathQ[SCH_MAX_PER_PILOT_PATHS];
257} ListQT;
258
259typedef struct
260{
261 kal_int8 NumPilots; /* Number of Pilots in the Active list */
262 kal_uint16 WinSize; /* Window Size */
263 kal_uint8 MACIndex[SYS_MAX_ACTIVE_LIST_PILOTS]; /* MAC Index */
264 kal_int8 PcgId[SYS_MAX_ACTIVE_LIST_PILOTS];
265 kal_uint8 RABLength[SYS_MAX_ACTIVE_LIST_PILOTS];
266 kal_uint8 RABOffset[SYS_MAX_ACTIVE_LIST_PILOTS];
267 kal_uint8 RAChannelGain[SYS_MAX_ACTIVE_LIST_PILOTS];
268 kal_uint8 DRCCover[SYS_MAX_ACTIVE_LIST_PILOTS];
269 kal_uint8 DSC[SYS_MAX_ACTIVE_LIST_PILOTS]; /* oxff means NULL */
270 ListQT ListQ[SYS_MAX_ACTIVE_LIST_PILOTS];
271} ActListT;
272
273typedef struct
274{
275 kal_int8 NumPilots; /* Number of Pilots in the Candidate list */
276 kal_uint16 WinSize; /* Window Size */
277 ListQT ListQ[SYS_MAX_CANDIDATE_LIST_PILOTS];
278} CandListT;
279
280typedef struct
281{
282 kal_int8 NumPilots; /* Number of Pilots in the Neighbor list */
283 WinT Win[SYS_MAX_NEIGHBOR_LIST_PILOTS]; /* Window information */
284 ListQT ListQ[SYS_MAX_NEIGHBOR_LIST_PILOTS];
285} NeighListT;
286
287typedef struct
288{
289 kal_int8 NumPilots; /* Number of Pilots in the Remaining list */
290 kal_uint16 WinSize; /* Window Size */
291 ListQT ListQ[SYS_MAX_REMAINING_LIST_PILOTS];
292} RemListT;
293
294typedef struct
295{
296 kal_int16 PilotSeq;
297 kal_uint8 ConnSetupFlag;
298 kal_uint8 TcaFlag;
299 kal_int16 ListNum; /* total search list number (A+C+N+R) */
300 ActListT Active;
301 CandListT Candidate;
302 NeighListT Neighbor;
303 RemListT Remaining;
304} RmcSchStatusT;
305
306typedef struct
307{
308 SchModeT SchMode;
309 SchSortQT *pSortQ; /**For store INIT_PN_SRCH result: SCH_KEPT_PILOTS.*/
310 RmcSchStatusT *pSchStatus; /**For store other search result.*/
311} CphEvdoSchResultReadStruct;
312
313typedef struct
314{
315 kal_int8 ImdAdcI; /* IMD ADC I samples */
316 kal_int8 ImdAdcQ; /* IMD ADC Q samples */
317} RmcSchLogIQComplexSampleT;
318
319
320typedef struct
321{
322 kal_int8 tbd;
323}CphEvdoSchTestIqDumpAdsStruct;
324
325void CphEvdoSchInit();
326void CphEvdoPauseConfig(kal_uint8 PauseBit);
327void CphEvdoSchModeConfig(CphEvdoSchModeConfigStruct *ads_ptr);
328void CphEvdoSchResultRead(CphEvdoSchResultReadStruct *ads_ptr);
329void CphEvdoSchLogIqRead(RmcSchLogIQComplexSampleT *ads_ptr);
330#if 0 /**Just used for debug.*/
331/* under construction !*/
332/* under construction !*/
333/* under construction !*/
334#endif
335kal_bool CphEvdoSchReadSchDone(void);
336#ifdef MTK_PLT_ON_PC_IT
337void CphEvdoSchWriteSchDone(kal_bool SchDone);
338#endif
339#endif
340