xref: /dpdk/drivers/bus/auxiliary/private.h (revision 2b843cac232eb3f2fa79e4254e21766817e2019f)
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