#include <linux/acpi.h>
#include <linux/xarray.h>
#include <linux/fw_table.h>
#include <linux/node.h>
#include <linux/overflow.h>
#include "cxlpci.h"
#include "cxlmem.h"
#include "core.h"
#include "cxl.h"
struct dsmas_entry { … };
static u32 cdat_normalize(u16 entry, u64 base, u8 type)
{ … }
static int cdat_dsmas_handler(union acpi_subtable_headers *header, void *arg,
const unsigned long end)
{ … }
static void __cxl_access_coordinate_set(struct access_coordinate *coord,
int access, unsigned int val)
{ … }
static void cxl_access_coordinate_set(struct access_coordinate *coord,
int access, unsigned int val)
{ … }
static int cdat_dslbis_handler(union acpi_subtable_headers *header, void *arg,
const unsigned long end)
{ … }
static int cdat_table_parse_output(int rc)
{ … }
static int cxl_cdat_endpoint_process(struct cxl_port *port,
struct xarray *dsmas_xa)
{ … }
static int cxl_port_perf_data_calculate(struct cxl_port *port,
struct xarray *dsmas_xa)
{ … }
static void update_perf_entry(struct device *dev, struct dsmas_entry *dent,
struct cxl_dpa_perf *dpa_perf)
{ … }
static void cxl_memdev_set_qos_class(struct cxl_dev_state *cxlds,
struct xarray *dsmas_xa)
{ … }
static int match_cxlrd_qos_class(struct device *dev, void *data)
{ … }
static void reset_dpa_perf(struct cxl_dpa_perf *dpa_perf)
{ … }
static bool cxl_qos_match(struct cxl_port *root_port,
struct cxl_dpa_perf *dpa_perf)
{ … }
static int match_cxlrd_hb(struct device *dev, void *data)
{ … }
static int cxl_qos_class_verify(struct cxl_memdev *cxlmd)
{ … }
static void discard_dsmas(struct xarray *xa)
{ … }
DEFINE_FREE(…)
void cxl_endpoint_parse_cdat(struct cxl_port *port)
{ … }
EXPORT_SYMBOL_NS_GPL(…);
static int cdat_sslbis_handler(union acpi_subtable_headers *header, void *arg,
const unsigned long end)
{ … }
void cxl_switch_parse_cdat(struct cxl_port *port)
{ … }
EXPORT_SYMBOL_NS_GPL(…);
static void __cxl_coordinates_combine(struct access_coordinate *out,
struct access_coordinate *c1,
struct access_coordinate *c2)
{ … }
void cxl_coordinates_combine(struct access_coordinate *out,
struct access_coordinate *c1,
struct access_coordinate *c2)
{ … }
MODULE_IMPORT_NS(…);
static void cxl_bandwidth_add(struct access_coordinate *coord,
struct access_coordinate *c1,
struct access_coordinate *c2)
{ … }
static bool dpa_perf_contains(struct cxl_dpa_perf *perf,
struct resource *dpa_res)
{ … }
static struct cxl_dpa_perf *cxled_get_dpa_perf(struct cxl_endpoint_decoder *cxled,
enum cxl_decoder_mode mode)
{ … }
struct cxl_perf_ctx { … };
static int cxl_endpoint_gather_bandwidth(struct cxl_region *cxlr,
struct cxl_endpoint_decoder *cxled,
struct xarray *usp_xa,
bool *gp_is_root)
{ … }
static void free_perf_xa(struct xarray *xa)
{ … }
DEFINE_FREE(…)
static struct xarray *cxl_switch_gather_bandwidth(struct cxl_region *cxlr,
struct xarray *input_xa,
bool *gp_is_root)
{ … }
static struct xarray *cxl_rp_gather_bandwidth(struct xarray *xa)
{ … }
static struct xarray *cxl_hb_gather_bandwidth(struct xarray *xa)
{ … }
static void cxl_region_update_bandwidth(struct cxl_region *cxlr,
struct xarray *input_xa)
{ … }
void cxl_region_shared_upstream_bandwidth_update(struct cxl_region *cxlr)
{ … }
void cxl_region_perf_data_calculate(struct cxl_region *cxlr,
struct cxl_endpoint_decoder *cxled)
{ … }
int cxl_update_hmat_access_coordinates(int nid, struct cxl_region *cxlr,
enum access_coordinate_class access)
{ … }
bool cxl_need_node_perf_attrs_update(int nid)
{ … }