blob: a3dd17cd2f8d654d238e7dd9b3c2091411a48832 [file] [log] [blame]
#ifndef _MLL1_UMTS_FDD_H
#define _MLL1_UMTS_FDD_H
#include "kal_public_defs.h" /*for LOCAL_PARA_HDR*/
#include "mll1_common.h"
/*****************************************************************************
* DEFINITIONS
*****************************************************************************/
#define UMTS_FDD_SESSION_IN_PERIOD 8 /* align gsm, LTE only need 6 for gp0/gp1 */
#define UMTS_FDD_MAX_DCH_GAP_PARAM_NUM 6 /*2 Pop temp modification for UL1's TGPS free buffer issue*/
#define UMTS_FDD_MAX_TGPS_NUM 6
#define UMTS_FDD_SCHEDULE_DELAY 0 /* used to postpone available gap start time */
/*****************************************************************************
* ENUMERATIONS
*****************************************************************************/
/*****************************************************************************
* ENUMERATION
* ul1_ll1_rat_status_enum
*
* DESCRIPTIONS
* Used to identify the status in UMTS FDD RAT.
* NOTE
* any modification should sync. with ll1_rat_status_enum
*****************************************************************************/
typedef enum
{
UL1_LL1_RAT_FLIGHT =0,
UL1_LL1_RAT_STANDBY,
UL1_LL1_RAT_ACTIVE,
UL1_LL1_RAT_NUM
} ul1_ll1_rat_status_enum;
/*****************************************************************************
* ENUMERATION
* umts_fdd_tgps_status_enum
*
* DESCRIPTIONS
* ACTIVE_GAP: the tgps is used in standby L1.
* INACTIVE_GAP: the tgps is not used in standby L1.
*****************************************************************************/
typedef enum
{
UL1_ACTIVATE_GAP=0, /* 0 */
UL1_DEACTIVATE_GAP /* 1 */
}umts_fdd_tgps_status_enum;
/*****************************************************************************
* ENUMERATION
* umts_fdd_tgmp_enum
*
* DESCRIPTIONS
* The enum type of TGPS purpose
* NOTE
* any change should note x_tgmp_enum
*****************************************************************************/
typedef enum
{
UL1_LL1_FDD_MEASURE, /* Inter-frequency measurement */
UL1_LL1_GSM_RSSI, /* GSM RSSI measurement */
UL1_LL1_GSM_BSIC_INIT, /* GSM initial BSIC */
UL1_LL1_GSM_BSIC_CNF, /* GSM BSIC confirm */
UL1_LL1_EUTRAN, /* Inter-RAT LTE measurement*/
UL1_LL1_UMTS_TDD, /* Inter-RAT UMTS_TDD measurement*/
UL1_LL1_PURPOSE_UNDEFINED
} umts_fdd_tgmp_enum;
/*****************************************************************************
* STRUCTURES
*****************************************************************************/
/*****************************************************************************
* STRUCT
* umts_fdd_time_struct
*
* DESCRIPTIONS
* UMTS FDD system timing base
*
* PARAMETERS
* sfn - UMTS FDD system frame number (0~4095), 1 sfn = 38400*8.
* echip - UMTS FDD Echip (0~307199)
*****************************************************************************/
typedef struct
{
kal_int32 sfn;
kal_int32 echip;
}umts_fdd_time_struct;
/*****************************************************************************
* STRUCT
* ll1_umts_fdd_standby_gap_struct
*
* DESCRIPTIONS
* UMTS FDD standby gap pattern structure.
*
* PARAMETERS
* start_time - start time of the gap session
* length - length of the gap session (in echip)
*****************************************************************************/
typedef struct
{
umts_fdd_time_struct start_time;
kal_int32 length;
}ll1_umts_fdd_standby_gap_struct;
/*****************************************************************************
* STRUCT
* ll1_ul1_expand_gap_pattern_struct
*
* DESCRIPTIONS
* LL1 expands gap pattern for UL1
*
* PARAMETERS
* session_num - Indicate how many gap session
* session[] - Standby gap session.
* measure_tid - Transition id for RANK tick./Valid when active RAT is in DRX mode./And bit 0 in tick_bitmap is "1"
* hps_tid - Transition id for HPS tick./Valid when active RAT is in DRX mode./And bit 1 in tick_bitmap is "1"
* tick_bitmap - Bit 0 : Rank search , Bit 1 : Priority search
*****************************************************************************/
typedef struct
{
kal_uint8 session_num;
ll1_umts_fdd_standby_gap_struct session[UMTS_FDD_SESSION_IN_PERIOD];
kal_uint8 measure_tid;
kal_uint8 hps_tid;
kal_uint8 tick_bitmap;
}ll1_ul1_expand_gap_pattern_struct;
/*****************************************************************************
* STRUCT
* ll1_umts_fdd_gap_config_struct
*
* DESCRIPTIONS
* UMTS FDD gap configuration when UMTS FDD is active RAT.
*
* PARAMETERS
* start_time - Valid time of gap pattern in active RAT
* use_num - Continuous gap number could be used in active RAT(Each FMO cycle = 10*M_REP*NTTI as a unit)
* skip_num - Skip number in active RAT (Each FMO cycle = 10*M_REP*NTTI as a unit)
*****************************************************************************/
typedef struct
{
umts_fdd_time_struct start_time;
kal_uint8 use_num;
kal_uint8 skip_num;
}ll1_umts_fdd_gap_config_struct;
/*****************************************************************************
* STRUCT
* umts_fdd_idle_gap_struct
*
* DESCRIPTIONS
* UMTS FDD idle gap structure.
*
* PARAMETERS
* start_time - start time of the gap session
* length - length of the gap session (in echip)
* is_drx_tick - KAL_TRUE : First tick in this DRX period
* KAL_FALSE: Not the first free interval in this DRX period
*****************************************************************************/
typedef struct
{
umts_fdd_time_struct start_time;
kal_int32 length;
kal_bool is_drx_tick;
}umts_fdd_idle_gap_struct;
/*****************************************************************************
* STRUCT
* umts_fdd_fach_gap_struct
*
* DESCRIPTIONS
* UMTS FDD FACH gap structure.(FMO)
*
* PARAMETERS
* active_time_sfm - The first SFN for starting FMO.
* fmo_offset - The FMO offset from the beginning of each FMO cycle in UMTS FDD frames.
* fmo_duration - The FMO duration for measurements within each FMO cycle in UMTS FDD frames
* period_length - Equal to 10*M_REP*NTTI
*****************************************************************************/
typedef struct
{
kal_uint32 active_time_sfn;
kal_uint32 fmo_offset;
kal_uint32 fmo_duration;
kal_uint32 period_length;
}umts_fdd_fach_gap_struct;
/*****************************************************************************
* STRUCT
* umts_fdd_dch_gap_info_struct
*
* DESCRIPTIONS
* UMTS FDD gap information structure. (TGPSi configuration)
*
* PARAMETERS
* refer to spec. 36.331
*****************************************************************************/
typedef struct
{
kal_uint8 tgpsi;
umts_fdd_tgps_status_enum status;
kal_int16 tgsfn;
umts_fdd_tgmp_enum purpose;
kal_uint16 original_tgprc;
kal_uint16 remain_tgprc;
kal_uint8 tgsn;
kal_uint8 tgl1;
kal_uint8 tgl2;
kal_uint16 tgd;
kal_uint8 tgpl1;
kal_uint8 tgpl2;
kal_uint16 t_reconfirm_dch;
kal_uint16 t_identify_dch;
}umts_fdd_dch_gap_info_struct;
/*****************************************************************************
* STRUCT
* umts_fdd_dch_gap_param_struct
*
* DESCRIPTIONS
* UMTS FDD DCH gap info structure. (gap_info_lenthg TGPSi in one TGPS configuration )
*
* PARAMETERS
* gap_info_length - The DCH gap pattern sequence number
* reconfig_time_sfn - valid time of this configuration
* dch_gap_info[] -
*****************************************************************************/
typedef struct
{
kal_uint8 gap_info_length;
kal_int16 reconfig_time_sfn;
umts_fdd_dch_gap_info_struct dch_gap_info[UMTS_FDD_MAX_TGPS_NUM];
}umts_fdd_dch_gap_param_struct;
/*****************************************************************************
* STRUCT
* umts_fdd_dch_gap_struct
*
* DESCRIPTIONS
* UMTS FDD DCH gap structure. ( many TGPS configurations)
*
* PARAMETERS
* gap_param_num - Indicate that whether the patterns need to be applied
* umts_fdd_dch_gap_param[] - DCH gap configurations
*****************************************************************************/
typedef struct
{
kal_uint8 gap_param_num;
umts_fdd_dch_gap_param_struct umts_fdd_dch_gap_param[UMTS_FDD_MAX_DCH_GAP_PARAM_NUM];
}umts_fdd_dch_gap_struct;
/*****************************************************************************
* STRUCT
* ul1_ll1_sync_cnf_struct
*
* DESCRIPTIONS
* UL1 uses this primitive to confirm LL1 that current UMTS FDD timing
* and micro second counter value.
*
* PARAMETERS
* LOCAL_PARA_HDR
* current_time - sync. time in umts_fdd_time_struct
* umts_fdd_ustime - sync. time in USC
*****************************************************************************/
typedef struct
{
LOCAL_PARA_HDR
umts_fdd_time_struct current_time;
kal_uint32 umts_fdd_ustime;
}ul1_ll1_sync_cnf_struct;
/*****************************************************************************
* STRUCT
* ul1_ll1_rat_status_ind_struct
*
* DESCRIPTIONS
* This message is sent from UL1 to LL1 for informing current UL1 RAT status.
* This message should be sent when UL1 RAT status changed.
*
* PARAMETERS
* LOCAL_PARA_HDR
* rat_status - RAT status in UL1
*****************************************************************************/
typedef struct
{
LOCAL_PARA_HDR
ul1_ll1_rat_status_enum rat_status;
}ul1_ll1_rat_status_ind_struct;
/*****************************************************************************
* STRUCT
* ul1_ll1_mode_status_ind_struct
*
* DESCRIPTIONS
* This message is sent from UL1 to LL1 for informing that UL1 mode status when UL1 is active RAT.
* This message should be sent when UL1 mode status changed.
*
* PARAMETERS
* LOCAL_PARA_HDR
* fdd_mode_status - current mode in UL1 when UMTS FDD is active RAT
* drx_cycle_length - valid when gsm_mode_status = UL1_LL1_IDLE_MODE || LL1_FDD_EFACH_DRX_MODE
* burst_length - valid when gsm_mode_status = LL1_FDD_EFACH_DRX_MODE, and should be smaller than drx_cycle_length
*****************************************************************************/
typedef struct
{
LOCAL_PARA_HDR
ll1_active_rat_mode_status_enum fdd_mode_status;
kal_uint16 drx_cycle_length;
kal_uint16 burst_length;
}ul1_ll1_mode_status_ind_struct;
/*****************************************************************************
* STRUCT
* ll1_ul1_mode_status_update_ind_struct
*
* DESCRIPTIONS
* This message is sent to UL1 for informing that mode status of active RAT when UL1 is standby RAT.
* This message should be updated for UL1 in standby when any mode status changed in active RAT.
* Also when UL1 enters into standby RAT from FLIGHT, LL1 will update current mode state in active RAT to UL1.
*
* PARAMETERS
* LOCAL_PARA_HDR
* active_rat_mode_status - current mode status in active RAT
*****************************************************************************/
typedef struct
{
LOCAL_PARA_HDR
ll1_active_rat_mode_status_enum active_rat_mode_status;
}ll1_ul1_mode_status_update_ind_struct;
/*****************************************************************************
* STRUCT
* ul1_ll1_active_measure_status_ind_struct
*
* DESCRIPTIONS
* UL1 informs LL1 that how many higher priority inter-frequencies in UL1 when high priority search is turned on
*
* PARAMETERS
* LOCAL_PARA_HDR
* freq_num - The number of higher priority inter-freq. in UL1.(0~3)
* When HPS off, the freq_num is equal to zero.
*****************************************************************************/
typedef struct
{
LOCAL_PARA_HDR
kal_uint8 freq_num;
}ul1_ll1_active_measure_status_ind_struct;
/*****************************************************************************
* STRUCT
* ul1_ll1_measure_req_struct
*
* DESCRIPTIONS
* This message is sent from UL1 to inform LL1 that how many UMTS FDD frequencies are required to be
* measured and the measurement purposes both in UMTS FDD Active and Standby. The message is not
* applicable for UL1 to request gaps for inter-frequency measurement in idle mode.
*
* PARAMETERS
* LOCAL_PARA_HDR
* meas_purpose_bitmap - bit 0 for measurement, bit 1 for cell search
* tid - tid for lastest meas_req on (should only change when off)
* tick_bitmap - bit 0 for ranking search, bit 1 for priority search
* freq_num - high priority freqencies when HPS ON, measurement frequencies when HPS OFF
* t_hps - basic period of high priority search (25s,60s,70s)
* is_period_reset_bmp - bit 0 for rank period, 1 means to reset
* - bit 1 for prio period, 0 means not to reset
* - when freq. num is same as before, ll1 will check this flag to reset period or not
* - bit 2 for Tmeas prohibit n_laer, 0 means not to apply n_layer
* - when freq. num is same as before, ll1 will check this flag to apply n_layer or not
* current_time - current in UL1
*****************************************************************************/
typedef struct
{
LOCAL_PARA_HDR
kal_uint8 meas_purpose_bitmap;
kal_uint8 tid;
kal_uint8 tick_bitmap;
kal_uint8 freq_num;
kal_uint16 t_hps;
kal_int32 is_period_reset_bmp;
umts_fdd_time_struct current_time;
}ul1_ll1_measure_req_struct;
/*****************************************************************************
* STRUCT
* ul1_ll1_standby_measure_done_ind_struct
*
* DESCRIPTIONS
* For low power optimization, UL1 informs LL1 which measurement purpose is
* measured done in its period. If all measurement purposes are measured done,
* LL1 will not tick UL1 anymore in shortest measurement period.
*
* PARAMETERS
* LOCAL_PARA_HDR
* tid - For LL1 to know this tid is mapped to which gap pattern period sent before
* tick_bitmap - bit 0 for ranking search, bit 1 for priority search. Only one bit will be set in one message.
*****************************************************************************/
typedef struct
{
LOCAL_PARA_HDR
kal_uint8 tid;
kal_uint8 tick_bitmap;
}ul1_ll1_standby_measure_done_ind_struct;
/*****************************************************************************
* STRUCT
* ll1_ul1_gap_service_req_struct
*
* DESCRIPTIONS
* LL1 uses this primitive to enable (disable) active RAT gap service to get (release)
* the free radio frequency period in UMTS FDD.When LL1 disables active RAT gap service,
* it means that UMTS FDD could use all RF time already.
*
* PARAMETERS
* LOCAL_PARA_HDR
* enable - KAL_TRUE : request gap service
* KAL_FALSE : stop gap service
*****************************************************************************/
typedef struct
{
LOCAL_PARA_HDR
kal_bool enable;
}ll1_ul1_gap_service_req_struct;
/*****************************************************************************
* STRUCT
* ul1_ll1_gap_stop_cnf_struct
*
* DESCRIPTIONS
* UL1 uses this primitive to confirm LL1_UL1_GAP_STOP_REQ when there is no gap usage in UMTS_FDD..
*
* PARAMETERS
* LOCAL_PARA_HDR
* current_time - current time in UL1
*****************************************************************************/
typedef struct
{
LOCAL_PARA_HDR
umts_fdd_time_struct current_time;
}ul1_ll1_gap_stop_cnf_struct;
/*****************************************************************************
* STRUCT
* ul1_ll1_auto_gap_req_struct
*
* DESCRIPTIONS
* UL1 sends this message to request LL1 that UL1 wants to use the auto gap from (sfn, echip).
* UL1 could use this auto gap after getting the successful confirm
*
* PARAMETERS
* LOCAL_PARA_HDR
* auto_time - Start time of auto gap in UL1
*****************************************************************************/
typedef struct
{
LOCAL_PARA_HDR
umts_fdd_time_struct auto_time;
}ul1_ll1_auto_gap_req_struct;
/*****************************************************************************
* STRUCT
* ll1_ul1_auto_gap_cnf_struct
*
* DESCRIPTIONS
* LL1 sends this message to confirm UL1 auto gap request.
* After receiving this message, UL1 could use required auto gap.
*
* PARAMETERS
* LOCAL_PARA_HDR
* success - KAL_TRUE : UL1 could use auto gap to search
* KAL_FALSE: UL1 could not use auto gap to search.
* And UL1 should not request auto gap until AUTO_GAP_AVAILABLE_IND
* valid_period - The length of autonomous gap allowed by active RAT
* The value is valid when success = KAL_TRUE
* Unit : echip
*****************************************************************************/
typedef struct
{
LOCAL_PARA_HDR
kal_bool success;
kal_int32 valid_period;
}ll1_ul1_auto_gap_cnf_struct;
/*****************************************************************************
* STRUCT
* ll1_ul1_auto_gap_ind_struct
*
* DESCRIPTIONS
* LL1 sends this message to inform UL1 stopping using RF in this auto gap from (sfn, echip).
*
* PARAMETERS
* LOCAL_PARA_HDR
* auto_time - Start time of auto gap
*****************************************************************************/
typedef struct
{
LOCAL_PARA_HDR
umts_fdd_time_struct auto_time;
}ll1_ul1_auto_gap_ind_struct;
/*****************************************************************************
* STRUCT
* ul1_ll1_auto_gap_res_struct
*
* DESCRIPTIONS
* UL1 sends this message to response LL1 that UL1 will/won't use RF from
* the start timing of auto gap which is informed by LL1_UL1_AUTO_GAP_IND.
*
* PARAMETERS
* LOCAL_PARA_HDR
* success - KAL_TRUE : UL1 will not use RF from the starting time of LL1_UL1_AUTONOMOIS_GAP_IND
* KAL_FALSE: UL1 may use RF after starting time of LL1_UL1_AUTONOMOIS_GAP_IND.
* valid_period - The length of autonomous gap allowed in UL1
* The value is valid when UL1 is active rat and success = KAL_TRUE
* Unit : echip
*****************************************************************************/
typedef struct
{
LOCAL_PARA_HDR
kal_bool success;
kal_int32 valid_period;
}ul1_ll1_auto_gap_res_struct;
/*****************************************************************************
* STRUCT
* ll1_ul1_gap_notify_ind_struct
*
* DESCRIPTIONS
* LL1 sends this message to inform UL1 that the starting time and length of gap pattern when UL1 is standby RAT.
* LL1 sends this message to inform UL1 the gap pattern configuration when UL1 is active RAT.
*
* PARAMETERS
* LOCAL_PARA_HDR
* standby_gap - standby gap pattern
* active_gap - active gap pattern configuration
* tid - tid for lastest meas_req on
*****************************************************************************/
typedef struct
{
LOCAL_PARA_HDR
ll1_ul1_expand_gap_pattern_struct standby_gap;
ll1_umts_fdd_gap_config_struct active_gap;
kal_uint8 tid; /* Tid for lastest meas_req on, LL1 will expand gap notify ind with this tid*/
}ll1_ul1_gap_notify_ind_struct;
/*****************************************************************************
* STRUCT
* ul1_ll1_gap_pattern_ind_struct
*
* DESCRIPTIONS
* UL1 sends this message to inform LL1 that the free RF period in UL1 as gap pattern.
* PARAMETERS
* LOCAL_PARA_HDR
* ul1_current_time - Ul1 current time
* idle_gap - No matter the length is bigger than zero or not,
* UL1 should send this message and sets is_drx_tick = KAL_TRUE in one DRX period once.
* fach_gap - fach gap pattern
* dch_gap - tgps gap pattern
*****************************************************************************/
typedef struct
{
LOCAL_PARA_HDR
umts_fdd_time_struct ul1_current_time;
umts_fdd_idle_gap_struct idle_gap;
umts_fdd_fach_gap_struct fach_gap;
umts_fdd_dch_gap_struct dch_gap;
}ul1_ll1_gap_pattern_ind_struct;
/*****************************************************************************
* STRUCT
* ll1_ul1_sync_req_struct
* ul1_ll1_gap_stop_req_struct
* ll1_ul1_gap_stop_cnf_struct
* ll1_ul1_gap_stop_req_struct
* ul1_ll1_gap_suspend_req_struct
* ll1_ul1_gap_suspend_cnf_struct
* ll1_ul1_gap_suspend_req_struct
* ul1_ll1_gap_suspend_cnf_struct
* ul1_ll1_gap_resume_ind_struct
* ll1_ul1_gap_resume_ind_struct
* ul1_ll1_auto_gap_stop_req_struct
* ll1_ul1_auto_gap_stop_ind_struct
* ul1_ll1_auto_gap_stop_res_struct
* ll1_ul1_auto_gap_stop_cnf_struct
* ul1_ll1_auto_gap_end_ind_struct
* ll1_ul1_auto_gap_end_ind_struct
* ul1_ll1_auto_gap_available_ind_struct
* ll1_ul1_auto_gap_available_ind_struct
*
* DESCRIPTIONS
* ll1_ul1_sync_req_struct
* LL1 will use this primitive to get UL1 current UMTS timing and micro
* second counter value in both UL1 in active and standby mode.
*
* ul1_ll1_gap_stop_req_struct
* UL1 uses this primitive to inform LL1 to stop all gap usage in standby
* RAT when GERAN GSM wants to change configuration or other purposes.
*
* ll1_ul1_gap_stop_cnf_struct
* LL1 uses this primitive to confirm UL1 that LL1 has already stopped
* all gap usages in standby RAT and UL1 could use all RF time.
*
* ll1_ul1_gap_stop_req_struct
* LL1 uses this primitive to stop gap usage in UMTS FDD when UMTS FDD is standby RAT.
*
* ul1_ll1_gap_suspend_req_struct
* UL1 uses this primitive to temporal suspend gap usage in standby RAT for higher priority
* task and doesn't need to give new gap configuration in connection mode when resumed.
*
* ll1_ul1_gap_suspend_cnf_struct
* LL1 sends this confirm message to UL1 after all standby RAT gap usage are suspended.
*
* ll1_ul1_gap_suspend_req_struct
* LL1 sends this message to UL1 to request that UL1 suspends RF usage immediately.
*
* ul1_ll1_gap_suspend_cnf_struct
* UL1 sends this message to confirm LL1 that UL1 will not use gap from
* now to receiving resume indicator
*
* ul1_ll1_gap_resume_ind_struct
* UL1 sends this message to inform LL1 that UL1 has already finished
* higher priority task, and standby RAT could use gap normally.
*
* ll1_ul1_gap_resume_ind_struct
* LL1 sends this message to UL1 to resume UL1's gap usage.
* After receiving this message, UL1 could use gap pattern normally.
*
* ul1_ll1_auto_gap_stop_req_struct
* UL1 sends this message to request LL1 that UL1 wants to
* retrieve auto gap for higher priority task.
*
* ll1_ul1_auto_gap_stop_ind_struct
* LL1 sends this message to inform UL1 of stopping using RF
* during auto gap period.
*
* ul1_ll1_auto_gap_stop_res_struct
* UL1 sends this message to response LL1 that UL1 stops
* auto gap usage.
*
* ll1_ul1_auto_gap_stop_cnf_struct
* LL1 sends this message to confirm that UL1 could use RF now.
*
* ul1_ll1_auto_gap_end_ind_struct
* UL1 sends this message to inform LL1 that auto gap usage is finished.
*
* ll1_ul1_auto_gap_end_ind_struct
* LL1 sends this message to inform UL1 that auto gap usage is finished.
*
* ul1_ll1_auto_gap_available_ind_struct
* UL1 sends this message to inform LL1 that auto gap is available now. Standby RAT
* could request auto gap now. Standby RAT could request auto gap now
*
* ll1_ul1_auto_gap_available_ind_struct
* LL1 sends this message to inform UL1 that auto gap
* is available now. UL1 could request auto gap now.
*
* ul1_ll1_auto_gap_unavailable_ind_struct
* UL1 sends this message to inform LL1 that auto gap is unavailable now.
* Standby RAT could not request auto gap now.
*
* ll1_ul1_auto_gap_unavailable_ind_struct
* LL1 sends this message to inform UL1 that auto gap is unavailable now.
* UL1 could not request auto gap now.
*
* PARAMETERS
* LOCAL_PARA_HDR
*****************************************************************************/
typedef struct
{
LOCAL_PARA_HDR
}ll1_ul1_sync_req_struct,
ul1_ll1_gap_stop_req_struct,
ll1_ul1_gap_stop_cnf_struct,
ll1_ul1_gap_stop_req_struct,
ul1_ll1_gap_suspend_req_struct,
ll1_ul1_gap_suspend_cnf_struct,
ll1_ul1_gap_suspend_req_struct,
ul1_ll1_gap_suspend_cnf_struct,
ul1_ll1_gap_resume_ind_struct,
ll1_ul1_gap_resume_ind_struct,
ul1_ll1_auto_gap_stop_req_struct,
ll1_ul1_auto_gap_stop_ind_struct,
ul1_ll1_auto_gap_stop_res_struct,
ll1_ul1_auto_gap_stop_cnf_struct,
ul1_ll1_auto_gap_end_ind_struct,
ll1_ul1_auto_gap_end_ind_struct,
ul1_ll1_auto_gap_available_ind_struct,
ll1_ul1_auto_gap_available_ind_struct,
ul1_ll1_auto_gap_unavailable_ind_struct,
ll1_ul1_auto_gap_unavailable_ind_struct;
/*****************************************************************************
* STRUCT
* mll1_ul1_info_database_struct
*
* DESCRIPTIONS
* UL1 information structure.
*
* PARAMETERS
*
*****************************************************************************/
typedef struct
{ /* measure req*/
kal_uint8 tick_bmp; /* use to record tick bitmap*/
kal_uint8 rank_tick_tid; /* tid for rank tick*/
kal_uint8 prio_tick_tid; /* tid for prio tick*/
kal_uint8 meas_done_bmp; /* measurement done ind bitmap*/
kal_bool is_meas_done_useful; /* umts fdd uses meas_done or not by checking meas_purpose_bmp*/
kal_uint8 meas_purpose_bitmap; /* record the measure purpose bitmap*/
umts_fdd_time_struct current_time; /* umts fdd current time when request gap service*/
umts_fdd_time_struct current_time_from_ul1; /* Record the UL1 current time carried in the gap pattern ind */
/* Paging period in active RAT */
kal_int32 drx_cycle; /* 80,160,320,640,1280,2560,5120 Unit : ms*/
/* Burst length for eFACH DRX*/
kal_int32 burst_length; /* 10,20,40,80,160 Unit : ms*/
/* auto gap para*/
umts_fdd_time_struct auto_time; /* auto gap time*/
/* Mode status*/
ll1_active_rat_mode_status_enum mode_status; /* mode status*/
/* GAP pattern*/
ul1_ll1_gap_pattern_ind_struct gap_pattern; /* Gap pattern */
/* Gap request from standby rat should do sync in connection*/
kal_bool valid_timing; /* KAL_TRUE : with valid timing */
/* KAL_FALSE : with invalid timing */
kal_uint8 meas_req_tid; /* Tid for lastest meas_req on, LL1 will expand gap notify ind with this tid*/
}mll1_ul1_info_database_struct;
#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif /*__POP_FSM__*/
/*****************************************************************************
* GLOBAL FUNCTIONS
*****************************************************************************/
/*****************************************************************************
* FUNCTION
* mll1_tick_ul1_gap_expansion
* DESCRIPTION
* tick ul1 to expand gap when sync done
*
* PARAMETERS
* none
* RETURNS
* none
* GLOBALS AFFECTED
* none
*****************************************************************************/
void mll1_tick_ul1_gap_expansion(void);
/*****************************************************************************
* FUNCTION
* mll1_ul1_auto_gap_available_ind
* DESCRIPTION
* ll1 sends auto gap available ind to UMTS FDD now
*
* PARAMETERS
* kal_bool available
* RETURNS
* none
* GLOBALS AFFECTED
* none
*****************************************************************************/
void mll1_ul1_auto_gap_available_ind(kal_bool available);
/*****************************************************************************
* FUNCTION
* mll1_ul1_auto_gap_cnf
* DESCRIPTION
* ll1 sends auto gap cnf to UMTS_FDD now
*
* PARAMETERS
* success - success or not
* RETURNS
* none
* GLOBALS AFFECTED
* none
*****************************************************************************/
void mll1_ul1_auto_gap_cnf(kal_bool success,kal_int32 valid_period);
/*****************************************************************************
* FUNCTION
* mll1_ul1_auto_gap_end_ind
* DESCRIPTION
* ll1 sends auto gap end ind to UMTS FDD now
*
* PARAMETERS
* none
* RETURNS
* none
* GLOBALS AFFECTED
* none
*****************************************************************************/
void mll1_ul1_auto_gap_end_ind(void);
/*****************************************************************************
* FUNCTION
* mll1_ul1_auto_gap_ind
* DESCRIPTION
* ll1 sends auto gap end ind to UMTS FDD now
*
* PARAMETERS
* fdd_time - auto time
* RETURNS
* none
* GLOBALS AFFECTED
* none
*****************************************************************************/
void mll1_ul1_auto_gap_ind(umts_fdd_time_struct fdd_time);
/*****************************************************************************
* FUNCTION
* mll1_ul1_auto_gap_stop_cnf
* DESCRIPTION
* ll1 sends auto gap stop cnf to UMTS_FDD now
*
* PARAMETERS
* None
* RETURNS
* none
* GLOBALS AFFECTED
* none
*****************************************************************************/
void mll1_ul1_auto_gap_stop_cnf(void);
/*****************************************************************************
* FUNCTION
* mll1_ul1_auto_gap_stop_ind
* DESCRIPTION
* ll1 sends auto gap stop ind to UMTS_FDD now
*
* PARAMETERS
* None
* RETURNS
* none
* GLOBALS AFFECTED
* none
*****************************************************************************/
void mll1_ul1_auto_gap_stop_ind(void);
/*****************************************************************************
* FUNCTION
* mll1_ul1_auto_time_minus
* DESCRIPTION
* Add more rf margin for any standby rat which will enter sleep during autonomous serch procedure
* Assume margin is smaller than one sfn
* PARAMETERS
* umts_fdd_time_struct*
* kal_int32 - more RF margin (recovery from sleep).
* RETURNS
* void
*****************************************************************************/
void mll1_ul1_auto_time_minus(umts_fdd_time_struct* time, kal_int32 echip);
/*****************************************************************************
* FUNCTION
* mll1_ul1_expand_active_gap_pattern_ind
* DESCRIPTION
* ll1 sends active gap pattern ind to UMTS_FDD now
*
* PARAMETERS
* start_time - Valid time of gap pattern in active RAT
* use_num - Continuous gap number could be used in active RAT(Each FMO cycle = 10*M_REP*NTTI as a unit)
* skip_num - Skip number in active RAT (Each FMO cycle = 10*M_REP*NTTI as a unit)
* RETURNS
* none
* GLOBALS AFFECTED
* none
*****************************************************************************/
void mll1_ul1_expand_active_gap_pattern_ind(umts_fdd_time_struct* start_time,kal_uint8 use_num,kal_uint8 skip_num);
/*****************************************************************************
* FUNCTION
* mll1_ul1_expand_gap_pattern_ind
* DESCRIPTION
* ll1 sends auto gap available ind to UMTS FDD now
*
* PARAMETERS
* standby_gap - gap pattern for umts fdd
* RETURNS
* none
* GLOBALS AFFECTED
* none
*****************************************************************************/
void mll1_ul1_expand_gap_pattern_ind(ll1_ul1_expand_gap_pattern_struct* standby_gap);
/*****************************************************************************
* FUNCTION
* mll1_ul1_gap_resume_ind
* DESCRIPTION
* LL1 sends this message to UL1 to resume UL1's gap usage.
* After receiving this message, UL1 could use gap pattern normally.
*
* PARAMETERS
* none
* RETURNS
* none
* GLOBALS AFFECTED
* none
*****************************************************************************/
void mll1_ul1_gap_resume_ind(void);
/*****************************************************************************
* FUNCTION
* mll1_ul1_gap_service_req
* DESCRIPTION
* ll1 sends gap service req to UMTS_FDD now
*
* PARAMETERS
* enable - KAL_TRUE : turn on gap service
* - KAL_FALSE : turn off gap service
* RETURNS
* none
* GLOBALS AFFECTED
* none
*****************************************************************************/
void mll1_ul1_gap_service_req(kal_bool enable);
/*****************************************************************************
* FUNCTION
* mll1_ul1_gap_stop_cnf
* DESCRIPTION
* LL1 uses this primitive to confirm UL1 that LL1 has already stopped
* all gap usages in standby RAT and UL1 could use all RF time.
*
* PARAMETERS
* NONE
* RETURNS
* none
* GLOBALS AFFECTED
* none
*****************************************************************************/
void mll1_ul1_gap_stop_cnf(void);
/*****************************************************************************
* FUNCTION
* mll1_ul1_gap_stop_req
* DESCRIPTION
* LL1 uses this primitive to stop gap usage in UMTS FDD when UMTS FDD is standby RAT.
*
* PARAMETERS
* NONE
* RETURNS
* none
* GLOBALS AFFECTED
* none
*****************************************************************************/
void mll1_ul1_gap_stop_req(void);
/*****************************************************************************
* FUNCTION
* mll1_ul1_gap_suspend_cnf
* DESCRIPTION
* LL1 sends this confirm message to UL1 after gap usage in standby RAT is suspended.
* UL1 could use RF only after getting this message.
*
* PARAMETERS
* NONE
* RETURNS
* none
* GLOBALS AFFECTED
* none
*****************************************************************************/
void mll1_ul1_gap_suspend_cnf(void);
/*****************************************************************************
* FUNCTION
* mll1_ul1_gap_suspend_req
* DESCRIPTION
* LL1 uses this primitive to suspend gap usage in UMTS FDD when UMTS FDD is standby RAT.
*
* PARAMETERS
* NONE
* RETURNS
* none
* GLOBALS AFFECTED
* none
*****************************************************************************/
void mll1_ul1_gap_suspend_req(void);
/*****************************************************************************
* FUNCTION
* mll1_ul1_get_auto_time
* DESCRIPTION
* return auto time from UL1
*
* PARAMETERS
* None
* RETURNS
* umts_fdd_time_struct auto_time
*****************************************************************************/
umts_fdd_time_struct mll1_ul1_get_auto_time(void);
/*****************************************************************************
* FUNCTION
* mll1_ul1_get_current_time
* DESCRIPTION
* ll1 gets current time + ahead margin to expand gap
*
* PARAMETERS
* umts_fdd_time - start time of expansion period
* kal_bool is_ahead_time
* TRUE : advance eutran_time with the predefined ahead_time
* FALSE: don't advance eutran_time with the predefined ahead_time
* RETURNS
* none
* GLOBALS AFFECTED
* none
*****************************************************************************/
void mll1_ul1_get_current_time(umts_fdd_time_struct* fdd_time, kal_bool is_ahead_time);
/*****************************************************************************
* FUNCTION
* mll1_ul1_get_efach_drx_tick_count
* DESCRIPTION
* ll1 gets rank tick base when umts fdd in efach drx mode
*
* PARAMETERS
* none
* RETURNS
* kal_uint32 count
* GLOBALS AFFECTED
* none
*****************************************************************************/
kal_uint32 mll1_ul1_get_efach_drx_tick_count(void);
#ifdef __LTE_RAT__
/*****************************************************************************
* FUNCTION
* mll1_ul1_get_el1_rf_margin
* DESCRIPTION
* UL1 gets EL1 RF margin in current state
*
* PARAMETERS
* head - header_margin
* tail - tail_margin
* RETURNS
* none
*****************************************************************************/
void mll1_ul1_get_el1_rf_margin(kal_int32* head,kal_int32* tail);
#endif /*__LTE_RAT__*/
#ifdef __GSM_RAT__
/*****************************************************************************
* FUNCTION
* mll1_ul1_get_gl1_rf_margin
* DESCRIPTION
* UL1 gets GL1 RF margin in current state
*
* PARAMETERS
* head - header_margin
* tail - tail_margin
* RETURNS
* none
*****************************************************************************/
void mll1_ul1_get_gl1_rf_margin(kal_int32* head,kal_int32* tail);
#endif /*__GSM_RAT__*/
/*****************************************************************************
* FUNCTION
* mll1_ul1_get_mode_status
* DESCRIPTION
* return mode status from UL1
*
* PARAMETERS
* None
* RETURNS
* ll1_active_rat_mode_status_enum mode_status
*****************************************************************************/
ll1_active_rat_mode_status_enum mll1_ul1_get_mode_status(void);
/*****************************************************************************
* FUNCTION
* mll1_ul1_get_t_abort
* DESCRIPTION
* Tidentify,gsm / Treconfirm,gsm uint: ms
*
* PARAMETERS
* tti - in ms
* t_meas - in ms
*
* RETURNS
* kal_uint32 t_abort;
*****************************************************************************/
kal_uint32 mll1_ul1_get_t_abort(kal_uint32 tti, kal_uint32 t_meas, kal_bool is_identify);
/*****************************************************************************
* FUNCTION
* mll1_ul1_get_t_abort_for_efach_drx
* DESCRIPTION
* Tidentify,gsm / Treconfirm,gsm uint: ms
*
* PARAMETERS
* kal_bool is_identify
*
* RETURNS
* kal_uint32 t_abort;
*****************************************************************************/
kal_uint32 mll1_ul1_get_t_abort_for_efach_drx(kal_bool is_identify);
/*****************************************************************************
* FUNCTION
* mll1_ul1_get_tick_count
* DESCRIPTION
* UL1 tick number
*
* PARAMETERS
* is_prio_search - KAL_FALSE : ll1_main wants to get meas. tick
* KAL_TRUE : ll1_main wants to get prio. tick
* t_hps - 60 (uint : second)
*
* RETURNS
* kal_uint32 count;
*****************************************************************************/
kal_uint32 mll1_ul1_get_tick_count(kal_bool is_prio_search, kal_uint16 t_hps);
/*****************************************************************************
* FUNCTION
* mll1_ul1_get_timing_status
* DESCRIPTION
*
* PARAMETERS
* RETURNS
* kal_bool - valid_timing KAL_TRUE : with valid timing
* KAL_FALSE : with invalid timing
* GLOBALS AFFECTED
* none
*****************************************************************************/
kal_bool mll1_ul1_get_timing_status(void);
/*****************************************************************************
* FUNCTION
* mll1_ul1_get_ul1_rf_margin
* DESCRIPTION
* UL1 gets RF margin in current state
*
* PARAMETERS
* head - header_margin
* tail - tail_margin
* RETURNS
* none
*****************************************************************************/
void mll1_ul1_get_ul1_rf_margin(kal_int32* head,kal_int32* tail);
/*****************************************************************************
* FUNCTION
* mll1_ul1_is_before_dest_time
* DESCRIPTION
* check if gap start time is before dest time,
*
* PARAMETERS
* src - gap start time sfn
* dest - expand start time sfn
* RETURNS
* kal_bool - KAL_TRUE : means that src is before dest time
* : the src_time is before the dest_time. Return false if they are equal.
* KAL_FALSE : means that dest is before src time
* GLOBALS AFFECTED
* none
*****************************************************************************/
kal_bool mll1_ul1_is_before_dest_time(kal_int32 src,kal_int32 dest);
/*****************************************************************************
* FUNCTION
* mll1_ul1_offset_to_fmo_act_time
* DESCRIPTION
* calculate the timing offset between FMO activation time and expand start time.
*
* PARAMETERS
* src - gap start time sfn
* dest - expand start time sfn
* RETURNS
* kal_int32 - (-1) : FMO activation time fall in the duration of 480ms expand period.
* other positive value: the offset between MO activation time and expand start time.
*
* GLOBALS AFFECTED
* none
*****************************************************************************/
kal_int32 mll1_ul1_offset_to_fmo_act_time(kal_int32 src, umts_fdd_time_struct* dest);
/*****************************************************************************
* FUNCTION
* mll1_ul1_is_lower_pwr_on
* DESCRIPTION
* Check if ul1 is low pwr on
*
* PARAMETERS
*
* RETURNS
* kal_bool - KAL_FALSE : measurement is not finished and need gap in this period
* KAL_TRUE : measurement is finished and doesnt need gap in this period
*****************************************************************************/
kal_bool mll1_ul1_is_lower_pwr_on(void);
/*****************************************************************************
* FUNCTION
* mll1_ul1_mode_status_update_ind
* DESCRIPTION
* This message is sent to UL1 for informing that mode status of active RAT when UL1 is standby RAT.
* This message should be updated for UL1 in standby when any mode status changed in active RAT.
*
* PARAMETERS
* status - mode status in active RAT
* RETURNS
* none
* GLOBALS AFFECTED
* none
*****************************************************************************/
void mll1_ul1_mode_status_update_ind(ll1_active_rat_mode_status_enum status);
/*****************************************************************************
* FUNCTION
* mll1_ul1_set_timing_status
* DESCRIPTION
*
* PARAMETERS
* flag - set valid_timing = flag
* RETURNS
* none
* GLOBALS AFFECTED
* none
*****************************************************************************/
void mll1_ul1_set_timing_status(kal_bool flag);
/*****************************************************************************
* FUNCTION
* mll1_ul1_sync_time_req
* DESCRIPTION
* When timing synchronization procedure is triggered, mll1 will decide which rat should do
* timing synchronization based on the result of g_ll1_flight_rat|| g_ll1_standby_rat || g_ll1_active_rat.
*
* PARAMETERS
* RETURNS
* none
* GLOBALS AFFECTED
* none
*****************************************************************************/
void mll1_ul1_sync_time_req(void);
/*****************************************************************************
* FUNCTION
* mll1_ul1_time_add
* DESCRIPTION
* This function is used to add echips to time
*
* PARAMETERS
* time - basic time
* echips - echips
* RETURNS
* none
*****************************************************************************/
void mll1_ul1_time_add( umts_fdd_time_struct* time, kal_int32 echips);
/*****************************************************************************
* FUNCTION
* mll1_ul1_update_current_time
* DESCRIPTION
* ll1 updates current time after timing sync. done
*
* PARAMETERS
* umts_fdd_time - current time
* RETURNS
* none
* GLOBALS AFFECTED
* none
*****************************************************************************/
void mll1_ul1_update_current_time(umts_fdd_time_struct* fdd_time);
/*****************************************************************************
* CALL FUNCTION PROTOTYPE
* mll1_umts_fdd_handler()
*
* DESCRIPTION
* Function to handle the primitive from UL1.
*
* PARAMETERS
* current_ilm - primitive from UL1.
*
* RETURN
* None
*****************************************************************************/
void mll1_umts_fdd_handler(void *ptr_ilm);
/*****************************************************************************
* FUNCTION
* mll1_ul1_info_init
* DESCRIPTION
* Initialize ul1 internal global variable
*
* PARAMETERS
* none
* RETURNS
* none
*****************************************************************************/
void mll1_fdd_info_init(void);
/*****************************************************************************
* FUNCTION
* mll1_ul1_gap_pattern_timing_checking
* DESCRIPTION
* check if the pending gap is out of date or not
*
* PARAMETERS
* umts_fdd_time - ul1 timing correspond to some standby rat's timing indicated in measure request
* RETURNS
* TRUE - the pending gap has not been out of date
* FALSE - the pending gap has been out of date
* GLOBALS AFFECTED
* none
*****************************************************************************/
kal_bool mll1_ul1_gap_pattern_timing_checking(umts_fdd_time_struct umts_fdd_time);
#endif /*_MLL1_UMTS_FDD_H*/