blob: 8cae7433a02696a111b9f5b82fe3c8a14b248b06 [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#ifndef MRS_NRAS_CAPABILITY_H
37#define MRS_NRAS_CAPABILITY_H
38
39#include "irat_common_enums.h"
40#include "mrs_as_enums.h"
41#include "mrs_as_struct.h"
42#include "mrs_common_capability.h"
43
44#include "custom_nras_config.h"
45
46/********************************************
47 * MACROS *
48 ********************************************/
49
50#define NRARFCN_INVALID 0xFFFFFFFF
51#define NRFREQ_INVALID 0
52/*
53 * MRS_NRAS_MAX_OVERLAPPING_BANDS value 8 follows the maximum length
54 * (maxNrofMultiBands) of IE MultiFrequencyBandListNR-SIB specified in
55 * TS 38.331.
56 */
57#define MRS_NRAS_MAX_OVERLAPPING_BANDS 8
58
59#define MRS_NRAS_MIN_FR1_BAND (1)
60#define MRS_NRAS_MAX_FR1_BAND (86)
61#define MRS_NRAS_MIN_FR2_BAND (257)
62#define MRS_NRAS_MAX_FR2_BAND (261)
63
64#define MRS_NRAS_SEARCH_MAX_POWER_SCAN_RANGE_NUM 512
65#define MRS_NRAS_SEARCH_MAX_DETECTED_CELL_NUM 256
66
67#define MRS_NRAS_MAX_EUTRA_BAND_LIST_LENGTH 256
68
69#define MRS_NRAS_GEMINI_STATUS_NUM 3
70/********************************************
71 * TYPE DEFINITIONS & ENUMS *
72 ********************************************/
73
74typedef enum
75{
76 NR_DUPLEX_FDD,
77 NR_DUPLEX_TDD,
78 NR_DUPLEX_SDL,
79 NR_DUPLEX_SUL,
80 NR_DUPLEX_INVALID
81} nr_duplex_enum;
82
83typedef enum {
84 NRAS_READ_NVRAM_CNF,
85 NRAS_BAND_SETTING_UPDATE,
86 NRAS_MAX_BAND_CAP_FOR_USER,
87 NRAS_INTERNAL_BAND_SETTING_UPDATE,
88 COMMON_EM_GET_AS_BAND_SETTING,
89 COMMON_EM_SET_AS_BAND_SETTING,
90 NRAS_BNAD_GET_CONTEXT_NVRAM,
91 NRAS_BNAD_GET_ENDC_CONTEXT_NVRAM,
92 NRAS_BAND_SET_CONTEXT_NVRAM,
93 NRAS_BAND_SET_ENDC_CONTEXT_NVRAM,
94#ifdef __NVM_GLOBAL_CABC__
95 NRAS_BAND_SUPPORT_BY_PLMN,
96#endif /* __NVM_GLOBAL_CABC__ */
97 NRAS_ENDC_NR_SUPPORTED_BAND_LIST_INITIAL,
98 NRAS_INTERNAL_ENDC_BAND_SETTING_UPDATE
99} nras_band_print_func_enum;
100
101typedef enum {
102 NRAS_FUNC_INPUT,
103 NRAS_RF_FILTER,
104 NRAS_BAND_READ_NR_BANDS_FROM_SCSI,
105 NRAS_BAND_READ_NR_ENDC_BANDS_FROM_SCSI,
106 NRAS_BAND_SET_NR_BANDS,
107 NRAS_BAND_SET_NR_ENDC_BANDS,
108 NRAS_BAND_SET_NR_BANDS_FROM_SCSI,
109 NRAS_BAND_SET_NR_ENDC_BANDS_FROM_SCSI,
110 NRAS_BAND_NVRAM_OUTPUT_NR_BANDS,
111 NRAS_BAND_NVRAM_OUTPUT_NR_ENDC_BANDS,
112#ifdef __NVM_GLOBAL_CABC__
113 NRAS_SA_BAND_SUPPORT,
114 NRAS_ENDC_BAND_SUPPORT,
115#endif /* __NVM_GLOBAL_CABC__ */
116 NRAS_RF_FILTER_ENDC_NR_FULL_CAP,
117 NRAS_RF_FILTER_ENDC_NR_DATA_SIM,
118 NRAS_RF_FILTER_ENDC_NR_NON_DATA_SIM
119} nras_band_print_check_point_enum;
120
121typedef enum {
122 NRAS_LOW_CARRIER_FREQ,
123 NRAS_MID_CARRIER_FREQ,
124 NRAS_HIGH_CARRIER_FREQ
125} mrs_nras_carrier_freq_type_enum;
126
127typedef enum {
128 MRS_NRAS_SEARCH_RESULT_NOT_FINISHED,
129 MRS_NRAS_SEARCH_RESULT_FINISHED
130} mrs_nras_search_result_status_enum;
131
132typedef enum {
133 NRAS_SFTD_MEAS_PSCELL,
134 NRAS_SFTD_MEAS_NR_CELL
135} mrs_nras_sftd_meas_type_enum;
136
137typedef enum {
138 MRS_NRAS_PLMN_MATCH_RESULT_NOT_FOUND, /* No SIB is found on this frequency */
139 MRS_NRAS_PLMN_MATCH_RESULT_NOT_MATCH, /* Exist SIB on this frequency, but PLMN doesn't match */
140 MRS_NRAS_PLMN_MATCH_RESULT_MATCH /* Exist SIB on this frequency and PLMN match exactly*/
141} mrs_nras_plmn_match_result_enum;
142
143typedef enum {
144 MRS_NRAS_QUICK_POWER_SEARCH_RESULT = 0,
145 MRS_NRAS_NORMAL_POWER_SEARCH_RESULT = 1,
146 MRS_NRAS_NORMAL_POWER_SEARCH_RESULT_MAX
147} mrs_nras_power_scan_result_rssi_threshold_enum;
148
149typedef enum
150{
151 MRS_NR_BAND_DISABLE_BY_PLMN_STATE_NONE,
152 MRS_NR_BAND_DISABLE_BY_PLMN_STATE_ONE_OR_MORE,
153 MRS_NR_BAND_DISABLE_BY_PLMN_STATE_ALL,
154 MRS_NR_BAND_DISABLE_BY_PLMN_STATE_INVALID
155} mrs_nr_band_disable_by_plmn_state_enum;
156
157#ifdef __GEMINI__
158typedef enum
159{
160 MRS_NRAS_GEMINI_STATUS_DR_DSDS_SUPPORTED,
161 MRS_NRAS_GEMINI_STATUS_DSDA_SUPPORTED,
162 MRS_NRAS_GEMINI_STATUS_MULTI_SIM_INSERTED,
163 MRS_NRAS_GEMINI_STATUS_IS_DATA_SIM,
164 MRS_NRAS_GEMINI_STATUS_INVALID
165} mrs_nras_gemini_query_option_enum;
166#endif
167
168
169typedef struct {
170 kal_uint8 nea_support; /*MSB: NEA0, 128-NEA1, 128-NEA2, 128-NEA3 */
171 kal_uint8 nia_support; /*MSB: NIA0, 128-NIA1, 128-NIA2, 128-NIA3 */
172 kal_uint8 nras_power_class;
173 kal_uint8 endc_support;
174 kal_uint8 nvram_nr_band[MRS_NR_BAND_BITMASK_SIZE];
175 kal_uint8 nvram_endc_nr_band[MRS_NR_BAND_BITMASK_SIZE];
176#ifdef __NVM_GLOBAL_CABC__
177 //mrs_plmn_id_list saved_plmn_id_list;
178 //mrs_gemini_status_enum saved_gemini_status;
179 //kal_bool saved_sa_nr_band_valid;
180 //kal_uint8 saved_sa_nr_band_bitmask[MRS_NR_BAND_BITMASK_SIZE];
181 //kal_bool saved_endc_nr_band_valid;
182 //kal_uint8 saved_endc_nr_band_bitmask[MRS_NR_BAND_BITMASK_SIZE];
183#endif /* __NVM_GLOBAL_CABC__ */
184} nras_capability_context_struct;
185
186typedef struct {
187 nr_duplex_enum nr_duplex;
188 kal_uint16 nr_band;
189} nras_band_duplex_struct;
190
191typedef struct
192{
193 kal_uint32 begin;
194 kal_uint32 end;
195} mrs_freq_range_struct;
196
197typedef struct {
198 kal_uint16 band;
199 kal_uint32 ssb_arfcn;
200 kal_uint16 pci;
201 kal_uint8 subcarrier_spacing_ssb; // The original type is NR_SCS_TYPE_E, but MRS does not include NL1 header, so use U8
202 mrs_plmn_id_list plmn_list;
203
204#if 1//defined(__SKIP_BW__)
205 mrs_freq_range_struct cell_arfcn_begin_end_points;
206#endif /* __SKIP_BW__ */
207} mrs_nras_search_cell_sib_result_entry_struct;
208
209typedef struct {
210 kal_uint16 band;
211 kal_uint32 begin;
212 kal_uint32 end;
213 mrs_nr_scs_enum ssb_scs;
214} mrs_nras_search_ccs_result_entry_struct;
215
216typedef struct {
217 kal_uint32 continuous_carrier_search_result_num;
218 mrs_nras_search_ccs_result_entry_struct continuous_carrier_search_result[MRS_NRAS_SEARCH_MAX_POWER_SCAN_RANGE_NUM];
219 kal_uint32 cell_sib_result_num;
220 mrs_nras_search_cell_sib_result_entry_struct cell_sib_result[MRS_NRAS_SEARCH_MAX_DETECTED_CELL_NUM];
221 kal_uint32 non_cell_defining_ssb_range_num;
222 mrs_freq_range_struct non_cell_defining_ssb_range[MRS_NRAS_SEARCH_MAX_DETECTED_CELL_NUM];
223 kal_uint32 power_scan_result_num[MRS_NRAS_NORMAL_POWER_SEARCH_RESULT_MAX];
224 mrs_freq_range_struct power_scan_result[MRS_NRAS_NORMAL_POWER_SEARCH_RESULT_MAX][MRS_NRAS_SEARCH_MAX_POWER_SCAN_RANGE_NUM];
225} mrs_nras_search_info_struct;
226
227/*
228 * List implementing NR band support bitmask where LSB in the first one byte
229 * (index 0) of nr_band_list represents NR band 1.
230 */
231typedef struct {
232 kal_uint8 nr_band_list[MRS_NR_BAND_BITMASK_SIZE];
233} mrs_nr_band_list_struct;
234
235typedef struct
236{
237 ca_bandwidth_class_eutra_enum ca_bandwidth_class_dl;
238 ca_bandwidth_class_eutra_enum ca_bandwidth_class_ul;
239 kal_uint16 eutra_band;
240} nras_eutra_band_info_struct;
241
242typedef struct
243{
244 nras_eutra_band_info_struct
245 eutra_band_list[MRS_NRAS_MAX_EUTRA_BAND_LIST_LENGTH];
246 kal_uint16 eutra_band_list_length;
247} nras_eutra_band_list_struct;
248
249/********************************************
250 * VARIABLES *
251 ********************************************/
252
253
254/********************************************
255 * FUNCTION DECLARATIONS *
256 ********************************************/
257
258kal_uint8 mrs_nras_is_supported_dl_nrarfcn_on_any_band(kal_uint16 *band,
259 NRARFCN nr_dl_arfcn, MRS_SIM_INDEX sim_index);
260kal_uint16 mrs_nras_supported_band_of_dl_nrarfcn_get(NRARFCN nr_dl_arfcn,
261 MRS_SIM_INDEX sim_index);
262kal_bool mrs_nras_is_supported_dl_nrarfcn(NRARFCN nr_dl_arfcn, kal_uint16 band,
263 MRS_SIM_INDEX sim_index);
264kal_bool mrs_nras_is_supported_dl_nrarfcn_partial_band(
265 const mrs_plmn_id *p_mrs_plmn_id,
266 NRARFCN nr_dl_arfcn, kal_uint16 band, MRS_SIM_INDEX sim_index);
267kal_bool mrs_nras_is_supported_ul_nrarfcn(NRARFCN nr_dl_arfcn, kal_uint16 band,
268 MRS_SIM_INDEX sim_index);
269kal_bool mrs_nras_is_supported_band(kal_uint16 nr_band, MRS_SIM_INDEX sim_index);
270kal_bool mrs_nras_is_supported_band_public(kal_uint16 nr_band,
271 MRS_SIM_INDEX sim_index,
272 kal_bool show_trace);
273void mrs_nras_read_nvram_cnf_handler(kal_uint16 nvram_file_id, kal_uint8 *data, kal_uint16 len);
274kal_uint8 mrs_nras_get_powerclass(MRS_SIM_INDEX sim_index, kal_uint16 nr_band);
275kal_uint8 mrs_nras_get_powerclass_value(MRS_SIM_INDEX sim_index,
276 kal_uint16 nr_band);
277kal_uint32 mrs_nras_dl_nrarfcn_phy_freq_get(NRARFCN dl_nrarfcn);
278kal_uint32 mrs_nras_ul_nrarfcn_phy_freq_get(NRARFCN ul_nrarfcn);
279void mrs_nras_dl_nrarfcn_duplex_type_get(NRARFCN dl_nrarfcn,
280 nras_band_duplex_struct *duplex_list, kal_uint8 *duplex_list_length);
281void mrs_nras_ul_nrarfcn_duplex_type_get(NRARFCN ul_nrarfcn,
282 nras_band_duplex_struct *duplex_list, kal_uint8 *duplex_list_length);
283kal_bool mrs_nras_is_specified_nr_band(kal_uint16 nr_band);
284kal_bool mrs_nras_is_gscn_supported(
285 mrs_nras_carrier_freq_type_enum carrier_freq_type,
286 kal_uint16 freq_index, kal_int8 freq_offset);
287kal_bool mrs_nras_is_endc_support(MRS_SIM_INDEX sim_index);
288kal_uint32 mrs_nras_get_ue_nr_cap(MRS_SIM_INDEX sim_index,
289 const mrs_nras_octet_string_struct freqbandlist_ie,
290 const mrs_nras_octet_string_struct UE_CapabilityRequestFilterNR_ie,
291 const mrs_plmn_id_list *p_plmn_id_list,
292 kal_uint8 **pp_ue_nr_cap,
293 kal_bool eutra_nr_only,
294 mrs_gemini_status_enum gemini_status,
295 kal_bool is_restriction_size_valid,
296 kal_uint32 restriction_size,
297 kal_bool is_bc_list_set);
298kal_uint32 mrs_nras_get_ue_mrdc_cap(MRS_SIM_INDEX sim_index,
299 const mrs_nras_octet_string_struct freqbandlist_ie,
300 const mrs_nras_octet_string_struct UE_CapabilityRequestFilterNR_ie,
301 const mrs_plmn_id_list *p_plmn_id_list,
302 kal_uint8 **pp_ue_mrdc_cap,
303 kal_bool eutra_nr_only,
304 mrs_gemini_status_enum gemini_status,
305 kal_bool is_restriction_size_valid,
306 kal_uint32 restriction_size,
307 kal_bool is_bc_list_set);
308void mrs_nras_get_ue_nr_and_mrdc_cap(MRS_SIM_INDEX sim_index,
309 const mrs_nras_octet_string_struct freqbandlist_ie,
310 const mrs_nras_octet_string_struct UE_CapabilityRequestFilterNR_ie,
311 const mrs_plmn_id_list *p_plmn_id_list,
312 kal_uint8 **pp_ue_nr_cap,
313 kal_uint8 **pp_ue_mrdc_cap,
314 kal_bool eutra_nr_only,
315 mrs_gemini_status_enum gemini_status,
316 kal_uint16 *nr_cap_size,
317 kal_uint16 *mrdc_cap_size,
318 kal_bool is_restriction_size_valid,
319 kal_uint32 restriction_size,
320 kal_bool is_bc_list_set);
321
322/**
323 * @brief Gets EUTRAN feature set IDs
324 * @param[in] freqbandlist_ie Encoded NR FreqBandList IE as specified in TS 38.331
325 * @param[in] p_plmn_id_list PLMN Id List is used for band filtering or customization
326 * @param[out] p_eutran_feature_sets Pointer to EUTRAN feature set IDs
327 * @param[in] sim_index SIM index
328 * @return N/A
329 */
330void mrs_nras_eutran_feature_set_ids_get(
331 const mrs_nras_octet_string_struct freqbandlist_ie,
332 const mrs_plmn_id_list *p_plmn_id_list,
333 mrs_nras_eutran_feature_set_ids_struct *p_eutran_feature_sets,
334 MRS_SIM_INDEX sim_index,
335 mrs_gemini_status_enum gemini_status,
336 kal_bool is_bc_list_set);
337
338kal_uint16 mrs_nras_max_band_number_get(void);
339nr_duplex_enum mrs_nras_band_duplex_get(kal_uint16 band);
340kal_uint32 mrs_nras_max_ul_phy_freq_get(kal_uint16 band);
341kal_uint32 mrs_nras_min_ul_phy_freq_get(kal_uint16 band);
342kal_uint32 mrs_nras_max_dl_phy_freq_get(kal_uint16 band);
343kal_uint32 mrs_nras_min_dl_phy_freq_get(kal_uint16 band);
344kal_uint32 mrs_nras_all_rat_max_dl_phy_freq_get(kal_uint16 band);
345kal_uint32 mrs_nras_all_rat_min_dl_phy_freq_get(kal_uint16 band);
346NRARFCN mrs_nras_max_dl_nr_arfcn_get(kal_uint16 band);
347NRARFCN mrs_nras_min_dl_nr_arfcn_get(kal_uint16 band);
348NRARFCN mrs_nras_max_ul_nr_arfcn_get(kal_uint16 band);
349NRARFCN mrs_nras_min_ul_nr_arfcn_get(kal_uint16 band);
350NRARFCN mrs_nras_dl_phy_freq_nrarfcn_get(kal_uint32 dl_phy_freq);
351#ifndef __NVM_GLOBAL_CABC__
352kal_bool mrs_nras_nr_fdd_supported(MRS_SIM_INDEX sim_index);
353kal_bool mrs_nras_nr_tdd_supported(MRS_SIM_INDEX sim_index);
354kal_bool mrs_nras_nr_fr1_supported(MRS_SIM_INDEX sim_index);
355kal_bool mrs_nras_nr_fr2_supported(MRS_SIM_INDEX sim_index);
356kal_bool mrs_nras_endc_nr_fdd_supported(MRS_SIM_INDEX sim_index);
357kal_bool mrs_nras_endc_nr_tdd_supported(MRS_SIM_INDEX sim_index);
358kal_bool mrs_nras_endc_nr_fr1_supported(MRS_SIM_INDEX sim_index);
359kal_bool mrs_nras_endc_nr_fr2_supported(MRS_SIM_INDEX sim_index);
360#else
361kal_bool mrs_nras_nr_fdd_supported(MRS_SIM_INDEX sim_index, const mrs_plmn_id_list *p_plmn_id_list);
362kal_bool mrs_nras_nr_tdd_supported(MRS_SIM_INDEX sim_index, const mrs_plmn_id_list *p_plmn_id_list);
363kal_bool mrs_nras_nr_fr1_supported(MRS_SIM_INDEX sim_index, const mrs_plmn_id_list *p_plmn_id_list);
364kal_bool mrs_nras_nr_fr2_supported(MRS_SIM_INDEX sim_index, const mrs_plmn_id_list *p_plmn_id_list);
365kal_bool mrs_nras_endc_nr_fdd_supported(MRS_SIM_INDEX sim_index, const mrs_plmn_id_list *p_plmn_id_list);
366kal_bool mrs_nras_endc_nr_tdd_supported(MRS_SIM_INDEX sim_index, const mrs_plmn_id_list *p_plmn_id_list);
367kal_bool mrs_nras_endc_nr_fr1_supported(MRS_SIM_INDEX sim_index, const mrs_plmn_id_list *p_plmn_id_list);
368kal_bool mrs_nras_endc_nr_fr2_supported(MRS_SIM_INDEX sim_index, const mrs_plmn_id_list *p_plmn_id_list);
369#endif /* __NVM_GLOBAL_CABC__ */
370
371void mrs_nras_clear_search_info(MRS_SIM_INDEX sim_index);
372void mrs_nras_search_continuous_carrier_search_result_add(const MRS_SIM_INDEX sim_index, mrs_nras_search_ccs_result_entry_struct *input);
373kal_uint32 mrs_nras_search_continuous_carrier_search_result_query(const MRS_SIM_INDEX sim_index, mrs_nras_search_ccs_result_entry_struct *p_list);
374kal_uint32 mrs_nras_search_non_cell_defining_ssb_range_query(mrs_freq_range_struct *p_list);
375void mrs_nras_search_cell_sib_result_add(const MRS_SIM_INDEX sim_index, const mrs_nras_search_cell_sib_result_entry_struct *input);
376void mrs_nras_search_non_cell_defining_ssb_range_add(const MRS_SIM_INDEX sim_index, const mrs_freq_range_struct *input);
377mrs_nras_plmn_match_result_enum mrs_nras_search_plmn_in_sib_of_freq(
378 const MRS_SIM_INDEX sim_index,
379 const kal_uint32 nrarfcn,
380 const plmn_id_struct *selected_plmn);
381
382kal_uint32 mrs_nras_search_cell_bw_query(
383 const MRS_SIM_INDEX sim_index,
384 mrs_freq_range_struct *range_list);
385
386void mrs_nras_search_power_scan_result_add(const MRS_SIM_INDEX sim_index,
387 const mrs_freq_range_struct *input,
388 kal_bool is_quick_search);
389
390kal_uint32 mrs_nras_search_power_scan_result_query(const MRS_SIM_INDEX sim_index,
391 mrs_freq_range_struct *p_list,
392 kal_bool is_quick_search);
393
394void mrs_nras_search_power_scan_result_remove(const MRS_SIM_INDEX sim_index,
395 const mrs_freq_range_struct *input,
396 kal_bool is_quick_search);
397
398void mrs_nras_mrs_plmn_id_to_plmn_id(const mrs_plmn_id *src, plmn_id_struct *dst);
399
400kal_bool mrs_nras_sftd_measurement_type_supported(
401 MRS_SIM_INDEX sim_index,
402 mrs_nras_sftd_meas_type_enum sftd_meas_type,
403 NRARFCN nr_arfcn);
404
405/**
406 * @brief Function for reading the list of the NR bands supported by RF.
407 * @param[out] NR band list.
408 */
409void mrs_nras_max_band_cap_for_user(mrs_nr_band_list_struct *nr_band);
410
411void mrs_nras_nr_band_rf_cap_for_user(mrs_nr_band_list_struct *nr_sa_band, mrs_nr_band_list_struct *nr_endc_band);
412
413kal_bool mrs_nras_band_setting_update(MRS_SIM_INDEX sim_index,
414 kal_uint8 *p_nr_band, kal_bool with_duplex_mode);
415
416kal_bool mrs_nras_endc_band_setting_update(MRS_SIM_INDEX sim_index,
417 mrs_gemini_status_enum *gemini_status, kal_uint8 *p_endc_nr_band);
418
419void mrs_nras_print_band_bitmask(const kal_uint8* p_band_mask_byte,
420 nras_band_print_func_enum func_name,
421 nras_band_print_check_point_enum check_point);
422
423void mrs_nras_get_context_nvram_nr_band(kal_uint8 *p_nr_band_mask, MRS_SIM_INDEX sim_index);
424
425void mrs_nras_set_context_nvram_nr_band(kal_uint8 *p_nr_band_mask, MRS_SIM_INDEX sim_index);
426
427void mrs_nras_get_context_nvram_endc_nr_band(kal_uint8 *p_endc_nr_band_mask, MRS_SIM_INDEX sim_index);
428
429void mrs_nras_set_context_nvram_endc_nr_band(kal_uint8 *p_endc_nr_band_mask, MRS_SIM_INDEX sim_index);
430
431/**
432 * @brief Function for retrieving NR band bit mask indicating the NR bands
433 * supported by the UE in EN-DC.
434 * @param[out] NR band bit mask with MAX_BYTE_NR_BAND_BITMASK bytes.
435 * @return -
436 */
437void mrs_nras_endc_nr_band_list_get(mrs_gemini_status_enum gemini_status,
438 MRS_SIM_INDEX sim_index,
439 kal_uint8 *nr_band);
440
441/**
442 * @brief Function for checking if NR band given is supported ENDC NR band by UE.
443 * @param[in] gemini_status Gemini status.
444 * @param[in] SIM index
445 * @param[in] NR band
446 * @return KAL_TRUE if the NR band given in input is supported ENDC NR band by UE.
447 * @return KAL_FALSE if the NR band given in input is not supported ENDC NR band by UE.
448 */
449
450kal_bool mrs_nras_is_supported_endc_nr_band(mrs_gemini_status_enum gemini_status,
451 MRS_SIM_INDEX sim_index,
452 kal_uint16 nr_band);
453
454/**
455 * @brief Function to get SA NR band bitmask is supported by PLMN.
456 * @param[in] SIM index
457 * @param[out] support band bitmask
458 * @param[in] PLMN id list
459 * @param[in] Trace print is shown or not
460 */
461void mrs_nras_sa_nr_band_bitmask_get_by_plmn(
462 MRS_SIM_INDEX sim_index,
463 kal_uint8 *p_nr_band_bitmask,
464 const mrs_plmn_id_list *p_plmn_id_list,
465 kal_bool show_trace);
466
467/**
468 * @brief Function to get ENDC NR band bitmask is supported by PLMN.
469 * @param[in] gemini_status Gemini status.
470 * @param[in] SIM index
471 * @param[out] support band bitmask
472 * @param[in] PLMN id list
473 * @param[in] Trace print is shown or not
474 */
475void mrs_nras_endc_nr_band_bitmask_get_by_plmn(
476 mrs_gemini_status_enum gemini_status,
477 MRS_SIM_INDEX sim_index,
478 kal_uint8 *p_nr_band_bitmask,
479 const mrs_plmn_id_list *p_plmn_id_list,
480 kal_bool show_trace);
481
482#ifdef __NVM_GLOBAL_CABC__
483/**
484 * @brief check if SA NR band given is supported by PLMN.
485 * @param[in] NR band
486 * @param[in] SIM index
487 * @param[in] PLMN id list
488 * @param[in] Trace print is shown or not
489 * @return KAL_TRUE if the NR band given in input is supported by PLMN.
490 * @return KAL_FALSE if the NR band given in input is not supported by PLMN.
491 */
492kal_bool mrs_nras_is_supported_sa_nr_band_plmn(
493 kal_uint16 nr_band,
494 MRS_SIM_INDEX sim_index,
495 const mrs_plmn_id_list *p_plmn_id_list,
496 kal_bool show_trace);
497
498/**
499 * @brief check if ENDC NR band given is supported by PLMN.
500 * @param[in] gemini status
501 * @param[in] NR band
502 * @param[in] SIM index
503 * @param[in] PLMN id list
504 * @param[in] Trace print is shown or not
505 * @return KAL_TRUE if the NR band given in input is supported by PLMN.
506 * @return KAL_FALSE if the NR band given in input is not supported by PLMN.
507 */
508kal_bool mrs_nras_is_supported_endc_nr_band_plmn(
509 mrs_gemini_status_enum gemini_status,
510 kal_uint16 nr_band,
511 MRS_SIM_INDEX sim_index,
512 const mrs_plmn_id_list *p_plmn_id_list,
513 kal_bool show_trace);
514#endif /* __NVM_GLOBAL_CABC__ */
515
516/**
517 * @brief Function for reading EUTRA band list from FreqBandList
518 * @param[in] Encoded FreqBandList IE as specified in TS 38.331
519 * @param[out] EUTRA band list
520 * @return N/A
521 */
522void mrs_nras_freq_band_list_eutra_bands_retrieve(
523 const mrs_nras_octet_string_struct freqbandlist_ie,
524 nras_eutra_band_list_struct *p_eutra_band_list);
525
526void mrs_nras_set_radio_capability_for_ng_ran_changed(
527 MRS_SIM_INDEX sim_index, kal_bool value);
528
529kal_bool mrs_nras_get_radio_capability_for_ng_ran_changed(
530 MRS_SIM_INDEX sim_index);
531
532kal_bool mrs_nras_band_setting_update_by_plmn(function_caller_id_enum caller_id,
533 MRS_SIM_INDEX sim_index, mrs_plmn_id_list* p_plmn, mrs_ehplmn_id_list* p_ehplmn);
534
yu.donge372c322023-08-30 20:25:04 -0700535//mrs_nr_band_disable_by_plmn_state_enum mrs_nras_get_band_disable_by_plmn_state(MRS_SIM_INDEX sim_index);
rjw6c1fd8f2022-11-30 14:33:01 +0800536
yu.donge372c322023-08-30 20:25:04 -0700537function_caller_id_enum mrs_nras_get_band_update_by_plmn_last_caller_id(MRS_SIM_INDEX sim_index);
rjw6c1fd8f2022-11-30 14:33:01 +0800538
539/**
540 * @brief Checks if EN-DC band combination is supported with given LTE/NR bands.
541 * @param[in] sim_index SIM index
542 * @param[in] lte_band LTE band
yu.donge372c322023-08-30 20:25:04 -0700543 * @param[in] p_nr_band Pointer to NR band list,
544 * @param[in] num_of_nr_band Number of NR band in p_nr_band list, if 0, any NR band is OK for EN-DC band combination check
rjw6c1fd8f2022-11-30 14:33:01 +0800545 * @param[in] p_plmn_id_list PLMN Id List is used for band filtering or customization
546 * @param[in] gemini_status Gemini status.
547 * @return TRUE if EN-DC band combination found, otherwise FALSE.
548 */
549kal_bool mrs_nras_is_endc_comb_supported_band(
550 kal_uint8 sim_index,
551 kal_uint16 lte_band,
552 kal_uint16* p_nr_band,
yu.donge372c322023-08-30 20:25:04 -0700553 kal_uint8 num_of_nr_band,
rjw6c1fd8f2022-11-30 14:33:01 +0800554 const mrs_plmn_id_list *p_plmn_id_list,
555 mrs_gemini_status_enum gemini_status);
556
557/**
558 * @brief Function for reading Gemini status
559 * @param[in] SIM index
560 * @return Gemini status
561 */
562mrs_gemini_status_enum mrs_nras_get_gemini_status(MRS_SIM_INDEX sim_idx);
563
564/* EN-DC equivalents for some API functions that check for band support */
565kal_uint8 mrs_nras_is_supported_endc_dl_nrarfcn_on_any_band(kal_uint16 *band,
566 NRARFCN nr_dl_arfcn, MRS_SIM_INDEX sim_index);
567kal_uint8 mrs_nras_is_supported_endc_and_nr_only_dl_nrarfcn_on_any_band(kal_uint16 *band,
568 NRARFCN nr_dl_arfcn, MRS_SIM_INDEX sim_index);
569kal_bool mrs_nras_is_supported_endc_dl_nrarfcn(NRARFCN nr_dl_arfcn, kal_uint16 band,
570 MRS_SIM_INDEX sim_index);
571kal_bool mrs_nras_is_supported_endc_dl_nrarfcn_partial_band(
572 const mrs_plmn_id *p_mrs_plmn_id, NRARFCN nr_dl_arfcn, kal_uint16 band,
573 MRS_SIM_INDEX sim_index);
574kal_bool mrs_nras_is_supported_endc_ul_nrarfcn(NRARFCN nr_dl_arfcn, kal_uint16 band,
575 MRS_SIM_INDEX sim_index);
576
577/**
578 * @brief Requests MRS to inform NL1 about possible need to modify NR band
579 * bandwidth according to the PLMN.
580 * @param[in] GEMINI status
581 * @param[in] PLMN ID
582 * @param[in] SIM index
583 * @return N/A
584 */
585void mrs_nras_modify_nr_bw(
586 mrs_gemini_status_enum gemini_status, mrs_plmn_id plmn_id,
587 MRS_SIM_INDEX sim_index);
588
589
590/**
591 * @brief Checks if NL1_CAP is not building band combinations and can return the band combinations immediately when mrs_nras_is_endc_comb_supported_band is called
592 * @param[in] sim_index SIM index
593 * @return TRUE if NL1_CAP is ready and not building band combinations
594 */
595kal_bool mrs_nras_is_nl1_band_combination_ready(MRS_SIM_INDEX sim_index);
596
597/**
598 * @brief When NL1_CAP start/finish building capability, it will update the status.
599 * @param[in] sim_index SIM index
600 * @param[in] nl1_cap_build_done NL1_CAP status
601 * @return N/A
602 */
603void mrs_nras_nl1_cap_status_update(MRS_SIM_INDEX sim_index, kal_bool nl1_cap_build_done);
604
605kal_bool mrs_nras_is_matched_from_nr_partial_band_table(const mrs_plmn_id *p_mrs_plmn_id, MRS_SIM_INDEX sim_index, kal_uint16 band,
606 mrs_nras_partial_freq_range_list_struct *p_freq_range_list);
607
608/**
609 * @brief Check whether UE supports extended band n77 in USA
610 * @param[in] p_plmn_id_list PLMN id list
611 * @param[in] sim_idx SIM index
612 * @return kal_bool If extended n77 in USA supported, KAL_TRUE will be returned
613 */
614kal_bool mrs_nras_extendedBand_n77_supported(const mrs_plmn_id_list* p_plmn_id_list, MRS_SIM_INDEX sim_idx);
615
616#endif /* MRS_NRAS_CAPABILITY_H */
617