blob: b09f1e70bf9a0d1dc7575235a1888fda89838f14 [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) 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
98void drv_idc_init(kal_bool is_sm);
99void drv_idc_init_uart(void);
100void drv_idc_init_m2c_bridge(void);
101void drv_idc_init_isr(void);
102void drv_idc_uart_activate(void);
103void drv_idc_get_support(IDC_SUPPORT_T *support);
104void drv_idc_conn_txrx_count(kal_bool is_start);
105void drv_idc_open(kal_uint32 mod_id);
106void drv_idc_close(void);
107void drv_idc_set_dcb_config(IDC_CTRL_DCB_CONFIG_T idc_config);
108void drv_idc_get_dcb_config(IDC_CTRL_DCB_CONFIG_T *DCB);
109void drv_idc_set_baudrate(kal_uint32 baudrate);
110void drv_idc_set_fifo_trigger(kal_uint8 rx_threshold);
111void 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);
112void 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);
113void drv_idc_send_event(IDC_EVENT_T event, kal_bool sleep_mode);
114kal_bool drv_idc_send_event_95(IDC_EVENT_T event, kal_bool sleep_mode);
115kal_bool drv_idc_send_event_97(IDC_EVENT_T event, kal_bool sleep_mode);
116void drv_idc_schedule_event(IDC_EVENT_T event);
117kal_bool drv_idc_schedule_event_95(IDC_EVENT_T event, IDC_CTRL_DROP_CMD_T *drop_cmd);
118kal_bool drv_idc_schedule_event_97(IDC_EVENT_T event, IDC_CTRL_DROP_CMD_T *drop_cmd);
119kal_bool drv_idc_schedule_gps_blank_event(kal_uint8 rat_status, kal_bool gps_mode, kal_uint32 frc_time);
120void drv_idc_schedule_update(kal_uint32 time);
121void drv_idc_schedule_update_95(kal_uint32 time);
122void drv_idc_schedule_update_97(kal_uint32 time);
123void drv_idc_stop_event(kal_uint32 bitmap);
124void drv_idc_stop_event_97(kal_uint32 bitmap);
125void drv_idc_purge(UART_buffer dir);
126void drv_idc_get_schedule_status(kal_uint32 schedule_status);
127void drv_idc_get_schedule_status_2(kal_uint32 schedule_status);
128kal_bool drv_idc_check_event_send_out(void);
129DCL_STATUS drv_idc_set_pin_config(IDC_PIN_MODE_T pin_mode);
130DCL_STATUS drv_idc_get_pin_config(IDC_PIN_MODE_T *pin_mode);
131void idc_uart_lisr(kal_uint32 vector);
132void idc_uart_hisr(void);
133void idc_pm_lisr(kal_uint32 vector);
134void idc_pm_hisr(void);
135void idc_send_rx_data_by_ilm(void);
136void idc_send_rx_data_by_ilm_95(void);
137void drv_idc_return_drop_cmd(IDC_EVENT_T event, IDC_CTRL_DROP_CMD_T *drop_cmd);
138int drv_idc_register_pm_callback(kal_uint8 pm_idx, IDC_DRV_TO_EL1_CALLBACK func_ptr , kal_bool private_data) ;
139int drv_idc_register_pm_callback_95(kal_uint8 pm_idx, IDC_DRV_TO_EL1_CALLBACK func_ptr , void *private_data);
140int drv_idc_unregister_pm_callback(kal_uint8 pm_idx) ;
141void drv_idc_set_new_pm_config(kal_uint8 pattern0, kal_uint8 pattern1);
142void drv_idc_get_new_pm_config(kal_uint8 *pattern0, kal_uint8 *pattern1);
143void drv_idc_force_on_rf(kal_uint8 rf_path);
144void drv_idc_set_remapping_config(kal_uint8 remapping_table, kal_uint8 remapping_table_en);
145
146//__MD97__
147void 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
151void drv_idc_set_sram_wrap_idx(kal_uint32 start_idx);
152void drv_idc_schedule_update_n_return_rftx(kal_uint32 time, kal_uint8 *rf_path);
153kal_bool drv_idc_schedule_event_lte_nr(IDC_EVENT_T event, kal_uint8 event_type,IDC_CTRL_DROP_CMD_T *drop_cmd);
154void drv_idc_return_drop_cmd_lte_nr(IDC_EVENT_T event, IDC_CTRL_DROP_CMD_T *drop_cmd, kal_uint8 event_type);
155void idc_auto_tx_lisr(kal_uint32 vector);
156void drv_idc_auto_tx_config(kal_uint8 tx_susp_quota, kal_uint8 reset_quota);
157void drv_idc_auto_tx_en(kal_uint8 auto_tx_en);
158void drv_idc_auto_tx_dis(void);
159void drv_idc_set_enable_rat(kal_uint8 rat_status);
160void drv_idc_set_disable_rat(kal_uint8 rat_status);
161void drv_idc_wakeup_notify(kal_uint8 rat_status);
162void drv_idc_sleep_notify(kal_uint8 rat_status);
163
164//GPS_B13_B14
165void drv_idc_gps_b13_b14_set(kal_uint8 rat_status, kal_uint16 raw_data);
166//GPS_L1_L5
167kal_bool drv_idc_schedule_gps_l1_l5_blank_event(kal_uint8 rat_status, kal_uint8 raw_data, kal_uint32 frc_time);
168
169struct 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
178typedef 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
213typedef 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
227typedef 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
236typedef enum
237{
238 IDC_PLAN,
239 IDC_RUN
240} IDC_SCHEDULE_STATE_T;
241#endif