diff options
author | Deepak Kodihalli <dkodihal@in.ibm.com> | 2018-01-24 04:53:09 -0600 |
---|---|---|
committer | Deepak Kodihalli <dkodihal@in.ibm.com> | 2018-02-01 02:05:49 -0600 |
commit | ee717d71a2f294a8de5d1e17c9106b65af59d310 (patch) | |
tree | 087a5e26432be6af65d2c7f8cc6d907f204e2295 /dcmihandler.hpp | |
parent | c6162fb649a850e129d760f59369c8adf46d070f (diff) | |
download | phosphor-host-ipmid-ee717d71a2f294a8de5d1e17c9106b65af59d310.tar.gz phosphor-host-ipmid-ee717d71a2f294a8de5d1e17c9106b65af59d310.zip |
dcmi : implement get temperature readings
This commit implements the plumbing around the 'Get Temperature
Readings' command. It doesn't read the temperatures from the relevant
sensors. That code is coming up in a subsequent commit.
Change-Id: I4514b65eb3ca65d52dd35185338a2c397e9a76ca
Signed-off-by: Deepak Kodihalli <dkodihal@in.ibm.com>
Diffstat (limited to 'dcmihandler.hpp')
-rw-r--r-- | dcmihandler.hpp | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/dcmihandler.hpp b/dcmihandler.hpp index 288e4d7..a7cfe8a 100644 --- a/dcmihandler.hpp +++ b/dcmihandler.hpp @@ -20,6 +20,7 @@ enum Commands SET_ASSET_TAG = 0x08, GET_MGMNT_CTRL_ID_STR = 0x09, SET_MGMNT_CTRL_ID_STR = 0x0A, + GET_TEMP_READINGS = 0x10, }; static constexpr auto propIntf = "org.freedesktop.DBus.Properties"; @@ -32,6 +33,7 @@ static constexpr auto networkConfigObj = static constexpr auto networkConfigIntf = "xyz.openbmc_project.Network.SystemConfiguration"; static constexpr auto hostNameProp = "HostName"; +static constexpr auto temperatureSensorType = 0x01; namespace assettag { @@ -43,6 +45,33 @@ namespace assettag } //namespace assettag +namespace temp_readings +{ + static constexpr auto maxDataSets = 8; + static constexpr auto maxInstances = 255; + static constexpr auto maxTemp = 128; // degrees C + + /** @struct Response + * + * DCMI payload for Get Temperature Readings response + */ + struct Response + { +#if BYTE_ORDER == LITTLE_ENDIAN + uint8_t temperature: 7; //!< Temperature reading in Celsius + uint8_t sign: 1; //!< Sign bit +#endif +#if BYTE_ORDER == BIG_ENDIAN + uint8_t sign: 1; //!< Sign bit + uint8_t temperature: 7; //!< Temperature reading in Celsius +#endif + uint8_t instance; //!< Entity instance number + } __attribute__((packed)); + + using ResponseList = std::vector<Response>; + using NumInstances = size_t; +} + static constexpr auto groupExtId = 0xDC; static constexpr auto assetTagMaxOffset = 62; @@ -320,6 +349,59 @@ struct DCMICapEntry using DCMICaps = std::map<DCMICapParameters, DCMICapEntry>; +/** @struct GetTempReadingsRequest + * + * DCMI payload for Get Temperature Readings request + */ +struct GetTempReadingsRequest +{ + uint8_t groupID; //!< Group extension identification. + uint8_t sensorType; //!< Type of the sensor + uint8_t entityId; //!< Entity ID + uint8_t entityInstance; //!< Entity Instance (0 means all instances) + uint8_t instanceStart; //!< Instance start (used if instance is 0) +} __attribute__((packed)); + +/** @struct GetTempReadingsResponse + * + * DCMI header for Get Temperature Readings response + */ +struct GetTempReadingsResponseHdr +{ + uint8_t groupID; //!< Group extension identification. + uint8_t numInstances; //!< No. of instances for requested id + uint8_t numDataSets; //!< No. of sets of temperature data +} __attribute__((packed)); + +namespace temp_readings +{ + /** @brief Read temperatures and fill up DCMI response for the Get + * Temperature Readings command. This looks at a specific + * instance. + * + * @param[in] type - one of "inlet", "cpu", "baseboard" + * @param[in] instance - A non-zero Entity instance number + * + * @return A tuple, containing a temperature reading and the + * number of instances. + */ + std::tuple<Response, NumInstances> read (const std::string& type, + uint8_t instance); + + /** @brief Read temperatures and fill up DCMI response for the Get + * Temperature Readings command. This looks at a range of + * instances. + * + * @param[in] type - one of "inlet", "cpu", "baseboard" + * @param[in] instanceStart - Entity instance start index + * + * @return A tuple, containing a list of temperature readings and the + * number of instances. + */ + std::tuple<ResponseList, NumInstances> readAll(const std::string& type, + uint8_t instanceStart); +} + } // namespace dcmi #endif |