rjw | 6c1fd8f | 2022-11-30 14:33:01 +0800 | [diff] [blame] | 1 | /***************************************************************************** |
| 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) 2001 |
| 8 | * |
| 9 | *****************************************************************************/ |
| 10 | |
| 11 | /***************************************************************************** |
| 12 | * |
| 13 | * Filename: |
| 14 | * --------- |
| 15 | * idc_internal.h |
| 16 | * |
| 17 | * Project: |
| 18 | * -------- |
| 19 | * MOLY |
| 20 | * |
| 21 | * Description: |
| 22 | * ------------ |
| 23 | * Header file of DCL (Driver Common Layer) for IDC. |
| 24 | * |
| 25 | * Author: |
| 26 | * ------- |
| 27 | * ------- |
| 28 | * |
| 29 | ****************************************************************************/ |
| 30 | #ifndef __IDC_INTERNAL_H__ |
| 31 | #define __IDC_INTERNAL_H__ |
| 32 | |
| 33 | #include "dcl.h" |
| 34 | |
| 35 | #include "kal_general_types.h" |
| 36 | #include "drv_comm.h" |
| 37 | |
| 38 | #include "dcl_idc.h" |
| 39 | |
| 40 | #define IDC_PM_NUM 5 |
| 41 | #define IDC_NEW_PM_IDX 4 |
| 42 | #define IDC_UART_TXFIFO_SIZE 128 |
| 43 | #define IDC_MAX_NUM_BYTE 9 |
| 44 | |
| 45 | #if defined(__MD97__) || (defined(__MD97P__)) |
| 46 | #define IDC_MAX_EVENT_NUM 32 |
| 47 | |
| 48 | //Petrus |
| 49 | #define IDC_LTE_STA_EVENT_IDX 1 |
| 50 | #define IDC_LTE_MAX_EVENT_IDX 15 |
| 51 | #define IDC_NR_STA_EVENT_IDX 17 |
| 52 | #define IDC_NR_MAX_EVENT_IDX 31 |
| 53 | #define IDC_COMMON_STA_EVENT_IDX 16 |
| 54 | |
| 55 | #if !defined(MT6297) |
| 56 | #define IDC_SRAM_WRAP_IDX 0xC |
| 57 | //#define IDC_PM_NUM 11 // 4+1+6 |
| 58 | #define IDC_NEW_PM_ERR_NUM 6 |
| 59 | #define IDC_NEW_PM_ERR_STA_IDX 5 |
| 60 | #define IDC_NEW_PM_ERR_STOP_IDX 10 |
| 61 | #define IDC_NEW_PM_ERR1_IDX 5 |
| 62 | #define IDC_NEW_PM_ERR2_IDX 8 |
| 63 | #define IDC_NEW_PM_ERR3_IDX 9 |
| 64 | #define IDC_NEW_PM_ERR4_IDX 10 |
| 65 | #define IDC_NEW_PM_ERR5_IDX 6 |
| 66 | #define IDC_NEW_PM_ERR6_IDX 7 |
| 67 | #define IDC_MAX_SRAM_SIZE 156 |
| 68 | #define IDC_MAX_SRAM_IDX 39 |
| 69 | #define IDC_UART_RXFIFO_SIZE 64 |
| 70 | #define IDC_MAX_CC_NUM 6 |
| 71 | #define IDC_MAX_REMAPPING_NUM 64 |
| 72 | #define IDC_MAX_CC_COMBINATION 4096 |
| 73 | #define IDC_NEW_PM_BNUM 7 |
| 74 | #else |
| 75 | #define IDC_SRAM_WRAP_IDX 0x0 |
| 76 | //#define IDC_PM_NUM 8 // 4+1+3 |
| 77 | #define IDC_NEW_PM_ERR_NUM 3 |
| 78 | #define IDC_NEW_PM_ERR_STA_IDX 5 |
| 79 | #define IDC_NEW_PM_ERR_STOP_IDX 7 |
| 80 | #define IDC_NEW_PM_ERR1_IDX 5 |
| 81 | #define IDC_NEW_PM_ERR2_IDX 6 |
| 82 | #define IDC_NEW_PM_ERR3_IDX 7 |
| 83 | #define IDC_MAX_SRAM_SIZE 128 |
| 84 | #define IDC_MAX_SRAM_IDX 32 |
| 85 | #define IDC_UART_RXFIFO_SIZE 32 |
| 86 | #define IDC_MAX_CC_NUM 5 |
| 87 | #define IDC_MAX_REMAPPING_NUM 32 |
| 88 | #define IDC_MAX_CC_COMBINATION 1024 |
| 89 | #define IDC_NEW_PM_BNUM 4 |
| 90 | #endif |
| 91 | |
| 92 | #else |
| 93 | #define IDC_MAX_EVENT_NUM 16 |
| 94 | #define IDC_MAX_SRAM_SIZE 78 |
| 95 | #endif |
| 96 | |
| 97 | |
| 98 | void drv_idc_init(kal_bool is_sm); |
| 99 | void drv_idc_init_uart(void); |
| 100 | void drv_idc_init_m2c_bridge(void); |
| 101 | void drv_idc_init_isr(void); |
| 102 | void drv_idc_uart_activate(void); |
| 103 | void drv_idc_get_support(IDC_SUPPORT_T *support); |
| 104 | void drv_idc_conn_txrx_count(kal_bool is_start); |
| 105 | void drv_idc_open(kal_uint32 mod_id); |
| 106 | void drv_idc_close(void); |
| 107 | void drv_idc_set_dcb_config(IDC_CTRL_DCB_CONFIG_T idc_config); |
| 108 | void drv_idc_get_dcb_config(IDC_CTRL_DCB_CONFIG_T *DCB); |
| 109 | void drv_idc_set_baudrate(kal_uint32 baudrate); |
| 110 | void drv_idc_set_fifo_trigger(kal_uint8 rx_threshold); |
| 111 | void drv_idc_set_pm_config(kal_uint8 pm_idx, kal_uint8 priority, kal_uint8 priority_bit_en, kal_uint8 pattern, kal_uint8 pattern_bit_en); |
| 112 | void drv_idc_get_pm_config(kal_uint8 pm_idx, kal_uint8 *priority, kal_uint8 *priority_bit_en, kal_uint8 *pattern, kal_uint8 *pattern_bit_en); |
| 113 | void drv_idc_send_event(IDC_EVENT_T event, kal_bool sleep_mode); |
| 114 | kal_bool drv_idc_send_event_95(IDC_EVENT_T event, kal_bool sleep_mode); |
| 115 | kal_bool drv_idc_send_event_97(IDC_EVENT_T event, kal_bool sleep_mode); |
| 116 | void drv_idc_schedule_event(IDC_EVENT_T event); |
| 117 | kal_bool drv_idc_schedule_event_95(IDC_EVENT_T event, IDC_CTRL_DROP_CMD_T *drop_cmd); |
| 118 | kal_bool drv_idc_schedule_event_97(IDC_EVENT_T event, IDC_CTRL_DROP_CMD_T *drop_cmd); |
| 119 | kal_bool drv_idc_schedule_gps_blank_event(kal_uint8 rat_status, kal_bool gps_mode, kal_uint32 frc_time); |
| 120 | void drv_idc_schedule_update(kal_uint32 time); |
| 121 | void drv_idc_schedule_update_95(kal_uint32 time); |
| 122 | void drv_idc_schedule_update_97(kal_uint32 time); |
| 123 | void drv_idc_stop_event(kal_uint32 bitmap); |
| 124 | void drv_idc_stop_event_97(kal_uint32 bitmap); |
| 125 | void drv_idc_purge(UART_buffer dir); |
| 126 | void drv_idc_get_schedule_status(kal_uint32 schedule_status); |
| 127 | void drv_idc_get_schedule_status_2(kal_uint32 schedule_status); |
| 128 | kal_bool drv_idc_check_event_send_out(void); |
| 129 | DCL_STATUS drv_idc_set_pin_config(IDC_PIN_MODE_T pin_mode); |
| 130 | DCL_STATUS drv_idc_get_pin_config(IDC_PIN_MODE_T *pin_mode); |
| 131 | void idc_uart_lisr(kal_uint32 vector); |
| 132 | void idc_uart_hisr(void); |
| 133 | void idc_pm_lisr(kal_uint32 vector); |
| 134 | void idc_pm_hisr(void); |
| 135 | void idc_send_rx_data_by_ilm(void); |
| 136 | void idc_send_rx_data_by_ilm_95(void); |
| 137 | void drv_idc_return_drop_cmd(IDC_EVENT_T event, IDC_CTRL_DROP_CMD_T *drop_cmd); |
| 138 | int drv_idc_register_pm_callback(kal_uint8 pm_idx, IDC_DRV_TO_EL1_CALLBACK func_ptr , kal_bool private_data) ; |
| 139 | int drv_idc_register_pm_callback_95(kal_uint8 pm_idx, IDC_DRV_TO_EL1_CALLBACK func_ptr , void *private_data); |
| 140 | int drv_idc_unregister_pm_callback(kal_uint8 pm_idx) ; |
| 141 | void drv_idc_set_new_pm_config(kal_uint8 pattern0, kal_uint8 pattern1); |
| 142 | void drv_idc_get_new_pm_config(kal_uint8 *pattern0, kal_uint8 *pattern1); |
| 143 | void drv_idc_force_on_rf(kal_uint8 rf_path); |
| 144 | void drv_idc_set_remapping_config(kal_uint8 remapping_table, kal_uint8 remapping_table_en); |
| 145 | |
| 146 | //__MD97__ |
| 147 | void idc_set_immediate_event(kal_uint32 event_idx, kal_uint8* buf, kal_uint32 byte_num, kal_uint32 start_sram_idx, kal_uint32 end_sram_idx); |
| 148 | |
| 149 | |
| 150 | //Petrus |
| 151 | void drv_idc_set_sram_wrap_idx(kal_uint32 start_idx); |
| 152 | void drv_idc_schedule_update_n_return_rftx(kal_uint32 time, kal_uint8 *rf_path); |
| 153 | kal_bool drv_idc_schedule_event_lte_nr(IDC_EVENT_T event, kal_uint8 event_type,IDC_CTRL_DROP_CMD_T *drop_cmd); |
| 154 | void drv_idc_return_drop_cmd_lte_nr(IDC_EVENT_T event, IDC_CTRL_DROP_CMD_T *drop_cmd, kal_uint8 event_type); |
| 155 | void idc_auto_tx_lisr(kal_uint32 vector); |
| 156 | void drv_idc_auto_tx_config(kal_uint8 tx_susp_quota, kal_uint8 reset_quota); |
| 157 | void drv_idc_auto_tx_en(kal_uint8 auto_tx_en); |
| 158 | void drv_idc_auto_tx_dis(void); |
| 159 | void drv_idc_set_enable_rat(kal_uint8 rat_status); |
| 160 | void drv_idc_set_disable_rat(kal_uint8 rat_status); |
| 161 | void drv_idc_wakeup_notify(kal_uint8 rat_status); |
| 162 | void drv_idc_sleep_notify(kal_uint8 rat_status); |
| 163 | |
| 164 | //GPS_B13_B14 |
| 165 | void drv_idc_gps_b13_b14_set(kal_uint8 rat_status, kal_uint16 raw_data); |
| 166 | //GPS_L1_L5 |
| 167 | kal_bool drv_idc_schedule_gps_l1_l5_blank_event(kal_uint8 rat_status, kal_uint8 raw_data, kal_uint32 frc_time); |
| 168 | |
| 169 | struct idc_drv_to_el1_callback { |
| 170 | IDC_DRV_TO_EL1_CALLBACK callback_func ; |
| 171 | #if defined(__MD93__) |
| 172 | kal_bool private_data ; |
| 173 | #elif defined(__MD95__) || defined(__MD97__) || defined(__MD97P__) |
| 174 | void *private_data ; |
| 175 | #endif |
| 176 | }; |
| 177 | |
| 178 | typedef struct |
| 179 | { |
| 180 | kal_uint32 owner_id; |
| 181 | kal_uint8 main_state; |
| 182 | kal_bool intr_en; |
| 183 | kal_uint8 schedule_state; |
| 184 | kal_uint8 event_cnt; |
| 185 | kal_uint8 event_pending_cnt; // Pend an event when SRAM is full |
| 186 | kal_uint32 event_offset_table[IDC_MAX_EVENT_NUM]; |
| 187 | #if defined(__MD93__) |
| 188 | kal_uint16 event_data_table[IDC_MAX_EVENT_NUM]; |
| 189 | #elif defined(__MD95__) || defined(__MD97__) || (defined(__MD97P__)) |
| 190 | kal_uint8 event_data_table[IDC_MAX_EVENT_NUM][9]; |
| 191 | kal_uint8 sram_table_usage[IDC_MAX_SRAM_SIZE]; |
| 192 | kal_uint32 event_byte_num[IDC_MAX_EVENT_NUM]; |
| 193 | kal_uint32 event_sram_sta_idx[IDC_MAX_EVENT_NUM]; |
| 194 | kal_uint8 sram_w_index; |
| 195 | #endif |
| 196 | kal_uint8 event_w_index; |
| 197 | kal_uint32 event_longest_time; |
| 198 | kal_uint8 event_longest_index; |
| 199 | kal_uint32 event_usage_bit_map; |
| 200 | kal_uint32 event_pending_offset_table[IDC_MAX_EVENT_NUM]; // Store the index that indicates which event is pending |
| 201 | kal_uint16 event_pending_data_table[IDC_MAX_EVENT_NUM]; |
| 202 | kal_uint32 rx_buf; |
| 203 | kal_uint32 phy_time;//use for gen93/gen95 |
| 204 | kal_uint32 frc_time;//use for gen97 |
| 205 | kal_uint8 event_w_index_lte; |
| 206 | kal_uint8 event_w_index_nr; |
| 207 | kal_uint8 event_w_index_com; |
| 208 | IDC_CTRL_DCB_CONFIG_T DCB; |
| 209 | IDC_PIN_MODE_T pin_mode; |
| 210 | struct idc_drv_to_el1_callback pm_cb_handle[IDC_PM_NUM]; |
| 211 | } idc_struct_t; |
| 212 | |
| 213 | typedef struct |
| 214 | { |
| 215 | #if defined(__MD93__) |
| 216 | kal_uint8 type; |
| 217 | kal_uint16 msg; |
| 218 | #elif defined(__MD95__) || defined(__MD97__) || defined(__MD97P__) |
| 219 | kal_uint32 type:4; |
| 220 | kal_uint32 elen:3; |
| 221 | kal_uint32 sub_type:6; |
| 222 | kal_uint32 msg2:10; |
| 223 | kal_uint32 msg1; |
| 224 | #endif |
| 225 | } IDC_ILM_MSG_T; |
| 226 | |
| 227 | typedef enum |
| 228 | { |
| 229 | IDC_OPEN, |
| 230 | IDC_IN_USE, |
| 231 | IDC_IN_SLEEP, |
| 232 | IDC_SUSPEND, |
| 233 | IDC_CLOSED |
| 234 | } IDC_MAIN_STATE_T; |
| 235 | |
| 236 | typedef enum |
| 237 | { |
| 238 | IDC_PLAN, |
| 239 | IDC_RUN |
| 240 | } IDC_SCHEDULE_STATE_T; |
| 241 | #endif |