| /* |
| * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & |
| * AFFILIATES. All rights reserved. |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #pragma once |
| |
| #include <cstdint> |
| #include <span> |
| |
| namespace ocp |
| { |
| namespace accelerator_management |
| { |
| |
| constexpr uint8_t messageType = 0x7E; |
| |
| constexpr uint8_t ocpType = 8; |
| constexpr uint8_t ocpVersion = 9; |
| constexpr uint8_t ocpTypeBitOffset = 4; |
| constexpr uint8_t ocpTypeBitMask = 0b11110000; |
| constexpr uint8_t ocpVersionBitMask = 0b00001111; |
| constexpr uint8_t instanceIdBitMask = 0b00011111; |
| constexpr uint8_t instanceIdReservedBitMask = 0b00100000; |
| constexpr uint8_t datagramBitMask = 0b01000000; |
| constexpr uint8_t requestBitMask = 0b10000000; |
| |
| constexpr uint8_t instanceMin = 0; |
| constexpr uint8_t instanceMax = 31; |
| |
| enum class CompletionCode : uint8_t |
| { |
| SUCCESS = 0x00, |
| ERROR = 0x01, |
| ERR_INVALID_DATA = 0x02, |
| ERR_INVALID_DATA_LENGTH = 0x03, |
| ERR_NOT_READY = 0x04, |
| ERR_UNSUPPORTED_COMMAND_CODE = 0x05, |
| ERR_UNSUPPORTED_MSG_TYPE = 0x06, |
| ERR_BUS_ACCESS = 0x7f, |
| ERR_NULL = 0x80, |
| }; |
| |
| enum class ReasonCode : uint16_t |
| { |
| REASON_NONE = 0x00, |
| }; |
| |
| enum class MessageType : uint8_t |
| { |
| RESPONSE = 0, //!< OCP MCTP VDM response message |
| REQUEST = 2, //!< OCP MCTP VDM request message |
| }; |
| |
| struct BindingPciVid |
| { |
| uint16_t pci_vendor_id; //!< PCI defined vendor ID |
| uint8_t instance_id; //!< Instance ID |
| uint8_t ocp_version; //!< OCP version |
| uint8_t ocp_accelerator_management_msg_type; //!< Message Type |
| } __attribute__((packed)); |
| |
| struct Message |
| { |
| BindingPciVid hdr; //!< OCP MCTP VDM message header |
| } __attribute__((packed)); |
| |
| struct BindingPciVidInfo |
| { |
| uint8_t ocp_accelerator_management_msg_type; |
| uint8_t instance_id; |
| uint8_t msg_type; |
| }; |
| |
| struct CommonRequest |
| { |
| Message msgHdr; |
| uint8_t command; |
| uint8_t data_size; |
| } __attribute__((packed)); |
| |
| struct CommonResponse |
| { |
| Message msgHdr; |
| uint8_t command; |
| uint8_t completion_code; |
| uint16_t reserved; |
| uint16_t data_size; |
| } __attribute__((packed)); |
| |
| struct CommonNonSuccessResponse |
| { |
| Message msgHdr; |
| uint8_t command; |
| uint8_t completion_code; |
| uint16_t reason_code; |
| } __attribute__((packed)); |
| |
| int packHeader(uint16_t pciVendorId, const BindingPciVidInfo& hdr, |
| BindingPciVid& msg); |
| |
| int decodeReasonCodeAndCC(std::span<const uint8_t> buf, CompletionCode& cc, |
| uint16_t& reasonCode); |
| |
| } // namespace accelerator_management |
| } // namespace ocp |