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
15errval_t store_int_cap(int start, int end, struct driver_argument *arg){
16    errval_t err;
17    assert(!cnoderef_is_null(arg->argnode_ref));
18    assert(!capref_is_null(all_irq_cap));
19
20    struct capref cap = {
21        .cnode = arg->argnode_ref,
22        .slot = PCIARG_SLOT_INT
23    };
24    err = cap_retype(cap, all_irq_cap, start, ObjType_IRQSrc,
25            end, 1);
26    if(err_is_fail(err)){
27        DEBUG_ERR(err, "Could not create int_src cap");
28        return err;
29    }
30    return SYS_ERR_OK;
31}
32
33/**
34 * Initialize the cap manager. It will track retypes of all_irq_cap
35 */
36errval_t init_int_caps_manager(struct capref irq)
37{
38    assert(!capref_is_null(irq));
39    all_irq_cap = irq;
40    return SYS_ERR_OK;
41}
42