1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (c) 2016-2021, The Linux Foundation. All rights reserved. 4 * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved. 5 */ 6 7 #ifndef _CNSS_MAIN_H 8 #define _CNSS_MAIN_H 9 10 #if IS_ENABLED(CONFIG_ARM) || IS_ENABLED(CONFIG_ARM64) 11 #include <asm/arch_timer.h> 12 #endif 13 #if IS_ENABLED(CONFIG_ESOC) 14 #include <linux/esoc_client.h> 15 #endif 16 #include <linux/etherdevice.h> 17 #include <linux/firmware.h> 18 #if IS_ENABLED(CONFIG_INTERCONNECT) 19 #include <linux/interconnect.h> 20 #endif 21 #include <linux/mailbox_client.h> 22 #include <linux/pm_qos.h> 23 #include <linux/of.h> 24 #include <linux/platform_device.h> 25 #include <linux/time64.h> 26 #if IS_ENABLED(CONFIG_MSM_QMP) 27 #include <linux/mailbox/qmp.h> 28 #endif 29 #ifdef CONFIG_CNSS_OUT_OF_TREE 30 #include "cnss2.h" 31 #else 32 #include <net/cnss2.h> 33 #endif 34 #if IS_ENABLED(CONFIG_QCOM_MEMORY_DUMP_V2) || IS_ENABLED(CONFIG_QCOM_MINIDUMP) 35 #include <soc/qcom/memory_dump.h> 36 #endif 37 #if IS_ENABLED(CONFIG_MSM_SUBSYSTEM_RESTART) || \ 38 IS_ENABLED(CONFIG_QCOM_RAMDUMP) 39 #include <soc/qcom/qcom_ramdump.h> 40 #endif 41 #if IS_ENABLED(CONFIG_MSM_SUBSYSTEM_RESTART) 42 #include <soc/qcom/subsystem_notif.h> 43 #include <soc/qcom/subsystem_restart.h> 44 #endif 45 #include <linux/iommu.h> 46 #include "qmi.h" 47 #include "cnss_prealloc.h" 48 #include "cnss_common.h" 49 50 #define MAX_NO_OF_MAC_ADDR 4 51 #define QMI_WLFW_MAX_TIMESTAMP_LEN 32 52 #define QMI_WLFW_MAX_BUILD_ID_LEN 128 53 #define CNSS_RDDM_TIMEOUT_MS 20000 54 #define RECOVERY_TIMEOUT 60000 55 #define WLAN_WD_TIMEOUT_MS 60000 56 #define WLAN_COLD_BOOT_CAL_TIMEOUT 60000 57 #define WLAN_MISSION_MODE_TIMEOUT 30000 58 #define TIME_CLOCK_FREQ_HZ 19200000 59 #define CNSS_RAMDUMP_MAGIC 0x574C414E 60 #define CNSS_RAMDUMP_VERSION 0 61 #define MAX_FIRMWARE_NAME_LEN 40 62 #define FW_V1_NUMBER 1 63 #define FW_V2_NUMBER 2 64 #ifdef CONFIG_CNSS_SUPPORT_DUAL_DEV 65 #define POWER_ON_RETRY_MAX_TIMES 2 66 #else 67 #define POWER_ON_RETRY_MAX_TIMES 4 68 #endif 69 #define POWER_ON_RETRY_DELAY_MS 500 70 #define CNSS_FS_NAME "cnss" 71 #define CNSS_FS_NAME_SIZE 15 72 #define CNSS_DEVICE_NAME_SIZE 16 73 #define QRTR_NODE_FW_ID_BASE 7 74 75 #define POWER_ON_RETRY_DELAY_MS 500 76 #define WLFW_MAX_HANG_EVENT_DATA_SIZE 384 77 78 #define CNSS_EVENT_SYNC BIT(0) 79 #define CNSS_EVENT_UNINTERRUPTIBLE BIT(1) 80 #define CNSS_EVENT_UNKILLABLE BIT(2) 81 #define CNSS_EVENT_SYNC_UNINTERRUPTIBLE (CNSS_EVENT_SYNC | \ 82 CNSS_EVENT_UNINTERRUPTIBLE) 83 #define CNSS_EVENT_SYNC_UNKILLABLE (CNSS_EVENT_SYNC | CNSS_EVENT_UNKILLABLE) 84 #define QMI_WLFW_MAX_TME_OPT_FILE_NUM 3 85 #define TME_OEM_FUSE_FILE_NAME "peach_sec.dat" 86 #define TME_RPR_FILE_NAME "peach_rpr.bin" 87 #define TME_DPR_FILE_NAME "peach_dpr.bin" 88 89 enum cnss_dt_type { 90 CNSS_DTT_LEGACY = 0, 91 CNSS_DTT_CONVERGED = 1, 92 CNSS_DTT_MULTIEXCHG = 2 93 }; 94 95 enum cnss_dev_bus_type { 96 CNSS_BUS_NONE = -1, 97 CNSS_BUS_PCI, 98 CNSS_BUS_MAX 99 }; 100 101 struct cnss_vreg_cfg { 102 const char *name; 103 u32 min_uv; 104 u32 max_uv; 105 u32 load_ua; 106 u32 delay_us; 107 u32 need_unvote; 108 }; 109 110 struct cnss_vreg_info { 111 struct list_head list; 112 struct regulator *reg; 113 struct cnss_vreg_cfg cfg; 114 u32 enabled; 115 }; 116 117 enum cnss_vreg_type { 118 CNSS_VREG_PRIM, 119 }; 120 121 struct cnss_clk_cfg { 122 const char *name; 123 u32 freq; 124 u32 required; 125 }; 126 127 struct cnss_clk_info { 128 struct list_head list; 129 struct clk *clk; 130 struct cnss_clk_cfg cfg; 131 u32 enabled; 132 }; 133 134 struct cnss_pinctrl_info { 135 struct pinctrl *pinctrl; 136 struct pinctrl_state *bootstrap_active; 137 struct pinctrl_state *sol_default; 138 struct pinctrl_state *wlan_en_active; 139 struct pinctrl_state *wlan_en_sleep; 140 struct pinctrl_state *sw_ctrl; 141 struct pinctrl_state *sw_ctrl_wl_cx; 142 int bt_en_gpio; 143 int wlan_en_gpio; 144 int xo_clk_gpio; /*qca6490 only */ 145 int sw_ctrl_gpio; 146 int wlan_sw_ctrl_gpio; 147 }; 148 149 #if IS_ENABLED(CONFIG_MSM_SUBSYSTEM_RESTART) 150 struct cnss_subsys_info { 151 struct subsys_device *subsys_device; 152 struct subsys_desc subsys_desc; 153 void *subsys_handle; 154 }; 155 #endif 156 157 struct cnss_ramdump_info { 158 void *ramdump_dev; 159 unsigned long ramdump_size; 160 void *ramdump_va; 161 phys_addr_t ramdump_pa; 162 #if IS_ENABLED(CONFIG_QCOM_MEMORY_DUMP_V2) 163 struct msm_dump_data dump_data; 164 #endif 165 }; 166 167 struct cnss_dump_seg { 168 unsigned long address; 169 void *v_address; 170 unsigned long size; 171 u32 type; 172 }; 173 174 struct cnss_dump_data { 175 u32 version; 176 u32 magic; 177 char name[32]; 178 phys_addr_t paddr; 179 int nentries; 180 u32 seg_version; 181 }; 182 183 struct cnss_ramdump_info_v2 { 184 void *ramdump_dev; 185 unsigned long ramdump_size; 186 void *dump_data_vaddr; 187 u8 dump_data_valid; 188 struct cnss_dump_data dump_data; 189 }; 190 191 #if IS_ENABLED(CONFIG_ESOC) 192 struct cnss_esoc_info { 193 struct esoc_desc *esoc_desc; 194 u8 notify_modem_status; 195 void *modem_notify_handler; 196 int modem_current_status; 197 }; 198 #endif 199 200 #if IS_ENABLED(CONFIG_INTERCONNECT) 201 /** 202 * struct cnss_bus_bw_cfg - Interconnect vote data 203 * @avg_bw: Vote for average bandwidth 204 * @peak_bw: Vote for peak bandwidth 205 */ 206 struct cnss_bus_bw_cfg { 207 u32 avg_bw; 208 u32 peak_bw; 209 }; 210 211 /* Number of bw votes (avg, peak) entries that ICC requires */ 212 #define CNSS_ICC_VOTE_MAX 2 213 214 /** 215 * struct cnss_bus_bw_info - Bus bandwidth config for interconnect path 216 * @list: Kernel linked list 217 * @icc_name: Name of interconnect path as defined in Device tree 218 * @icc_path: Interconnect path data structure 219 * @cfg_table: Interconnect vote data for average and peak bandwidth 220 */ 221 struct cnss_bus_bw_info { 222 struct list_head list; 223 const char *icc_name; 224 struct icc_path *icc_path; 225 struct cnss_bus_bw_cfg *cfg_table; 226 }; 227 #endif 228 229 /** 230 * struct cnss_interconnect_cfg - CNSS platform interconnect config 231 * @list_head: List of interconnect path bandwidth configs 232 * @path_count: Count of interconnect path configured in device tree 233 * @current_bw_vote: WLAN driver provided bandwidth vote 234 * @bus_bw_cfg_count: Number of bandwidth configs for voting. It is the array 235 * size of struct cnss_bus_bw_info.cfg_table 236 */ 237 struct cnss_interconnect_cfg { 238 struct list_head list_head; 239 u32 path_count; 240 int current_bw_vote; 241 u32 bus_bw_cfg_count; 242 }; 243 244 struct cnss_fw_mem { 245 size_t size; 246 void *va; 247 phys_addr_t pa; 248 u8 valid; 249 u32 type; 250 unsigned long attrs; 251 }; 252 253 struct wlfw_rf_chip_info { 254 u32 chip_id; 255 u32 chip_family; 256 }; 257 258 struct wlfw_rf_board_info { 259 u32 board_id; 260 }; 261 262 struct wlfw_soc_info { 263 u32 soc_id; 264 }; 265 266 struct wlfw_fw_version_info { 267 u32 fw_version; 268 char fw_build_timestamp[QMI_WLFW_MAX_TIMESTAMP_LEN + 1]; 269 }; 270 271 enum cnss_mem_type { 272 CNSS_MEM_TYPE_MSA, 273 CNSS_MEM_TYPE_DDR, 274 CNSS_MEM_BDF, 275 CNSS_MEM_M3, 276 CNSS_MEM_CAL_V01, 277 CNSS_MEM_DPD_V01, 278 CNSS_MEM_AUX, 279 }; 280 281 enum cnss_fw_dump_type { 282 CNSS_FW_IMAGE, 283 CNSS_FW_RDDM, 284 CNSS_FW_REMOTE_HEAP, 285 CNSS_FW_CAL, 286 CNSS_FW_DUMP_TYPE_MAX, 287 }; 288 289 struct cnss_dump_entry { 290 int type; 291 u32 entry_start; 292 u32 entry_num; 293 }; 294 295 struct cnss_dump_meta_info { 296 u32 magic; 297 u32 version; 298 u32 chipset; 299 u32 total_entries; 300 struct cnss_dump_entry entry[CNSS_FW_DUMP_TYPE_MAX]; 301 }; 302 303 struct cnss_host_dump_meta_info { 304 u32 magic; 305 u32 version; 306 u32 chipset; 307 u32 total_entries; 308 struct cnss_dump_entry entry[CNSS_HOST_DUMP_TYPE_MAX]; 309 }; 310 311 enum cnss_driver_event_type { 312 CNSS_DRIVER_EVENT_SERVER_ARRIVE, 313 CNSS_DRIVER_EVENT_SERVER_EXIT, 314 CNSS_DRIVER_EVENT_REQUEST_MEM, 315 CNSS_DRIVER_EVENT_FW_MEM_READY, 316 CNSS_DRIVER_EVENT_FW_READY, 317 CNSS_DRIVER_EVENT_COLD_BOOT_CAL_START, 318 CNSS_DRIVER_EVENT_COLD_BOOT_CAL_DONE, 319 CNSS_DRIVER_EVENT_REGISTER_DRIVER, 320 CNSS_DRIVER_EVENT_UNREGISTER_DRIVER, 321 CNSS_DRIVER_EVENT_RECOVERY, 322 CNSS_DRIVER_EVENT_FORCE_FW_ASSERT, 323 CNSS_DRIVER_EVENT_POWER_UP, 324 CNSS_DRIVER_EVENT_POWER_DOWN, 325 CNSS_DRIVER_EVENT_IDLE_RESTART, 326 CNSS_DRIVER_EVENT_IDLE_SHUTDOWN, 327 CNSS_DRIVER_EVENT_IMS_WFC_CALL_IND, 328 CNSS_DRIVER_EVENT_WLFW_TWT_CFG_IND, 329 CNSS_DRIVER_EVENT_QDSS_TRACE_REQ_MEM, 330 CNSS_DRIVER_EVENT_FW_MEM_FILE_SAVE, 331 CNSS_DRIVER_EVENT_QDSS_TRACE_FREE, 332 CNSS_DRIVER_EVENT_QDSS_TRACE_REQ_DATA, 333 CNSS_DRIVER_EVENT_MAX, 334 }; 335 336 enum cnss_driver_state { 337 CNSS_QMI_WLFW_CONNECTED = 0, 338 CNSS_FW_MEM_READY, 339 CNSS_FW_READY, 340 CNSS_IN_COLD_BOOT_CAL, 341 CNSS_DRIVER_LOADING, 342 CNSS_DRIVER_UNLOADING = 5, 343 CNSS_DRIVER_IDLE_RESTART, 344 CNSS_DRIVER_IDLE_SHUTDOWN, 345 CNSS_DRIVER_PROBED, 346 CNSS_DRIVER_RECOVERY, 347 CNSS_FW_BOOT_RECOVERY = 10, 348 CNSS_DEV_ERR_NOTIFY, 349 CNSS_DRIVER_DEBUG, 350 CNSS_COEX_CONNECTED, 351 CNSS_IMS_CONNECTED, 352 CNSS_IN_SUSPEND_RESUME = 15, 353 CNSS_IN_REBOOT, 354 CNSS_COLD_BOOT_CAL_DONE, 355 CNSS_IN_PANIC, 356 CNSS_QMI_DEL_SERVER, 357 CNSS_QMI_DMS_CONNECTED = 20, 358 CNSS_DAEMON_CONNECTED, 359 CNSS_PCI_PROBE_DONE, 360 CNSS_DRIVER_REGISTER, 361 CNSS_WLAN_HW_DISABLED, 362 CNSS_FS_READY = 25, 363 CNSS_DRIVER_REGISTERED, 364 CNSS_DMS_DEL_SERVER, 365 CNSS_POWER_OFF, 366 }; 367 368 struct cnss_recovery_data { 369 enum cnss_recovery_reason reason; 370 }; 371 372 enum cnss_pins { 373 CNSS_WLAN_EN, 374 CNSS_PCIE_TXP, 375 CNSS_PCIE_TXN, 376 CNSS_PCIE_RXP, 377 CNSS_PCIE_RXN, 378 CNSS_PCIE_REFCLKP, 379 CNSS_PCIE_REFCLKN, 380 CNSS_PCIE_RST, 381 CNSS_PCIE_WAKE, 382 }; 383 384 struct cnss_pin_connect_result { 385 u32 fw_pwr_pin_result; 386 u32 fw_phy_io_pin_result; 387 u32 fw_rf_pin_result; 388 u32 host_pin_result; 389 }; 390 391 enum cnss_debug_quirks { 392 LINK_DOWN_SELF_RECOVERY, 393 SKIP_DEVICE_BOOT, 394 USE_CORE_ONLY_FW, 395 SKIP_RECOVERY, 396 QMI_BYPASS, 397 ENABLE_WALTEST, 398 ENABLE_PCI_LINK_DOWN_PANIC, 399 FBC_BYPASS, 400 ENABLE_DAEMON_SUPPORT, 401 DISABLE_DRV, 402 DISABLE_IO_COHERENCY, 403 IGNORE_PCI_LINK_FAILURE, 404 DISABLE_TIME_SYNC, 405 FORCE_ONE_MSI, 406 QUIRK_MAX_VALUE 407 }; 408 409 enum cnss_bdf_type { 410 CNSS_BDF_BIN, 411 CNSS_BDF_ELF, 412 CNSS_BDF_REGDB = 4, 413 CNSS_BDF_HDS = 6, 414 }; 415 416 enum cnss_cal_status { 417 CNSS_CAL_DONE, 418 CNSS_CAL_TIMEOUT, 419 CNSS_CAL_FAILURE, 420 }; 421 422 struct cnss_cal_info { 423 enum cnss_cal_status cal_status; 424 }; 425 426 /** 427 * enum cnss_time_sync_period_vote - to get per vote time sync period 428 * @TIME_SYNC_VOTE_WLAN: WLAN Driver vote 429 * @TIME_SYNC_VOTE_CNSS: sys config vote 430 * @TIME_SYNC_VOTE_MAX 431 */ 432 enum cnss_time_sync_period_vote { 433 TIME_SYNC_VOTE_WLAN, 434 TIME_SYNC_VOTE_CNSS, 435 TIME_SYNC_VOTE_MAX, 436 }; 437 438 struct cnss_control_params { 439 unsigned long quirks; 440 unsigned int mhi_timeout; 441 unsigned int mhi_m2_timeout; 442 unsigned int qmi_timeout; 443 unsigned int bdf_type; 444 unsigned int time_sync_period; 445 unsigned int time_sync_period_vote[TIME_SYNC_VOTE_MAX]; 446 }; 447 448 struct cnss_tcs_info { 449 resource_size_t cmd_base_addr; 450 void __iomem *cmd_base_addr_io; 451 }; 452 453 struct cnss_cpr_info { 454 resource_size_t tcs_cmd_data_addr; 455 void __iomem *tcs_cmd_data_addr_io; 456 u32 cpr_pmic_addr; 457 u32 voltage; 458 }; 459 460 enum cnss_ce_index { 461 CNSS_CE_00, 462 CNSS_CE_01, 463 CNSS_CE_02, 464 CNSS_CE_03, 465 CNSS_CE_04, 466 CNSS_CE_05, 467 CNSS_CE_06, 468 CNSS_CE_07, 469 CNSS_CE_08, 470 CNSS_CE_09, 471 CNSS_CE_10, 472 CNSS_CE_11, 473 CNSS_CE_COMMON, 474 }; 475 476 struct cnss_dms_data { 477 u32 mac_valid; 478 u8 mac[QMI_WLFW_MAC_ADDR_SIZE_V01]; 479 }; 480 481 enum cnss_timeout_type { 482 CNSS_TIMEOUT_QMI, 483 CNSS_TIMEOUT_POWER_UP, 484 CNSS_TIMEOUT_IDLE_RESTART, 485 CNSS_TIMEOUT_CALIBRATION, 486 CNSS_TIMEOUT_WLAN_WATCHDOG, 487 CNSS_TIMEOUT_RDDM, 488 CNSS_TIMEOUT_RECOVERY, 489 CNSS_TIMEOUT_DAEMON_CONNECTION, 490 }; 491 492 struct cnss_sol_gpio { 493 int dev_sol_gpio; 494 int dev_sol_irq; 495 u32 dev_sol_counter; 496 int host_sol_gpio; 497 }; 498 499 struct cnss_thermal_cdev { 500 struct list_head tcdev_list; 501 int tcdev_id; 502 unsigned long curr_thermal_state; 503 unsigned long max_thermal_state; 504 struct device_node *dev_node; 505 struct thermal_cooling_device *tcdev; 506 }; 507 508 struct cnss_plat_data { 509 struct platform_device *plat_dev; 510 void *bus_priv; 511 enum cnss_dev_bus_type bus_type; 512 struct list_head vreg_list; 513 struct list_head clk_list; 514 struct cnss_pinctrl_info pinctrl_info; 515 struct cnss_sol_gpio sol_gpio; 516 #if IS_ENABLED(CONFIG_MSM_SUBSYSTEM_RESTART) 517 struct cnss_subsys_info subsys_info; 518 #endif 519 struct cnss_ramdump_info ramdump_info; 520 struct cnss_ramdump_info_v2 ramdump_info_v2; 521 #if IS_ENABLED(CONFIG_ESOC) 522 struct cnss_esoc_info esoc_info; 523 #endif 524 struct cnss_interconnect_cfg icc; 525 struct notifier_block modem_nb; 526 struct notifier_block reboot_nb; 527 struct notifier_block panic_nb; 528 struct cnss_platform_cap cap; 529 struct pm_qos_request qos_request; 530 struct cnss_device_version device_version; 531 u32 rc_num; 532 unsigned long device_id; 533 enum cnss_driver_status driver_status; 534 u32 recovery_count; 535 u8 recovery_enabled; 536 u8 recovery_pcss_enabled; 537 u8 hds_enabled; 538 unsigned long driver_state; 539 struct list_head event_list; 540 struct list_head cnss_tcdev_list; 541 struct mutex tcdev_lock; /* mutex for cooling devices list access */ 542 spinlock_t event_lock; /* spinlock for driver work event handling */ 543 struct work_struct event_work; 544 struct workqueue_struct *event_wq; 545 struct work_struct recovery_work; 546 struct delayed_work wlan_reg_driver_work; 547 struct qmi_handle qmi_wlfw; 548 struct qmi_handle qmi_dms; 549 struct wlfw_rf_chip_info chip_info; 550 struct wlfw_rf_board_info board_info; 551 struct wlfw_soc_info soc_info; 552 struct wlfw_fw_version_info fw_version_info; 553 struct cnss_dev_mem_info dev_mem_info[CNSS_MAX_DEV_MEM_NUM]; 554 char fw_build_id[QMI_WLFW_MAX_BUILD_ID_LEN + 1]; 555 u32 otp_version; 556 u32 fw_mem_seg_len; 557 struct cnss_fw_mem fw_mem[QMI_WLFW_MAX_NUM_MEM_SEG_V01]; 558 struct cnss_fw_mem m3_mem; 559 struct cnss_fw_mem tme_lite_mem; 560 struct cnss_fw_mem tme_opt_file_mem[QMI_WLFW_MAX_TME_OPT_FILE_NUM]; 561 struct cnss_fw_mem *cal_mem; 562 struct cnss_fw_mem aux_mem; 563 u64 cal_time; 564 bool cbc_file_download; 565 u32 cal_file_size; 566 struct completion daemon_connected; 567 u32 qdss_mem_seg_len; 568 struct cnss_fw_mem qdss_mem[QMI_WLFW_MAX_NUM_MEM_SEG_V01]; 569 u32 *qdss_reg; 570 struct cnss_pin_connect_result pin_result; 571 struct dentry *root_dentry; 572 atomic_t pm_count; 573 struct timer_list fw_boot_timer; 574 struct completion power_up_complete; 575 struct completion cal_complete; 576 struct mutex dev_lock; /* mutex for register access through debugfs */ 577 struct mutex driver_ops_lock; /* mutex for external driver ops */ 578 struct cnss_wlan_driver *driver_ops; 579 u32 supported_link_speed; 580 u32 device_freq_hz; 581 u32 diag_reg_read_addr; 582 u32 diag_reg_read_mem_type; 583 u32 diag_reg_read_len; 584 u8 *diag_reg_read_buf; 585 u8 cal_done; 586 u8 powered_on; 587 u8 use_fw_path_with_prefix; 588 char firmware_name[MAX_FIRMWARE_NAME_LEN]; 589 char fw_fallback_name[MAX_FIRMWARE_NAME_LEN]; 590 #ifndef CONFIG_DISABLE_CNSS_SRAM_DUMP 591 u8 *sram_dump; 592 #endif 593 struct completion rddm_complete; 594 struct completion recovery_complete; 595 struct cnss_control_params ctrl_params; 596 struct cnss_cpr_info cpr_info; 597 u64 antenna; 598 u64 grant; 599 struct qmi_handle coex_qmi; 600 struct qmi_handle ims_qmi; 601 struct qmi_txn txn; 602 struct wakeup_source *recovery_ws; 603 u64 dynamic_feature; 604 void *get_info_cb_ctx; 605 int (*get_info_cb)(void *ctx, void *event, int event_len); 606 void *get_driver_async_data_ctx; 607 int (*get_driver_async_data_cb)(void *ctx, uint16_t type, void *event, int event_len); 608 bool cbc_enabled; 609 u8 use_pm_domain; 610 u8 use_nv_mac; 611 u8 set_wlaon_pwr_ctrl; 612 struct cnss_tcs_info tcs_info; 613 bool fw_pcie_gen_switch; 614 bool fw_aux_uc_support; 615 u64 fw_caps; 616 u8 pcie_gen_speed; 617 struct iommu_domain *audio_iommu_domain; 618 bool is_audio_shared_iommu_group; 619 struct cnss_dms_data dms; 620 int power_up_error; 621 u32 hw_trc_override; 622 u8 charger_mode; 623 struct mbox_client mbox_client_data; 624 struct mbox_chan *mbox_chan; 625 struct qmp *qmp; 626 const char *vreg_ol_cpr, *vreg_ipa; 627 const char **pdc_init_table, **vreg_pdc_map, **pmu_vreg_map; 628 int pdc_init_table_len, vreg_pdc_map_len, pmu_vreg_map_len; 629 bool adsp_pc_enabled; 630 u64 feature_list; 631 u32 dt_type; 632 struct kobject *wifi_kobj; 633 u16 hang_event_data_len; 634 u32 hang_data_addr_offset; 635 /* bitmap to detect FEM combination */ 636 u8 hwid_bitmap; 637 uint32_t num_shadow_regs_v3; 638 bool sec_peri_feature_disable; 639 struct device_node *dev_node; 640 char device_name[CNSS_DEVICE_NAME_SIZE]; 641 u32 plat_idx; 642 bool enumerate_done; 643 int qrtr_node_id; 644 unsigned int wlfw_service_instance_id; 645 const char *pld_bus_ops_name; 646 u32 on_chip_pmic_devices_count; 647 u32 *on_chip_pmic_board_ids; 648 bool no_bwscale; 649 bool sleep_clk; 650 struct wlchip_serial_id_v01 serial_id; 651 }; 652 653 #if IS_ENABLED(CONFIG_ARCH_QCOM) cnss_get_host_timestamp(struct cnss_plat_data * plat_priv)654 static inline u64 cnss_get_host_timestamp(struct cnss_plat_data *plat_priv) 655 { 656 u64 ticks = __arch_counter_get_cntvct(); 657 658 do_div(ticks, TIME_CLOCK_FREQ_HZ / 100000); 659 660 return ticks * 10; 661 } 662 #else cnss_get_host_timestamp(struct cnss_plat_data * plat_priv)663 static inline u64 cnss_get_host_timestamp(struct cnss_plat_data *plat_priv) 664 { 665 struct timespec64 ts; 666 667 ktime_get_ts64(&ts); 668 669 return (ts.tv_sec * 1000000) + (ts.tv_nsec / 1000); 670 } 671 #endif 672 673 int cnss_wlan_hw_disable_check(struct cnss_plat_data *plat_priv); 674 int cnss_wlan_hw_enable(void); 675 struct cnss_plat_data *cnss_get_plat_priv(struct platform_device *plat_dev); 676 struct cnss_plat_data *cnss_get_first_plat_priv(struct platform_device *plat_dev); 677 void cnss_pm_stay_awake(struct cnss_plat_data *plat_priv); 678 void cnss_pm_relax(struct cnss_plat_data *plat_priv); 679 struct cnss_plat_data *cnss_get_plat_priv_by_rc_num(int rc_num); 680 int cnss_get_max_plat_env_count(void); 681 struct cnss_plat_data *cnss_get_plat_env(int index); 682 void cnss_get_qrtr_info(struct cnss_plat_data *plat_priv); 683 void cnss_get_sleep_clk_supported(struct cnss_plat_data *plat_priv); 684 void cnss_get_bwscal_info(struct cnss_plat_data *plat_priv); 685 bool cnss_is_dual_wlan_enabled(void); 686 int cnss_driver_event_post(struct cnss_plat_data *plat_priv, 687 enum cnss_driver_event_type type, 688 u32 flags, void *data); 689 int cnss_get_vreg_type(struct cnss_plat_data *plat_priv, 690 enum cnss_vreg_type type); 691 void cnss_put_vreg_type(struct cnss_plat_data *plat_priv, 692 enum cnss_vreg_type type); 693 int cnss_vreg_on_type(struct cnss_plat_data *plat_priv, 694 enum cnss_vreg_type type); 695 int cnss_vreg_off_type(struct cnss_plat_data *plat_priv, 696 enum cnss_vreg_type type); 697 int cnss_get_clk(struct cnss_plat_data *plat_priv); 698 void cnss_put_clk(struct cnss_plat_data *plat_priv); 699 int cnss_vreg_unvote_type(struct cnss_plat_data *plat_priv, 700 enum cnss_vreg_type type); 701 int cnss_get_pinctrl(struct cnss_plat_data *plat_priv); 702 int cnss_get_wlan_sw_ctrl(struct cnss_plat_data *plat_priv); 703 int cnss_power_on_device(struct cnss_plat_data *plat_priv, bool reset); 704 void cnss_power_off_device(struct cnss_plat_data *plat_priv); 705 bool cnss_is_device_powered_on(struct cnss_plat_data *plat_priv); 706 int cnss_enable_dev_sol_irq(struct cnss_plat_data *plat_priv); 707 int cnss_disable_dev_sol_irq(struct cnss_plat_data *plat_priv); 708 int cnss_get_dev_sol_value(struct cnss_plat_data *plat_priv); 709 int cnss_init_dev_sol_irq(struct cnss_plat_data *plat_priv); 710 int cnss_deinit_dev_sol_irq(struct cnss_plat_data *plat_priv); 711 int cnss_set_host_sol_value(struct cnss_plat_data *plat_priv, int value); 712 int cnss_get_host_sol_value(struct cnss_plat_data *plat_priv); 713 int cnss_register_subsys(struct cnss_plat_data *plat_priv); 714 void cnss_unregister_subsys(struct cnss_plat_data *plat_priv); 715 int cnss_register_ramdump(struct cnss_plat_data *plat_priv); 716 void cnss_unregister_ramdump(struct cnss_plat_data *plat_priv); 717 int cnss_do_ramdump(struct cnss_plat_data *plat_priv); 718 int cnss_do_elf_ramdump(struct cnss_plat_data *plat_priv); 719 int cnss_do_host_ramdump(struct cnss_plat_data *plat_priv, 720 struct cnss_ssr_driver_dump_entry *ssr_entry, 721 size_t num_entries_loaded); 722 void cnss_set_pin_connect_status(struct cnss_plat_data *plat_priv); 723 int cnss_get_cpr_info(struct cnss_plat_data *plat_priv); 724 int cnss_update_cpr_info(struct cnss_plat_data *plat_priv); 725 int cnss_va_to_pa(struct device *dev, size_t size, void *va, dma_addr_t dma, 726 phys_addr_t *pa, unsigned long attrs); 727 int cnss_minidump_add_region(struct cnss_plat_data *plat_priv, 728 enum cnss_fw_dump_type type, int seg_no, 729 void *va, phys_addr_t pa, size_t size); 730 int cnss_minidump_remove_region(struct cnss_plat_data *plat_priv, 731 enum cnss_fw_dump_type type, int seg_no, 732 void *va, phys_addr_t pa, size_t size); 733 int cnss_enable_int_pow_amp_vreg(struct cnss_plat_data *plat_priv); 734 int cnss_get_tcs_info(struct cnss_plat_data *plat_priv); 735 unsigned int cnss_get_timeout(struct cnss_plat_data *plat_priv, 736 enum cnss_timeout_type); 737 int cnss_aop_interface_init(struct cnss_plat_data *plat_priv); 738 void cnss_aop_interface_deinit(struct cnss_plat_data *plat_priv); 739 int cnss_aop_pdc_reconfig(struct cnss_plat_data *plat_priv); 740 int cnss_aop_send_msg(struct cnss_plat_data *plat_priv, char *msg); 741 void cnss_power_misc_params_init(struct cnss_plat_data *plat_priv); 742 int cnss_aop_ol_cpr_cfg_setup(struct cnss_plat_data *plat_priv, 743 struct wlfw_pmu_cfg_v01 *fw_pmu_cfg); 744 int cnss_request_firmware_direct(struct cnss_plat_data *plat_priv, 745 const struct firmware **fw_entry, 746 const char *filename); 747 int cnss_set_feature_list(struct cnss_plat_data *plat_priv, 748 enum cnss_feature_v01 feature); 749 int cnss_clear_feature_list(struct cnss_plat_data *plat_priv, 750 enum cnss_feature_v01 feature); 751 int cnss_get_feature_list(struct cnss_plat_data *plat_priv, 752 u64 *feature_list); 753 int cnss_get_input_gpio_value(struct cnss_plat_data *plat_priv, int gpio_num); 754 bool cnss_check_driver_loading_allowed(void); 755 int cnss_dev_specific_power_on(struct cnss_plat_data *plat_priv); 756 void cnss_recovery_handler(struct cnss_plat_data *plat_priv); 757 size_t cnss_get_platform_name(struct cnss_plat_data *plat_priv, 758 char *buf, const size_t buf_len); 759 int cnss_iommu_map(struct iommu_domain *domain, unsigned long iova, 760 phys_addr_t paddr, size_t size, int prot); 761 #endif /* _CNSS_MAIN_H */ 762