Skip to content
Snippets Groups Projects
Commit 277189e4 authored by Asias He's avatar Asias He
Browse files

interrupt: Introduce set_ack_and_handler


Add set_ack_and_handler helper to setup ack and handler function of gsi
level interrupt.

Signed-off-by: default avatarAsias He <asias@cloudius-systems.com>
parent 5fc9daf8
No related branches found
No related tags found
No related merge requests found
...@@ -84,12 +84,21 @@ gsi_level_interrupt::gsi_level_interrupt(unsigned gsi, ...@@ -84,12 +84,21 @@ gsi_level_interrupt::gsi_level_interrupt(unsigned gsi,
std::function<void ()> handler) std::function<void ()> handler)
: _vector(idt.register_level_triggered_handler(gsi, ack, handler)) : _vector(idt.register_level_triggered_handler(gsi, ack, handler))
{ {
_gsi.set(gsi, _vector); _gsi.set(gsi, _vector.get());
}
void gsi_level_interrupt::set_ack_and_handler(unsigned gsi,
std::function<bool ()> ack,
std::function<void ()> handler)
{
_vector = idt.register_level_triggered_handler(gsi, ack, handler);
_gsi.set(gsi, _vector.get());
} }
gsi_level_interrupt::~gsi_level_interrupt() gsi_level_interrupt::~gsi_level_interrupt()
{ {
_gsi.clear(); _gsi.clear();
idt.unregister_handler(_vector); if (_vector)
idt.unregister_handler(_vector.get());
} }
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include "drivers/pci-function.hh" #include "drivers/pci-function.hh"
#include <osv/types.h> #include <osv/types.h>
#include <initializer_list> #include <initializer_list>
#include <boost/optional.hpp>
// max vectors per request // max vectors per request
const int max_vectors = 256; const int max_vectors = 256;
...@@ -118,12 +119,17 @@ private: ...@@ -118,12 +119,17 @@ private:
class gsi_level_interrupt { class gsi_level_interrupt {
public: public:
gsi_level_interrupt() {};
gsi_level_interrupt(unsigned gsi, gsi_level_interrupt(unsigned gsi,
std::function<bool ()> ack, std::function<bool ()> ack,
std::function<void ()> handler); std::function<void ()> handler);
~gsi_level_interrupt(); ~gsi_level_interrupt();
void set_ack_and_handler(unsigned gsi,
std::function<bool ()> ack,
std::function<void ()> handler);
private: private:
unsigned _vector; boost::optional<unsigned> _vector;
gsi_interrupt _gsi; gsi_interrupt _gsi;
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment