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