blob: 735d0a5ea889a48f22a7ed130cefced8f16c7b62 [file] [log] [blame]
Harshit Aghera560e6af2025-04-21 20:04:56 +05301/*
2 * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION &
3 * AFFILIATES. All rights reserved.
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#pragma once
8
9#include <cstdint>
10#include <span>
11
12namespace ocp
13{
14namespace accelerator_management
15{
16
17constexpr uint8_t messageType = 0x7E;
18
19constexpr uint8_t ocpType = 8;
20constexpr uint8_t ocpVersion = 9;
21constexpr uint8_t ocpTypeBitOffset = 4;
22constexpr uint8_t ocpTypeBitMask = 0b11110000;
23constexpr uint8_t ocpVersionBitMask = 0b00001111;
24constexpr uint8_t instanceIdBitMask = 0b00011111;
25constexpr uint8_t instanceIdReservedBitMask = 0b00100000;
26constexpr uint8_t datagramBitMask = 0b01000000;
27constexpr uint8_t requestBitMask = 0b10000000;
28
29constexpr uint8_t instanceMin = 0;
30constexpr uint8_t instanceMax = 31;
31
32enum class CompletionCode : uint8_t
33{
34 SUCCESS = 0x00,
35 ERROR = 0x01,
36 ERR_INVALID_DATA = 0x02,
37 ERR_INVALID_DATA_LENGTH = 0x03,
38 ERR_NOT_READY = 0x04,
39 ERR_UNSUPPORTED_COMMAND_CODE = 0x05,
40 ERR_UNSUPPORTED_MSG_TYPE = 0x06,
41 ERR_BUS_ACCESS = 0x7f,
42 ERR_NULL = 0x80,
43};
44
45enum class ReasonCode : uint16_t
46{
47 REASON_NONE = 0x00,
48};
49
50enum class MessageType : uint8_t
51{
52 RESPONSE = 0, //!< OCP MCTP VDM response message
53 REQUEST = 2, //!< OCP MCTP VDM request message
54};
55
56struct BindingPciVid
57{
58 uint16_t pci_vendor_id; //!< PCI defined vendor ID
59 uint8_t instance_id; //!< Instance ID
60 uint8_t ocp_version; //!< OCP version
61 uint8_t ocp_accelerator_management_msg_type; //!< Message Type
62} __attribute__((packed));
63
64struct Message
65{
66 BindingPciVid hdr; //!< OCP MCTP VDM message header
67} __attribute__((packed));
68
69struct BindingPciVidInfo
70{
71 uint8_t ocp_accelerator_management_msg_type;
72 uint8_t instance_id;
73 uint8_t msg_type;
74};
75
76struct CommonRequest
77{
78 Message msgHdr;
79 uint8_t command;
80 uint8_t data_size;
81} __attribute__((packed));
82
83struct CommonResponse
84{
85 Message msgHdr;
86 uint8_t command;
87 uint8_t completion_code;
88 uint16_t reserved;
89 uint16_t data_size;
90} __attribute__((packed));
91
92struct CommonNonSuccessResponse
93{
94 Message msgHdr;
95 uint8_t command;
96 uint8_t completion_code;
97 uint16_t reason_code;
98} __attribute__((packed));
99
100int packHeader(uint16_t pciVendorId, const BindingPciVidInfo& hdr,
101 BindingPciVid& msg);
102
103int decodeReasonCodeAndCC(std::span<const uint8_t> buf, CompletionCode& cc,
104 uint16_t& reasonCode);
105
106} // namespace accelerator_management
107} // namespace ocp