# Board Management Controller (BMC) Proxy Driver ## Overview MCTP - Management Component Transport Protocol PLDM - Platform Level Data Model The BMC proxy allows for communication and sensor management between the BMC and AMC through MCTP/PLDM protocols. The BMC proxy is polling indefinitely and listening for incoming messages through a FAL **read** call. If a message is received, an internal flag is set that will start the processing of the message. The proxy calls into the MCTP code to determine whether the message is an MCTP, PLDM Type 0 or PLDM Type 2 form which will determine the exact command. The PLDM code will then form a response to the initial request, which gets sent back to the BMC via a firmware interface **write** by the BMC proxy driver. ### Note: The MCTP/PLDM code provided is intended to be used and an example to prove the basic functionality of a BMC stack. AMC only supports Type 0 and Type 2 DMTF messages (limited to sensor reading - i.e. no effecters).  ## Supported commands M - Mandatory O - Optional C - Conditional ### MCTP
| Command Name | Command Code | DMTF Spec M/O/C |
|---|---|---|
| Set Endpoint ID | 0x01 | M |
| Get Endpoint ID | 0x02 | M |
| Get Endpoint UUID | 0x03 | M |
| Get MCTP Version Support | 0x04 |
M |
| Get Message Type support | 0x05 | M |
| Command Name | Command Code | DMTF Spec M/O/C |
|---|---|---|
| SetTID | 0x01 | M |
| GetTID | 0x02 | M |
| GetPLDMVersion | 0x03 | M |
| GetPLDMTypes | 0x04 |
M |
| GetPLDMCommands | 0x05 | M |
| Command Name | Command Code | DMTF Spec M/O/C |
|---|---|---|
| SetTID | 0x01 | M |
| GetTID | 0x02 | M |
| SetNumericSensorEnable | 0x10 | M |
| GetSensorReading | 0x11 |
M |
| GetPDRRepositoryInfo | 0x50 | M |
| GetPDR | 0x51 | M |
| Type | Name | Description |
|---|---|---|
| uint16 | PLDMTerminusHandle | A handle that identifies PDRs that belong to a particular PLDM terminus. |
| uint16 | sensorID | ID of the sensor relative to the given PLDM Terminus ID. |
| uint16 | entityType | The Type value for the entity that is associated with this sensor. |
| uint16 | entityInstanceNumber | The Instance Number for the entity that is associated with this sensor. See 9.1 for more information. |
| uint16 | containerID | The containerID for the containing entity that instantiates the entity that is measured by this sensor. |
| uint8_t | sensorInit | Indicates whether the sensor requires initialization by the initializationAgent. |
| uint8_t | sensorAuxiliaryNamesPDR | true = sensor has a Sensor Auxiliary Names PDR false = sensor does not have an associated Sensor Auxiliary Names PDR |
| uint8_t | baseUnit | The base unit of the reading returned by this sensor. |
| int8_t | unitModifier | A power-of-10 multiplier for the baseUnit. |
| uint8_t | rateUnit | value: { None, Per MicroSecond, Per MilliSecond, Per Second, Per Minute, Per Hour, Per Day, Per Week, Per Month, Per Year } |
| uint8_t | baseOEMUnitHandle | This value is used to locate the corresponding PLDM OEM Unit PDR that defines the OEMUnit when the OEMUnit value is used for the baseUnit. |
| uint8_t | auxUnit | The base unit of the reading returned by this sensor. |
| int8_t | auxUnitModifier | A power-of-10 multiplier for the auxUnit. |
| uint8_t | auxrateUnit | value: { None, Per MicroSecond, Per MilliSecond, Per Second, Per Minute, Per Hour, Per Day, Per Week, Per Month, Per Year } |
| uint8_t | rel | The relationship between the base unit and the auxiliary unit. |
| uint8_t | auxOEMUnitHandle | This value is used to locate the PLDM OEM Unit PDR that defines the OEMUnit if the OEMUnit value is used for the auxUnit. |
| uint8_t | isLinear | Indicates whether a sensor is linear or dynamic in its range. For example, this value can be used by a MAP to populate the IsLinear attribute of CIM_NumericSensor. |
| uint8_t | sensorDataSize | The bit width and format of reading and threshold values that the sensor returns value: { uint8, sint8, uint16, sint16, uint32, sint32 } |
| float | resolution | The resolution of the sensor in Units |
| float | offset | A constant value that is added in as part of the conversion process of converting a raw sensor reading to Units |
| uint16_t | accuracy | Given as a -/- percentage in 1/100ths of a % from 0.00 to 100.00. For example, the integer value 510 corresponds to ± 5.10% |
| uint8_t | plusTolerance | Tolerance is given in -/- counts of the reading value. |
| uint8_t | minusTolerance | Tolerance is given in -/- counts of the reading value. |
| int16_t | hysteresis | The amount of hysteresis associated with the sensor thresholds, given in raw sensor counts. |
| uint8_t | supportedThresholds | For PLDM: bit field where bit position represents whether a given threshold is supported |
| uint8_t | thresholdAndHysteresisVolatility | Identifies under which conditions any threshold or hysteresis settings that were set through the SetSensorThresholds or SetSensorHysteresis command may be lost. |
| float | stateTransitionInterval | How long the sensor device takes to do an enabledState change (worst case) |
| float | updateInterval | Polling or update interval in seconds expressed using a floating point number (generally corresponds to the CIM PollingInterval property) |
| int16_t | maxReadable | The maximum value that the sensor may return. The size of this field is given by the sensorDataSize field in this PDR. |
| int16_t | minReadable | The minimum value that the sensor may return. The size of this field is given by the sensorDataSize field in this PDR. |
| uint8_t | rangeFieldFormat | Indicates the format used for the following nominalValue, normalMax, normalMin, criticalHigh, criticalLow, fatalHigh, and fatalLow fields. |
| uint8_t | rangeFieldSupport | Indicates which of the fields that identify the operating ranges of the parameter monitored by the sensor are supported. (This bitfield indicates whether the following nominalValue, normalMax, and so on, fields contain valid range values.) |
| int16_t | nominalValue | This value presents the nominal value for the parameter that is monitored by the sensor. The size of this field is given by the rangeFieldFormat field in this PDR. This value is given directly in the specified units without the use of any conversion formula. |
| int16_t | normalMax | The upper limit of the normal operating range for the parameter that is monitored by the numeric sensor. |
| int16_t | normalMin | The lower limit of the normal operating range for the parameter that is monitored by the numeric sensor. |
| int16_t | warningHigh | A warning condition that occurs when the monitored value is greater than the value reported by warningHigh. |
| int16_t | warningLow | A warning condition that occurs when the monitored value is less than or equal to the value reported by warningLow. |
| int16_t | criticalHigh | A critical condition that occurs when the monitored value is greater than or equal to the value reported by criticalHigh. |
| int16_t | criticalLow | A critical condition that occurs when the monitored value is less than the value reported by criticalLow. |
| int16_t | fatalHigh | A fatal condition that occurs when the monitored value is greater than the value reported by fatalHigh. |
| int16_t | fatalLow | A fatal condition that occurs when the monitored value is less than the value reported by fatalLow. |