Changeset 8d2760f in mainline for kernel/genarch/src/ofw/pci.c


Ignore:
Timestamp:
2008-11-29T20:24:47Z (16 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
57e76cb
Parents:
dfd77382
Message:

Add additional members to the irq_t structure so that an interrupt-driven driver
does not need to know how to clear the level interrupt. The z8530 was modified
in this way and is much more generic. The ns16550 driver has also been modified,
but awaits testing. The sparc64 interrupt mapping and dispatch code is now using
the new info and calls the clear-interrupt-routine itself.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/genarch/src/ofw/pci.c

    rdfd77382 r8d2760f  
    5050#define PCI_IGN                 0x1f
    5151
    52 bool ofw_pci_apply_ranges(ofw_tree_node_t *node, ofw_pci_reg_t *reg, uintptr_t *pa)
     52bool
     53ofw_pci_apply_ranges(ofw_tree_node_t *node, ofw_pci_reg_t *reg, uintptr_t *pa)
    5354{
    5455        ofw_tree_property_t *prop;
     
    6970       
    7071        for (i = 0; i < ranges; i++) {
    71                 if ((reg->space & PCI_SPACE_MASK) != (range[i].space & PCI_SPACE_MASK))
     72                if ((reg->space & PCI_SPACE_MASK) !=
     73                    (range[i].space & PCI_SPACE_MASK))
    7274                        continue;
    73                 if (overlaps(reg->addr, reg->size, range[i].child_base, range[i].size)) {
    74                         *pa = range[i].parent_base + (reg->addr - range[i].child_base);
     75                if (overlaps(reg->addr, reg->size, range[i].child_base,
     76                    range[i].size)) {
     77                        *pa = range[i].parent_base +
     78                            (reg->addr - range[i].child_base);
    7579                        return true;
    7680                }
     
    8084}
    8185
    82 bool ofw_pci_reg_absolutize(ofw_tree_node_t *node, ofw_pci_reg_t *reg, ofw_pci_reg_t *out)
     86bool
     87ofw_pci_reg_absolutize(ofw_tree_node_t *node, ofw_pci_reg_t *reg,
     88    ofw_pci_reg_t *out)
    8389{
    8490        if (reg->space & PCI_ABS_MASK) {
     
    104110       
    105111        for (i = 0; i < assigned_addresses; i++) {
    106                 if ((assigned_address[i].space & PCI_REG_MASK) == (reg->space & PCI_REG_MASK)) {
     112                if ((assigned_address[i].space & PCI_REG_MASK) ==
     113                    (reg->space & PCI_REG_MASK)) {
    107114                        out->space = assigned_address[i].space;
    108115                        out->addr = reg->addr + assigned_address[i].addr;
     
    120127 * to a PCI bridge.
    121128 */
    122 bool ofw_pci_map_interrupt(ofw_tree_node_t *node, ofw_pci_reg_t *reg, int ino, int *inr)
     129bool
     130ofw_pci_map_interrupt(ofw_tree_node_t *node, ofw_pci_reg_t *reg, int ino,
     131    int *inr, cir_t *cir, void **cir_arg)
    123132{
    124133        pci_t *pci = node->device;
     
    133142
    134143        *inr = (PCI_IGN << IGN_SHIFT) | ino;
     144        *cir = pci_clear_interrupt;
     145        *cir_arg = pci;
    135146
    136147        return true;
Note: See TracChangeset for help on using the changeset viewer.