|  | Linux Devlink Documentation | 
|  | =========================== | 
|  |  | 
|  | devlink is an API to expose device information and resources not directly | 
|  | related to any device class, such as chip-wide/switch-ASIC-wide configuration. | 
|  |  | 
|  | Locking | 
|  | ------- | 
|  |  | 
|  | Driver facing APIs are currently transitioning to allow more explicit | 
|  | locking. Drivers can use the existing ``devlink_*`` set of APIs, or | 
|  | new APIs prefixed by ``devl_*``. The older APIs handle all the locking | 
|  | in devlink core, but don't allow registration of most sub-objects once | 
|  | the main devlink object is itself registered. The newer ``devl_*`` APIs assume | 
|  | the devlink instance lock is already held. Drivers can take the instance | 
|  | lock by calling ``devl_lock()``. It is also held all callbacks of devlink | 
|  | netlink commands. | 
|  |  | 
|  | Drivers are encouraged to use the devlink instance lock for their own needs. | 
|  |  | 
|  | Drivers need to be cautious when taking devlink instance lock and | 
|  | taking RTNL lock at the same time. Devlink instance lock needs to be taken | 
|  | first, only after that RTNL lock could be taken. | 
|  |  | 
|  | Nested instances | 
|  | ---------------- | 
|  |  | 
|  | Some objects, like linecards or port functions, could have another | 
|  | devlink instances created underneath. In that case, drivers should make | 
|  | sure to respect following rules: | 
|  |  | 
|  | - Lock ordering should be maintained. If driver needs to take instance | 
|  | lock of both nested and parent instances at the same time, devlink | 
|  | instance lock of the parent instance should be taken first, only then | 
|  | instance lock of the nested instance could be taken. | 
|  | - Driver should use object-specific helpers to setup the | 
|  | nested relationship: | 
|  |  | 
|  | - ``devl_nested_devlink_set()`` - called to setup devlink -> nested | 
|  | devlink relationship (could be user for multiple nested instances. | 
|  | - ``devl_port_fn_devlink_set()`` - called to setup port function -> | 
|  | nested devlink relationship. | 
|  | - ``devlink_linecard_nested_dl_set()`` - called to setup linecard -> | 
|  | nested devlink relationship. | 
|  |  | 
|  | The nested devlink info is exposed to the userspace over object-specific | 
|  | attributes of devlink netlink. | 
|  |  | 
|  | Interface documentation | 
|  | ----------------------- | 
|  |  | 
|  | The following pages describe various interfaces available through devlink in | 
|  | general. | 
|  |  | 
|  | .. toctree:: | 
|  | :maxdepth: 1 | 
|  |  | 
|  | devlink-dpipe | 
|  | devlink-eswitch-attr | 
|  | devlink-flash | 
|  | devlink-health | 
|  | devlink-info | 
|  | devlink-linecard | 
|  | devlink-params | 
|  | devlink-port | 
|  | devlink-region | 
|  | devlink-reload | 
|  | devlink-resource | 
|  | devlink-selftests | 
|  | devlink-trap | 
|  |  | 
|  | Driver-specific documentation | 
|  | ----------------------------- | 
|  |  | 
|  | Each driver that implements ``devlink`` is expected to document what | 
|  | parameters, info versions, and other features it supports. | 
|  |  | 
|  | .. toctree:: | 
|  | :maxdepth: 1 | 
|  |  | 
|  | am65-nuss-cpsw-switch | 
|  | bnxt | 
|  | etas_es58x | 
|  | hns3 | 
|  | i40e | 
|  | ice | 
|  | ionic | 
|  | iosm | 
|  | ixgbe | 
|  | kvaser_pciefd | 
|  | kvaser_usb | 
|  | mlx4 | 
|  | mlx5 | 
|  | mlxsw | 
|  | mv88e6xxx | 
|  | netdevsim | 
|  | nfp | 
|  | octeontx2 | 
|  | prestera | 
|  | qed | 
|  | sfc | 
|  | ti-cpsw-switch | 
|  | zl3073x |