11afce308SXueming Li /* SPDX-License-Identifier: BSD-3-Clause 21afce308SXueming Li * Copyright (c) 2021 NVIDIA Corporation & Affiliates 31afce308SXueming Li */ 41afce308SXueming Li 51afce308SXueming Li #ifndef BUS_AUXILIARY_PRIVATE_H 61afce308SXueming Li #define BUS_AUXILIARY_PRIVATE_H 71afce308SXueming Li 81afce308SXueming Li #include <stdbool.h> 91afce308SXueming Li #include <stdio.h> 10f1f6ebc0SWilliam Tu #include <sys/queue.h> 111afce308SXueming Li 12a04322f6SDavid Marchand #include <bus_driver.h> 131afce308SXueming Li 14b3f89090SDavid Marchand #include "bus_auxiliary_driver.h" 15b3f89090SDavid Marchand 161afce308SXueming Li extern int auxiliary_bus_logtype; 17*2b843cacSDavid Marchand #define RTE_LOGTYPE_AUXILIARY_BUS auxiliary_bus_logtype 181afce308SXueming Li 191afce308SXueming Li #define AUXILIARY_LOG(level, ...) \ 20*2b843cacSDavid Marchand RTE_LOG_LINE(level, AUXILIARY_BUS, __VA_ARGS__) 211afce308SXueming Li 22b3f89090SDavid Marchand /* 23b3f89090SDavid Marchand * Structure describing the auxiliary bus 24b3f89090SDavid Marchand */ 25b3f89090SDavid Marchand struct rte_auxiliary_bus { 26b3f89090SDavid Marchand struct rte_bus bus; /* Inherit the generic class */ 27b3f89090SDavid Marchand TAILQ_HEAD(, rte_auxiliary_device) device_list; /* List of devices */ 28b3f89090SDavid Marchand TAILQ_HEAD(, rte_auxiliary_driver) driver_list; /* List of drivers */ 29b3f89090SDavid Marchand }; 30b3f89090SDavid Marchand 31b3f89090SDavid Marchand extern struct rte_auxiliary_bus auxiliary_bus; 32b3f89090SDavid Marchand 331afce308SXueming Li /* Auxiliary bus iterators */ 341afce308SXueming Li #define FOREACH_DEVICE_ON_AUXILIARY_BUS(p) \ 351afce308SXueming Li TAILQ_FOREACH(p, &(auxiliary_bus.device_list), next) 361afce308SXueming Li 371afce308SXueming Li #define FOREACH_DRIVER_ON_AUXILIARY_BUS(p) \ 381afce308SXueming Li TAILQ_FOREACH(p, &(auxiliary_bus.driver_list), next) 391afce308SXueming Li 401afce308SXueming Li /* 411afce308SXueming Li * Test whether the auxiliary device exist. 421afce308SXueming Li */ 431afce308SXueming Li bool auxiliary_dev_exists(const char *name); 441afce308SXueming Li 451afce308SXueming Li /* 461afce308SXueming Li * Scan the content of the auxiliary bus, and the devices in the devices 471afce308SXueming Li * list. 481afce308SXueming Li */ 491afce308SXueming Li int auxiliary_scan(void); 501afce308SXueming Li 511afce308SXueming Li /* 521afce308SXueming Li * Update a device being scanned. 531afce308SXueming Li */ 541afce308SXueming Li void auxiliary_on_scan(struct rte_auxiliary_device *aux_dev); 551afce308SXueming Li 561afce308SXueming Li /* 571afce308SXueming Li * Validate whether a device with given auxiliary device should be ignored 581afce308SXueming Li * or not. 591afce308SXueming Li */ 601afce308SXueming Li bool auxiliary_is_ignored_device(const char *name); 611afce308SXueming Li 621afce308SXueming Li /* 631afce308SXueming Li * Add an auxiliary device to the auxiliary bus (append to auxiliary device 641afce308SXueming Li * list). This function also updates the bus references of the auxiliary 651afce308SXueming Li * device and the generic device object embedded within. 661afce308SXueming Li */ 671afce308SXueming Li void auxiliary_add_device(struct rte_auxiliary_device *aux_dev); 681afce308SXueming Li 691afce308SXueming Li /* 701afce308SXueming Li * Insert an auxiliary device in the auxiliary bus at a particular location 711afce308SXueming Li * in the device list. It also updates the auxiliary bus reference of the 721afce308SXueming Li * new devices to be inserted. 731afce308SXueming Li */ 741afce308SXueming Li void auxiliary_insert_device(struct rte_auxiliary_device *exist_aux_dev, 751afce308SXueming Li struct rte_auxiliary_device *new_aux_dev); 761afce308SXueming Li 771afce308SXueming Li /* 781afce308SXueming Li * Match the auxiliary driver and device by driver function. 791afce308SXueming Li */ 801afce308SXueming Li bool auxiliary_match(const struct rte_auxiliary_driver *aux_drv, 811afce308SXueming Li const struct rte_auxiliary_device *aux_dev); 821afce308SXueming Li 831afce308SXueming Li /* 841afce308SXueming Li * Iterate over devices, matching any device against the provided string. 851afce308SXueming Li */ 861afce308SXueming Li void *auxiliary_dev_iterate(const void *start, const char *str, 871afce308SXueming Li const struct rte_dev_iterator *it); 881afce308SXueming Li 891afce308SXueming Li #endif /* BUS_AUXILIARY_PRIVATE_H */ 90