+/**
+ * \ingroup l4vbus_module
+ * \brief Power-management API mixin.
+ */
+template<typename DEC>
+class Pm
+{
+private:
+ DEC const *self() const { return static_cast<DEC const *>(this); }
+ DEC *self() { return static_cast<DEC *>(this); }
+public:
+ /**
+ * \brief Suspend the module.
+ */
+ int pm_suspend() const
+ { return l4vbus_pm_suspend(self()->bus_cap().cap(), self()->dev_handle()); }
+
+ /**
+ * \brief Resume the module.
+ */
+ int pm_resume() const
+ { return l4vbus_pm_resume(self()->bus_cap().cap(), self()->dev_handle()); }
+};
+
+
+/**
+ * \ingroup l4vbus_module
+ * \brief Device on a virtual bus (V-BUS)
+ */
+class Device : public Pm<Device>