mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2026-02-02 22:47:25 +00:00
515.43.04
This commit is contained in:
3121
src/common/nvswitch/interface/ctrl_dev_nvswitch.h
Normal file
3121
src/common/nvswitch/interface/ctrl_dev_nvswitch.h
Normal file
File diff suppressed because it is too large
Load Diff
979
src/common/nvswitch/interface/export_nvswitch.h
Normal file
979
src/common/nvswitch/interface/export_nvswitch.h
Normal file
@@ -0,0 +1,979 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: Copyright (c) 2016-2021 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef _NVSWITCH_EXPORT_H_
|
||||
#define _NVSWITCH_EXPORT_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "nv_stdarg.h"
|
||||
#include "nvlink_common.h"
|
||||
#include "ioctl_common_nvswitch.h"
|
||||
|
||||
#define NVSWITCH_DRIVER_NAME "nvidia-nvswitch"
|
||||
|
||||
#define NVSWITCH_MAX_BARS 1
|
||||
|
||||
#define NVSWITCH_DEVICE_INSTANCE_MAX 64
|
||||
|
||||
#define PCI_CLASS_BRIDGE_NVSWITCH 0x0680
|
||||
|
||||
#ifndef PCI_VENDOR_ID_NVIDIA
|
||||
#define PCI_VENDOR_ID_NVIDIA 0x10DE
|
||||
#endif
|
||||
|
||||
#define PCI_ADDR_OFFSET_VENDOR 0
|
||||
#define PCI_ADDR_OFFSET_DEVID 2
|
||||
|
||||
#define NVSWITCH_NSEC_PER_SEC 1000000000ULL
|
||||
|
||||
#define NVSWITCH_DBG_LEVEL_MMIO 0x0
|
||||
#define NVSWITCH_DBG_LEVEL_INFO 0x1
|
||||
#define NVSWITCH_DBG_LEVEL_SETUP 0x2
|
||||
#define NVSWITCH_DBG_LEVEL_WARN 0x3
|
||||
#define NVSWITCH_DBG_LEVEL_ERROR 0x4
|
||||
|
||||
#define NVSWITCH_LOG_BUFFER_SIZE 512
|
||||
|
||||
#define NVSWITCH_DMA_DIR_TO_SYSMEM 0
|
||||
#define NVSWITCH_DMA_DIR_FROM_SYSMEM 1
|
||||
#define NVSWITCH_DMA_DIR_BIDIRECTIONAL 2
|
||||
|
||||
#define NVSWITCH_I2C_CMD_READ 0
|
||||
#define NVSWITCH_I2C_CMD_WRITE 1
|
||||
#define NVSWITCH_I2C_CMD_SMBUS_READ 2
|
||||
#define NVSWITCH_I2C_CMD_SMBUS_WRITE 3
|
||||
#define NVSWITCH_I2C_CMD_SMBUS_QUICK_READ 4
|
||||
#define NVSWITCH_I2C_CMD_SMBUS_QUICK_WRITE 5
|
||||
|
||||
typedef struct nvswitch_device nvswitch_device;
|
||||
typedef struct NVSWITCH_CLIENT_EVENT NVSWITCH_CLIENT_EVENT;
|
||||
|
||||
/*
|
||||
* @Brief : The interface will check if the client's version is supported by the
|
||||
* driver.
|
||||
*
|
||||
* @param[in] user_version Version of the interface that the client is
|
||||
* compiled with.
|
||||
* @param[out] kernel_version Version of the interface that the kernel driver
|
||||
* is compiled with. This information will be
|
||||
* filled even if the CTRL call returns
|
||||
* -NVL_ERR_NOT_SUPPORTED due to version mismatch.
|
||||
* @param[in] length Version string buffer length
|
||||
*
|
||||
* @returns NVL_SUCCESS if the client is using compatible
|
||||
* interface.
|
||||
* -NVL_ERR_NOT_SUPPORTED if the client is using
|
||||
* incompatible interface.
|
||||
* Or, Other NVL_XXX status value.
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_lib_check_api_version
|
||||
(
|
||||
const char *user_version,
|
||||
char *kernel_version,
|
||||
NvU32 length
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Allocate a new nvswitch lib device instance.
|
||||
*
|
||||
* @Description : Creates and registers a new nvswitch device and registers
|
||||
* with the nvlink library. This only initializes software state,
|
||||
* it does not initialize the hardware state.
|
||||
*
|
||||
* @param[in] pci_domain pci domain of the device
|
||||
* @param[in] pci_bus pci bus of the device
|
||||
* @param[in] pci_device pci device of the device
|
||||
* @param[in] pci_func pci function of the device
|
||||
* @param[in] device_id pci device ID of the device
|
||||
* @param[in] os_handle Device handle used to interact with OS layer
|
||||
* @param[in] os_instance instance number of this device
|
||||
* @param[out] device return device handle for interfacing with library
|
||||
*
|
||||
* @returns NVL_SUCCESS if the action succeeded
|
||||
* an NVL error code otherwise
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_lib_register_device
|
||||
(
|
||||
NvU16 pci_domain,
|
||||
NvU8 pci_bus,
|
||||
NvU8 pci_device,
|
||||
NvU8 pci_func,
|
||||
NvU16 device_id,
|
||||
void *os_handle,
|
||||
NvU32 os_instance,
|
||||
nvswitch_device **device
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Clean-up the software state for a nvswitch device.
|
||||
*
|
||||
* @Description :
|
||||
*
|
||||
* @param[in] device device handle to destroy
|
||||
*
|
||||
* @returns none
|
||||
*/
|
||||
void
|
||||
nvswitch_lib_unregister_device
|
||||
(
|
||||
nvswitch_device *device
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Initialize the hardware for a nvswitch device.
|
||||
*
|
||||
* @Description :
|
||||
*
|
||||
* @param[in] device a reference to the device to initialize
|
||||
*
|
||||
* @returns NVL_SUCCESS if the action succeeded
|
||||
* -NVL_BAD_ARGS if bad arguments provided
|
||||
* -NVL_PCI_ERROR if bar info unable to be retrieved
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_lib_initialize_device
|
||||
(
|
||||
nvswitch_device *device
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Shutdown the hardware for a nvswitch device.
|
||||
*
|
||||
* @Description :
|
||||
*
|
||||
* @param[in] device a reference to the device to initialize
|
||||
*
|
||||
* @returns NVL_SUCCESS if the action succeeded
|
||||
* -NVL_BAD_ARGS if bad arguments provided
|
||||
* -NVL_PCI_ERROR if bar info unable to be retrieved
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_lib_shutdown_device
|
||||
(
|
||||
nvswitch_device *device
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief Control call (ioctl) interface.
|
||||
*
|
||||
* @param[in] device device to operate on
|
||||
* @param[in] cmd Enumerated command to execute.
|
||||
* @param[in] params Params structure to pass to the command.
|
||||
* @param[in] params_size Size of the parameter structure.
|
||||
* @param[in] osPrivate The private data structure for OS.
|
||||
*
|
||||
* @return NVL_SUCCESS on a successful command
|
||||
* -NVL_NOT_FOUND if target device unable to be found
|
||||
* -NVL_BAD_ARGS if an invalid cmd is provided
|
||||
* -NVL_BAD_ARGS if a null arg is provided
|
||||
* -NVL_ERR_GENERIC otherwise
|
||||
*/
|
||||
NvlStatus nvswitch_lib_ctrl
|
||||
(
|
||||
nvswitch_device *device,
|
||||
NvU32 cmd,
|
||||
void *params,
|
||||
NvU64 size,
|
||||
void *osPrivate
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief: Retrieve PCI information for a switch based from device instance
|
||||
*
|
||||
* @Description :
|
||||
*
|
||||
* @param[in] lib_handle device to query
|
||||
* @param[out] pciInfo return pointer to nvswitch lib copy of device info
|
||||
*/
|
||||
void nvswitch_lib_get_device_info
|
||||
(
|
||||
nvswitch_device *lib_handle,
|
||||
struct nvlink_pci_info **pciInfo
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief: Retrieve BIOS version for an nvswitch device
|
||||
*
|
||||
* @Description: For devices with a BIOS, this retrieves the BIOS version.
|
||||
*
|
||||
* @param[in] device device to query
|
||||
* @param[out] version BIOS version is stored here
|
||||
*
|
||||
* @returns NVL_SUCCESS BIOS version was retrieved successfully
|
||||
* -NVL_BAD_ARGS an invalid device is provided
|
||||
* -NVL_ERR_INVALID_STATE an error occurred reading BIOS info
|
||||
* -NVL_ERR_NOT_SUPPORTED device doesn't support this feature
|
||||
*/
|
||||
|
||||
NvlStatus
|
||||
nvswitch_lib_get_bios_version
|
||||
(
|
||||
nvswitch_device *device,
|
||||
NvU64 *version
|
||||
);
|
||||
|
||||
|
||||
/*
|
||||
* @Brief: Retrieve whether the device supports PCI pin interrupts
|
||||
*
|
||||
* @Description: Returns whether the device can use PCI pin IRQs
|
||||
*
|
||||
*
|
||||
* @returns NV_TRUE device can use PCI pin IRQs
|
||||
* NV_FALSE device cannot use PCI pin IRQs
|
||||
*/
|
||||
|
||||
NvlStatus
|
||||
nvswitch_lib_use_pin_irq
|
||||
(
|
||||
nvswitch_device *device
|
||||
);
|
||||
|
||||
|
||||
/*
|
||||
* @Brief: Load platform information (emulation, simulation etc.).
|
||||
*
|
||||
* @param[in] lib_handle device
|
||||
*
|
||||
* @return NVL_SUCCESS on a successful command
|
||||
* -NVL_BAD_ARGS if an invalid device is provided
|
||||
*/
|
||||
NvlStatus nvswitch_lib_load_platform_info
|
||||
(
|
||||
nvswitch_device *lib_handle
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Enable interrupts for this device
|
||||
*
|
||||
* @Description :
|
||||
*
|
||||
* @param[in] device device to enable
|
||||
*
|
||||
* @returns NVL_SUCCESS
|
||||
* -NVL_PCI_ERROR if there was a register access error
|
||||
*/
|
||||
void
|
||||
nvswitch_lib_enable_interrupts
|
||||
(
|
||||
nvswitch_device *device
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Disable interrupts for this device
|
||||
*
|
||||
* @Description :
|
||||
*
|
||||
* @param[in] device device to enable
|
||||
*
|
||||
* @returns NVL_SUCCESS
|
||||
* -NVL_PCI_ERROR if there was a register access error
|
||||
*/
|
||||
void
|
||||
nvswitch_lib_disable_interrupts
|
||||
(
|
||||
nvswitch_device *device
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Check if interrupts are pending on this device
|
||||
*
|
||||
* @Description :
|
||||
*
|
||||
* @param[in] device device to check
|
||||
*
|
||||
* @returns NVL_SUCCESS if there were no errors and interrupts were handled
|
||||
* -NVL_BAD_ARGS if bad arguments provided
|
||||
* -NVL_PCI_ERROR if there was a register access error
|
||||
* -NVL_MORE_PROCESSING_REQUIRED no interrupts were found for this device
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_lib_check_interrupts
|
||||
(
|
||||
nvswitch_device *device
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Services interrupts for this device
|
||||
*
|
||||
* @Description :
|
||||
*
|
||||
* @param[in] device device to service
|
||||
*
|
||||
* @returns NVL_SUCCESS if there were no errors and interrupts were handled
|
||||
* -NVL_BAD_ARGS if bad arguments provided
|
||||
* -NVL_PCI_ERROR if there was a register access error
|
||||
* -NVL_MORE_PROCESSING_REQUIRED no interrupts were found for this device
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_lib_service_interrupts
|
||||
(
|
||||
nvswitch_device *device
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Get depth of error logs
|
||||
*
|
||||
* @Description :
|
||||
*
|
||||
* @param[in] device device to check
|
||||
*
|
||||
* @param[out] fatal Count of fatal errors
|
||||
* @param[out] nonfatal Count of non-fatal errors
|
||||
*
|
||||
* @returns NVL_SUCCESS if there were no errors and interrupts were handled
|
||||
* -NVL_NOT_FOUND if bad arguments provided
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_lib_get_log_count
|
||||
(
|
||||
nvswitch_device *device,
|
||||
NvU32 *fatal, NvU32 *nonfatal
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Periodic thread-based dispatcher for kernel functions
|
||||
*
|
||||
* @Description : Its purpose is to do any background subtasks (data collection, thermal
|
||||
* monitoring, etc. These subtasks may need to run at varying intervals, and
|
||||
* may even wish to adjust their execution period based on other factors.
|
||||
* Each subtask's entry notes the last time it was executed and its desired
|
||||
* execution period. This function returns back to the dispatcher the desired
|
||||
* time interval before it should be called again.
|
||||
*
|
||||
* @param[in] device The device to run background tasks on
|
||||
*
|
||||
* @returns nsec interval to wait before the next call.
|
||||
*/
|
||||
NvU64
|
||||
nvswitch_lib_deferred_task_dispatcher
|
||||
(
|
||||
nvswitch_device *device
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Perform post init tasks
|
||||
*
|
||||
* @Description : Any device initialization/tests which need the device to be
|
||||
* initialized to a sane state go here.
|
||||
*
|
||||
* @param[in] device The device to run the post-init on
|
||||
*
|
||||
* @returns returns NvlStatus code, see nvlink_errors.h
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_lib_post_init_device
|
||||
(
|
||||
nvswitch_device *device
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Perform post init tasks for a blacklisted device
|
||||
*
|
||||
* @Description : Any initialization tasks that should be run after a
|
||||
* blacklisted item should go here.
|
||||
*
|
||||
* @param[in] device The device to run the post-init-blacklist on
|
||||
*
|
||||
* @returns void
|
||||
*/
|
||||
void
|
||||
nvswitch_lib_post_init_blacklist_device
|
||||
(
|
||||
nvswitch_device *device
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Get the UUID of the device
|
||||
*
|
||||
* @Description : Copies out the device's UUID into the uuid field
|
||||
*
|
||||
* @param[in] device The device to get the UUID from
|
||||
*
|
||||
* @param[out] uuid A pointer to a uuid struct in which the UUID is written to
|
||||
*
|
||||
* @returns void
|
||||
*/
|
||||
void
|
||||
nvswitch_lib_get_uuid
|
||||
(
|
||||
nvswitch_device *device,
|
||||
NvUuid *uuid
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Get the Physical ID of the device
|
||||
*
|
||||
* @Description : Copies out the device's Physical ID into the phys_id field
|
||||
*
|
||||
* @param[in] device The device to get the UUID from
|
||||
*
|
||||
* @param[out] phys_id A pointer to a NvU32 which the physical ID is written to
|
||||
*
|
||||
* @returns NVL_SUCCESS if successful
|
||||
* -NVL_BAD_ARGS if bad arguments provided
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_lib_get_physid
|
||||
(
|
||||
nvswitch_device *device,
|
||||
NvU32 *phys_id
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Read the Fabric State for a nvswitch device.
|
||||
*
|
||||
* @Description : Returns the Fabric State for the device
|
||||
*
|
||||
* @param[in] device a reference to the device
|
||||
* @param[in] *ptrs references to the fabric state
|
||||
*
|
||||
* @returns NVL_SUCCESS if the action succeeded
|
||||
* -NVL_BAD_ARGS if bad arguments provided
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_lib_read_fabric_state
|
||||
(
|
||||
nvswitch_device *device,
|
||||
NVSWITCH_DEVICE_FABRIC_STATE *device_fabric_state,
|
||||
NVSWITCH_DEVICE_BLACKLIST_REASON *device_blacklist_reason,
|
||||
NVSWITCH_DRIVER_FABRIC_STATE *driver_fabric_state
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Validates PCI device id
|
||||
*
|
||||
* @Description : Validates PCI device id
|
||||
*
|
||||
* @param[in] device The device id to be validated
|
||||
*
|
||||
* @returns True if device id is valid
|
||||
*/
|
||||
NvBool
|
||||
nvswitch_lib_validate_device_id
|
||||
(
|
||||
NvU32 device_id
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Gets an event if it exists in the Event list
|
||||
*
|
||||
* @Description : Gets an event if it is in the Device's Client
|
||||
* Event list
|
||||
*
|
||||
* @param[in] device Device to operate on
|
||||
* @param[in] osPrivate The private data structure for the OS
|
||||
* @param[out] ppClientEvent Double pointer to client event
|
||||
*
|
||||
* @returns NVL_SUCCESS if client event found
|
||||
* -NVL_BAD_ARGS if bad arguments provided
|
||||
* -NVL_NOT_FOUND if no client event found
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_lib_get_client_event
|
||||
(
|
||||
nvswitch_device *device,
|
||||
void *osPrivate,
|
||||
NVSWITCH_CLIENT_EVENT **ppClientEvent
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Adds a single entry into the Event list
|
||||
*
|
||||
* @Description : Adds an entry into the front of the Device's
|
||||
* Client Event List
|
||||
*
|
||||
* @param[in] device Device to operate on
|
||||
* @param[in] osPrivate The private data structure for OS
|
||||
* @param[in] pParams The parameters for the client event
|
||||
*
|
||||
* @returns NVL_SUCCESS if event added
|
||||
* -NVL_BAD_ARGS if bad arguments provided
|
||||
* -NVL_NO_MEM if allocation fails
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_lib_add_client_event
|
||||
(
|
||||
nvswitch_device *device,
|
||||
void *osPrivate,
|
||||
NvU32 eventId
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Removes entries from the Event list
|
||||
*
|
||||
* @Description : Removes the entries associated with osPrivate
|
||||
* from the Device's Client Event List
|
||||
*
|
||||
* @param[in] device Device to operate on
|
||||
* @param[in] osPrivate The private data structure for OS
|
||||
*
|
||||
* @returns NVL_SUCCESS if event removed
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_lib_remove_client_events
|
||||
(
|
||||
nvswitch_device *device,
|
||||
void *osPrivate
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Notifies all events with a matching event Id in the Client Event list
|
||||
*
|
||||
* @Description : Notifies all events with a matching event Id in the Client Event list
|
||||
*
|
||||
* @param[in] device Device to operate on
|
||||
* @param[in] eventId The event ID to notify
|
||||
*
|
||||
* @returns NVL_SUCCESS if arguments are valid
|
||||
* -NVL_BAD_ARGS if bad arguments provided
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_lib_notify_client_events
|
||||
(
|
||||
nvswitch_device *device,
|
||||
NvU32 eventId
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Gets a mask of valid I2C ports for the device
|
||||
*
|
||||
* @Description : Gets a mask of valid I2C ports for the device
|
||||
*
|
||||
* @param[in] device Device to operate on
|
||||
* @param[out] validPortsMask A pointer to a mask of valid ports
|
||||
*
|
||||
* @returns NVL_SUCCESS if successfuly
|
||||
* -NVL_BAD_ARGS if bad arguments provided
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_lib_get_valid_ports_mask
|
||||
(
|
||||
nvswitch_device *device,
|
||||
NvU32 *validPortsMask
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Returns a boolean if the I2C interface is supported for the device
|
||||
*
|
||||
* @Description : Returns a boolean if the I2C interface is supported for the device
|
||||
*
|
||||
* @param[in] device Device to operate on
|
||||
*
|
||||
* @returns NV_TRUE device can use the I2C interface
|
||||
* NV_FALSE device cannot use the I2C interface
|
||||
*/
|
||||
NvBool
|
||||
nvswitch_lib_is_i2c_supported
|
||||
(
|
||||
nvswitch_device *device
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Performs an I2C transaction
|
||||
*
|
||||
* @Description : Performs an I2C transaction
|
||||
*
|
||||
* @param[in] device Device to operate on
|
||||
* @param[in] port Port to issue I2C transaction
|
||||
* @param[in] type Type of I2C transaction
|
||||
* @param[in] addr Device address to perform I2C transaction on
|
||||
* @param[in] command I2C command to perform on
|
||||
* @param[in] len Length of the I2C transaction message
|
||||
* @param[in/out] pData A pointer to the buffer containing the input/output data
|
||||
*
|
||||
* @returns NVL_SUCCESS if I2C transaction completes
|
||||
* -NVL_BAD_ARGS if bad arguments provided
|
||||
* -NVL_ERR_INVALID_STATE if something internal went wrong
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_lib_i2c_transfer
|
||||
(
|
||||
nvswitch_device *device,
|
||||
NvU32 port,
|
||||
NvU8 type,
|
||||
NvU8 addr,
|
||||
NvU8 command,
|
||||
NvU32 len,
|
||||
NvU8 *pData
|
||||
);
|
||||
|
||||
/*
|
||||
* Returns count of registered NvSwitch devices.
|
||||
*/
|
||||
NvU32
|
||||
nvswitch_os_get_device_count
|
||||
(
|
||||
void
|
||||
);
|
||||
|
||||
/*
|
||||
* Get current time in nanoseconds
|
||||
* The time is since epoch time (midnight UTC of January 1, 1970)
|
||||
*/
|
||||
NvU64
|
||||
nvswitch_os_get_platform_time
|
||||
(
|
||||
void
|
||||
);
|
||||
|
||||
#define NVSWITCH_PRINT_ATTRIB(str, arg1) \
|
||||
__attribute__ ((format (printf, (str), (arg1))))
|
||||
|
||||
/*
|
||||
* printf wrapper
|
||||
*/
|
||||
void
|
||||
NVSWITCH_PRINT_ATTRIB(2, 3)
|
||||
nvswitch_os_print
|
||||
(
|
||||
int log_level,
|
||||
const char *pFormat,
|
||||
...
|
||||
);
|
||||
|
||||
/*
|
||||
* "Registry" interface for dword
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_os_read_registry_dword
|
||||
(
|
||||
void *os_handle,
|
||||
const char *name,
|
||||
NvU32 *data
|
||||
);
|
||||
|
||||
/*
|
||||
* "Registry" interface for binary data
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_os_read_registery_binary
|
||||
(
|
||||
void *os_handle,
|
||||
const char *name,
|
||||
NvU8 *data,
|
||||
NvU32 length
|
||||
);
|
||||
|
||||
NvBool
|
||||
nvswitch_os_is_uuid_in_blacklist
|
||||
(
|
||||
NvUuid *uuid
|
||||
);
|
||||
|
||||
|
||||
/*
|
||||
* Override platform/simulation settings for cases
|
||||
*/
|
||||
void
|
||||
nvswitch_os_override_platform
|
||||
(
|
||||
void *os_handle,
|
||||
NvBool *rtlsim
|
||||
);
|
||||
|
||||
/*
|
||||
* Memory management interface
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_os_alloc_contig_memory
|
||||
(
|
||||
void *os_handle,
|
||||
void **virt_addr,
|
||||
NvU32 size,
|
||||
NvBool force_dma32
|
||||
);
|
||||
|
||||
void
|
||||
nvswitch_os_free_contig_memory
|
||||
(
|
||||
void *os_handle,
|
||||
void *virt_addr,
|
||||
NvU32 size
|
||||
);
|
||||
|
||||
NvlStatus
|
||||
nvswitch_os_map_dma_region
|
||||
(
|
||||
void *os_handle,
|
||||
void *cpu_addr,
|
||||
NvU64 *dma_handle,
|
||||
NvU32 size,
|
||||
NvU32 direction
|
||||
);
|
||||
|
||||
NvlStatus
|
||||
nvswitch_os_unmap_dma_region
|
||||
(
|
||||
void *os_handle,
|
||||
void *cpu_addr,
|
||||
NvU64 dma_handle,
|
||||
NvU32 size,
|
||||
NvU32 direction
|
||||
);
|
||||
|
||||
NvlStatus
|
||||
nvswitch_os_set_dma_mask
|
||||
(
|
||||
void *os_handle,
|
||||
NvU32 dma_addr_width
|
||||
);
|
||||
|
||||
NvlStatus
|
||||
nvswitch_os_sync_dma_region_for_cpu
|
||||
(
|
||||
void *os_handle,
|
||||
NvU64 dma_handle,
|
||||
NvU32 size,
|
||||
NvU32 direction
|
||||
);
|
||||
|
||||
NvlStatus
|
||||
nvswitch_os_sync_dma_region_for_device
|
||||
(
|
||||
void *os_handle,
|
||||
NvU64 dma_handle,
|
||||
NvU32 size,
|
||||
NvU32 direction
|
||||
);
|
||||
|
||||
void *
|
||||
nvswitch_os_malloc_trace
|
||||
(
|
||||
NvLength size,
|
||||
const char *file,
|
||||
NvU32 line
|
||||
);
|
||||
|
||||
void
|
||||
nvswitch_os_free
|
||||
(
|
||||
void *pMem
|
||||
);
|
||||
|
||||
NvLength
|
||||
nvswitch_os_strlen
|
||||
(
|
||||
const char *str
|
||||
);
|
||||
|
||||
char*
|
||||
nvswitch_os_strncpy
|
||||
(
|
||||
char *pDest,
|
||||
const char *pSrc,
|
||||
NvLength length
|
||||
);
|
||||
|
||||
int
|
||||
nvswitch_os_strncmp
|
||||
(
|
||||
const char *s1,
|
||||
const char *s2,
|
||||
NvLength length
|
||||
);
|
||||
|
||||
void *
|
||||
nvswitch_os_memset
|
||||
(
|
||||
void *pDest,
|
||||
int value,
|
||||
NvLength size
|
||||
);
|
||||
|
||||
void *
|
||||
nvswitch_os_memcpy
|
||||
(
|
||||
void *pDest,
|
||||
const void *pSrc,
|
||||
NvLength size
|
||||
);
|
||||
|
||||
int
|
||||
nvswitch_os_memcmp
|
||||
(
|
||||
const void *s1,
|
||||
const void *s2,
|
||||
NvLength size
|
||||
);
|
||||
|
||||
/*
|
||||
* Memory read / write interface
|
||||
*/
|
||||
NvU32
|
||||
nvswitch_os_mem_read32
|
||||
(
|
||||
const volatile void * pAddress
|
||||
);
|
||||
|
||||
void
|
||||
nvswitch_os_mem_write32
|
||||
(
|
||||
volatile void *pAddress,
|
||||
NvU32 data
|
||||
);
|
||||
|
||||
NvU64
|
||||
nvswitch_os_mem_read64
|
||||
(
|
||||
const volatile void *pAddress
|
||||
);
|
||||
|
||||
void
|
||||
nvswitch_os_mem_write64
|
||||
(
|
||||
volatile void *pAddress,
|
||||
NvU64 data
|
||||
);
|
||||
|
||||
/*
|
||||
* Interface to write formatted output to sized buffer
|
||||
*/
|
||||
int
|
||||
nvswitch_os_snprintf
|
||||
(
|
||||
char *pString,
|
||||
NvLength size,
|
||||
const char *pFormat,
|
||||
...
|
||||
);
|
||||
|
||||
/*
|
||||
* Interface to write formatted output to sized buffer
|
||||
*/
|
||||
int
|
||||
nvswitch_os_vsnprintf
|
||||
(
|
||||
char *buf,
|
||||
NvLength size,
|
||||
const char *fmt,
|
||||
va_list arglist
|
||||
);
|
||||
|
||||
/*
|
||||
* Debug assert and log interface
|
||||
*/
|
||||
void
|
||||
nvswitch_os_assert_log
|
||||
(
|
||||
int cond,
|
||||
const char *pFormat,
|
||||
...
|
||||
);
|
||||
|
||||
/*
|
||||
* Interface to sleep for specified milliseconds. Yields the CPU to scheduler.
|
||||
*/
|
||||
void
|
||||
nvswitch_os_sleep
|
||||
(
|
||||
unsigned int ms
|
||||
);
|
||||
|
||||
NvlStatus
|
||||
nvswitch_os_acquire_fabric_mgmt_cap
|
||||
(
|
||||
void *osPrivate,
|
||||
NvU64 capDescriptor
|
||||
);
|
||||
|
||||
int
|
||||
nvswitch_os_is_fabric_manager
|
||||
(
|
||||
void *osPrivate
|
||||
);
|
||||
|
||||
int
|
||||
nvswitch_os_is_admin
|
||||
(
|
||||
void
|
||||
);
|
||||
|
||||
NvlStatus
|
||||
nvswitch_os_get_os_version
|
||||
(
|
||||
NvU32 *pMajorVer,
|
||||
NvU32 *pMinorVer,
|
||||
NvU32 *pBuildNum
|
||||
);
|
||||
|
||||
void
|
||||
nvswitch_lib_smbpbi_log_sxid
|
||||
(
|
||||
nvswitch_device *device,
|
||||
NvU32 sxid,
|
||||
const char *pFormat,
|
||||
...
|
||||
);
|
||||
|
||||
/*!
|
||||
* @brief: OS Specific handling to add an event.
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_os_add_client_event
|
||||
(
|
||||
void *osHandle,
|
||||
void *osPrivate,
|
||||
NvU32 eventId
|
||||
);
|
||||
|
||||
/*!
|
||||
* @brief: OS specific handling to remove all events corresponding to osPrivate.
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_os_remove_client_event
|
||||
(
|
||||
void *osHandle,
|
||||
void *osPrivate
|
||||
);
|
||||
|
||||
/*!
|
||||
* @brief: OS specific handling to notify an event.
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_os_notify_client_event
|
||||
(
|
||||
void *osHandle,
|
||||
void *osPrivate,
|
||||
NvU32 eventId
|
||||
);
|
||||
|
||||
/*!
|
||||
* @brief: Gets OS specific support for the REGISTER_EVENTS ioctl
|
||||
*/
|
||||
NvlStatus
|
||||
nvswitch_os_get_supported_register_events_params
|
||||
(
|
||||
NvBool *bSupportsManyEvents,
|
||||
NvBool *bUserSuppliesOsData
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif //_NVSWITCH_EXPORT_H_
|
||||
127
src/common/nvswitch/interface/ioctl_common_nvswitch.h
Normal file
127
src/common/nvswitch/interface/ioctl_common_nvswitch.h
Normal file
@@ -0,0 +1,127 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: Copyright (c) 2019 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef _IOCTL_COMMON_NVSWITCH_H_
|
||||
#define _IOCTL_COMMON_NVSWITCH_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#define NVSWITCH_DEV_IO_TYPE 'd'
|
||||
#define NVSWITCH_CTL_IO_TYPE 'c'
|
||||
|
||||
/*
|
||||
* Defines for IOCTL Hints
|
||||
*
|
||||
* NVSWITCH_IO_READ_ONLY :
|
||||
* Only reads parameters from the kernel and does not pass any to it
|
||||
*
|
||||
* NVSWITCH_IO_WRITE_ONLY :
|
||||
* Only writes parameters to the kernel, but does not want anything back.
|
||||
*
|
||||
* NVSWITCH_IO_WRITE_READ :
|
||||
* Writes data to the kernel and wants information back
|
||||
*
|
||||
* NVSWITCH_IO_DEFAULT :
|
||||
* Don't copy anything into the kernel, nor copy anything back.
|
||||
*/
|
||||
#define NVSWITCH_IO_READ_ONLY 0x0
|
||||
#define NVSWITCH_IO_WRITE_ONLY 0x1
|
||||
#define NVSWITCH_IO_WRITE_READ 0x2
|
||||
#define NVSWITCH_IO_DEFAULT 0x3
|
||||
|
||||
/*
|
||||
* Macro for defining new IOCTLs in a platform independent way.
|
||||
*
|
||||
* Select Linux specific IOCTL defining macro (_IO, _IOR, _IOW, _IOWR)
|
||||
* based on IOCTL direction.
|
||||
*/
|
||||
#define NVSWITCH_IOCTL_CODE(ioType, ctrl, paramType, direction) \
|
||||
((direction == NVSWITCH_IO_READ_ONLY) ? _IOR(ioType, ctrl, paramType) : \
|
||||
(direction == NVSWITCH_IO_WRITE_ONLY) ? _IOW(ioType, ctrl, paramType) : \
|
||||
(direction == NVSWITCH_IO_WRITE_READ) ? _IOWR(ioType, ctrl, paramType) : \
|
||||
_IO(ioType, ctrl))
|
||||
|
||||
/*
|
||||
* NVSWITCH_NVLINK_MAX_LANES is used by both internal and exteranl IOCTLs.
|
||||
*/
|
||||
#define NVSWITCH_NVLINK_MAX_LANES 4
|
||||
|
||||
/*
|
||||
* Common Fabric State enums
|
||||
*
|
||||
* Definitions:
|
||||
* Driver Fabric State is intended to reflect the state of the driver and
|
||||
* fabric manager. Once FM sets the Driver State to CONFIGURED, it is
|
||||
* expected the FM will send heartbeat updates. If the heartbeat is not
|
||||
* received before the session timeout, then the driver reports status
|
||||
* as MANAGER_TIMEOUT.
|
||||
*
|
||||
* Device Fabric State reflects the state of the nvswitch device.
|
||||
* FM sets the Device Fabric State to CONFIGURED once FM is managing the
|
||||
* device. If the Device Fabric State is BLACKLISTED then the device is
|
||||
* not available for use; opens fail for a blacklisted device, and interrupts
|
||||
* are disabled.
|
||||
*
|
||||
* Blacklist Reason provides additional detail of why a device is blacklisted.
|
||||
*/
|
||||
typedef enum nvswitch_driver_fabric_state
|
||||
{
|
||||
NVSWITCH_DRIVER_FABRIC_STATE_OFFLINE = 0, // offline (No driver loaded)
|
||||
NVSWITCH_DRIVER_FABRIC_STATE_STANDBY, // driver up, no FM
|
||||
NVSWITCH_DRIVER_FABRIC_STATE_CONFIGURED, // driver up, FM up
|
||||
NVSWITCH_DRIVER_FABRIC_STATE_MANAGER_TIMEOUT, // driver up, FM timed out
|
||||
NVSWITCH_DRIVER_FABRIC_STATE_MANAGER_ERROR, // driver up, FM in error state
|
||||
NVSWITCH_DRIVER_FABRIC_STATE_COUNT
|
||||
} NVSWITCH_DRIVER_FABRIC_STATE;
|
||||
|
||||
typedef enum nvswitch_device_fabric_state
|
||||
{
|
||||
NVSWITCH_DEVICE_FABRIC_STATE_OFFLINE = 0, // offline: No driver, no FM
|
||||
NVSWITCH_DEVICE_FABRIC_STATE_STANDBY, // driver up, no FM, not blacklisted
|
||||
NVSWITCH_DEVICE_FABRIC_STATE_CONFIGURED, // driver up, FM up, not blacklisted
|
||||
NVSWITCH_DEVICE_FABRIC_STATE_BLACKLISTED, // device is blacklisted
|
||||
NVSWITCH_DEVICE_FABRIC_STATE_COUNT
|
||||
} NVSWITCH_DEVICE_FABRIC_STATE;
|
||||
|
||||
typedef enum nvswitch_device_blacklist_mode
|
||||
{
|
||||
NVSWITCH_DEVICE_BLACKLIST_REASON_NONE = 0, // device is not blacklisted
|
||||
NVSWITCH_DEVICE_BLACKLIST_REASON_MANUAL_OUT_OF_BAND, // manually blacklisted by out-of-band client
|
||||
NVSWITCH_DEVICE_BLACKLIST_REASON_MANUAL_IN_BAND, // manually blacklisted by in-band OS config
|
||||
NVSWITCH_DEVICE_BLACKLIST_REASON_MANUAL_PEER, // FM indicates blacklisted due to peer manual blacklisted
|
||||
NVSWITCH_DEVICE_BLACKLIST_REASON_TRUNK_LINK_FAILURE, // FM indicates blacklisted due to trunk link failure
|
||||
NVSWITCH_DEVICE_BLACKLIST_REASON_TRUNK_LINK_FAILURE_PEER, // FM indicates blacklisted due to trunk link failure of peer
|
||||
NVSWITCH_DEVICE_BLACKLIST_REASON_ACCESS_LINK_FAILURE, // FM indicates blacklisted due to access link failure
|
||||
NVSWITCH_DEVICE_BLACKLIST_REASON_ACCESS_LINK_FAILURE_PEER, // FM indicates blacklisted due to access link failure of peer
|
||||
NVSWITCH_DEVICE_BLACKLIST_REASON_UNSPEC_DEVICE_FAILURE, // FM indicates blacklisted due to unspecified device failure
|
||||
NVSWITCH_DEVICE_BLACKLIST_REASON_UNSPEC_DEVICE_FAILURE_PEER // FM indicates blacklisted due to unspec device failure of peer
|
||||
} NVSWITCH_DEVICE_BLACKLIST_REASON;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif // __cplusplus
|
||||
|
||||
#endif //_IOCTL_COMMON_NVSWITCH_H_
|
||||
Reference in New Issue
Block a user