aboutsummaryrefslogtreecommitdiff
path: root/drivers/mailbox/include/mailbox.hpp
diff options
context:
space:
mode:
authorJonny Svärd <jonny.svaerd@arm.com>2020-11-16 16:18:07 +0100
committerJonny Svärd <jonny.svaerd@arm.com>2020-11-26 11:36:05 +0100
commit9fc527b8b01847b16a8aa577dec4c6d9401a2ef0 (patch)
treef5f9cbd08ec674f9a3fcbc707044ba3f38bed379 /drivers/mailbox/include/mailbox.hpp
parent34e249686923a0299a041fb6af10e56fc9fb76cd (diff)
downloadethos-u-core-software-9fc527b8b01847b16a8aa577dec4c6d9401a2ef0.tar.gz
Add basic MHU drivers
Add MHUv2 doorbell driver implementation Add MHU doorbell driver for Juno board Add a dummy MHU driver Add some comments to the mailbox header file Change-Id: I0950a7ca3afeec88ca691ca2486022dfbb3319b8
Diffstat (limited to 'drivers/mailbox/include/mailbox.hpp')
-rw-r--r--drivers/mailbox/include/mailbox.hpp46
1 files changed, 45 insertions, 1 deletions
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);