aboutsummaryrefslogtreecommitdiff
path: root/drivers/mailbox
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mailbox')
-rw-r--r--drivers/mailbox/CMakeLists.txt7
-rw-r--r--drivers/mailbox/include/mailbox.hpp46
2 files changed, 48 insertions, 5 deletions
diff --git a/drivers/mailbox/CMakeLists.txt b/drivers/mailbox/CMakeLists.txt
index 6d55407..bd2dae3 100644
--- a/drivers/mailbox/CMakeLists.txt
+++ b/drivers/mailbox/CMakeLists.txt
@@ -16,7 +16,6 @@
# limitations under the License.
#
-add_library(mailbox STATIC)
-target_include_directories(mailbox PUBLIC include)
-target_sources(mailbox PRIVATE src/mailbox.cc)
-
+add_library(ethosu_mailbox STATIC)
+target_include_directories(ethosu_mailbox PUBLIC include)
+target_sources(ethosu_mailbox PRIVATE src/mailbox.cc)
diff --git a/drivers/mailbox/include/mailbox.hpp b/drivers/mailbox/include/mailbox.hpp
index 465503e..f3a2dc4 100644
--- a/drivers/mailbox/include/mailbox.hpp
+++ b/drivers/mailbox/include/mailbox.hpp
@@ -25,19 +25,63 @@
namespace Mailbox {
+/**
+ * The Mailbox parent class
+ *
+ * Intended to be implemented by a driver subclass, see MHU_v2 driver as example.
+ */
class Mailbox {
public:
+ /**
+ * Constructor/Destructor
+ */
Mailbox();
virtual ~Mailbox();
- virtual bool sendMessage() = 0;
+
+ /**
+ * Intended to trigger an interrupt to an external block
+ * MUST be implemented by subclass.
+ */
+ virtual bool sendMessage() = 0;
+
+ /**
+ * Intended to be called when Cortex M has received an
+ * interrupt/event from mailbox/mhu. If an interrupt needs to be cleared,
+ * this is a good place to do that. MUST call notify().
+ * MUST be implemented by subclass.
+ */
virtual void handleMessage() = 0;
+
+ /**
+ * Can be used to verify that hardware versions match expected versions
+ * CAN be implemented by subclass, optional. Default impl returns true.
+ */
virtual bool verifyHardware();
+
+ /**
+ * Function signature for callbacks
+ */
typedef void (*CallbackFptr)(void *userArg);
+
+ /**
+ * Register a callback to be called when a message is received.
+ */
void registerCallback(CallbackFptr callback, void *userArg);
+
+ /**
+ * Remove a specific callback from the callback list.
+ */
void deregisterCallback(CallbackFptr callback, void *userArg);
protected:
+ /**
+ * Calls every registered callback when a message has been received.
+ */
void notify();
+
+ /**
+ * Helper functions
+ */
uint32_t read32(volatile uint32_t *baseAddr, const uint32_t offset);
void write32(volatile uint32_t *baseAddr, const uint32_t offset, const uint32_t value);