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