blob: aca4961bf50eebccccb39923f7a6472220bb34f0 [file] [log] [blame]
/*
* Copyright (c) 2013-2017 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
* above copyright notice and this permission notice appear in all
* copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/*
* This file was originally distributed by Qualcomm Atheros, Inc.
* under proprietary terms before Copyright ownership was assigned
* to the Linux Foundation.
*/
#ifndef _OL_FW_H_
#define _OL_FW_H_
#ifdef QCA_WIFI_FTM
#include "vos_types.h"
#endif
#define AR6004_VERSION_REV1_3 0x31c8088a
#define AR9888_REV1_VERSION 0x4000002c
#define AR9888_REV2_VERSION 0x4100016c
#define QCA_VERSION 0x4100270f
#define AR6320_REV1_VERSION 0x5000000
#define AR6320_REV1_1_VERSION 0x5000001
#define AR6320_REV1_VERSION_1 AR6320_REV1_1_VERSION
#define AR6320_REV1_3_VERSION 0x5000003
#define AR6320_REV2_VERSION AR6320_REV1_1_VERSION
#define AR6320_REV2_1_VERSION 0x5010000
#define AR6320_REV3_VERSION 0x5020000
#define QCA9377_REV1_1_VERSION 0x5020001
#define AR6320_REV3_2_VERSION 0x5030000
#define AR6320_REV4_VERSION AR6320_REV2_1_VERSION
#define QCA9379_REV1_VERSION 0x5040000
#define AR6320_DEV_VERSION 0x1000000
#define QCA_FIRMWARE_FILE "athwlan.bin"
#define QCA_UTF_FIRMWARE_FILE "utf.bin"
#define QCA_BOARD_DATA_FILE "fakeboar.bin"
#define QCA_OTP_FILE "otp.bin"
#define QCA_SETUP_FILE "athsetup.bin"
#define AR61X4_SINGLE_FILE "qca61x4.bin"
#define QCA_FIRMWARE_EPPING_FILE "epping.bin"
/* Configuration for statistics pushed by firmware */
#define PDEV_DEFAULT_STATS_UPDATE_PERIOD 500
#define VDEV_DEFAULT_STATS_UPDATE_PERIOD 500
#define PEER_DEFAULT_STATS_UPDATE_PERIOD 500
/*
* Note that not all the register locations are accessible.
* A list of accessible target registers are specified with
* their start and end addresses in a table for given target
* version. We should NOT access other locations as either
* they are invalid locations or host does not have read
* access to it or the value of the particular register
* read might change
*/
#define REGISTER_LOCATION 0x00000800
#ifdef TARGET_DUMP_FOR_NON_QC_PLATFORM
#ifdef HIF_SDIO
#define REG_SIZE 0x0007F820
#endif
#endif
#if defined(TARGET_DUMP_FOR_NON_QC_PLATFORM) && !defined(HIF_PCI)
#define DRAM_LOCATION 0x00400000
#ifdef HIF_USB
#define DRAM_SIZE 0x00098000
#else
#define DRAM_SIZE 0x00097FFC
#endif
#define IRAM_LOCATION 0x00980000
#ifdef HIF_USB
#define IRAM_SIZE 0x000C0000
#else
#define IRAM_SIZE 0x000BFFFC
#endif
#define AXI_LOCATION 0x000a0000
#ifdef HIF_USB
#define AXI_SIZE 0x00020000
#else
#define AXI_SIZE 0x0001FFFC
#endif
#else /* ELSE TARGET_DUMP_FOR_NON_QC_PLATFORM */
#define DRAM_LOCATION 0x00400000
#define DRAM_LOCAL_BASE_ADDRESS (0x100000)
#ifdef HIF_PCI
#define DRAM_SIZE 0x000a8000
#else
#define DRAM_SIZE 0x00098000
#endif
#ifdef HIF_PCI
#define IRAM1_LOCATION 0x00980000
#define IRAM1_SIZE 0x00080000
#define IRAM2_LOCATION 0x00a00000
#define IRAM2_SIZE 0x00040000
#ifdef CONFIG_NON_QC_PLATFORM_PCI
#define REG_SIZE 0x0007F820
#endif
#elif defined(HIF_SDIO) || defined(HIF_USB)
#define IRAM_LOCATION 0x00980000
#define IRAM_SIZE 0x000C0000
#else /* ELSE HIF_PCI */
#define IRAM_LOCATION 0x00980000
#define IRAM_SIZE 0x00038000
#endif /* END HIF_PCI */
#define AXI_LOCATION 0x000a0000
#ifdef HIF_PCI
#define AXI_SIZE 0x00018000
#else
#define AXI_SIZE 0x00020000
#endif /* #ifdef HIF_PCIE */
#endif /* END of ELSE TARGET_DUMP_FOR_NON_QC_PLATFORM*/
#define CE_OFFSET 0x00000400
#define CE_USEFUL_SIZE 0x00000058
#define TOTAL_DUMP_SIZE 0x00200000
#define PCIE_READ_LIMIT 0x00005000
#define SHA256_DIGEST_SIZE 32
struct hash_fw {
u8 qwlan[SHA256_DIGEST_SIZE];
u8 otp[SHA256_DIGEST_SIZE];
u8 bdwlan[SHA256_DIGEST_SIZE];
u8 utf[SHA256_DIGEST_SIZE];
};
int ol_target_coredump(void *instance, void* memoryBlock,
u_int32_t blockLength);
int ol_diag_read(struct ol_softc *scn, u_int8_t* buffer,
u_int32_t pos, size_t count);
void ol_schedule_ramdump_work(struct ol_softc *scn);
void ol_schedule_fw_indication_work(struct ol_softc *scn);
int ol_copy_ramdump(struct ol_softc *scn);
int dump_CE_register(struct ol_softc *scn);
int ol_download_firmware(struct ol_softc *scn);
int ol_configure_target(struct ol_softc *scn);
void ol_target_failure(void *instance, A_STATUS status);
u_int8_t ol_get_number_of_peers_supported(struct ol_softc *scn);
#ifdef REMOVE_PKT_LOG
static inline void ol_pktlog_init(void *)
{
}
#else
void ol_pktlog_init(void *);
#endif
#if defined(HIF_SDIO)
void ol_target_ready(struct ol_softc *scn, void *cfg_ctx);
#else
static inline void ol_target_ready(struct ol_softc *scn, void *cfg_ctx)
{
}
#endif
#endif /* _OL_FW_H_ */