Path: blob/master/drivers/cdx/controller/mcdi_functions.h
29281 views
/* SPDX-License-Identifier: GPL-2.01*2* Header file for MCDI FW interaction for CDX bus.3*4* Copyright (C) 2022-2023, Advanced Micro Devices, Inc.5*/67#ifndef CDX_MCDI_FUNCTIONS_H8#define CDX_MCDI_FUNCTIONS_H910#include <linux/cdx/mcdi.h>11#include "mcdid.h"12#include "../cdx.h"1314/**15* cdx_mcdi_get_num_buses - Get the total number of buses on16* the controller.17* @cdx: pointer to MCDI interface.18*19* Return: total number of buses available on the controller,20* <0 on failure21*/22int cdx_mcdi_get_num_buses(struct cdx_mcdi *cdx);2324/**25* cdx_mcdi_get_num_devs - Get the total number of devices on26* a particular bus of the controller.27* @cdx: pointer to MCDI interface.28* @bus_num: Bus number.29*30* Return: total number of devices available on the bus, <0 on failure31*/32int cdx_mcdi_get_num_devs(struct cdx_mcdi *cdx, int bus_num);3334/**35* cdx_mcdi_get_dev_config - Get configuration for a particular36* bus_num:dev_num37* @cdx: pointer to MCDI interface.38* @bus_num: Bus number.39* @dev_num: Device number.40* @dev_params: Pointer to cdx_dev_params, this is populated by this41* device with the configuration corresponding to the provided42* bus_num:dev_num.43*44* Return: 0 total number of devices available on the bus, <0 on failure45*/46int cdx_mcdi_get_dev_config(struct cdx_mcdi *cdx,47u8 bus_num, u8 dev_num,48struct cdx_dev_params *dev_params);4950/**51* cdx_mcdi_bus_enable - Enable CDX bus represented by bus_num52* @cdx: pointer to MCDI interface.53* @bus_num: Bus number.54*55* Return: 0 on success, <0 on failure56*/57int cdx_mcdi_bus_enable(struct cdx_mcdi *cdx, u8 bus_num);5859/**60* cdx_mcdi_bus_disable - Disable CDX bus represented by bus_num61* @cdx: pointer to MCDI interface.62* @bus_num: Bus number.63*64* Return: 0 on success, <0 on failure65*/66int cdx_mcdi_bus_disable(struct cdx_mcdi *cdx, u8 bus_num);6768/**69* cdx_mcdi_write_msi - Write MSI configuration for CDX device70* @cdx: pointer to MCDI interface.71* @bus_num: Bus number.72* @dev_num: Device number.73* @msi_vector: Device-relative MSI vector number.74* Must be < MSI_COUNT reported for the device.75* @msi_address: MSI address to be used by the hardware. Typically, on ARM76* systems this address is translated by the IOMMU (if enabled) and77* it is the responsibility of the entity managing the IOMMU (APU kernel)78* to supply the correct IOVA here.79* @msi_data: MSI data to be used by the hardware. On versal-net, only the80* lower 16-bits are used, the remaining bits are ignored and should be81* set to zero.82*83* Return: 0 on success, <0 on failure84*/85int cdx_mcdi_write_msi(struct cdx_mcdi *cdx, u8 bus_num, u8 dev_num,86u32 msi_vector, u64 msi_address, u32 msi_data);8788/**89* cdx_mcdi_reset_device - Reset cdx device represented by bus_num:dev_num90* @cdx: pointer to MCDI interface.91* @bus_num: Bus number.92* @dev_num: Device number.93*94* Return: 0 on success, <0 on failure95*/96int cdx_mcdi_reset_device(struct cdx_mcdi *cdx,97u8 bus_num, u8 dev_num);9899/**100* cdx_mcdi_bus_master_enable - Set/Reset bus mastering for cdx device101* represented by bus_num:dev_num102* @cdx: pointer to MCDI interface.103* @bus_num: Bus number.104* @dev_num: Device number.105* @enable: Enable bus mastering if set, disable otherwise.106*107* Return: 0 on success, <0 on failure108*/109int cdx_mcdi_bus_master_enable(struct cdx_mcdi *cdx, u8 bus_num,110u8 dev_num, bool enable);111112/**113* cdx_mcdi_msi_enable - Enable/Disable MSIs for cdx device represented114* by bus_num:dev_num115* @cdx: pointer to MCDI interface.116* @bus_num: Bus number.117* @dev_num: Device number.118* @enable: Enable msi's if set, disable otherwise.119*120* Return: 0 on success, <0 on failure121*/122int cdx_mcdi_msi_enable(struct cdx_mcdi *cdx, u8 bus_num,123u8 dev_num, bool enable);124125#endif /* CDX_MCDI_FUNCTIONS_H */126127128