xref: /openbmc/phosphor-host-ipmid/oem/nvidia/bootstrap-credentials-oem-cmds.cpp (revision 6bf35ee6d5f2782b79ea2b6f9a451e27f5f8433c)
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION &
3  * AFFILIATES. All rights reserved.
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #include "oemcommands.hpp"
8 
9 #include <ipmid/api.hpp>
10 #include <ipmid/types.hpp>
11 
12 #include <cstdint>
13 
14 void registerBootstrapCredentialsOemCommands() __attribute__((constructor));
15 
16 namespace ipmi
17 {
18 ipmi::RspType<uint8_t, uint8_t> ipmiGetUsbVendorIdProductId(uint8_t type)
19 {
20     constexpr uint8_t descriptorVendorId = 1;
21     constexpr uint8_t descriptorProductId = 2;
22 
23     // IPMI OEM USB Linux Gadget info
24     constexpr uint16_t usbVendorId = 0x0525;
25     constexpr uint16_t usbProductId = 0xA4A2;
26 
27     if (type == descriptorVendorId)
28     {
29         return ipmi::responseSuccess(static_cast<uint8_t>(usbVendorId >> 8),
30                                      static_cast<uint8_t>(usbVendorId & 0xFF));
31     }
32     else if (type == descriptorProductId)
33     {
34         return ipmi::responseSuccess(static_cast<uint8_t>(usbProductId >> 8),
35                                      static_cast<uint8_t>(usbProductId & 0xFF));
36     }
37     return ipmi::responseInvalidFieldRequest();
38 }
39 
40 ipmi::RspType<ipmi::message::Payload> ipmiGetUsbSerialNumber()
41 {
42     static constexpr uint8_t usbSerialNumber = 0x00;
43     ipmi::message::Payload usbSerialNumberPayload;
44     usbSerialNumberPayload.pack(usbSerialNumber);
45     return ipmi::responseSuccess(usbSerialNumberPayload);
46 }
47 
48 } // namespace ipmi
49 
50 void registerBootstrapCredentialsOemCommands()
51 {
52     ipmi::registerHandler(
53         ipmi::prioOemBase, ipmi::groupNvidia,
54         ipmi::bootstrap_credentials_oem::cmdGetUsbVendorIdProductId,
55         ipmi::Privilege::Admin, ipmi::ipmiGetUsbVendorIdProductId);
56 
57     ipmi::registerHandler(
58         ipmi::prioOemBase, ipmi::groupNvidia,
59         ipmi::bootstrap_credentials_oem::cmdGetUsbSerialNumber,
60         ipmi::Privilege::Admin, ipmi::ipmiGetUsbSerialNumber);
61 }
62