Added: Xeon Phi Manager
[barrelfish] / usr / xeon_phi_manager / cardmanager.c
1 /*
2  * Copyright (c) 2014 ETH Zurich.
3  * All rights reserved.
4  *
5  * This file is distributed under the terms in the attached LICENSE file.
6  * If you do not find this file, copies can be found by writing to:
7  * ETH Zurich D-INFK, Universitaetsstrasse 6, CH-8092 Zurich. Attn: Systems Group.
8  */
9 #include <stdio.h>
10
11 #include <barrelfish/barrelfish.h>
12 #include <xeon_phi/xeon_phi.h>
13
14 #include <if/xeon_phi_manager_defs.h>
15
16 #include "cardmanager.h"
17
18 struct xeon_phi_card {
19     struct xeon_phi_manager_binding *binding;
20     iref_t driver_iref;
21 };
22
23
24 static uint8_t num_cards = 0;
25
26 static iref_t  driver_irefs[XEON_PHI_NUM_MAX];
27
28 static struct xeon_phi_card xeon_phis[XEON_PHI_NUM_MAX];
29
30 /**
31  * \brief   Inserts the information about the new Xeon Phi into the
32  *          card manager
33  *
34  * \param   binding the flounder binding for this card
35  * \param   driver  the iref to the driver
36  * \param   id      returns the id of the newly inserted card
37  */
38 errval_t cm_new_xeon_phi(struct xeon_phi_manager_binding *binding,
39                          iref_t driver,
40                          uint8_t *id)
41 {
42     if (num_cards == XEON_PHI_NUM_MAX) {
43         // TODO: ERROR CODE
44         return -1;
45     }
46
47     struct xeon_phi_card *card = xeon_phis+num_cards;
48
49     card->driver_iref = driver;
50     card->binding = binding;
51     binding->st = card;
52
53     driver_irefs[num_cards] = driver;
54
55     if (id) {
56         *id = num_cards;
57     }
58
59     ++num_cards;
60
61     return SYS_ERR_OK;
62 }
63
64
65 /**
66  * \brief  returns an array of irefs with the assciated xeon phi drivers
67  *
68  * \param  iref the iref array
69  * \param  num  the number of irefs in the iref array
70  *
71  * \return SYS_ERR_OK
72  */
73 errval_t cm_get_irefs(iref_t **iref, uint8_t *num)
74 {
75     if (iref) {
76         *iref = driver_irefs;
77     }
78     if (num) {
79         *num = num_cards;
80     }
81     return SYS_ERR_OK;
82 }
83
84
85