mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-23 10:12:24 +00:00
The calibration blob for a chip is normally stored in SROM and loaded internally by the firmware. However, Apple ARM64 platforms instead store it as part of platform configuration data, and provide it via the Apple Device Tree. We forward this into the Linux DT in the bootloader. Add support for taking this blob from the DT and loading it into the dongle. The loading mechanism is the same as used for the CLM and TxCap blobs. Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com> Signed-off-by: Hector Martin <marcan@marcan.st> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/20230214092423.15175-10-marcan@marcan.st
96 lines
2.9 KiB
C
96 lines
2.9 KiB
C
// SPDX-License-Identifier: ISC
|
|
/*
|
|
* Copyright (c) 2014 Broadcom Corporation
|
|
*/
|
|
#ifndef BRCMFMAC_COMMON_H
|
|
#define BRCMFMAC_COMMON_H
|
|
|
|
#include <linux/platform_device.h>
|
|
#include <linux/platform_data/brcmfmac.h>
|
|
#include "fwil_types.h"
|
|
|
|
#define BRCMF_FW_ALTPATH_LEN 256
|
|
|
|
/* Definitions for the module global and device specific settings are defined
|
|
* here. Two structs are used for them. brcmf_mp_global_t and brcmf_mp_device.
|
|
* The mp_global is instantiated once in a global struct and gets initialized
|
|
* by the common_attach function which should be called before any other
|
|
* (module) initiliazation takes place. The device specific settings is part
|
|
* of the drvr struct and should be initialized on every brcmf_attach.
|
|
*/
|
|
|
|
/**
|
|
* struct brcmf_mp_global_t - Global module paramaters.
|
|
*
|
|
* @firmware_path: Alternative firmware path.
|
|
*/
|
|
struct brcmf_mp_global_t {
|
|
char firmware_path[BRCMF_FW_ALTPATH_LEN];
|
|
};
|
|
|
|
extern struct brcmf_mp_global_t brcmf_mp_global;
|
|
|
|
/**
|
|
* struct brcmf_mp_device - Device module paramaters.
|
|
*
|
|
* @p2p_enable: Legacy P2P0 enable (old wpa_supplicant).
|
|
* @feature_disable: Feature_disable bitmask.
|
|
* @fcmode: FWS flow control.
|
|
* @roamoff: Firmware roaming off?
|
|
* @ignore_probe_fail: Ignore probe failure.
|
|
* @trivial_ccode_map: Assume firmware uses ISO3166 country codes with rev 0
|
|
* @country_codes: If available, pointer to struct for translating country codes
|
|
* @bus: Bus specific platform data. Only SDIO at the mmoment.
|
|
*/
|
|
struct brcmf_mp_device {
|
|
bool p2p_enable;
|
|
unsigned int feature_disable;
|
|
int fcmode;
|
|
bool roamoff;
|
|
bool iapp;
|
|
bool ignore_probe_fail;
|
|
bool trivial_ccode_map;
|
|
struct brcmfmac_pd_cc *country_codes;
|
|
const char *board_type;
|
|
unsigned char mac[ETH_ALEN];
|
|
const char *antenna_sku;
|
|
const void *cal_blob;
|
|
int cal_size;
|
|
union {
|
|
struct brcmfmac_sdio_pd sdio;
|
|
} bus;
|
|
};
|
|
|
|
void brcmf_c_set_joinpref_default(struct brcmf_if *ifp);
|
|
|
|
struct brcmf_mp_device *brcmf_get_module_param(struct device *dev,
|
|
enum brcmf_bus_type bus_type,
|
|
u32 chip, u32 chiprev);
|
|
void brcmf_release_module_param(struct brcmf_mp_device *module_param);
|
|
|
|
/* Sets dongle media info (drv_version, mac address). */
|
|
int brcmf_c_preinit_dcmds(struct brcmf_if *ifp);
|
|
int brcmf_c_set_cur_etheraddr(struct brcmf_if *ifp, const u8 *addr);
|
|
|
|
#ifdef CONFIG_DMI
|
|
void brcmf_dmi_probe(struct brcmf_mp_device *settings, u32 chip, u32 chiprev);
|
|
#else
|
|
static inline void
|
|
brcmf_dmi_probe(struct brcmf_mp_device *settings, u32 chip, u32 chiprev) {}
|
|
#endif
|
|
|
|
#ifdef CONFIG_ACPI
|
|
void brcmf_acpi_probe(struct device *dev, enum brcmf_bus_type bus_type,
|
|
struct brcmf_mp_device *settings);
|
|
#else
|
|
static inline void brcmf_acpi_probe(struct device *dev,
|
|
enum brcmf_bus_type bus_type,
|
|
struct brcmf_mp_device *settings) {}
|
|
#endif
|
|
|
|
u8 brcmf_map_prio_to_prec(void *cfg, u8 prio);
|
|
|
|
u8 brcmf_map_prio_to_aci(void *cfg, u8 prio);
|
|
|
|
#endif /* BRCMFMAC_COMMON_H */
|