Annotation of kernel/machdep/ppc/powermac.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
                      7:  * Reserved.  This file contains Original Code and/or Modifications of
                      8:  * Original Code as defined in and that are subject to the Apple Public
                      9:  * Source License Version 1.1 (the "License").  You may not use this file
                     10:  * except in compliance with the License.  Please obtain a copy of the
                     11:  * License at http://www.apple.com/publicsource and read it before using
                     12:  * this file.
                     13:  * 
                     14:  * The Original Code and all software distributed under the License are
                     15:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     16:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     17:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     18:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     19:  * License for the specific language governing rights and limitations
                     20:  * under the License.
                     21:  * 
                     22:  * @APPLE_LICENSE_HEADER_END@
                     23:  */
                     24: 
                     25: #ifndef _POWERMAC_H_
                     26: #define _POWERMAC_H_
                     27: 
                     28: #ifndef __ASSEMBLER__
                     29: 
                     30: #include <mach/ppc/vm_types.h>
                     31: #include <machdep/ppc/boot.h>
                     32: #include <machdep/ppc/dbdma.h>
                     33: 
                     34: /*
                     35:  * Machine class 
                     36:  */
                     37: 
                     38: #define        POWERMAC_CLASS_PDM              1       /* PowerMac 61/71/8100 */
                     39: #define        POWERMAC_CLASS_PERFORMA         2       /* PowerMac 52/6200 */
                     40: #define        POWERMAC_CLASS_POWERSURGE       3       /* PowerMac 72/75/85/9500 */
                     41: #define        POWERMAC_CLASS_POWEREXPRESS     4       /* PowerMac 9700 */
                     42: #define        POWERMAC_CLASS_POWERBOOK        5       /* PowerBook 2300/5300 */
                     43: #define        POWERMAC_CLASS_GOSSAMER         6       /* PowerMac G3 Desk/Mini-Twr */
                     44: #define        POWERMAC_CLASS_POWERSTAR        7       /* PowerBook 2400/3400/G3 */
                     45: #define        POWERMAC_CLASS_YOSEMITE         8       /* 1st Gen New World */
                     46: 
                     47: /* Some macros for easy machine identification */
                     48: #define IsPowerSurge() (powermac_info.class == POWERMAC_CLASS_POWERSURGE)
                     49:  
                     50: #define IsPEx()                (powermac_info.class == POWERMAC_CLASS_POWEREXPRESS)
                     51: 
                     52: #define IsPowerBook()  (powermac_info.class == POWERMAC_CLASS_POWERBOOK)
                     53:  
                     54: #define IsGossamer()   (powermac_info.class == POWERMAC_CLASS_GOSSAMER)
                     55: 
                     56: #define IsPowerStar()  (powermac_info.class == POWERMAC_CLASS_POWERSTAR)
                     57: 
                     58: #define IsYosemite()   (powermac_info.class == POWERMAC_CLASS_YOSEMITE)
                     59: 
                     60: // This is not safe until the PMU or Cuda driver have been set up.
                     61: #define HasPMU()        (powermac_info.hasPMU)
                     62: 
                     63: typedef struct powermac_info {
                     64:        int             class;                  /* Machine type */
                     65: 
                     66:        unsigned int    bus_clock_rate_hz;      /* Bus frequency */
                     67:         unsigned int    dec_clock_period;       /* Fixed point number 8.24 */
                     68: 
                     69:         /* to convert from real time ticks to nsec convert by this*/
                     70:        unsigned int    proc_clock_to_nsec_numerator; 
                     71:        unsigned int    proc_clock_to_nsec_denominator; 
                     72:        
                     73:        int             machine;                /* Gestalt value .. */
                     74:        int             hasPMU;                 // Flag for machines with PMU
                     75:        int             viaIRQ;                 // irq number for the via
                     76: } powermac_info_t;
                     77: 
                     78: extern powermac_info_t powermac_info;
                     79: 
                     80: /* This may be merged in struct powermac_info in the future */
                     81: typedef struct powermac_machine_info {
                     82:        unsigned long   dcache_block_size;  /* number of bytes */
                     83:        unsigned long   dcache_size;        /* number of bytes */
                     84:        unsigned long   icache_size;        /* number of bytes */
                     85:        unsigned long   caches_unified;     /* boolean_t */
                     86:        unsigned long   processor_version;  /* contents of PVR */
                     87:        unsigned long   cpu_clock_rate_hz;
                     88:        unsigned long   dec_clock_rate_hz;
                     89:        unsigned long   bus_clock_rate_hz;
                     90:        unsigned long   l2_clock_rate_hz;
                     91:        unsigned long   bus_clock_rate_hz_num;
                     92:        unsigned long   bus_clock_rate_hz_den;
                     93:        unsigned long   cpu_pll;                /* cpu pll mode * 2 */
                     94:        unsigned long   l2_pll;                 /* l2 pll mode * 2 */
                     95:        unsigned long   l2_cache_size;
                     96:        unsigned long   l2_cache_type;
                     97: } powermac_machine_info_t;
                     98: 
                     99: extern powermac_machine_info_t powermac_machine_info;
                    100: 
                    101: // Types of L2 Caches
                    102: #define L2_CACHE_NONE     (0)
                    103: #define L2_CACHE_MB       (1)
                    104: #define L2_CACHE_INLINE   (2)
                    105: #define L2_CACHE_BACKSIDE (3)
                    106: 
                    107: 
                    108: typedef struct powermac_io_info {
                    109:        int             io_size;
                    110:         vm_offset_t     io_base_phys;            /* IO region */
                    111:         vm_offset_t     io_base_virt;            /* IO region */
                    112: 
                    113:         vm_offset_t     io_base2;                // IO region for O'Hare 2
                    114: 
                    115:         vm_offset_t     mem_cntlr_base_phys;
                    116:         vm_offset_t     int_cntlr_base_phys;
                    117: 
                    118:         vm_offset_t     dma_base_phys;
                    119: 
                    120:   /* Remove All this dma stuff later */
                    121:        int             dma_buffer_alignment;   /* preallocated DMA region */
                    122:        int             dma_buffer_size;        /* preallocated DMA region */
                    123:        vm_offset_t     dma_buffer_phys;        /* preallocated DMA region */
                    124:        vm_offset_t     dma_buffer_virt;        /* preallocated DMA region */
                    125: 
                    126:         vm_offset_t     serial_base_phys;
                    127:         vm_offset_t     scsi_int_base_phys;
                    128:         vm_offset_t     scsi_int_dma_base_phys;
                    129:         vm_offset_t     scsi_ext_base_phys;
                    130:         vm_offset_t     audio_base_phys;
                    131:         vm_offset_t     floppy_base_phys;
                    132:         vm_offset_t     ethernet_base_phys;
                    133:         vm_offset_t     via_base_phys;
                    134: 
                    135:         vm_offset_t     nvram_addr_reg_phys;
                    136:         vm_offset_t     nvram_data_reg_phys;
                    137: 
                    138:         vm_offset_t     ide0_base_phys;
                    139:         vm_offset_t     ide1_base_phys;
                    140:        int             nvram_XPRAM_NVPartition;
                    141:        int             nvram_NameRegistry_NVPartition;
                    142:        int             nvram_OpenFirmware_NVPartition;
                    143: } powermac_io_info_t;
                    144: 
                    145: extern powermac_io_info_t powermac_io_info;
                    146: 
                    147: /* For compatability right now, keep these defines */
                    148: #define PCI_IO_BASE_PHYS        (powermac_io_info.io_base_phys)
                    149: 
                    150: #define PCI_DMA_BASE_PHYS       (powermac_io_info.dma_base_phys)
                    151: 
                    152: /* SCC registers (serial line) - physical addr is for probe */
                    153: #define PCI_SCC_BASE_PHYS       (powermac_io_info.serial_base_phys)
                    154: 
                    155: /* ASC registers (external scsi) - physical address for probe */
                    156: #define PCI_ASC_BASE_PHYS       (powermac_io_info.scsi_ext_base_phys)
                    157: 
                    158: /* MESH (internal scsi) controller */
                    159: #define PCI_MESH_BASE_PHYS      (powermac_io_info.scsi_int_base_phys)
                    160: #define PCI_MESH_DMA_BASE_PHYS  (powermac_io_info.scsi_int_dma_base_phys)
                    161: 
                    162: /* audio controller */
                    163: #define PCI_AUDIO_BASE_PHYS     (powermac_io_info.audio_base_phys)
                    164: 
                    165: /* floppy controller */
                    166: #define PCI_FLOPPY_BASE_PHYS    (powermac_io_info.floppy_base_phys)
                    167: 
                    168: /* Ethernet controller */
                    169: #define PCI_ETHERNET_BASE_PHYS  (powermac_io_info.ethernet_base_phys)
                    170: #define PCI_ETHERNET_ADDR_PHYS  (0xF3019000)
                    171: 
                    172: /* VIA controls, misc stuff (including CUDA) */
                    173: #define PCI_VIA_BASE_PHYS       (powermac_io_info.via_base_phys)
                    174: 
                    175: #define        PCI_VIA1_AUXCONTROL     (POWERMAC_IO(powermac_io_info.via_base_phys + 0x01600))
                    176: #define        PCI_VIA1_T1COUNTERLOW   (POWERMAC_IO(powermac_io_info.via_base_phys + 0x00800))
                    177: #define        PCI_VIA1_T1COUNTERHIGH  (POWERMAC_IO(powermac_io_info.via_base_phys + 0x00A00))
                    178: #define        PCI_VIA1_T1LATCHLOW     (POWERMAC_IO(powermac_io_info.via_base_phys + 0x00C00))
                    179: #define        PCI_VIA1_T1LATCHHIGH    (POWERMAC_IO(powermac_io_info.via_base_phys + 0x00E00))
                    180: #define PCI_VIA1_IER            (POWERMAC_IO(powermac_io_info.via_base_phys + 0x01c00))
                    181: #define PCI_VIA1_IFR            (POWERMAC_IO(powermac_io_info.via_base_phys + 0x01a00))
                    182: #define PCI_VIA1_PCR            (POWERMAC_IO(powermac_io_info.via_base_phys + 0x01800))
                    183: 
                    184: /* NVRAM Addrs and Partitions */
                    185: #define PCI_NVRAM_ADDR_PHYS     (powermac_io_info.nvram_addr_reg_phys)
                    186: #define PCI_NVRAM_DATA_PHYS     (powermac_io_info.nvram_data_reg_phys)
                    187: 
                    188: #define NVRAM_XPRAM_Offset (powermac_io_info.nvram_XPRAM_NVPartition)
                    189: #define NVRAM_NameRegistry_Offset (powermac_io_info.nvram_NameRegistry_NVPartition)
                    190: #define NVRAM_OpenFirmware_Offset (powermac_io_info.nvram_OpenFirmware_NVPartition)
                    191: 
                    192: 
                    193: 
                    194: /* IDE controller */
                    195: #define PCI_IDE0_BASE_PHYS     (powermac_io_info.ide0_base_phys)
                    196: #define PCI_IDE1_BASE_PHYS     (powermac_io_info.ide1_base_phys)
                    197: 
                    198: 
                    199: extern void NO_ENTRY(void);
                    200: 
                    201: typedef struct {
                    202:        void (*configure_machine)(void);
                    203:        void (*machine_initialize_interrupt)(void);
                    204:        void (*machine_initialize_network)(void);
                    205:        void (*machine_initialize_processors)(boot_args *args);
                    206:        int  (*machine_initialize_rtclock)(void);
                    207:        powermac_dbdma_channels_t *powermac_dbdma_channels;
                    208: } powermac_init_t;
                    209: 
                    210: extern powermac_init_t *powermac_init_p;
                    211: 
                    212: 
                    213: /* Macro to convert from a physical I/O address into a virtual I/O address */
                    214: #define POWERMAC_IO(addr)      (powermac_io_info.io_base_virt +        \
                    215:                                 (addr - powermac_io_info.io_base_phys))
                    216: 
                    217: /*
                    218:  * prototypes
                    219:  */
                    220: 
                    221: /* Used to initialise IO once DMA and IO virtual space has been assigned */
                    222: extern void powermac_io_init(vm_offset_t powermac_io_base_v);
                    223: 
                    224: extern void powermac_powerdown(void);
                    225: extern void powermac_reboot(void);
                    226: 
                    227: /* Non-cached version of bcopy */
                    228: extern void    bcopy_nc(char *from, char *to, int size);
                    229: 
                    230: /* Some useful typedefs for accessing control registers */
                    231: 
                    232: typedef volatile unsigned char v_u_char;
                    233: typedef volatile unsigned short v_u_short;
                    234: typedef volatile unsigned int  v_u_int;
                    235: typedef volatile unsigned long  v_u_long;
                    236: 
                    237: /* And some useful defines for reading 'volatile' structures,
                    238:  * don't forget to be be careful about sync()s and eieio()s
                    239:  */
                    240: #define reg8(reg) (*(v_u_char *)reg)
                    241: #define reg16(reg) (*(v_u_short *)reg)
                    242: #define reg32(reg) (*(v_u_int *)reg)
                    243: 
                    244: /* VIA1_AUXCONTROL values same across several powermacs */
                    245: #define        VIA1_AUX_AUTOT1LATCH 0x40       /* Autoreload of T1 from latches */
                    246: 
                    247: #endif /* !(__ASSEMBLER__) */
                    248: #endif /* _POWERMAC_H_ */

unix.superglobalmegacorp.com

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