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