/* SPDX-License-Identifier: GPL-2.0 */ #ifndef __SDIO_INT_H__ #define __SDIO_INT_H__ #include #include #define SLP_MGR_HEADER "[slp_mgr]" #define SLP_MGR_ERR(fmt, args...) \ pr_err(SLP_MGR_HEADER fmt "\n", ## args) #define SLP_MGR_INFO(fmt, args...) \ pr_info(SLP_MGR_HEADER fmt "\n", ## args) #define SLP_MGR_DBG(fmt, args...) \ pr_debug(SLP_MGR_HEADER fmt "\n", ## args) extern struct sdio_int_t sdio_int; typedef void (*PUB_INT_ISR)(void); enum AP_INT_CP_BIT { ALLOW_CP_SLP, WIFI_BIN_DOWNLOAD, BT_BIN_DOWNLOAD, SAVE_CP_MEM, TEST_DEL_THREAD, AP_SUSPEND, AP_RESUME, INT_CP_MAX = 8, }; enum PUB_INT_BIT { MEM_SAVE_BIN, WAKEUP_ACK, REQ_SLP, WIFI_OPEN, BT_OPEN, WIFI_CLOSE, BT_CLOSE, GNSS_CALI_DONE, PUB_INT_MAX = 8, }; union AP_INT_CP0_REG { unsigned char reg; struct { unsigned char allow_cp_slp:1; unsigned char wifi_bin_download:1; unsigned char bt_bin_download:1; unsigned char save_cp_mem:1; unsigned char test_delet_thread:1; unsigned char rsvd:3; } bit; }; union PUB_INT_EN0_REG { unsigned char reg; struct { unsigned char mem_save_bin:1; unsigned char wakeup_ack:1; unsigned char req_slp:1; unsigned char wifi_open:1; unsigned char bt_open:1; unsigned char wifi_close:1; unsigned char bt_close:1; unsigned char gnss_cali_done:1; } bit; }; union PUB_INT_CLR0_REG { unsigned char reg; struct { unsigned char mem_save_bin:1; unsigned char wakeup_ack:1; unsigned char req_slp:1; unsigned char wifi_open:1; unsigned char bt_open:1; unsigned char wifi_close:1; unsigned char bt_close:1; unsigned char gnss_cali_done:1; } bit; }; union PUB_INT_STS0_REG { unsigned char reg; struct { unsigned char mem_save_bin:1; unsigned char wakeup_ack:1; unsigned char req_slp:1; unsigned char wifi_open:1; unsigned char bt_open:1; unsigned char wifi_close:1; unsigned char bt_close:1; unsigned char gnss_cali_done:1; } bit; }; struct sdio_int_t { unsigned int cp_slp_ctl; unsigned int ap_int_cp0; unsigned int pub_int_en0; unsigned int pub_int_clr0; unsigned int pub_int_sts0; PUB_INT_ISR pub_int_cb[PUB_INT_MAX]; /*wakeup_source pointer*/ struct wakeup_source *pub_int_ws; struct completion pub_int_completion; unsigned int pub_int_num; /* 1: power on, 0: power off */ atomic_t chip_power_on; }; /* add start, for power save handle */ bool sdio_get_power_notify(void); void sdio_record_power_notify(bool notify_cb_sts); void sdio_wait_pub_int_done(void); /* add end */ int sdio_ap_int_cp0(enum AP_INT_CP_BIT bit); /* pub int api */ int sdio_pub_int_btwf_en0(void); int sdio_pub_int_gnss_en0(void); int sdio_pub_int_RegCb(enum PUB_INT_BIT bit, PUB_INT_ISR isr_handler); void sdio_pub_int_poweron(bool state); int sdio_pub_int_init(int irq); int sdio_pub_int_deinit(void); #endif