Ignore:
Timestamp:
2008-11-29T20:24:47Z (17 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/include/ofw/ofw_tree.h

    rdfd77382 r8d2760f  
    3131
    3232#include <arch/types.h>
     33#include <ddi/irq.h>
    3334#include <typedefs.h>
    3435
     
    4445        ofw_tree_node_t *child;
    4546
    46         uint32_t node_handle;                   /**< Old OpenFirmware node handle. */
    47 
    48         char *da_name;                          /**< Disambigued name. */
    49 
    50         unsigned properties;                    /**< Number of properties. */
     47        uint32_t node_handle;           /**< Old OpenFirmware node handle. */
     48
     49        char *da_name;                  /**< Disambigued name. */
     50
     51        unsigned properties;            /**< Number of properties. */
    5152        ofw_tree_property_t *property;
    5253       
     
    106107        uint32_t child_base;
    107108        uint32_t parent_space;
    108         uint64_t parent_base;           /* group phys.mid and phys.lo together */
     109        uint64_t parent_base;   /* group phys.mid and phys.lo together */
    109110        uint32_t size;
    110111} __attribute__ ((packed));
     
    128129
    129130struct ofw_pci_reg {
    130         uint32_t space;                 /* needs to be masked to obtain pure space id */
    131         uint64_t addr;                  /* group phys.mid and phys.lo together */
     131        uint32_t space;         /* needs to be masked to obtain pure space id */
     132        uint64_t addr;          /* group phys.mid and phys.lo together */
    132133        uint64_t size;
    133134} __attribute__ ((packed));
     
    136137struct ofw_pci_range {
    137138        uint32_t space;
    138         uint64_t child_base;            /* group phys.mid and phys.lo together */
     139        uint64_t child_base;    /* group phys.mid and phys.lo together */
    139140        uint64_t parent_base;
    140141        uint64_t size;
     
    161162typedef struct ofw_upa_reg ofw_upa_reg_t;
    162163
    163 extern void ofw_tree_init(ofw_tree_node_t *root);
     164extern void ofw_tree_init(ofw_tree_node_t *);
    164165extern void ofw_tree_print(void);
    165 extern const char *ofw_tree_node_name(const ofw_tree_node_t *node);
    166 extern ofw_tree_node_t *ofw_tree_lookup(const char *path);
    167 extern ofw_tree_property_t *ofw_tree_getprop(const ofw_tree_node_t *node, const char *name);
    168 extern ofw_tree_node_t *ofw_tree_find_child(ofw_tree_node_t *node, const char *name);
    169 extern ofw_tree_node_t *ofw_tree_find_child_by_device_type(ofw_tree_node_t *node, const char *device_type);
    170 extern ofw_tree_node_t *ofw_tree_find_peer_by_device_type(ofw_tree_node_t *node, const char *device_type);
    171 extern ofw_tree_node_t *ofw_tree_find_node_by_handle(ofw_tree_node_t *root, uint32_t handle);
    172 
    173 extern bool ofw_fhc_apply_ranges(ofw_tree_node_t *node, ofw_fhc_reg_t *reg, uintptr_t *pa);
    174 extern bool ofw_central_apply_ranges(ofw_tree_node_t *node, ofw_central_reg_t *reg, uintptr_t *pa);
    175 extern bool ofw_ebus_apply_ranges(ofw_tree_node_t *node, ofw_ebus_reg_t *reg, uintptr_t *pa);
    176 extern bool ofw_pci_apply_ranges(ofw_tree_node_t *node, ofw_pci_reg_t *reg, uintptr_t *pa);
    177 extern bool ofw_sbus_apply_ranges(ofw_tree_node_t *node, ofw_sbus_reg_t *reg, uintptr_t *pa);
    178 extern bool ofw_upa_apply_ranges(ofw_tree_node_t *node, ofw_upa_reg_t *reg, uintptr_t *pa);
    179 
    180 extern bool ofw_pci_reg_absolutize(ofw_tree_node_t *node, ofw_pci_reg_t *reg, ofw_pci_reg_t *out);
    181 
    182 extern bool ofw_fhc_map_interrupt(ofw_tree_node_t *node, ofw_fhc_reg_t *reg, uint32_t interrupt, int *inr);
    183 extern bool ofw_ebus_map_interrupt(ofw_tree_node_t *node, ofw_ebus_reg_t *reg, uint32_t interrupt, int *inr);
    184 extern bool ofw_pci_map_interrupt(ofw_tree_node_t *node, ofw_pci_reg_t *reg, int ino, int *inr);
     166extern const char *ofw_tree_node_name(const ofw_tree_node_t *);
     167extern ofw_tree_node_t *ofw_tree_lookup(const char *);
     168extern ofw_tree_property_t *ofw_tree_getprop(const ofw_tree_node_t *,
     169    const char *);
     170extern ofw_tree_node_t *ofw_tree_find_child(ofw_tree_node_t *, const char *);
     171extern ofw_tree_node_t *ofw_tree_find_child_by_device_type(ofw_tree_node_t *,
     172    const char *);
     173extern ofw_tree_node_t *ofw_tree_find_peer_by_device_type(ofw_tree_node_t *,
     174    const char *);
     175extern ofw_tree_node_t *ofw_tree_find_node_by_handle(ofw_tree_node_t *,
     176    uint32_t);
     177
     178extern bool ofw_fhc_apply_ranges(ofw_tree_node_t *, ofw_fhc_reg_t *,
     179    uintptr_t *);
     180extern bool ofw_central_apply_ranges(ofw_tree_node_t *, ofw_central_reg_t *,
     181    uintptr_t *);
     182extern bool ofw_ebus_apply_ranges(ofw_tree_node_t *, ofw_ebus_reg_t *,
     183    uintptr_t *);
     184extern bool ofw_pci_apply_ranges(ofw_tree_node_t *, ofw_pci_reg_t *,
     185    uintptr_t *);
     186extern bool ofw_sbus_apply_ranges(ofw_tree_node_t *, ofw_sbus_reg_t *,
     187    uintptr_t *);
     188extern bool ofw_upa_apply_ranges(ofw_tree_node_t *, ofw_upa_reg_t *,
     189    uintptr_t *);
     190
     191extern bool ofw_pci_reg_absolutize(ofw_tree_node_t *, ofw_pci_reg_t *,
     192    ofw_pci_reg_t *);
     193
     194extern bool ofw_fhc_map_interrupt(ofw_tree_node_t *, ofw_fhc_reg_t *,
     195    uint32_t, int *, cir_t *, void **);
     196extern bool ofw_ebus_map_interrupt(ofw_tree_node_t *, ofw_ebus_reg_t *,
     197    uint32_t, int *, cir_t *, void **);
     198extern bool ofw_pci_map_interrupt(ofw_tree_node_t *, ofw_pci_reg_t *,
     199    int, int *, cir_t *, void **);
    185200
    186201#endif
Note: See TracChangeset for help on using the changeset viewer.