Subversion Repositories HelenOS

Rev

Rev 1897 | Rev 2071 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1897 Rev 1912
Line 34... Line 34...
34
 * @brief   PCI 'reg' and 'ranges' properties handling.
34
 * @brief   PCI 'reg' and 'ranges' properties handling.
35
 *
35
 *
36
 */
36
 */
37
 
37
 
38
#include <genarch/ofw/ofw_tree.h>
38
#include <genarch/ofw/ofw_tree.h>
-
 
39
#include <arch/drivers/pci.h>
-
 
40
#include <arch/trap/interrupt.h>
39
#include <arch/memstr.h>
41
#include <arch/memstr.h>
40
#include <func.h>
42
#include <func.h>
41
#include <panic.h>
43
#include <panic.h>
42
#include <macros.h>
44
#include <macros.h>
43
 
45
 
44
#define PCI_SPACE_MASK      0x03000000
46
#define PCI_SPACE_MASK      0x03000000
45
#define PCI_ABS_MASK        0x80000000  
47
#define PCI_ABS_MASK        0x80000000  
46
#define PCI_REG_MASK        0x000000ff
48
#define PCI_REG_MASK        0x000000ff
47
 
49
 
-
 
50
#define PCI_IGN         0x1f
-
 
51
 
48
bool ofw_pci_apply_ranges(ofw_tree_node_t *node, ofw_pci_reg_t *reg, uintptr_t *pa)
52
bool ofw_pci_apply_ranges(ofw_tree_node_t *node, ofw_pci_reg_t *reg, uintptr_t *pa)
49
{
53
{
50
    ofw_tree_property_t *prop;
54
    ofw_tree_property_t *prop;
51
    ofw_pci_range_t *range;
55
    ofw_pci_range_t *range;
52
    count_t ranges;
56
    count_t ranges;
Line 108... Line 112...
108
    }
112
    }
109
   
113
   
110
    return false;
114
    return false;
111
}
115
}
112
 
116
 
-
 
117
/** Map PCI interrupt.
-
 
118
 *
-
 
119
 * So far, we only know how to map interrupts of non-PCI devices connected
-
 
120
 * to a PCI bridge.
-
 
121
 */
-
 
122
bool ofw_pci_map_interrupt(ofw_tree_node_t *node, ofw_pci_reg_t *reg, int ino, int *inr)
-
 
123
{
-
 
124
    pci_t *pci = node->device;
-
 
125
    if (!pci) {
-
 
126
        pci = pci_init(node);
-
 
127
        if (!pci)
-
 
128
            return false;
-
 
129
        node->device = pci;
-
 
130
    }
-
 
131
 
-
 
132
    pci_enable_interrupt(pci, ino);
-
 
133
 
-
 
134
    *inr = (PCI_IGN << IGN_SHIFT) | ino;
-
 
135
 
-
 
136
    return true;
-
 
137
}
-
 
138
 
113
/** @}
139
/** @}
114
 */
140
 */