Annotation of Gnu-Mach/chips/busses.h, revision 1.1.1.1

1.1       root        1: /* 
                      2:  * Mach Operating System
                      3:  * Copyright (c) 1994-1989 Carnegie Mellon University
                      4:  * All Rights Reserved.
                      5:  * 
                      6:  * Permission to use, copy, modify and distribute this software and its
                      7:  * documentation is hereby granted, provided that both the copyright
                      8:  * notice and this permission notice appear in all copies of the
                      9:  * software, derivative works or modified versions, and any portions
                     10:  * thereof, and that both notices appear in supporting documentation.
                     11:  * 
                     12:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
                     13:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
                     14:  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
                     15:  * 
                     16:  * Carnegie Mellon requests users of this software to return to
                     17:  * 
                     18:  *  Software Distribution Coordinator  or  [email protected]
                     19:  *  School of Computer Science
                     20:  *  Carnegie Mellon University
                     21:  *  Pittsburgh PA 15213-3890
                     22:  * 
                     23:  * any improvements or extensions that they make and grant Carnegie Mellon
                     24:  * the rights to redistribute these changes.
                     25:  */
                     26: /*
                     27:  *     File: busses.h
                     28:  *     Author: Alessandro Forin, Carnegie Mellon University
                     29:  *     Date:   4/90
                     30:  *
                     31:  *     Structures used by configuration routines to
                     32:  *     explore a given bus structure.
                     33:  */
                     34: 
                     35: #ifndef        _CHIPS_BUSSES_H_
                     36: #define        _CHIPS_BUSSES_H_
                     37: 
                     38: #include <mach/boolean.h>
                     39: #include <mach/machine/vm_types.h>
                     40: 
                     41: /*
                     42:  *
                     43:  * This is mildly modeled after the Unibus on Vaxen,
                     44:  * one of the most complicated bus structures.
                     45:  * Therefore, let's hope this can be done once and for all.
                     46:  *
                     47:  * At the bottom level there is a "bus_device", which
                     48:  * might exist in isolation (e.g. a clock on the CPU
                     49:  * board) or be a standard component of an architecture
                     50:  * (e.g. the bitmap display on some workstations).
                     51:  *
                     52:  * Disk devices and communication lines support multiple
                     53:  * units, hence the "bus_driver" structure which is more
                     54:  * flexible and allows probing and dynamic configuration
                     55:  * of the number and type of attached devices.
                     56:  *
                     57:  * At the top level there is a "bus_ctlr" structure, used
                     58:  * in systems where the I/O bus(ses) are separate from
                     59:  * the memory bus(ses), and/or when memory boards can be
                     60:  * added to the main bus (and they must be config-ed
                     61:  * and/or can interrupt the processor for ECC errors).
                     62:  *
                     63:  * The autoconfiguration process typically starts at
                     64:  * the top level and walks down tables that are
                     65:  * defined either in a generic file or are specially
                     66:  * created by config.
                     67:  */
                     68: 
                     69: /*
                     70:  * Per-controller structure.
                     71:  */
                     72: struct bus_ctlr {
                     73:        struct bus_driver  *driver;     /* myself, as a device */
                     74:        char               *name;       /* readability */
                     75:        int                 unit;       /* index in driver */
                     76:        int               (*intr)();    /* interrupt handler(s) */
                     77:        vm_offset_t         address;    /* device virtual address */
                     78:        int                 am;         /* address modifier */
                     79:        vm_offset_t         phys_address;/* device phys address */
                     80:        char                adaptor;    /* slot where found */
                     81:        char                alive;      /* probed successfully */
                     82:        char                flags;      /* any special conditions */
                     83:        vm_offset_t         sysdep;     /* On some systems, queue of
                     84:                                         * operations in-progress */
                     85:        natural_t           sysdep1;    /* System dependent */
                     86: };
                     87: 
                     88: 
                     89: /*
                     90:  * Per-``device'' structure
                     91:  */
                     92: struct bus_device {
                     93:        struct bus_driver  *driver;     /* autoconf info */
                     94:        char               *name;       /* my name */
                     95:        int                 unit;
                     96:        int               (*intr)();
                     97:        vm_offset_t         address;    /* device address */
                     98:        int                 am;         /* address modifier */
                     99:        vm_offset_t         phys_address;/* device phys address */
                    100:        char                adaptor;
                    101:        char                alive;
                    102:        char                ctlr;
                    103:        char                slave;
                    104:        int                 flags;
                    105:        struct bus_ctlr    *mi;         /* backpointer to controller */
                    106:        struct bus_device  *next;       /* optional chaining */
                    107:        vm_offset_t         sysdep;     /* System dependent */
                    108:        natural_t           sysdep1;    /* System dependent */
                    109: };
                    110: 
                    111: /*
                    112:  * General flag definitions
                    113:  */
                    114: #define BUS_INTR_B4_PROBE  0x01                /* enable interrupts before probe */
                    115: #define BUS_INTR_DISABLED  0x02                /* ignore all interrupts */
                    116: #define        BUS_CTLR           0x04         /* descriptor for a bus adaptor */
                    117: #define BUS_XCLU          0x80         /* want exclusive use of bdp's */
                    118: 
                    119: /*
                    120:  * Per-driver structure.
                    121:  *
                    122:  * Each bus driver defines entries for a set of routines
                    123:  * that are used at boot time by the configuration program.
                    124:  */
                    125: struct bus_driver {
                    126:        int     (*probe)(               /* see if the driver is there */
                    127:                    /*  vm_offset_t     address,
                    128:                        struct bus_ctlr * */ );
                    129:        int     (*slave)(               /* see if any slave is there */ 
                    130:                    /*  struct bus_device *,
                    131:                        vm_offset_t       */ );
                    132:        void    (*attach)(              /* setup driver after probe */
                    133:                    /*  struct bus_device * */);
                    134:        int     (*dgo)();               /* start transfer */
                    135:        vm_offset_t *addr;              /* device csr addresses */
                    136:        char    *dname;                 /* name of a device */
                    137:        struct  bus_device **dinfo;     /* backpointers to init structs */
                    138:        char    *mname;                 /* name of a controller */
                    139:        struct  bus_ctlr **minfo;       /* backpointers to init structs */
                    140:        int     flags;
                    141: };
                    142: 
                    143: #ifdef KERNEL
                    144: extern struct bus_ctlr         bus_master_init[];
                    145: extern struct bus_device       bus_device_init[];
                    146: 
                    147: extern boolean_t configure_bus_master(char *, vm_offset_t, vm_offset_t,
                    148:                                      int, char * );
                    149: extern boolean_t configure_bus_device(char *, vm_offset_t, vm_offset_t,
                    150:                                      int, char * );
                    151: #endif /* KERNEL */
                    152: 
                    153: 
                    154: #endif /* _CHIPS_BUSSES_H_ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.