mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2024-12-12 21:08:56 +01:00
145 lines
6.1 KiB
C
145 lines
6.1 KiB
C
/*
|
|
* 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
|
|
|
|
#if (defined(_WIN32) || defined(_WIN64))
|
|
/*
|
|
* Values of less than 0x800 are reserved for Microsoft.
|
|
* Values of 0x800 and higher can be used by vendors.
|
|
*/
|
|
#define IOCTL_START_INDEX 0x800
|
|
|
|
/*
|
|
* Macro for defining new IOCTLs in a platform independent way.
|
|
*/
|
|
#define NVSWITCH_IOCTL_CODE(ioType, ctrl, paramType, direction) \
|
|
CTL_CODE(FILE_DEVICE_UNKNOWN, IOCTL_START_INDEX + ctrl, METHOD_BUFFERED, \
|
|
(FILE_READ_DATA | FILE_WRITE_DATA))
|
|
#else
|
|
|
|
/*
|
|
* 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))
|
|
|
|
#endif // (defined(_WIN32) || defined(_WIN64))
|
|
|
|
/*
|
|
* 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_
|