From 0c07c320a5872aaf3cf9efc8f162a33b25d577c3 Mon Sep 17 00:00:00 2001 From: Andrew Geissler Date: Wed, 22 Mar 2017 14:02:30 -0500 Subject: Enable multiple commands to be queued at once With this commit, the control host interface allows multiple commands to be queued up and sent in a FIFO order to the host Change-Id: I76908d988608ef6dcc1d7f945c6c4a1c5c29e44b Signed-off-by: Andrew Geissler --- host-interface.cpp | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) (limited to 'host-interface.cpp') diff --git a/host-interface.cpp b/host-interface.cpp index aa32ff0..160c127 100644 --- a/host-interface.cpp +++ b/host-interface.cpp @@ -16,15 +16,14 @@ using namespace phosphor::logging; // When you see base:: you know we're referencing our base class namespace base = sdbusplus::xyz::openbmc_project::Control::server; -void Host::execute(base::Host::Command command) -{ - log("Pushing cmd on to queue", - entry("CONTROL_HOST_CMD=%s", - convertForMessage(command))); - this->workQueue.push(command); +// TODO - Add timeout function? +// - If host does not respond to SMS, need to signal a failure +// - Flush queue on power off? - Timeout would do this for us for free +// - Ignore requests when host state not running? - Timeout handles too - // If this was the only entry then send the SMS attention - if(this->workQueue.size() == 1) +void Host::checkQueue() +{ + if (this->workQueue.size() >= 1) { log("Asserting SMS Attention"); @@ -46,6 +45,26 @@ void Host::execute(base::Host::Command command) } log("SMS Attention asserted"); } +} + +void Host::execute(base::Host::Command command) +{ + log("Pushing cmd on to queue", + entry("CONTROL_HOST_CMD=%s", + convertForMessage(command))); + + this->workQueue.push(command); + + // Alert host if this is only command in queue otherwise host will + // be notified of next message after processing the current one + if (this->workQueue.size() == 1) + { + this->checkQueue(); + } + else + { + log("Command in process, no attention"); + } return; } -- cgit v1.2.1