162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * This file is part of wl18xx 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2011 Texas Instruments Inc. 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#ifndef __WL18XX_PRIV_H__ 962306a36Sopenharmony_ci#define __WL18XX_PRIV_H__ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include "conf.h" 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci/* minimum FW required for driver */ 1462306a36Sopenharmony_ci#define WL18XX_CHIP_VER 8 1562306a36Sopenharmony_ci#define WL18XX_IFTYPE_VER 9 1662306a36Sopenharmony_ci#define WL18XX_MAJOR_VER WLCORE_FW_VER_IGNORE 1762306a36Sopenharmony_ci#define WL18XX_SUBTYPE_VER WLCORE_FW_VER_IGNORE 1862306a36Sopenharmony_ci#define WL18XX_MINOR_VER 58 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#define WL18XX_CMD_MAX_SIZE 740 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci#define WL18XX_AGGR_BUFFER_SIZE (13 * PAGE_SIZE) 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci#define WL18XX_NUM_TX_DESCRIPTORS 32 2562306a36Sopenharmony_ci#define WL18XX_NUM_RX_DESCRIPTORS 32 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci#define WL18XX_NUM_MAC_ADDRESSES 2 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci#define WL18XX_RX_BA_MAX_SESSIONS 13 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci#define WL18XX_MAX_AP_STATIONS 10 3262306a36Sopenharmony_ci#define WL18XX_MAX_LINKS 16 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cistruct wl18xx_priv { 3562306a36Sopenharmony_ci /* buffer for sending commands to FW */ 3662306a36Sopenharmony_ci u8 cmd_buf[WL18XX_CMD_MAX_SIZE]; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci struct wl18xx_priv_conf conf; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci /* Index of last released Tx desc in FW */ 4162306a36Sopenharmony_ci u8 last_fw_rls_idx; 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci /* number of keys requiring extra spare mem-blocks */ 4462306a36Sopenharmony_ci int extra_spare_key_count; 4562306a36Sopenharmony_ci}; 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci#define WL18XX_FW_MAX_TX_STATUS_DESC 33 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_cistruct wl18xx_fw_status_priv { 5062306a36Sopenharmony_ci /* 5162306a36Sopenharmony_ci * Index in released_tx_desc for first byte that holds 5262306a36Sopenharmony_ci * released tx host desc 5362306a36Sopenharmony_ci */ 5462306a36Sopenharmony_ci u8 fw_release_idx; 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci /* 5762306a36Sopenharmony_ci * Array of host Tx descriptors, where fw_release_idx 5862306a36Sopenharmony_ci * indicated the first released idx. 5962306a36Sopenharmony_ci */ 6062306a36Sopenharmony_ci u8 released_tx_desc[WL18XX_FW_MAX_TX_STATUS_DESC]; 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci /* A bitmap representing the currently suspended links. The suspend 6362306a36Sopenharmony_ci * is short lived, for multi-channel Tx requirements. 6462306a36Sopenharmony_ci */ 6562306a36Sopenharmony_ci __le32 link_suspend_bitmap; 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci /* packet threshold for an "almost empty" AC, 6862306a36Sopenharmony_ci * for Tx schedulng purposes 6962306a36Sopenharmony_ci */ 7062306a36Sopenharmony_ci u8 tx_ac_threshold; 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci /* number of packets to queue up for a link in PS */ 7362306a36Sopenharmony_ci u8 tx_ps_threshold; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci /* number of packet to queue up for a suspended link */ 7662306a36Sopenharmony_ci u8 tx_suspend_threshold; 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci /* Should have less than this number of packets in queue of a slow 7962306a36Sopenharmony_ci * link to qualify as high priority link 8062306a36Sopenharmony_ci */ 8162306a36Sopenharmony_ci u8 tx_slow_link_prio_threshold; 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci /* Should have less than this number of packets in queue of a fast 8462306a36Sopenharmony_ci * link to qualify as high priority link 8562306a36Sopenharmony_ci */ 8662306a36Sopenharmony_ci u8 tx_fast_link_prio_threshold; 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci /* Should have less than this number of packets in queue of a slow 8962306a36Sopenharmony_ci * link before we stop queuing up packets for it. 9062306a36Sopenharmony_ci */ 9162306a36Sopenharmony_ci u8 tx_slow_stop_threshold; 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci /* Should have less than this number of packets in queue of a fast 9462306a36Sopenharmony_ci * link before we stop queuing up packets for it. 9562306a36Sopenharmony_ci */ 9662306a36Sopenharmony_ci u8 tx_fast_stop_threshold; 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci u8 padding[3]; 9962306a36Sopenharmony_ci}; 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_cistruct wl18xx_fw_packet_counters { 10262306a36Sopenharmony_ci /* Cumulative counter of released packets per AC */ 10362306a36Sopenharmony_ci u8 tx_released_pkts[NUM_TX_QUEUES]; 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci /* Cumulative counter of freed packets per HLID */ 10662306a36Sopenharmony_ci u8 tx_lnk_free_pkts[WL18XX_MAX_LINKS]; 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci /* Cumulative counter of released Voice memory blocks */ 10962306a36Sopenharmony_ci u8 tx_voice_released_blks; 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci /* Tx rate of the last transmitted packet */ 11262306a36Sopenharmony_ci u8 tx_last_rate; 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci /* Tx rate or Tx rate estimate pre-calculated by fw in mbps units */ 11562306a36Sopenharmony_ci u8 tx_last_rate_mbps; 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci /* hlid for which the rates were reported */ 11862306a36Sopenharmony_ci u8 hlid; 11962306a36Sopenharmony_ci} __packed; 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci/* FW status registers */ 12262306a36Sopenharmony_cistruct wl18xx_fw_status { 12362306a36Sopenharmony_ci __le32 intr; 12462306a36Sopenharmony_ci u8 fw_rx_counter; 12562306a36Sopenharmony_ci u8 drv_rx_counter; 12662306a36Sopenharmony_ci u8 reserved; 12762306a36Sopenharmony_ci u8 tx_results_counter; 12862306a36Sopenharmony_ci __le32 rx_pkt_descs[WL18XX_NUM_RX_DESCRIPTORS]; 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ci __le32 fw_localtime; 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci /* 13362306a36Sopenharmony_ci * A bitmap (where each bit represents a single HLID) 13462306a36Sopenharmony_ci * to indicate if the station is in PS mode. 13562306a36Sopenharmony_ci */ 13662306a36Sopenharmony_ci __le32 link_ps_bitmap; 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_ci /* 13962306a36Sopenharmony_ci * A bitmap (where each bit represents a single HLID) to indicate 14062306a36Sopenharmony_ci * if the station is in Fast mode 14162306a36Sopenharmony_ci */ 14262306a36Sopenharmony_ci __le32 link_fast_bitmap; 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci /* Cumulative counter of total released mem blocks since FW-reset */ 14562306a36Sopenharmony_ci __le32 total_released_blks; 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_ci /* Size (in Memory Blocks) of TX pool */ 14862306a36Sopenharmony_ci __le32 tx_total; 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_ci struct wl18xx_fw_packet_counters counters; 15162306a36Sopenharmony_ci 15262306a36Sopenharmony_ci __le32 log_start_addr; 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_ci /* Private status to be used by the lower drivers */ 15562306a36Sopenharmony_ci struct wl18xx_fw_status_priv priv; 15662306a36Sopenharmony_ci} __packed; 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ci#define WL18XX_PHY_VERSION_MAX_LEN 20 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_cistruct wl18xx_static_data_priv { 16162306a36Sopenharmony_ci char phy_version[WL18XX_PHY_VERSION_MAX_LEN]; 16262306a36Sopenharmony_ci}; 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_cistruct wl18xx_clk_cfg { 16562306a36Sopenharmony_ci u32 n; 16662306a36Sopenharmony_ci u32 m; 16762306a36Sopenharmony_ci u32 p; 16862306a36Sopenharmony_ci u32 q; 16962306a36Sopenharmony_ci bool swallow; 17062306a36Sopenharmony_ci}; 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_cienum { 17362306a36Sopenharmony_ci CLOCK_CONFIG_16_2_M = 1, 17462306a36Sopenharmony_ci CLOCK_CONFIG_16_368_M, 17562306a36Sopenharmony_ci CLOCK_CONFIG_16_8_M, 17662306a36Sopenharmony_ci CLOCK_CONFIG_19_2_M, 17762306a36Sopenharmony_ci CLOCK_CONFIG_26_M, 17862306a36Sopenharmony_ci CLOCK_CONFIG_32_736_M, 17962306a36Sopenharmony_ci CLOCK_CONFIG_33_6_M, 18062306a36Sopenharmony_ci CLOCK_CONFIG_38_468_M, 18162306a36Sopenharmony_ci CLOCK_CONFIG_52_M, 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_ci NUM_CLOCK_CONFIGS, 18462306a36Sopenharmony_ci}; 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_ci#endif /* __WL18XX_PRIV_H__ */ 187