numam-dpdk/drivers/bus/vmbus/bus_vmbus_driver.h
David Marchand 1acb7f5474 dev: hide driver object
Make rte_driver opaque for non internal users.
This will make extending this object possible without breaking the ABI.

Introduce a new driver header and move rte_driver definition.
Update drivers and library to use the internal header.

Some applications may have been dereferencing rte_driver objects, mark
this object's accessors as stable.

Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Jay Jayatheerthan <jay.jayatheerthan@intel.com>
Acked-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Acked-by: Akhil Goyal <gakhil@marvell.com>
Acked-by: Abhinandan Gujjar <abhinandan.gujjar@intel.com>
2022-09-23 16:14:34 +02:00

107 lines
2.8 KiB
C

/* SPDX-License-Identifier: BSD-3-Clause
* Copyright (c) 2018, Microsoft Corporation.
* All Rights Reserved.
*/
#ifndef BUS_VMBUS_DRIVER_H
#define BUS_VMBUS_DRIVER_H
#ifdef __cplusplus
extern "C" {
#endif
#include <rte_bus_vmbus.h>
#include <rte_compat.h>
#include <dev_driver.h>
struct vmbus_channel;
struct vmbus_mon_page;
/** Maximum number of VMBUS resources. */
enum hv_uio_map {
HV_TXRX_RING_MAP = 0,
HV_INT_PAGE_MAP,
HV_MON_PAGE_MAP,
HV_RECV_BUF_MAP,
HV_SEND_BUF_MAP
};
#define VMBUS_MAX_RESOURCE 5
/**
* A structure describing a VMBUS device.
*/
struct rte_vmbus_device {
RTE_TAILQ_ENTRY(rte_vmbus_device) next; /**< Next probed VMBUS device */
const struct rte_vmbus_driver *driver; /**< Associated driver */
struct rte_device device; /**< Inherit core device */
rte_uuid_t device_id; /**< VMBUS device id */
rte_uuid_t class_id; /**< VMBUS device type */
uint32_t relid; /**< id for primary */
uint8_t monitor_id; /**< monitor page */
int uio_num; /**< UIO device number */
uint32_t *int_page; /**< VMBUS interrupt page */
struct vmbus_channel *primary; /**< VMBUS primary channel */
struct vmbus_mon_page *monitor_page; /**< VMBUS monitor page */
struct rte_intr_handle *intr_handle; /**< Interrupt handle */
struct rte_mem_resource resource[VMBUS_MAX_RESOURCE];
};
/**
* Initialization function for the driver called during VMBUS probing.
*/
typedef int (vmbus_probe_t)(struct rte_vmbus_driver *,
struct rte_vmbus_device *);
/**
* Initialization function for the driver called during hot plugging.
*/
typedef int (vmbus_remove_t)(struct rte_vmbus_device *);
/**
* A structure describing a VMBUS driver.
*/
struct rte_vmbus_driver {
RTE_TAILQ_ENTRY(rte_vmbus_driver) next; /**< Next in list. */
struct rte_driver driver;
vmbus_probe_t *probe; /**< Device Probe function. */
vmbus_remove_t *remove; /**< Device Remove function. */
const rte_uuid_t *id_table; /**< ID table. */
};
/**
* Register a VMBUS driver.
*
* @param driver
* A pointer to a rte_vmbus_driver structure describing the driver
* to be registered.
*/
__rte_internal
void rte_vmbus_register(struct rte_vmbus_driver *driver);
/**
* Unregister a VMBUS driver.
*
* @param driver
* A pointer to a rte_vmbus_driver structure describing the driver
* to be unregistered.
*/
__rte_internal
void rte_vmbus_unregister(struct rte_vmbus_driver *driver);
/** Helper for VMBUS device registration from driver instance */
#define RTE_PMD_REGISTER_VMBUS(nm, vmbus_drv) \
RTE_INIT(vmbusinitfn_ ##nm) \
{ \
(vmbus_drv).driver.name = RTE_STR(nm); \
rte_vmbus_register(&vmbus_drv); \
} \
RTE_PMD_EXPORT_NAME(nm, __COUNTER__)
#ifdef __cplusplus
}
#endif
#endif /* BUS_VMBUS_DRIVER_H */