162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * This file is part of wl12xx 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2011 Texas Instruments Inc. 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#ifndef __WL12XX_PRIV_H__ 962306a36Sopenharmony_ci#define __WL12XX_PRIV_H__ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include "conf.h" 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci/* WiLink 6/7 chip IDs */ 1462306a36Sopenharmony_ci#define CHIP_ID_127X_PG10 (0x04030101) 1562306a36Sopenharmony_ci#define CHIP_ID_127X_PG20 (0x04030111) 1662306a36Sopenharmony_ci#define CHIP_ID_128X_PG10 (0x05030101) 1762306a36Sopenharmony_ci#define CHIP_ID_128X_PG20 (0x05030111) 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci/* FW chip version for wl127x */ 2062306a36Sopenharmony_ci#define WL127X_CHIP_VER 6 2162306a36Sopenharmony_ci/* minimum single-role FW version for wl127x */ 2262306a36Sopenharmony_ci#define WL127X_IFTYPE_SR_VER 3 2362306a36Sopenharmony_ci#define WL127X_MAJOR_SR_VER 10 2462306a36Sopenharmony_ci#define WL127X_SUBTYPE_SR_VER WLCORE_FW_VER_IGNORE 2562306a36Sopenharmony_ci#define WL127X_MINOR_SR_VER 133 2662306a36Sopenharmony_ci/* minimum multi-role FW version for wl127x */ 2762306a36Sopenharmony_ci#define WL127X_IFTYPE_MR_VER 5 2862306a36Sopenharmony_ci#define WL127X_MAJOR_MR_VER 7 2962306a36Sopenharmony_ci#define WL127X_SUBTYPE_MR_VER WLCORE_FW_VER_IGNORE 3062306a36Sopenharmony_ci#define WL127X_MINOR_MR_VER 42 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci/* FW chip version for wl128x */ 3362306a36Sopenharmony_ci#define WL128X_CHIP_VER 7 3462306a36Sopenharmony_ci/* minimum single-role FW version for wl128x */ 3562306a36Sopenharmony_ci#define WL128X_IFTYPE_SR_VER 3 3662306a36Sopenharmony_ci#define WL128X_MAJOR_SR_VER 10 3762306a36Sopenharmony_ci#define WL128X_SUBTYPE_SR_VER WLCORE_FW_VER_IGNORE 3862306a36Sopenharmony_ci#define WL128X_MINOR_SR_VER 133 3962306a36Sopenharmony_ci/* minimum multi-role FW version for wl128x */ 4062306a36Sopenharmony_ci#define WL128X_IFTYPE_MR_VER 5 4162306a36Sopenharmony_ci#define WL128X_MAJOR_MR_VER 7 4262306a36Sopenharmony_ci#define WL128X_SUBTYPE_MR_VER WLCORE_FW_VER_IGNORE 4362306a36Sopenharmony_ci#define WL128X_MINOR_MR_VER 42 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci#define WL12XX_AGGR_BUFFER_SIZE (4 * PAGE_SIZE) 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci#define WL12XX_NUM_TX_DESCRIPTORS 16 4862306a36Sopenharmony_ci#define WL12XX_NUM_RX_DESCRIPTORS 8 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci#define WL12XX_NUM_MAC_ADDRESSES 2 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci#define WL12XX_RX_BA_MAX_SESSIONS 3 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci#define WL12XX_MAX_AP_STATIONS 8 5562306a36Sopenharmony_ci#define WL12XX_MAX_LINKS 12 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_cistruct wl127x_rx_mem_pool_addr { 5862306a36Sopenharmony_ci u32 addr; 5962306a36Sopenharmony_ci u32 addr_extra; 6062306a36Sopenharmony_ci}; 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_cistruct wl12xx_priv { 6362306a36Sopenharmony_ci struct wl12xx_priv_conf conf; 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci int ref_clock; 6662306a36Sopenharmony_ci int tcxo_clock; 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci struct wl127x_rx_mem_pool_addr *rx_mem_addr; 6962306a36Sopenharmony_ci}; 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci/* Reference clock values */ 7262306a36Sopenharmony_cienum { 7362306a36Sopenharmony_ci WL12XX_REFCLOCK_19 = 0, /* 19.2 MHz */ 7462306a36Sopenharmony_ci WL12XX_REFCLOCK_26 = 1, /* 26 MHz */ 7562306a36Sopenharmony_ci WL12XX_REFCLOCK_38 = 2, /* 38.4 MHz */ 7662306a36Sopenharmony_ci WL12XX_REFCLOCK_52 = 3, /* 52 MHz */ 7762306a36Sopenharmony_ci WL12XX_REFCLOCK_38_XTAL = 4, /* 38.4 MHz, XTAL */ 7862306a36Sopenharmony_ci WL12XX_REFCLOCK_26_XTAL = 5, /* 26 MHz, XTAL */ 7962306a36Sopenharmony_ci}; 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci/* TCXO clock values */ 8262306a36Sopenharmony_cienum { 8362306a36Sopenharmony_ci WL12XX_TCXOCLOCK_19_2 = 0, /* 19.2MHz */ 8462306a36Sopenharmony_ci WL12XX_TCXOCLOCK_26 = 1, /* 26 MHz */ 8562306a36Sopenharmony_ci WL12XX_TCXOCLOCK_38_4 = 2, /* 38.4MHz */ 8662306a36Sopenharmony_ci WL12XX_TCXOCLOCK_52 = 3, /* 52 MHz */ 8762306a36Sopenharmony_ci WL12XX_TCXOCLOCK_16_368 = 4, /* 16.368 MHz */ 8862306a36Sopenharmony_ci WL12XX_TCXOCLOCK_32_736 = 5, /* 32.736 MHz */ 8962306a36Sopenharmony_ci WL12XX_TCXOCLOCK_16_8 = 6, /* 16.8 MHz */ 9062306a36Sopenharmony_ci WL12XX_TCXOCLOCK_33_6 = 7, /* 33.6 MHz */ 9162306a36Sopenharmony_ci}; 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_cistruct wl12xx_clock { 9462306a36Sopenharmony_ci u32 freq; 9562306a36Sopenharmony_ci bool xtal; 9662306a36Sopenharmony_ci u8 hw_idx; 9762306a36Sopenharmony_ci}; 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_cistruct wl12xx_fw_packet_counters { 10062306a36Sopenharmony_ci /* Cumulative counter of released packets per AC */ 10162306a36Sopenharmony_ci u8 tx_released_pkts[NUM_TX_QUEUES]; 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci /* Cumulative counter of freed packets per HLID */ 10462306a36Sopenharmony_ci u8 tx_lnk_free_pkts[WL12XX_MAX_LINKS]; 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_ci /* Cumulative counter of released Voice memory blocks */ 10762306a36Sopenharmony_ci u8 tx_voice_released_blks; 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci /* Tx rate of the last transmitted packet */ 11062306a36Sopenharmony_ci u8 tx_last_rate; 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci u8 padding[2]; 11362306a36Sopenharmony_ci} __packed; 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ci/* FW status registers */ 11662306a36Sopenharmony_cistruct wl12xx_fw_status { 11762306a36Sopenharmony_ci __le32 intr; 11862306a36Sopenharmony_ci u8 fw_rx_counter; 11962306a36Sopenharmony_ci u8 drv_rx_counter; 12062306a36Sopenharmony_ci u8 reserved; 12162306a36Sopenharmony_ci u8 tx_results_counter; 12262306a36Sopenharmony_ci __le32 rx_pkt_descs[WL12XX_NUM_RX_DESCRIPTORS]; 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_ci __le32 fw_localtime; 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_ci /* 12762306a36Sopenharmony_ci * A bitmap (where each bit represents a single HLID) 12862306a36Sopenharmony_ci * to indicate if the station is in PS mode. 12962306a36Sopenharmony_ci */ 13062306a36Sopenharmony_ci __le32 link_ps_bitmap; 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci /* 13362306a36Sopenharmony_ci * A bitmap (where each bit represents a single HLID) to indicate 13462306a36Sopenharmony_ci * if the station is in Fast mode 13562306a36Sopenharmony_ci */ 13662306a36Sopenharmony_ci __le32 link_fast_bitmap; 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_ci /* Cumulative counter of total released mem blocks since FW-reset */ 13962306a36Sopenharmony_ci __le32 total_released_blks; 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci /* Size (in Memory Blocks) of TX pool */ 14262306a36Sopenharmony_ci __le32 tx_total; 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci struct wl12xx_fw_packet_counters counters; 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ci __le32 log_start_addr; 14762306a36Sopenharmony_ci} __packed; 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci#endif /* __WL12XX_PRIV_H__ */ 150