xref: /openbmc/phosphor-host-ipmid/oem/nvidia/bootstrap-credentials-oem-cmds.cpp (revision bffaa1100755e28549d034251c6c2b3feb9c27cc)
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 } // namespace ipmi
41 
42 void registerBootstrapCredentialsOemCommands()
43 {
44     ipmi::registerHandler(
45         ipmi::prioOemBase, ipmi::groupNvidia,
46         ipmi::bootstrap_credentials_oem::cmdGetUsbVendorIdProductId,
47         ipmi::Privilege::Admin, ipmi::ipmiGetUsbVendorIdProductId);
48 }
49