1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * Wifi Band Exclusion Interface (AMD ACPI Implementation) 4 * Copyright (C) 2023 Advanced Micro Devices 5 */ 6 7#ifndef _ACPI_AMD_WBRF_H 8#define _ACPI_AMD_WBRF_H 9 10#include <linux/device.h> 11#include <linux/notifier.h> 12 13/* The maximum number of frequency band ranges */ 14#define MAX_NUM_OF_WBRF_RANGES 11 15 16/* Record actions */ 17#define WBRF_RECORD_ADD 0x0 18#define WBRF_RECORD_REMOVE 0x1 19 20/** 21 * struct freq_band_range - Wifi frequency band range definition 22 * @start: start frequency point (in Hz) 23 * @end: end frequency point (in Hz) 24 */ 25struct freq_band_range { 26 u64 start; 27 u64 end; 28}; 29 30/** 31 * struct wbrf_ranges_in_out - wbrf ranges info 32 * @num_of_ranges: total number of band ranges in this struct 33 * @band_list: array of Wifi band ranges 34 */ 35struct wbrf_ranges_in_out { 36 u64 num_of_ranges; 37 struct freq_band_range band_list[MAX_NUM_OF_WBRF_RANGES]; 38}; 39 40/** 41 * enum wbrf_notifier_actions - wbrf notifier actions index 42 * @WBRF_CHANGED: there was some frequency band updates. The consumers 43 * should retrieve the latest active frequency bands. 44 */ 45enum wbrf_notifier_actions { 46 WBRF_CHANGED, 47}; 48 49#if IS_ENABLED(CONFIG_AMD_WBRF) 50bool acpi_amd_wbrf_supported_producer(struct device *dev); 51int acpi_amd_wbrf_add_remove(struct device *dev, uint8_t action, struct wbrf_ranges_in_out *in); 52bool acpi_amd_wbrf_supported_consumer(struct device *dev); 53int amd_wbrf_retrieve_freq_band(struct device *dev, struct wbrf_ranges_in_out *out); 54int amd_wbrf_register_notifier(struct notifier_block *nb); 55int amd_wbrf_unregister_notifier(struct notifier_block *nb); 56#else 57static inline 58bool acpi_amd_wbrf_supported_consumer(struct device *dev) 59{ 60 return false; 61} 62 63static inline 64int acpi_amd_wbrf_add_remove(struct device *dev, uint8_t action, struct wbrf_ranges_in_out *in) 65{ 66 return -ENODEV; 67} 68 69static inline 70bool acpi_amd_wbrf_supported_producer(struct device *dev) 71{ 72 return false; 73} 74static inline 75int amd_wbrf_retrieve_freq_band(struct device *dev, struct wbrf_ranges_in_out *out) 76{ 77 return -ENODEV; 78} 79static inline 80int amd_wbrf_register_notifier(struct notifier_block *nb) 81{ 82 return -ENODEV; 83} 84static inline 85int amd_wbrf_unregister_notifier(struct notifier_block *nb) 86{ 87 return -ENODEV; 88} 89#endif /* CONFIG_AMD_WBRF */ 90 91#endif /* _ACPI_AMD_WBRF_H */ 92