//
// Copyright (c) 2020, NVIDIA CORPORATION.  All rights reserved.
//
// NVIDIA CORPORATION and its licensors retain all intellectual property
// and proprietary rights in and to this software, related documentation
// and any modifications thereto.  Any use, reproduction, disclosure or
// distribution of this software and related documentation without an express
// license agreement from NVIDIA CORPORATION is strictly prohibited.
//

= CQI Includes

These are headers that define the interface between the API layer and the
implementation layer. The API layer does not contain implementations for
these classes, and these headers are not required by API clients.

The implementation layer is exposed to the API through "command and query
interfaces" (CQIs). Each CQI covers a general group of related
data/commands, and the CQIs can be hierarchical: a parent CQI creates
specialized child CQIs (usually with some parameters) to provide a more
detailed interface to some subset of data/commands.

This interface is not version safe or backward compatible in any way. An
implementer of the API must implement the exact interface defined for the
chosen version.

== `drv`

The `drv` CQI is used to interface with local device drivers. This is the
first CQI that gets created, and it is used to discover modules to create
CQIs for.

The `drv` CQI can create the following CQIs:

- `nvswitch_drv`

== `nvswitch_drv`

The `nvswitch_drv` CQI interfaces with the NVSwitch driver and can query
the list of present NVSwitch devices.

The `nvswitch_drv` CQI can create the following CQIs:

- `nvswitch_dev_base` given a UUID for the device

== `nvswitch_dev_base`

The `nvswitch_dev_base` CQI targets a specific device through the NVSwitch
driver, but only provides limited information for and control of the device.

The `nvswitch_dev_base` CQI can create the following CQIs:

- `nvswitch_dev`

== `nvswitch_dev`

The `nvswitch_dev` CQI targets a specific device through the NVSwitch driver,
and provides access to all available data for the device.
