Commit c93522ab authored by Antoine Kaufmann's avatar Antoine Kaufmann
Browse files

libnicbm: add MSI-X support

parent 92222548
...@@ -118,6 +118,7 @@ class Runner { ...@@ -118,6 +118,7 @@ class Runner {
/* these three are for `Runner::Device`. */ /* these three are for `Runner::Device`. */
void issue_dma(DMAOp &op); void issue_dma(DMAOp &op);
void msi_issue(uint8_t vec); void msi_issue(uint8_t vec);
void msix_issue(uint8_t vec);
void eth_send(const void *data, size_t len); void eth_send(const void *data, size_t len);
void event_schedule(TimedEvent &evt); void event_schedule(TimedEvent &evt);
......
...@@ -144,6 +144,21 @@ void Runner::msi_issue(uint8_t vec) ...@@ -144,6 +144,21 @@ void Runner::msi_issue(uint8_t vec)
COSIM_PCIE_PROTO_D2H_OWN_HOST; COSIM_PCIE_PROTO_D2H_OWN_HOST;
} }
void Runner::msix_issue(uint8_t vec)
{
volatile union cosim_pcie_proto_d2h *msg = d2h_alloc();
#ifdef DEBUG_NICBM
printf("nicbm: issue MSI-X interrupt vec %u\n", vec);
#endif
volatile struct cosim_pcie_proto_d2h_interrupt *intr = &msg->interrupt;
intr->vector = vec;
intr->inttype = COSIM_PCIE_PROTO_INT_MSIX;
// WMB();
intr->own_type = COSIM_PCIE_PROTO_D2H_MSG_INTERRUPT |
COSIM_PCIE_PROTO_D2H_OWN_HOST;
}
void Runner::event_schedule(TimedEvent &evt) void Runner::event_schedule(TimedEvent &evt)
{ {
events.insert(&evt); events.insert(&evt);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment