mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-28 16:56:26 +00:00
58e82a6266
Due to electrical and mechanical constraints in certain platform designs there may be likely interference of relatively high-powered harmonics of the (G-)DDR memory clocks with local radio module frequency bands used by Wifi 6/6e/7. To mitigate this, AMD has introduced a mechanism that devices can use to notify active use of particular frequencies so that other devices can make relative internal adjustments as necessary to avoid this resonance. Co-developed-by: Evan Quan <quanliangl@hotmail.com> Signed-off-by: Evan Quan <quanliangl@hotmail.com> Signed-off-by: Ma Jun <Jun.Ma2@amd.com> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com> Reviewed-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
92 lines
2.2 KiB
C
92 lines
2.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Wifi Band Exclusion Interface (AMD ACPI Implementation)
|
|
* Copyright (C) 2023 Advanced Micro Devices
|
|
*/
|
|
|
|
#ifndef _ACPI_AMD_WBRF_H
|
|
#define _ACPI_AMD_WBRF_H
|
|
|
|
#include <linux/device.h>
|
|
#include <linux/notifier.h>
|
|
|
|
/* The maximum number of frequency band ranges */
|
|
#define MAX_NUM_OF_WBRF_RANGES 11
|
|
|
|
/* Record actions */
|
|
#define WBRF_RECORD_ADD 0x0
|
|
#define WBRF_RECORD_REMOVE 0x1
|
|
|
|
/**
|
|
* struct freq_band_range - Wifi frequency band range definition
|
|
* @start: start frequency point (in Hz)
|
|
* @end: end frequency point (in Hz)
|
|
*/
|
|
struct freq_band_range {
|
|
u64 start;
|
|
u64 end;
|
|
};
|
|
|
|
/**
|
|
* struct wbrf_ranges_in_out - wbrf ranges info
|
|
* @num_of_ranges: total number of band ranges in this struct
|
|
* @band_list: array of Wifi band ranges
|
|
*/
|
|
struct wbrf_ranges_in_out {
|
|
u64 num_of_ranges;
|
|
struct freq_band_range band_list[MAX_NUM_OF_WBRF_RANGES];
|
|
};
|
|
|
|
/**
|
|
* enum wbrf_notifier_actions - wbrf notifier actions index
|
|
* @WBRF_CHANGED: there was some frequency band updates. The consumers
|
|
* should retrieve the latest active frequency bands.
|
|
*/
|
|
enum wbrf_notifier_actions {
|
|
WBRF_CHANGED,
|
|
};
|
|
|
|
#if IS_ENABLED(CONFIG_AMD_WBRF)
|
|
bool acpi_amd_wbrf_supported_producer(struct device *dev);
|
|
int acpi_amd_wbrf_add_remove(struct device *dev, uint8_t action, struct wbrf_ranges_in_out *in);
|
|
bool acpi_amd_wbrf_supported_consumer(struct device *dev);
|
|
int amd_wbrf_retrieve_freq_band(struct device *dev, struct wbrf_ranges_in_out *out);
|
|
int amd_wbrf_register_notifier(struct notifier_block *nb);
|
|
int amd_wbrf_unregister_notifier(struct notifier_block *nb);
|
|
#else
|
|
static inline
|
|
bool acpi_amd_wbrf_supported_consumer(struct device *dev)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
static inline
|
|
int acpi_amd_wbrf_add_remove(struct device *dev, uint8_t action, struct wbrf_ranges_in_out *in)
|
|
{
|
|
return -ENODEV;
|
|
}
|
|
|
|
static inline
|
|
bool acpi_amd_wbrf_supported_producer(struct device *dev)
|
|
{
|
|
return false;
|
|
}
|
|
static inline
|
|
int amd_wbrf_retrieve_freq_band(struct device *dev, struct wbrf_ranges_in_out *out)
|
|
{
|
|
return -ENODEV;
|
|
}
|
|
static inline
|
|
int amd_wbrf_register_notifier(struct notifier_block *nb)
|
|
{
|
|
return -ENODEV;
|
|
}
|
|
static inline
|
|
int amd_wbrf_unregister_notifier(struct notifier_block *nb)
|
|
{
|
|
return -ENODEV;
|
|
}
|
|
#endif /* CONFIG_AMD_WBRF */
|
|
|
|
#endif /* _ACPI_AMD_WBRF_H */
|