diff options
author | Jonny Svärd <jonny.svaerd@arm.com> | 2020-11-16 16:18:07 +0100 |
---|---|---|
committer | Jonny Svärd <jonny.svaerd@arm.com> | 2020-11-26 11:36:05 +0100 |
commit | 9fc527b8b01847b16a8aa577dec4c6d9401a2ef0 (patch) | |
tree | f5f9cbd08ec674f9a3fcbc707044ba3f38bed379 /drivers/mailbox/include/mailbox.hpp | |
parent | 34e249686923a0299a041fb6af10e56fc9fb76cd (diff) | |
download | ethos-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.hpp | 46 |
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); |