nvidia-oem: Implement GetUsbSerialNumber

This command is used by BIOS before creating SMBIOS record
type 42. BIOS gets USBDescription information from BMC.

Note:
The implementation in this PR is for DeviceSerialNumber.
The support for other device descriptors will be added
in upcoming PRs.

Design Document for RHI:
[1] https://gerrit.openbmc.org/c/openbmc/docs/+/79327

Redfish Host Interface specification:
[2] https://www.dmtf.org/sites/default/files/standards/documents/DSP0270_1.3.0.pdf

Tested:
Tested on gb200nvl-obmc platform

root@gb200nvl-obmc:~#  ipmitool raw 0x3c 0x31
 00

Change-Id: I7a29d8e46d88e4e95142b27eba7d5585fb03bb98
Signed-off-by: Prithvi Pai <ppai@nvidia.com>
diff --git a/oem/nvidia/bootstrap-credentials-oem-cmds.cpp b/oem/nvidia/bootstrap-credentials-oem-cmds.cpp
index 5863306..ba56371 100644
--- a/oem/nvidia/bootstrap-credentials-oem-cmds.cpp
+++ b/oem/nvidia/bootstrap-credentials-oem-cmds.cpp
@@ -37,6 +37,14 @@
     return ipmi::responseInvalidFieldRequest();
 }
 
+ipmi::RspType<ipmi::message::Payload> ipmiGetUsbSerialNumber()
+{
+    static constexpr uint8_t usbSerialNumber = 0x00;
+    ipmi::message::Payload usbSerialNumberPayload;
+    usbSerialNumberPayload.pack(usbSerialNumber);
+    return ipmi::responseSuccess(usbSerialNumberPayload);
+}
+
 } // namespace ipmi
 
 void registerBootstrapCredentialsOemCommands()
@@ -45,4 +53,9 @@
         ipmi::prioOemBase, ipmi::groupNvidia,
         ipmi::bootstrap_credentials_oem::cmdGetUsbVendorIdProductId,
         ipmi::Privilege::Admin, ipmi::ipmiGetUsbVendorIdProductId);
+
+    ipmi::registerHandler(
+        ipmi::prioOemBase, ipmi::groupNvidia,
+        ipmi::bootstrap_credentials_oem::cmdGetUsbSerialNumber,
+        ipmi::Privilege::Admin, ipmi::ipmiGetUsbSerialNumber);
 }