/* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and * only version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef _CNSS_MAIN_H #define _CNSS_MAIN_H #include #include #include #include #include #include #include #include "qmi.h" #define MAX_NO_OF_MAC_ADDR 4 enum cnss_dev_bus_type { CNSS_BUS_NONE = -1, CNSS_BUS_PCI, CNSS_BUS_AHB, }; struct cnss_vreg_info { struct regulator *reg; const char *name; u32 min_uv; u32 max_uv; u32 load_ua; u32 delay_us; }; struct cnss_pinctrl_info { struct pinctrl *pinctrl; struct pinctrl_state *bootstrap_active; struct pinctrl_state *wlan_en_active; struct pinctrl_state *wlan_en_sleep; }; struct cnss_subsys_info { struct subsys_device *subsys_device; struct subsys_desc subsys_desc; void *subsys_handle; }; struct cnss_ramdump_info { struct ramdump_device *ramdump_dev; unsigned long ramdump_size; void *ramdump_va; phys_addr_t ramdump_pa; struct msm_dump_data dump_data; }; struct cnss_esoc_info { struct esoc_desc *esoc_desc; bool notify_modem_status; void *modem_notify_handler; int modem_current_status; }; struct cnss_bus_bw_info { struct msm_bus_scale_pdata *bus_scale_table; uint32_t bus_client; int current_bw_vote; }; struct cnss_wlan_mac_addr { u8 mac_addr[MAX_NO_OF_MAC_ADDR][ETH_ALEN]; uint32_t no_of_mac_addr_set; }; struct cnss_wlan_mac_info { struct cnss_wlan_mac_addr wlan_mac_addr; bool is_wlan_mac_set; }; struct cnss_fw_mem { size_t size; void *va; phys_addr_t pa; bool valid; }; enum cnss_driver_event_type { CNSS_DRIVER_EVENT_SERVER_ARRIVE, CNSS_DRIVER_EVENT_SERVER_EXIT, CNSS_DRIVER_EVENT_REQUEST_MEM, CNSS_DRIVER_EVENT_FW_MEM_READY, CNSS_DRIVER_EVENT_FW_READY, CNSS_DRIVER_EVENT_COLD_BOOT_CAL_DONE, CNSS_DRIVER_EVENT_MAX, }; enum cnss_driver_state { CNSS_QMI_WLFW_CONNECTED, CNSS_FW_MEM_READY, CNSS_FW_READY, CNSS_COLD_BOOT_CAL_DONE, CNSS_DRIVER_PROBED, }; struct cnss_recovery_work_t { struct work_struct work; struct device *dev; enum cnss_recovery_reason reason; }; struct cnss_plat_data { void *wlan_priv; struct platform_device *plat_dev; struct platform_device_id *plat_dev_id; void *bus_priv; struct cnss_vreg_info *vreg_info; struct cnss_pinctrl_info pinctrl_info; struct cnss_subsys_info subsys_info; struct cnss_ramdump_info ramdump_info; struct cnss_esoc_info esoc_info; struct cnss_bus_bw_info bus_bw_info; struct notifier_block modem_nb; struct cnss_platform_cap cap; struct pm_qos_request qos_request; unsigned long device_id; struct cnss_wlan_driver *driver_ops; enum cnss_driver_status driver_status; uint32_t recovery_count; struct cnss_wlan_mac_info wlan_mac_info; unsigned long driver_state; struct completion fw_ready_event; struct list_head event_list; spinlock_t event_lock; /* spinlock for driver work event handling */ struct work_struct event_work; struct workqueue_struct *event_wq; struct cnss_recovery_work_t cnss_recovery_work; struct qmi_handle *qmi_wlfw_clnt; struct work_struct qmi_recv_msg_work; struct notifier_block qmi_wlfw_clnt_nb; struct wlfw_rf_chip_info_s_v01 chip_info; struct wlfw_rf_board_info_s_v01 board_info; struct wlfw_soc_info_s_v01 soc_info; struct wlfw_fw_version_info_s_v01 fw_version_info; struct cnss_fw_mem fw_mem; struct cnss_fw_mem m3_mem; }; void *cnss_bus_dev_to_bus_priv(struct device *dev); struct cnss_plat_data *cnss_bus_dev_to_plat_priv(struct device *dev); int cnss_driver_event_post(struct cnss_plat_data *plat_priv, enum cnss_driver_event_type type, bool sync, void *data); int cnss_get_vreg(struct cnss_plat_data *plat_priv); int cnss_get_pinctrl(struct cnss_plat_data *plat_priv); int cnss_power_on_device(struct cnss_plat_data *plat_priv); void cnss_power_off_device(struct cnss_plat_data *plat_priv); int cnss_register_subsys(struct cnss_plat_data *plat_priv); void cnss_unregister_subsys(struct cnss_plat_data *plat_priv); int cnss_register_ramdump(struct cnss_plat_data *plat_priv); void cnss_unregister_ramdump(struct cnss_plat_data *plat_priv); #endif /* _CNSS_MAIN_H */