1#include <barrelfish/barrelfish.h>
2#include <barrelfish/capabilities.h>
3#include <barrelfish/nameservice_client.h>
4
5#include <pci/pci.h>
6
7#include <stdio.h>
8#include <stdlib.h>
9#include <if/monitor_blocking_defs.h>
10
11#include "kaluga.h"
12
13static struct capref all_irq_cap;
14
15struct capref * get_irq_cap(void)
16{
17  return &all_irq_cap;
18}
19
20errval_t store_int_cap(int start, int end, struct driver_argument *arg){
21    errval_t err;
22    assert(!cnoderef_is_null(arg->argnode_ref));
23    assert(!capref_is_null(all_irq_cap));
24
25    struct capref cap = {
26        .cnode = arg->argnode_ref,
27        .slot = PCIARG_SLOT_INT
28    };
29    err = cap_retype(cap, all_irq_cap, start, ObjType_IRQSrc,
30            end, 1);
31    if(err_is_fail(err)){
32        DEBUG_ERR(err, "Could not create int_src cap");
33        return err;
34    }
35    return SYS_ERR_OK;
36}
37
38/**
39 * Initialize the cap manager. It will track retypes of all_irq_cap
40 */
41errval_t init_int_caps_manager(struct capref irq)
42{
43    assert(!capref_is_null(irq));
44    all_irq_cap = irq;
45    return SYS_ERR_OK;
46}
47