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