1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (c) 2016-2021, The Linux Foundation. All rights reserved. 4 * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. 5 */ 6 7 #ifndef _NET_CNSS2_H 8 #define _NET_CNSS2_H 9 10 #include <linux/pci.h> 11 12 #define CNSS_MAX_FILE_NAME 20 13 #define CNSS_MAX_TIMESTAMP_LEN 32 14 #define CNSS_WLFW_MAX_BUILD_ID_LEN 128 15 #define CNSS_MAX_DEV_MEM_NUM 4 16 #define CNSS_CHIP_VER_ANY 0 17 18 #define CNSS_SSR_DRIVER_DUMP_MAX_REGIONS 32 19 20 enum cnss_bus_width_type { 21 CNSS_BUS_WIDTH_NONE, 22 CNSS_BUS_WIDTH_IDLE, 23 CNSS_BUS_WIDTH_LOW, 24 CNSS_BUS_WIDTH_MEDIUM, 25 CNSS_BUS_WIDTH_HIGH, 26 CNSS_BUS_WIDTH_VERY_HIGH, 27 CNSS_BUS_WIDTH_LOW_LATENCY 28 }; 29 30 enum cnss_platform_cap_flag { 31 CNSS_HAS_EXTERNAL_SWREG = 0x01, 32 CNSS_HAS_UART_ACCESS = 0x02, 33 CNSS_HAS_DRV_SUPPORT = 0x04, 34 }; 35 36 struct cnss_platform_cap { 37 u32 cap_flag; 38 }; 39 40 struct cnss_fw_files { 41 char image_file[CNSS_MAX_FILE_NAME]; 42 char board_data[CNSS_MAX_FILE_NAME]; 43 char otp_data[CNSS_MAX_FILE_NAME]; 44 char utf_file[CNSS_MAX_FILE_NAME]; 45 char utf_board_data[CNSS_MAX_FILE_NAME]; 46 char epping_file[CNSS_MAX_FILE_NAME]; 47 char evicted_data[CNSS_MAX_FILE_NAME]; 48 }; 49 50 struct cnss_device_version { 51 u32 family_number; 52 u32 device_number; 53 u32 major_version; 54 u32 minor_version; 55 }; 56 57 struct cnss_dev_mem_info { 58 u64 start; 59 u64 size; 60 }; 61 62 struct cnss_soc_info { 63 void __iomem *va; 64 phys_addr_t pa; 65 uint32_t chip_id; 66 uint32_t chip_family; 67 uint32_t board_id; 68 uint32_t soc_id; 69 uint32_t fw_version; 70 char fw_build_timestamp[CNSS_MAX_TIMESTAMP_LEN + 1]; 71 struct cnss_device_version device_version; 72 struct cnss_dev_mem_info dev_mem_info[CNSS_MAX_DEV_MEM_NUM]; 73 char fw_build_id[CNSS_WLFW_MAX_BUILD_ID_LEN + 1]; 74 }; 75 76 struct cnss_wlan_runtime_ops { 77 int (*runtime_suspend)(struct pci_dev *pdev); 78 int (*runtime_resume)(struct pci_dev *pdev); 79 }; 80 81 enum cnss_driver_status { 82 CNSS_UNINITIALIZED, 83 CNSS_INITIALIZED, 84 CNSS_LOAD_UNLOAD, 85 CNSS_RECOVERY, 86 CNSS_FW_DOWN, 87 CNSS_HANG_EVENT, 88 CNSS_BUS_EVENT, 89 }; 90 91 enum cnss_host_dump_type { 92 CNSS_HOST_WLAN_LOGS, 93 CNSS_HOST_HTC_CREDIT, 94 CNSS_HOST_WMI_TX_CMP, 95 CNSS_HOST_WMI_COMMAND_LOG, 96 CNSS_HOST_WMI_EVENT_LOG, 97 CNSS_HOST_WMI_RX_EVENT, 98 CNSS_HOST_HAL_SOC, 99 CNSS_HOST_WMI_HANG_DATA, 100 CNSS_HOST_CE_HANG_EVT, 101 CNSS_HOST_PEER_MAC_ADDR_HANG_DATA, 102 CNSS_HOST_CP_VDEV_INFO, 103 CNSS_HOST_GWLAN_LOGGING, 104 CNSS_HOST_WMI_DEBUG_LOG_INFO, 105 CNSS_HOST_HTC_CREDIT_IDX, 106 CNSS_HOST_HTC_CREDIT_LEN, 107 CNSS_HOST_WMI_TX_CMP_IDX, 108 CNSS_HOST_WMI_COMMAND_LOG_IDX, 109 CNSS_HOST_WMI_EVENT_LOG_IDX, 110 CNSS_HOST_WMI_RX_EVENT_IDX, 111 CNSS_HOST_DUMP_TYPE_MAX, 112 }; 113 114 enum cnss_bus_event_type { 115 BUS_EVENT_PCI_LINK_DOWN = 0, 116 117 BUS_EVENT_INVALID = 0xFFFF, 118 }; 119 120 enum cnss_wfc_mode { 121 CNSS_WFC_MODE_OFF, 122 CNSS_WFC_MODE_ON, 123 }; 124 125 struct cnss_wfc_cfg { 126 enum cnss_wfc_mode mode; 127 }; 128 129 struct cnss_hang_event { 130 void *hang_event_data; 131 u16 hang_event_data_len; 132 }; 133 134 struct cnss_bus_event { 135 enum cnss_bus_event_type etype; 136 void *event_data; 137 }; 138 139 struct cnss_uevent_data { 140 enum cnss_driver_status status; 141 void *data; 142 }; 143 144 struct cnss_ssr_driver_dump_entry { 145 char region_name[CNSS_SSR_DRIVER_DUMP_MAX_REGIONS]; 146 void *buffer_pointer; 147 size_t buffer_size; 148 }; 149 150 151 struct cnss_wlan_driver { 152 char *name; 153 int (*probe)(struct pci_dev *pdev, const struct pci_device_id *id); 154 void (*remove)(struct pci_dev *pdev); 155 int (*idle_restart)(struct pci_dev *pdev, 156 const struct pci_device_id *id); 157 int (*idle_shutdown)(struct pci_dev *pdev); 158 int (*reinit)(struct pci_dev *pdev, const struct pci_device_id *id); 159 void (*shutdown)(struct pci_dev *pdev); 160 void (*crash_shutdown)(struct pci_dev *pdev); 161 int (*suspend)(struct pci_dev *pdev, pm_message_t state); 162 int (*resume)(struct pci_dev *pdev); 163 int (*suspend_noirq)(struct pci_dev *pdev); 164 int (*resume_noirq)(struct pci_dev *pdev); 165 void (*modem_status)(struct pci_dev *pdev, int state); 166 void (*update_status)(struct pci_dev *pdev, uint32_t status); 167 int (*update_event)(struct pci_dev *pdev, 168 struct cnss_uevent_data *uevent); 169 struct cnss_wlan_runtime_ops *runtime_ops; 170 const struct pci_device_id *id_table; 171 u32 chip_version; 172 enum cnss_driver_mode (*get_driver_mode)(void); 173 int (*collect_driver_dump)(struct pci_dev *pdev, 174 struct cnss_ssr_driver_dump_entry *input_array, 175 size_t *num_entries_loaded); 176 int (*set_therm_cdev_state)(struct pci_dev *pci_dev, 177 unsigned long thermal_state, 178 int tcdev_id); 179 }; 180 181 struct cnss_ce_tgt_pipe_cfg { 182 u32 pipe_num; 183 u32 pipe_dir; 184 u32 nentries; 185 u32 nbytes_max; 186 u32 flags; 187 u32 reserved; 188 }; 189 190 struct cnss_ce_svc_pipe_cfg { 191 u32 service_id; 192 u32 pipe_dir; 193 u32 pipe_num; 194 }; 195 196 struct cnss_shadow_reg_cfg { 197 u16 ce_id; 198 u16 reg_offset; 199 }; 200 201 struct cnss_shadow_reg_v2_cfg { 202 u32 addr; 203 }; 204 205 struct cnss_rri_over_ddr_cfg { 206 u32 base_addr_low; 207 u32 base_addr_high; 208 }; 209 210 struct cnss_shadow_reg_v3_cfg { 211 u32 addr; 212 }; 213 214 struct cnss_wlan_enable_cfg { 215 u32 num_ce_tgt_cfg; 216 struct cnss_ce_tgt_pipe_cfg *ce_tgt_cfg; 217 u32 num_ce_svc_pipe_cfg; 218 struct cnss_ce_svc_pipe_cfg *ce_svc_cfg; 219 u32 num_shadow_reg_cfg; 220 struct cnss_shadow_reg_cfg *shadow_reg_cfg; 221 u32 num_shadow_reg_v2_cfg; 222 struct cnss_shadow_reg_v2_cfg *shadow_reg_v2_cfg; 223 bool rri_over_ddr_cfg_valid; 224 struct cnss_rri_over_ddr_cfg rri_over_ddr_cfg; 225 u32 num_shadow_reg_v3_cfg; 226 struct cnss_shadow_reg_v3_cfg *shadow_reg_v3_cfg; 227 bool send_msi_ce; 228 }; 229 230 enum cnss_driver_mode { 231 CNSS_MISSION, 232 CNSS_FTM, 233 CNSS_EPPING, 234 CNSS_WALTEST, 235 CNSS_OFF, 236 CNSS_CCPM, 237 CNSS_QVIT, 238 CNSS_CALIBRATION, 239 CNSS_DRIVER_MODE_MAX, 240 }; 241 242 enum cnss_recovery_reason { 243 CNSS_REASON_DEFAULT, 244 CNSS_REASON_LINK_DOWN, 245 CNSS_REASON_RDDM, 246 CNSS_REASON_TIMEOUT, 247 }; 248 249 enum cnss_fw_caps { 250 CNSS_FW_CAP_DIRECT_LINK_SUPPORT, 251 }; 252 253 enum cnss_remote_mem_type { 254 CNSS_REMOTE_MEM_TYPE_FW, 255 CNSS_REMOTE_MEM_TYPE_QDSS, 256 CNSS_REMOTE_MEM_TYPE_MAX, 257 }; 258 259 struct cnss_mem_segment { 260 size_t size; 261 void *va; 262 phys_addr_t pa; 263 }; 264 265 extern int cnss_wlan_register_driver(struct cnss_wlan_driver *driver); 266 extern void cnss_wlan_unregister_driver(struct cnss_wlan_driver *driver); 267 extern void cnss_device_crashed(struct device *dev); 268 extern int cnss_pci_prevent_l1(struct device *dev); 269 extern void cnss_pci_allow_l1(struct device *dev); 270 extern int cnss_pci_link_down(struct device *dev); 271 extern int cnss_pci_is_device_down(struct device *dev); 272 extern void cnss_schedule_recovery(struct device *dev, 273 enum cnss_recovery_reason reason); 274 extern int cnss_self_recovery(struct device *dev, 275 enum cnss_recovery_reason reason); 276 extern int cnss_force_fw_assert(struct device *dev); 277 extern int cnss_force_collect_rddm(struct device *dev); 278 extern int cnss_qmi_send_get(struct device *dev); 279 extern int cnss_qmi_send_put(struct device *dev); 280 extern int cnss_qmi_send(struct device *dev, int type, void *cmd, 281 int cmd_len, void *cb_ctx, 282 int (*cb)(void *ctx, void *event, int event_len)); 283 extern void *cnss_get_virt_ramdump_mem(struct device *dev, unsigned long *size); 284 extern int cnss_get_fw_files_for_target(struct device *dev, 285 struct cnss_fw_files *pfw_files, 286 u32 target_type, u32 target_version); 287 extern int cnss_get_platform_cap(struct device *dev, 288 struct cnss_platform_cap *cap); 289 extern struct iommu_domain *cnss_smmu_get_domain(struct device *dev); 290 extern int cnss_smmu_map(struct device *dev, 291 phys_addr_t paddr, uint32_t *iova_addr, size_t size); 292 extern int cnss_smmu_unmap(struct device *dev, uint32_t iova_addr, size_t size); 293 extern int cnss_get_soc_info(struct device *dev, struct cnss_soc_info *info); 294 extern int cnss_request_bus_bandwidth(struct device *dev, int bandwidth); 295 extern int cnss_power_up(struct device *dev); 296 extern int cnss_power_down(struct device *dev); 297 extern int cnss_idle_restart(struct device *dev); 298 extern int cnss_idle_shutdown(struct device *dev); 299 extern void cnss_request_pm_qos(struct device *dev, u32 qos_val); 300 extern void cnss_remove_pm_qos(struct device *dev); 301 extern void cnss_lock_pm_sem(struct device *dev); 302 extern void cnss_release_pm_sem(struct device *dev); 303 extern void cnss_pci_lock_reg_window(struct device *dev, unsigned long *flags); 304 extern void cnss_pci_unlock_reg_window(struct device *dev, 305 unsigned long *flags); 306 extern int cnss_wlan_pm_control(struct device *dev, bool vote); 307 extern int cnss_auto_suspend(struct device *dev); 308 extern int cnss_auto_resume(struct device *dev); 309 extern int cnss_pci_is_drv_connected(struct device *dev); 310 extern int cnss_pci_force_wake_request_sync(struct device *dev, int timeout); 311 extern int cnss_pci_force_wake_request(struct device *dev); 312 extern int cnss_pci_is_device_awake(struct device *dev); 313 extern int cnss_pci_force_wake_release(struct device *dev); 314 extern int cnss_get_user_msi_assignment(struct device *dev, char *user_name, 315 int *num_vectors, 316 uint32_t *user_base_data, 317 uint32_t *base_vector); 318 extern int cnss_get_msi_irq(struct device *dev, unsigned int vector); 319 extern bool cnss_is_one_msi(struct device *dev); 320 extern void cnss_get_msi_address(struct device *dev, uint32_t *msi_addr_low, 321 uint32_t *msi_addr_high); 322 extern int cnss_wlan_hw_enable(void); 323 extern int cnss_wlan_enable(struct device *dev, 324 struct cnss_wlan_enable_cfg *config, 325 enum cnss_driver_mode mode, 326 const char *host_version); 327 extern int cnss_wlan_disable(struct device *dev, enum cnss_driver_mode mode); 328 extern unsigned int cnss_get_boot_timeout(struct device *dev); 329 extern int cnss_athdiag_read(struct device *dev, uint32_t offset, 330 uint32_t mem_type, uint32_t data_len, 331 uint8_t *output); 332 extern int cnss_athdiag_write(struct device *dev, uint32_t offset, 333 uint32_t mem_type, uint32_t data_len, 334 uint8_t *input); 335 extern int cnss_set_fw_log_mode(struct device *dev, uint8_t fw_log_mode); 336 extern int cnss_set_pcie_gen_speed(struct device *dev, u8 pcie_gen_speed); 337 extern int cnss_get_mem_seg_count(enum cnss_remote_mem_type type, u32 *seg); 338 extern int cnss_get_mem_segment_info(enum cnss_remote_mem_type type, 339 struct cnss_mem_segment segment[], 340 u32 segment_count); 341 extern int cnss_audio_smmu_map(struct device *dev, phys_addr_t paddr, 342 dma_addr_t iova, size_t size); 343 extern void cnss_audio_smmu_unmap(struct device *dev, dma_addr_t iova, 344 size_t size); 345 extern int cnss_get_pci_slot(struct device *dev); 346 extern int cnss_pci_get_reg_dump(struct device *dev, uint8_t *buffer, 347 uint32_t len); 348 extern struct kobject *cnss_get_wifi_kobj(struct device *dev); 349 extern int cnss_send_buffer_to_afcmem(struct device *dev, char *afcdb, 350 uint32_t len, uint8_t slotid); 351 extern int cnss_reset_afcmem(struct device *dev, uint8_t slotid); 352 extern bool cnss_get_fw_cap(struct device *dev, enum cnss_fw_caps fw_cap); 353 extern int cnss_set_wfc_mode(struct device *dev, struct cnss_wfc_cfg cfg); 354 extern int cnss_thermal_cdev_register(struct device *dev, 355 unsigned long max_state, 356 int tcdev_id); 357 extern void cnss_thermal_cdev_unregister(struct device *dev, int tcdev_id); 358 extern int cnss_get_curr_therm_cdev_state(struct device *dev, 359 unsigned long *thermal_state, 360 int tcdev_id); 361 #endif /* _NET_CNSS2_H */ 362