Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/genarch/include/ofw/ofw_tree.h

    re731b0d r965dc18  
    3131
    3232#include <arch/types.h>
     33#include <ddi/irq.h>
    3334#include <typedefs.h>
    3435
    35 #define OFW_TREE_PROPERTY_MAX_NAMELEN  32
    36 
    37 /** Memory representation of OpenFirmware device tree node property. */
    38 typedef struct {
    39         char name[OFW_TREE_PROPERTY_MAX_NAMELEN];
    40         size_t size;
    41         void *value;
    42 } ofw_tree_property_t;
     36#define OFW_TREE_PROPERTY_MAX_NAMELEN   32
     37
     38typedef struct ofw_tree_node ofw_tree_node_t;
     39typedef struct ofw_tree_property ofw_tree_property_t;
    4340
    4441/** Memory representation of OpenFirmware device tree node. */
    45 typedef struct ofw_tree_node {
    46         struct ofw_tree_node *parent;
    47         struct ofw_tree_node *peer;
    48         struct ofw_tree_node *child;
    49        
    50         uint32_t node_handle;           /**< Old OpenFirmware node handle. */
    51        
    52         char *da_name;                  /**< Disambigued name. */
    53        
    54         unsigned int properties;        /**< Number of properties. */
     42struct ofw_tree_node {
     43        ofw_tree_node_t *parent;
     44        ofw_tree_node_t *peer;
     45        ofw_tree_node_t *child;
     46
     47        uint32_t node_handle;           /**< Old OpenFirmware node handle. */
     48
     49        char *da_name;                  /**< Disambigued name. */
     50
     51        unsigned properties;            /**< Number of properties. */
    5552        ofw_tree_property_t *property;
    5653       
     
    6057         */
    6158        void *device;
    62 } ofw_tree_node_t;
    63 
    64 /* Walker for visiting OpenFirmware device tree nodes. */
    65 typedef bool (* ofw_tree_walker_t)(ofw_tree_node_t *, void *);
     59};
     60
     61/** Memory representation of OpenFirmware device tree node property. */
     62struct ofw_tree_property {
     63        char name[OFW_TREE_PROPERTY_MAX_NAMELEN];
     64        size_t size;
     65        void *value;
     66};
     67
     68/*
     69 * Definition of 'reg' and 'ranges' properties for various buses.
     70 */
     71 
     72struct ofw_fhc_reg {
     73        uint64_t addr;
     74        uint32_t size;
     75} __attribute__ ((packed));
     76typedef struct ofw_fhc_reg ofw_fhc_reg_t;
     77                       
     78struct ofw_fhc_range {
     79        uint64_t child_base;
     80        uint64_t parent_base;
     81        uint32_t size;
     82} __attribute__ ((packed));
     83typedef struct ofw_fhc_range ofw_fhc_range_t;
     84
     85struct ofw_central_reg {
     86        uint64_t addr;
     87        uint32_t size;
     88} __attribute__ ((packed));
     89typedef struct ofw_central_reg ofw_central_reg_t;
     90
     91struct ofw_central_range {
     92        uint64_t child_base;
     93        uint64_t parent_base;
     94        uint32_t size;
     95} __attribute__ ((packed));
     96typedef struct ofw_central_range ofw_central_range_t;
     97
     98struct ofw_ebus_reg {
     99        uint32_t space;
     100        uint32_t addr;
     101        uint32_t size;
     102} __attribute__ ((packed));
     103typedef struct ofw_ebus_reg ofw_ebus_reg_t;
     104
     105struct ofw_ebus_range {
     106        uint32_t child_space;
     107        uint32_t child_base;
     108        uint32_t parent_space;
     109        uint64_t parent_base;   /* group phys.mid and phys.lo together */
     110        uint32_t size;
     111} __attribute__ ((packed));
     112typedef struct ofw_ebus_range ofw_ebus_range_t;
     113
     114struct ofw_ebus_intr_map {
     115        uint32_t space;
     116        uint32_t addr;
     117        uint32_t intr;
     118        uint32_t controller_handle;
     119        uint32_t controller_ino;
     120} __attribute__ ((packed));
     121typedef struct ofw_ebus_intr_map ofw_ebus_intr_map_t;
     122
     123struct ofw_ebus_intr_mask {
     124        uint32_t space_mask;
     125        uint32_t addr_mask;
     126        uint32_t intr_mask;
     127} __attribute__ ((packed));
     128typedef struct ofw_ebus_intr_mask ofw_ebus_intr_mask_t;
     129
     130struct ofw_pci_reg {
     131        uint32_t space;         /* needs to be masked to obtain pure space id */
     132        uint64_t addr;          /* group phys.mid and phys.lo together */
     133        uint64_t size;
     134} __attribute__ ((packed));
     135typedef struct ofw_pci_reg ofw_pci_reg_t;
     136
     137struct ofw_pci_range {
     138        uint32_t space;
     139        uint64_t child_base;    /* group phys.mid and phys.lo together */
     140        uint64_t parent_base;
     141        uint64_t size;
     142} __attribute__ ((packed));
     143typedef struct ofw_pci_range ofw_pci_range_t;
     144
     145struct ofw_sbus_reg {
     146        uint64_t addr;
     147        uint32_t size;
     148} __attribute__ ((packed));
     149typedef struct ofw_sbus_reg ofw_sbus_reg_t;
     150
     151struct ofw_sbus_range {
     152        uint64_t child_base;
     153        uint64_t parent_base;
     154        uint32_t size;
     155} __attribute__ ((packed));
     156typedef struct ofw_sbus_range ofw_sbus_range_t;
     157
     158struct ofw_upa_reg {
     159        uint64_t addr;
     160        uint64_t size;
     161} __attribute__ ((packed));
     162typedef struct ofw_upa_reg ofw_upa_reg_t;
    66163
    67164extern void ofw_tree_init(ofw_tree_node_t *);
    68165extern void ofw_tree_print(void);
    69 
    70166extern const char *ofw_tree_node_name(const ofw_tree_node_t *);
    71167extern ofw_tree_node_t *ofw_tree_lookup(const char *);
    72168extern ofw_tree_property_t *ofw_tree_getprop(const ofw_tree_node_t *,
    73169    const char *);
    74 extern void ofw_tree_walk_by_device_type(const char *, ofw_tree_walker_t,
    75     void *);
    76 
    77170extern ofw_tree_node_t *ofw_tree_find_child(ofw_tree_node_t *, const char *);
    78171extern ofw_tree_node_t *ofw_tree_find_child_by_device_type(ofw_tree_node_t *,
    79172    const char *);
    80 
    81173extern ofw_tree_node_t *ofw_tree_find_peer_by_device_type(ofw_tree_node_t *,
    82174    const char *);
    83 extern ofw_tree_node_t *ofw_tree_find_peer_by_name(ofw_tree_node_t *,
    84     const char *);
     175extern ofw_tree_node_t *ofw_tree_find_peer_by_name(ofw_tree_node_t *node,
     176    const char *name);
    85177extern ofw_tree_node_t *ofw_tree_find_node_by_handle(ofw_tree_node_t *,
    86178    uint32_t);
    87179
     180extern bool ofw_fhc_apply_ranges(ofw_tree_node_t *, ofw_fhc_reg_t *,
     181    uintptr_t *);
     182extern bool ofw_central_apply_ranges(ofw_tree_node_t *, ofw_central_reg_t *,
     183    uintptr_t *);
     184extern bool ofw_ebus_apply_ranges(ofw_tree_node_t *, ofw_ebus_reg_t *,
     185    uintptr_t *);
     186extern bool ofw_pci_apply_ranges(ofw_tree_node_t *, ofw_pci_reg_t *,
     187    uintptr_t *);
     188extern bool ofw_sbus_apply_ranges(ofw_tree_node_t *, ofw_sbus_reg_t *,
     189    uintptr_t *);
     190extern bool ofw_upa_apply_ranges(ofw_tree_node_t *, ofw_upa_reg_t *,
     191    uintptr_t *);
     192
     193extern bool ofw_pci_reg_absolutize(ofw_tree_node_t *, ofw_pci_reg_t *,
     194    ofw_pci_reg_t *);
     195
     196extern bool ofw_fhc_map_interrupt(ofw_tree_node_t *, ofw_fhc_reg_t *,
     197    uint32_t, int *, cir_t *, void **);
     198extern bool ofw_ebus_map_interrupt(ofw_tree_node_t *, ofw_ebus_reg_t *,
     199    uint32_t, int *, cir_t *, void **);
     200extern bool ofw_pci_map_interrupt(ofw_tree_node_t *, ofw_pci_reg_t *,
     201    int, int *, cir_t *, void **);
     202
    88203#endif
Note: See TracChangeset for help on using the changeset viewer.