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