1*5497616eSJim Harris /* SPDX-License-Identifier: BSD-3-Clause 2*5497616eSJim Harris * Copyright(c) 2014 6WIND S.A. 3*5497616eSJim Harris */ 4*5497616eSJim Harris 5*5497616eSJim Harris #ifndef _RTE_DEV_H_ 6*5497616eSJim Harris #define _RTE_DEV_H_ 7*5497616eSJim Harris 8*5497616eSJim Harris /** 9*5497616eSJim Harris * @file 10*5497616eSJim Harris * 11*5497616eSJim Harris * RTE PMD Registration Interface 12*5497616eSJim Harris * 13*5497616eSJim Harris * This file manages the list of device drivers. 14*5497616eSJim Harris */ 15*5497616eSJim Harris 16*5497616eSJim Harris #ifdef __cplusplus 17*5497616eSJim Harris extern "C" { 18*5497616eSJim Harris #endif 19*5497616eSJim Harris 20*5497616eSJim Harris #include <stdio.h> 21*5497616eSJim Harris 22*5497616eSJim Harris #include <rte_config.h> 23*5497616eSJim Harris #include <rte_common.h> 24*5497616eSJim Harris #include <rte_compat.h> 25*5497616eSJim Harris #include <rte_log.h> 26*5497616eSJim Harris 27*5497616eSJim Harris struct rte_bus; 28*5497616eSJim Harris struct rte_devargs; 29*5497616eSJim Harris struct rte_device; 30*5497616eSJim Harris struct rte_driver; 31*5497616eSJim Harris 32*5497616eSJim Harris /** 33*5497616eSJim Harris * The device event type. 34*5497616eSJim Harris */ 35*5497616eSJim Harris enum rte_dev_event_type { 36*5497616eSJim Harris RTE_DEV_EVENT_ADD, /**< device being added */ 37*5497616eSJim Harris RTE_DEV_EVENT_REMOVE, /**< device being removed */ 38*5497616eSJim Harris RTE_DEV_EVENT_MAX /**< max value of this enum */ 39*5497616eSJim Harris }; 40*5497616eSJim Harris 41*5497616eSJim Harris typedef void (*rte_dev_event_cb_fn)(const char *device_name, 42*5497616eSJim Harris enum rte_dev_event_type event, 43*5497616eSJim Harris void *cb_arg); 44*5497616eSJim Harris 45*5497616eSJim Harris /* Macros to check for invalid function pointers */ 46*5497616eSJim Harris #define RTE_FUNC_PTR_OR_ERR_RET(func, retval) RTE_DEPRECATED(RTE_FUNC_PTR_OR_ERR_RET) \ 47*5497616eSJim Harris do { \ 48*5497616eSJim Harris if ((func) == NULL) \ 49*5497616eSJim Harris return retval; \ 50*5497616eSJim Harris } while (0) 51*5497616eSJim Harris 52*5497616eSJim Harris #define RTE_FUNC_PTR_OR_RET(func) RTE_DEPRECATED(RTE_FUNC_PTR_OR_RET) \ 53*5497616eSJim Harris do { \ 54*5497616eSJim Harris if ((func) == NULL) \ 55*5497616eSJim Harris return; \ 56*5497616eSJim Harris } while (0) 57*5497616eSJim Harris 58*5497616eSJim Harris /** 59*5497616eSJim Harris * Device policies. 60*5497616eSJim Harris */ 61*5497616eSJim Harris enum rte_dev_policy { 62*5497616eSJim Harris RTE_DEV_ALLOWED, 63*5497616eSJim Harris RTE_DEV_BLOCKED, 64*5497616eSJim Harris }; 65*5497616eSJim Harris 66*5497616eSJim Harris /** 67*5497616eSJim Harris * A generic memory resource representation. 68*5497616eSJim Harris */ 69*5497616eSJim Harris struct rte_mem_resource { 70*5497616eSJim Harris uint64_t phys_addr; /**< Physical address, 0 if not resource. */ 71*5497616eSJim Harris uint64_t len; /**< Length of the resource. */ 72*5497616eSJim Harris void *addr; /**< Virtual address, NULL when not mapped. */ 73*5497616eSJim Harris }; 74*5497616eSJim Harris 75*5497616eSJim Harris /** 76*5497616eSJim Harris * Retrieve a driver name. 77*5497616eSJim Harris * 78*5497616eSJim Harris * @param driver 79*5497616eSJim Harris * A pointer to a driver structure. 80*5497616eSJim Harris * @return 81*5497616eSJim Harris * A pointer to the driver name string. 82*5497616eSJim Harris */ 83*5497616eSJim Harris const char * 84*5497616eSJim Harris rte_driver_name(const struct rte_driver *driver); 85*5497616eSJim Harris 86*5497616eSJim Harris /** 87*5497616eSJim Harris * Retrieve a device bus. 88*5497616eSJim Harris * 89*5497616eSJim Harris * @param dev 90*5497616eSJim Harris * A pointer to a device structure. 91*5497616eSJim Harris * @return 92*5497616eSJim Harris * A pointer to this device bus. 93*5497616eSJim Harris */ 94*5497616eSJim Harris const struct rte_bus * 95*5497616eSJim Harris rte_dev_bus(const struct rte_device *dev); 96*5497616eSJim Harris 97*5497616eSJim Harris /** 98*5497616eSJim Harris * Retrieve bus specific information for a device. 99*5497616eSJim Harris * 100*5497616eSJim Harris * @param dev 101*5497616eSJim Harris * A pointer to a device structure. 102*5497616eSJim Harris * @return 103*5497616eSJim Harris * A string describing this device or NULL if none is available. 104*5497616eSJim Harris */ 105*5497616eSJim Harris const char * 106*5497616eSJim Harris rte_dev_bus_info(const struct rte_device *dev); 107*5497616eSJim Harris 108*5497616eSJim Harris /** 109*5497616eSJim Harris * Retrieve a device arguments. 110*5497616eSJim Harris * 111*5497616eSJim Harris * @param dev 112*5497616eSJim Harris * A pointer to a device structure. 113*5497616eSJim Harris * @return 114*5497616eSJim Harris * A pointer to this device devargs. 115*5497616eSJim Harris */ 116*5497616eSJim Harris const struct rte_devargs * 117*5497616eSJim Harris rte_dev_devargs(const struct rte_device *dev); 118*5497616eSJim Harris 119*5497616eSJim Harris /** 120*5497616eSJim Harris * Retrieve a device driver. 121*5497616eSJim Harris * 122*5497616eSJim Harris * @param dev 123*5497616eSJim Harris * A pointer to a device structure. 124*5497616eSJim Harris * @return 125*5497616eSJim Harris * A pointer to this device driver. 126*5497616eSJim Harris */ 127*5497616eSJim Harris const struct rte_driver * 128*5497616eSJim Harris rte_dev_driver(const struct rte_device *dev); 129*5497616eSJim Harris 130*5497616eSJim Harris /** 131*5497616eSJim Harris * Retrieve a device name. 132*5497616eSJim Harris * 133*5497616eSJim Harris * @param dev 134*5497616eSJim Harris * A pointer to a device structure. 135*5497616eSJim Harris * @return 136*5497616eSJim Harris * A pointer to this device name. 137*5497616eSJim Harris */ 138*5497616eSJim Harris const char * 139*5497616eSJim Harris rte_dev_name(const struct rte_device *dev); 140*5497616eSJim Harris 141*5497616eSJim Harris /** 142*5497616eSJim Harris * Retrieve a device numa node. 143*5497616eSJim Harris * 144*5497616eSJim Harris * @param dev 145*5497616eSJim Harris * A pointer to a device structure. 146*5497616eSJim Harris * @return 147*5497616eSJim Harris * A pointer to this device numa node. 148*5497616eSJim Harris */ 149*5497616eSJim Harris int 150*5497616eSJim Harris rte_dev_numa_node(const struct rte_device *dev); 151*5497616eSJim Harris 152*5497616eSJim Harris /* 153*5497616eSJim Harris * Internal identifier length 154*5497616eSJim Harris * Sufficiently large to allow for UUID or PCI address 155*5497616eSJim Harris */ 156*5497616eSJim Harris #define RTE_DEV_NAME_MAX_LEN 64 157*5497616eSJim Harris 158*5497616eSJim Harris /** 159*5497616eSJim Harris * Query status of a device. 160*5497616eSJim Harris * 161*5497616eSJim Harris * @param dev 162*5497616eSJim Harris * Generic device pointer. 163*5497616eSJim Harris * @return 164*5497616eSJim Harris * (int)true if already probed successfully, 0 otherwise. 165*5497616eSJim Harris */ 166*5497616eSJim Harris int rte_dev_is_probed(const struct rte_device *dev); 167*5497616eSJim Harris 168*5497616eSJim Harris /** 169*5497616eSJim Harris * Hotplug add a given device to a specific bus. 170*5497616eSJim Harris * 171*5497616eSJim Harris * In multi-process, it will request other processes to add the same device. 172*5497616eSJim Harris * A failure, in any process, will rollback the action 173*5497616eSJim Harris * 174*5497616eSJim Harris * @param busname 175*5497616eSJim Harris * The bus name the device is added to. 176*5497616eSJim Harris * @param devname 177*5497616eSJim Harris * The device name. Based on this device name, eal will identify a driver 178*5497616eSJim Harris * capable of handling it and pass it to the driver probing function. 179*5497616eSJim Harris * @param drvargs 180*5497616eSJim Harris * Device arguments to be passed to the driver. 181*5497616eSJim Harris * @return 182*5497616eSJim Harris * 0 on success, negative on error. 183*5497616eSJim Harris */ 184*5497616eSJim Harris int rte_eal_hotplug_add(const char *busname, const char *devname, 185*5497616eSJim Harris const char *drvargs); 186*5497616eSJim Harris 187*5497616eSJim Harris /** 188*5497616eSJim Harris * Add matching devices. 189*5497616eSJim Harris * 190*5497616eSJim Harris * In multi-process, it will request other processes to add the same device. 191*5497616eSJim Harris * A failure, in any process, will rollback the action 192*5497616eSJim Harris * 193*5497616eSJim Harris * @param devargs 194*5497616eSJim Harris * Device arguments including bus, class and driver properties. 195*5497616eSJim Harris * @return 196*5497616eSJim Harris * 0 on success, negative on error. 197*5497616eSJim Harris */ 198*5497616eSJim Harris int rte_dev_probe(const char *devargs); 199*5497616eSJim Harris 200*5497616eSJim Harris /** 201*5497616eSJim Harris * Hotplug remove a given device from a specific bus. 202*5497616eSJim Harris * 203*5497616eSJim Harris * In multi-process, it will request other processes to remove the same device. 204*5497616eSJim Harris * A failure, in any process, will rollback the action 205*5497616eSJim Harris * 206*5497616eSJim Harris * @param busname 207*5497616eSJim Harris * The bus name the device is removed from. 208*5497616eSJim Harris * @param devname 209*5497616eSJim Harris * The device name being removed. 210*5497616eSJim Harris * @return 211*5497616eSJim Harris * 0 on success, negative on error. 212*5497616eSJim Harris */ 213*5497616eSJim Harris int rte_eal_hotplug_remove(const char *busname, const char *devname); 214*5497616eSJim Harris 215*5497616eSJim Harris /** 216*5497616eSJim Harris * Remove one device. 217*5497616eSJim Harris * 218*5497616eSJim Harris * In multi-process, it will request other processes to remove the same device. 219*5497616eSJim Harris * A failure, in any process, will rollback the action 220*5497616eSJim Harris * 221*5497616eSJim Harris * @param dev 222*5497616eSJim Harris * Data structure of the device to remove. 223*5497616eSJim Harris * @return 224*5497616eSJim Harris * 0 on success, negative on error. 225*5497616eSJim Harris */ 226*5497616eSJim Harris int rte_dev_remove(struct rte_device *dev); 227*5497616eSJim Harris 228*5497616eSJim Harris /** 229*5497616eSJim Harris * Device comparison function. 230*5497616eSJim Harris * 231*5497616eSJim Harris * This type of function is used to compare an rte_device with arbitrary 232*5497616eSJim Harris * data. 233*5497616eSJim Harris * 234*5497616eSJim Harris * @param dev 235*5497616eSJim Harris * Device handle. 236*5497616eSJim Harris * 237*5497616eSJim Harris * @param data 238*5497616eSJim Harris * Data to compare against. The type of this parameter is determined by 239*5497616eSJim Harris * the kind of comparison performed by the function. 240*5497616eSJim Harris * 241*5497616eSJim Harris * @return 242*5497616eSJim Harris * 0 if the device matches the data. 243*5497616eSJim Harris * !0 if the device does not match. 244*5497616eSJim Harris * <0 if ordering is possible and the device is lower than the data. 245*5497616eSJim Harris * >0 if ordering is possible and the device is greater than the data. 246*5497616eSJim Harris */ 247*5497616eSJim Harris typedef int (*rte_dev_cmp_t)(const struct rte_device *dev, const void *data); 248*5497616eSJim Harris 249*5497616eSJim Harris #define RTE_PMD_EXPORT_NAME_ARRAY(n, idx) n##idx[] 250*5497616eSJim Harris 251*5497616eSJim Harris #define RTE_PMD_EXPORT_NAME(name, idx) \ 252*5497616eSJim Harris static const char RTE_PMD_EXPORT_NAME_ARRAY(this_pmd_name, idx) \ 253*5497616eSJim Harris __rte_used = RTE_STR(name) 254*5497616eSJim Harris 255*5497616eSJim Harris #define DRV_EXP_TAG(name, tag) __##name##_##tag 256*5497616eSJim Harris 257*5497616eSJim Harris #define RTE_PMD_REGISTER_PCI_TABLE(name, table) \ 258*5497616eSJim Harris static const char DRV_EXP_TAG(name, pci_tbl_export)[] __rte_used = \ 259*5497616eSJim Harris RTE_STR(table) 260*5497616eSJim Harris 261*5497616eSJim Harris #define RTE_PMD_REGISTER_PARAM_STRING(name, str) \ 262*5497616eSJim Harris static const char DRV_EXP_TAG(name, param_string_export)[] \ 263*5497616eSJim Harris __rte_used = str 264*5497616eSJim Harris 265*5497616eSJim Harris /** 266*5497616eSJim Harris * Advertise the list of kernel modules required to run this driver 267*5497616eSJim Harris * 268*5497616eSJim Harris * This string lists the kernel modules required for the devices 269*5497616eSJim Harris * associated to a PMD. The format of each line of the string is: 270*5497616eSJim Harris * "<device-pattern> <kmod-expression>". 271*5497616eSJim Harris * 272*5497616eSJim Harris * The possible formats for the device pattern are: 273*5497616eSJim Harris * "*" all devices supported by this driver 274*5497616eSJim Harris * "pci:*" all PCI devices supported by this driver 275*5497616eSJim Harris * "pci:v8086:d*:sv*:sd*" all PCI devices supported by this driver 276*5497616eSJim Harris * whose vendor id is 0x8086. 277*5497616eSJim Harris * 278*5497616eSJim Harris * The format of the kernel modules list is a parenthesized expression 279*5497616eSJim Harris * containing logical-and (&) and logical-or (|). 280*5497616eSJim Harris * 281*5497616eSJim Harris * The device pattern and the kmod expression are separated by a space. 282*5497616eSJim Harris * 283*5497616eSJim Harris * Example: 284*5497616eSJim Harris * - "* igb_uio | uio_pci_generic | vfio" 285*5497616eSJim Harris */ 286*5497616eSJim Harris #define RTE_PMD_REGISTER_KMOD_DEP(name, str) \ 287*5497616eSJim Harris static const char DRV_EXP_TAG(name, kmod_dep_export)[] \ 288*5497616eSJim Harris __rte_used = str 289*5497616eSJim Harris 290*5497616eSJim Harris /** 291*5497616eSJim Harris * Iteration context. 292*5497616eSJim Harris * 293*5497616eSJim Harris * This context carries over the current iteration state. 294*5497616eSJim Harris */ 295*5497616eSJim Harris struct rte_dev_iterator { 296*5497616eSJim Harris const char *dev_str; /**< device string. */ 297*5497616eSJim Harris const char *bus_str; /**< bus-related part of device string. */ 298*5497616eSJim Harris const char *cls_str; /**< class-related part of device string. */ 299*5497616eSJim Harris struct rte_bus *bus; /**< bus handle. */ 300*5497616eSJim Harris struct rte_class *cls; /**< class handle. */ 301*5497616eSJim Harris struct rte_device *device; /**< current position. */ 302*5497616eSJim Harris void *class_device; /**< additional specialized context. */ 303*5497616eSJim Harris }; 304*5497616eSJim Harris 305*5497616eSJim Harris /** 306*5497616eSJim Harris * Device iteration function. 307*5497616eSJim Harris * 308*5497616eSJim Harris * Find the next device matching properties passed in parameters. 309*5497616eSJim Harris * The function takes an additional ``start`` parameter, that is 310*5497616eSJim Harris * used as starting context when relevant. 311*5497616eSJim Harris * 312*5497616eSJim Harris * The function returns the current element in the iteration. 313*5497616eSJim Harris * This return value will potentially be used as a start parameter 314*5497616eSJim Harris * in subsequent calls to the function. 315*5497616eSJim Harris * 316*5497616eSJim Harris * The additional iterator parameter is only there if a specific 317*5497616eSJim Harris * implementation needs additional context. It must not be modified by 318*5497616eSJim Harris * the iteration function itself. 319*5497616eSJim Harris * 320*5497616eSJim Harris * @param start 321*5497616eSJim Harris * Starting iteration context. 322*5497616eSJim Harris * 323*5497616eSJim Harris * @param devstr 324*5497616eSJim Harris * Device description string. 325*5497616eSJim Harris * 326*5497616eSJim Harris * @param it 327*5497616eSJim Harris * Device iterator. 328*5497616eSJim Harris * 329*5497616eSJim Harris * @return 330*5497616eSJim Harris * The address of the current element matching the device description 331*5497616eSJim Harris * string. 332*5497616eSJim Harris */ 333*5497616eSJim Harris typedef void *(*rte_dev_iterate_t)(const void *start, 334*5497616eSJim Harris const char *devstr, 335*5497616eSJim Harris const struct rte_dev_iterator *it); 336*5497616eSJim Harris 337*5497616eSJim Harris /** 338*5497616eSJim Harris * Initializes a device iterator. 339*5497616eSJim Harris * 340*5497616eSJim Harris * This iterator allows accessing a list of devices matching a criteria. 341*5497616eSJim Harris * The device matching is made among all buses and classes currently registered, 342*5497616eSJim Harris * filtered by the device description given as parameter. 343*5497616eSJim Harris * 344*5497616eSJim Harris * This function will not allocate any memory. It is safe to stop the 345*5497616eSJim Harris * iteration at any moment and let the iterator go out of context. 346*5497616eSJim Harris * 347*5497616eSJim Harris * @param it 348*5497616eSJim Harris * Device iterator handle. 349*5497616eSJim Harris * 350*5497616eSJim Harris * @param str 351*5497616eSJim Harris * Device description string. 352*5497616eSJim Harris * 353*5497616eSJim Harris * @return 354*5497616eSJim Harris * 0 on successful initialization. 355*5497616eSJim Harris * <0 on error. 356*5497616eSJim Harris */ 357*5497616eSJim Harris __rte_experimental 358*5497616eSJim Harris int 359*5497616eSJim Harris rte_dev_iterator_init(struct rte_dev_iterator *it, const char *str); 360*5497616eSJim Harris 361*5497616eSJim Harris /** 362*5497616eSJim Harris * Iterates on a device iterator. 363*5497616eSJim Harris * 364*5497616eSJim Harris * Generates a new rte_device handle corresponding to the next element 365*5497616eSJim Harris * in the list described in comprehension by the iterator. 366*5497616eSJim Harris * 367*5497616eSJim Harris * The next object is returned, and the iterator is updated. 368*5497616eSJim Harris * 369*5497616eSJim Harris * @param it 370*5497616eSJim Harris * Device iterator handle. 371*5497616eSJim Harris * 372*5497616eSJim Harris * @return 373*5497616eSJim Harris * An rte_device handle if found. 374*5497616eSJim Harris * NULL if an error occurred (rte_errno is set). 375*5497616eSJim Harris * NULL if no device could be found (rte_errno is not set). 376*5497616eSJim Harris */ 377*5497616eSJim Harris __rte_experimental 378*5497616eSJim Harris struct rte_device * 379*5497616eSJim Harris rte_dev_iterator_next(struct rte_dev_iterator *it); 380*5497616eSJim Harris 381*5497616eSJim Harris #define RTE_DEV_FOREACH(dev, devstr, it) \ 382*5497616eSJim Harris for (rte_dev_iterator_init(it, devstr), \ 383*5497616eSJim Harris dev = rte_dev_iterator_next(it); \ 384*5497616eSJim Harris dev != NULL; \ 385*5497616eSJim Harris dev = rte_dev_iterator_next(it)) 386*5497616eSJim Harris 387*5497616eSJim Harris /** 388*5497616eSJim Harris * @warning 389*5497616eSJim Harris * @b EXPERIMENTAL: this API may change without prior notice 390*5497616eSJim Harris * 391*5497616eSJim Harris * It registers the callback for the specific device. 392*5497616eSJim Harris * Multiple callbacks can be registered at the same time. 393*5497616eSJim Harris * 394*5497616eSJim Harris * @param device_name 395*5497616eSJim Harris * The device name, that is the param name of the struct rte_device, 396*5497616eSJim Harris * null value means for all devices. 397*5497616eSJim Harris * @param cb_fn 398*5497616eSJim Harris * callback address. 399*5497616eSJim Harris * @param cb_arg 400*5497616eSJim Harris * address of parameter for callback. 401*5497616eSJim Harris * 402*5497616eSJim Harris * @return 403*5497616eSJim Harris * - On success, zero. 404*5497616eSJim Harris * - On failure, a negative value. 405*5497616eSJim Harris */ 406*5497616eSJim Harris __rte_experimental 407*5497616eSJim Harris int 408*5497616eSJim Harris rte_dev_event_callback_register(const char *device_name, 409*5497616eSJim Harris rte_dev_event_cb_fn cb_fn, 410*5497616eSJim Harris void *cb_arg); 411*5497616eSJim Harris 412*5497616eSJim Harris /** 413*5497616eSJim Harris * @warning 414*5497616eSJim Harris * @b EXPERIMENTAL: this API may change without prior notice 415*5497616eSJim Harris * 416*5497616eSJim Harris * It unregisters the callback according to the specified device. 417*5497616eSJim Harris * 418*5497616eSJim Harris * @param device_name 419*5497616eSJim Harris * The device name, that is the param name of the struct rte_device, 420*5497616eSJim Harris * null value means for all devices and their callbacks. 421*5497616eSJim Harris * @param cb_fn 422*5497616eSJim Harris * callback address. 423*5497616eSJim Harris * @param cb_arg 424*5497616eSJim Harris * address of parameter for callback, (void *)-1 means to remove all 425*5497616eSJim Harris * registered which has the same callback address. 426*5497616eSJim Harris * 427*5497616eSJim Harris * @return 428*5497616eSJim Harris * - On success, return the number of callback entities removed. 429*5497616eSJim Harris * - On failure, a negative value. 430*5497616eSJim Harris */ 431*5497616eSJim Harris __rte_experimental 432*5497616eSJim Harris int 433*5497616eSJim Harris rte_dev_event_callback_unregister(const char *device_name, 434*5497616eSJim Harris rte_dev_event_cb_fn cb_fn, 435*5497616eSJim Harris void *cb_arg); 436*5497616eSJim Harris 437*5497616eSJim Harris /** 438*5497616eSJim Harris * @warning 439*5497616eSJim Harris * @b EXPERIMENTAL: this API may change without prior notice 440*5497616eSJim Harris * 441*5497616eSJim Harris * Executes all the user application registered callbacks for 442*5497616eSJim Harris * the specific device. 443*5497616eSJim Harris * 444*5497616eSJim Harris * @param device_name 445*5497616eSJim Harris * The device name. 446*5497616eSJim Harris * @param event 447*5497616eSJim Harris * the device event type. 448*5497616eSJim Harris */ 449*5497616eSJim Harris __rte_experimental 450*5497616eSJim Harris void 451*5497616eSJim Harris rte_dev_event_callback_process(const char *device_name, 452*5497616eSJim Harris enum rte_dev_event_type event); 453*5497616eSJim Harris 454*5497616eSJim Harris /** 455*5497616eSJim Harris * @warning 456*5497616eSJim Harris * @b EXPERIMENTAL: this API may change without prior notice 457*5497616eSJim Harris * 458*5497616eSJim Harris * Start the device event monitoring. 459*5497616eSJim Harris * 460*5497616eSJim Harris * @return 461*5497616eSJim Harris * - On success, zero. 462*5497616eSJim Harris * - On failure, a negative value. 463*5497616eSJim Harris */ 464*5497616eSJim Harris __rte_experimental 465*5497616eSJim Harris int 466*5497616eSJim Harris rte_dev_event_monitor_start(void); 467*5497616eSJim Harris 468*5497616eSJim Harris /** 469*5497616eSJim Harris * @warning 470*5497616eSJim Harris * @b EXPERIMENTAL: this API may change without prior notice 471*5497616eSJim Harris * 472*5497616eSJim Harris * Stop the device event monitoring. 473*5497616eSJim Harris * 474*5497616eSJim Harris * @return 475*5497616eSJim Harris * - On success, zero. 476*5497616eSJim Harris * - On failure, a negative value. 477*5497616eSJim Harris */ 478*5497616eSJim Harris __rte_experimental 479*5497616eSJim Harris int 480*5497616eSJim Harris rte_dev_event_monitor_stop(void); 481*5497616eSJim Harris 482*5497616eSJim Harris /** 483*5497616eSJim Harris * @warning 484*5497616eSJim Harris * @b EXPERIMENTAL: this API may change without prior notice 485*5497616eSJim Harris * 486*5497616eSJim Harris * Enable hotplug handling for devices. 487*5497616eSJim Harris * 488*5497616eSJim Harris * @return 489*5497616eSJim Harris * - On success, zero. 490*5497616eSJim Harris * - On failure, a negative value. 491*5497616eSJim Harris */ 492*5497616eSJim Harris __rte_experimental 493*5497616eSJim Harris int 494*5497616eSJim Harris rte_dev_hotplug_handle_enable(void); 495*5497616eSJim Harris 496*5497616eSJim Harris /** 497*5497616eSJim Harris * @warning 498*5497616eSJim Harris * @b EXPERIMENTAL: this API may change without prior notice 499*5497616eSJim Harris * 500*5497616eSJim Harris * Disable hotplug handling for devices. 501*5497616eSJim Harris * 502*5497616eSJim Harris * @return 503*5497616eSJim Harris * - On success, zero. 504*5497616eSJim Harris * - On failure, a negative value. 505*5497616eSJim Harris */ 506*5497616eSJim Harris __rte_experimental 507*5497616eSJim Harris int 508*5497616eSJim Harris rte_dev_hotplug_handle_disable(void); 509*5497616eSJim Harris 510*5497616eSJim Harris /** 511*5497616eSJim Harris * Device level DMA map function. 512*5497616eSJim Harris * After a successful call, the memory segment will be mapped to the 513*5497616eSJim Harris * given device. 514*5497616eSJim Harris * 515*5497616eSJim Harris * @note: Memory must be registered in advance using rte_extmem_* APIs. 516*5497616eSJim Harris * 517*5497616eSJim Harris * @param dev 518*5497616eSJim Harris * Device pointer. 519*5497616eSJim Harris * @param addr 520*5497616eSJim Harris * Virtual address to map. 521*5497616eSJim Harris * @param iova 522*5497616eSJim Harris * IOVA address to map. 523*5497616eSJim Harris * @param len 524*5497616eSJim Harris * Length of the memory segment being mapped. 525*5497616eSJim Harris * 526*5497616eSJim Harris * @return 527*5497616eSJim Harris * 0 if mapping was successful. 528*5497616eSJim Harris * Negative value and rte_errno is set otherwise. 529*5497616eSJim Harris */ 530*5497616eSJim Harris __rte_experimental 531*5497616eSJim Harris int 532*5497616eSJim Harris rte_dev_dma_map(struct rte_device *dev, void *addr, uint64_t iova, size_t len); 533*5497616eSJim Harris 534*5497616eSJim Harris /** 535*5497616eSJim Harris * Device level DMA unmap function. 536*5497616eSJim Harris * After a successful call, the memory segment will no longer be 537*5497616eSJim Harris * accessible by the given device. 538*5497616eSJim Harris * 539*5497616eSJim Harris * @note: Memory must be registered in advance using rte_extmem_* APIs. 540*5497616eSJim Harris * 541*5497616eSJim Harris * @param dev 542*5497616eSJim Harris * Device pointer. 543*5497616eSJim Harris * @param addr 544*5497616eSJim Harris * Virtual address to unmap. 545*5497616eSJim Harris * @param iova 546*5497616eSJim Harris * IOVA address to unmap. 547*5497616eSJim Harris * @param len 548*5497616eSJim Harris * Length of the memory segment being mapped. 549*5497616eSJim Harris * 550*5497616eSJim Harris * @return 551*5497616eSJim Harris * 0 if un-mapping was successful. 552*5497616eSJim Harris * Negative value and rte_errno is set otherwise. 553*5497616eSJim Harris */ 554*5497616eSJim Harris __rte_experimental 555*5497616eSJim Harris int 556*5497616eSJim Harris rte_dev_dma_unmap(struct rte_device *dev, void *addr, uint64_t iova, 557*5497616eSJim Harris size_t len); 558*5497616eSJim Harris 559*5497616eSJim Harris #ifdef __cplusplus 560*5497616eSJim Harris } 561*5497616eSJim Harris #endif 562*5497616eSJim Harris 563*5497616eSJim Harris #endif /* _RTE_DEV_H_ */ 564