| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 | 
							- #ifndef __ALPHA_APECS__H__
 
- #define __ALPHA_APECS__H__
 
- #include <linux/types.h>
 
- #include <asm/compiler.h>
 
- /*
 
-  * APECS is the internal name for the 2107x chipset which provides
 
-  * memory controller and PCI access for the 21064 chip based systems.
 
-  *
 
-  * This file is based on:
 
-  *
 
-  * DECchip 21071-AA and DECchip 21072-AA Core Logic Chipsets
 
-  * Data Sheet
 
-  *
 
-  * EC-N0648-72
 
-  *
 
-  *
 
-  * david.rusling@reo.mts.dec.com Initial Version.
 
-  *
 
-  */
 
- /*
 
-    An AVANTI *might* be an XL, and an XL has only 27 bits of ISA address
 
-    that get passed through the PCI<->ISA bridge chip. So we've gotta use
 
-    both windows to max out the physical memory we can DMA to. Sigh...
 
-    If we try a window at 0 for 1GB as a work-around, we run into conflicts
 
-    with ISA/PCI bus memory which can't be relocated, like VGA aperture and
 
-    BIOS ROMs. So we must put the windows high enough to avoid these areas.
 
-    We put window 1 at BUS 64Mb for 64Mb, mapping physical 0 to 64Mb-1,
 
-    and window 2 at BUS 1Gb for 1Gb, mapping physical 0 to 1Gb-1.
 
-    Yes, this does map 0 to 64Mb-1 twice, but only window 1 will actually
 
-    be used for that range (via virt_to_bus()).
 
-    Note that we actually fudge the window 1 maximum as 48Mb instead of 64Mb,
 
-    to keep virt_to_bus() from returning an address in the first window, for
 
-    a data area that goes beyond the 64Mb first DMA window.  Sigh...
 
-    The fudge factor MUST match with <asm/dma.h> MAX_DMA_ADDRESS, but
 
-    we can't just use that here, because of header file looping... :-(
 
-    Window 1 will be used for all DMA from the ISA bus; yes, that does
 
-    limit what memory an ISA floppy or sound card or Ethernet can touch, but
 
-    it's also a known limitation on other platforms as well. We use the
 
-    same technique that is used on INTEL platforms with similar limitation:
 
-    set MAX_DMA_ADDRESS and clear some pages' DMAable flags during mem_init().
 
-    We trust that any ISA bus device drivers will *always* ask for DMAable
 
-    memory explicitly via kmalloc()/get_free_pages() flags arguments.
 
-    Note that most PCI bus devices' drivers do *not* explicitly ask for
 
-    DMAable memory; they count on being able to DMA to any memory they
 
-    get from kmalloc()/get_free_pages(). They will also use window 1 for
 
-    any physical memory accesses below 64Mb; the rest will be handled by
 
-    window 2, maxing out at 1Gb of memory. I trust this is enough... :-)
 
-    We hope that the area before the first window is large enough so that
 
-    there will be no overlap at the top end (64Mb). We *must* locate the
 
-    PCI cards' memory just below window 1, so that there's still the
 
-    possibility of being able to access it via SPARSE space. This is
 
-    important for cards such as the Matrox Millennium, whose Xserver
 
-    wants to access memory-mapped registers in byte and short lengths.
 
-    Note that the XL is treated differently from the AVANTI, even though
 
-    for most other things they are identical. It didn't seem reasonable to
 
-    make the AVANTI support pay for the limitations of the XL. It is true,
 
-    however, that an XL kernel will run on an AVANTI without problems.
 
-    %%% All of this should be obviated by the ability to route
 
-    everything through the iommu.
 
- */
 
- /*
 
-  * 21071-DA Control and Status registers.
 
-  * These are used for PCI memory access.
 
-  */
 
- #define APECS_IOC_DCSR                  (IDENT_ADDR + 0x1A0000000UL)
 
- #define APECS_IOC_PEAR                  (IDENT_ADDR + 0x1A0000020UL)
 
- #define APECS_IOC_SEAR                  (IDENT_ADDR + 0x1A0000040UL)
 
- #define APECS_IOC_DR1                   (IDENT_ADDR + 0x1A0000060UL)
 
- #define APECS_IOC_DR2                   (IDENT_ADDR + 0x1A0000080UL)
 
- #define APECS_IOC_DR3                   (IDENT_ADDR + 0x1A00000A0UL)
 
- #define APECS_IOC_TB1R                  (IDENT_ADDR + 0x1A00000C0UL)
 
- #define APECS_IOC_TB2R                  (IDENT_ADDR + 0x1A00000E0UL)
 
- #define APECS_IOC_PB1R                  (IDENT_ADDR + 0x1A0000100UL)
 
- #define APECS_IOC_PB2R                  (IDENT_ADDR + 0x1A0000120UL)
 
- #define APECS_IOC_PM1R                  (IDENT_ADDR + 0x1A0000140UL)
 
- #define APECS_IOC_PM2R                  (IDENT_ADDR + 0x1A0000160UL)
 
- #define APECS_IOC_HAXR0                 (IDENT_ADDR + 0x1A0000180UL)
 
- #define APECS_IOC_HAXR1                 (IDENT_ADDR + 0x1A00001A0UL)
 
- #define APECS_IOC_HAXR2                 (IDENT_ADDR + 0x1A00001C0UL)
 
- #define APECS_IOC_PMLT                  (IDENT_ADDR + 0x1A00001E0UL)
 
- #define APECS_IOC_TLBTAG0               (IDENT_ADDR + 0x1A0000200UL)
 
- #define APECS_IOC_TLBTAG1               (IDENT_ADDR + 0x1A0000220UL)
 
- #define APECS_IOC_TLBTAG2               (IDENT_ADDR + 0x1A0000240UL)
 
- #define APECS_IOC_TLBTAG3               (IDENT_ADDR + 0x1A0000260UL)
 
- #define APECS_IOC_TLBTAG4               (IDENT_ADDR + 0x1A0000280UL)
 
- #define APECS_IOC_TLBTAG5               (IDENT_ADDR + 0x1A00002A0UL)
 
- #define APECS_IOC_TLBTAG6               (IDENT_ADDR + 0x1A00002C0UL)
 
- #define APECS_IOC_TLBTAG7               (IDENT_ADDR + 0x1A00002E0UL)
 
- #define APECS_IOC_TLBDATA0              (IDENT_ADDR + 0x1A0000300UL)
 
- #define APECS_IOC_TLBDATA1              (IDENT_ADDR + 0x1A0000320UL)
 
- #define APECS_IOC_TLBDATA2              (IDENT_ADDR + 0x1A0000340UL)
 
- #define APECS_IOC_TLBDATA3              (IDENT_ADDR + 0x1A0000360UL)
 
- #define APECS_IOC_TLBDATA4              (IDENT_ADDR + 0x1A0000380UL)
 
- #define APECS_IOC_TLBDATA5              (IDENT_ADDR + 0x1A00003A0UL)
 
- #define APECS_IOC_TLBDATA6              (IDENT_ADDR + 0x1A00003C0UL)
 
- #define APECS_IOC_TLBDATA7              (IDENT_ADDR + 0x1A00003E0UL)
 
- #define APECS_IOC_TBIA                  (IDENT_ADDR + 0x1A0000400UL)
 
- /*
 
-  * 21071-CA Control and Status registers.
 
-  * These are used to program memory timing,
 
-  *  configure memory and initialise the B-Cache.
 
-  */
 
- #define APECS_MEM_GCR		        (IDENT_ADDR + 0x180000000UL)
 
- #define APECS_MEM_EDSR		        (IDENT_ADDR + 0x180000040UL)
 
- #define APECS_MEM_TAR  		        (IDENT_ADDR + 0x180000060UL)
 
- #define APECS_MEM_ELAR		        (IDENT_ADDR + 0x180000080UL)
 
- #define APECS_MEM_EHAR  		(IDENT_ADDR + 0x1800000a0UL)
 
- #define APECS_MEM_SFT_RST		(IDENT_ADDR + 0x1800000c0UL)
 
- #define APECS_MEM_LDxLAR 		(IDENT_ADDR + 0x1800000e0UL)
 
- #define APECS_MEM_LDxHAR 		(IDENT_ADDR + 0x180000100UL)
 
- #define APECS_MEM_GTR    		(IDENT_ADDR + 0x180000200UL)
 
- #define APECS_MEM_RTR    		(IDENT_ADDR + 0x180000220UL)
 
- #define APECS_MEM_VFPR   		(IDENT_ADDR + 0x180000240UL)
 
- #define APECS_MEM_PDLDR  		(IDENT_ADDR + 0x180000260UL)
 
- #define APECS_MEM_PDhDR  		(IDENT_ADDR + 0x180000280UL)
 
- /* Bank x Base Address Register */
 
- #define APECS_MEM_B0BAR  		(IDENT_ADDR + 0x180000800UL)
 
- #define APECS_MEM_B1BAR  		(IDENT_ADDR + 0x180000820UL)
 
- #define APECS_MEM_B2BAR  		(IDENT_ADDR + 0x180000840UL)
 
- #define APECS_MEM_B3BAR  		(IDENT_ADDR + 0x180000860UL)
 
- #define APECS_MEM_B4BAR  		(IDENT_ADDR + 0x180000880UL)
 
- #define APECS_MEM_B5BAR  		(IDENT_ADDR + 0x1800008A0UL)
 
- #define APECS_MEM_B6BAR  		(IDENT_ADDR + 0x1800008C0UL)
 
- #define APECS_MEM_B7BAR  		(IDENT_ADDR + 0x1800008E0UL)
 
- #define APECS_MEM_B8BAR  		(IDENT_ADDR + 0x180000900UL)
 
- /* Bank x Configuration Register */
 
- #define APECS_MEM_B0BCR  		(IDENT_ADDR + 0x180000A00UL)
 
- #define APECS_MEM_B1BCR  		(IDENT_ADDR + 0x180000A20UL)
 
- #define APECS_MEM_B2BCR  		(IDENT_ADDR + 0x180000A40UL)
 
- #define APECS_MEM_B3BCR  		(IDENT_ADDR + 0x180000A60UL)
 
- #define APECS_MEM_B4BCR  		(IDENT_ADDR + 0x180000A80UL)
 
- #define APECS_MEM_B5BCR  		(IDENT_ADDR + 0x180000AA0UL)
 
- #define APECS_MEM_B6BCR  		(IDENT_ADDR + 0x180000AC0UL)
 
- #define APECS_MEM_B7BCR  		(IDENT_ADDR + 0x180000AE0UL)
 
- #define APECS_MEM_B8BCR  		(IDENT_ADDR + 0x180000B00UL)
 
- /* Bank x Timing Register A */
 
- #define APECS_MEM_B0TRA  		(IDENT_ADDR + 0x180000C00UL)
 
- #define APECS_MEM_B1TRA  		(IDENT_ADDR + 0x180000C20UL)
 
- #define APECS_MEM_B2TRA  		(IDENT_ADDR + 0x180000C40UL)
 
- #define APECS_MEM_B3TRA  		(IDENT_ADDR + 0x180000C60UL)
 
- #define APECS_MEM_B4TRA  		(IDENT_ADDR + 0x180000C80UL)
 
- #define APECS_MEM_B5TRA  		(IDENT_ADDR + 0x180000CA0UL)
 
- #define APECS_MEM_B6TRA  		(IDENT_ADDR + 0x180000CC0UL)
 
- #define APECS_MEM_B7TRA  		(IDENT_ADDR + 0x180000CE0UL)
 
- #define APECS_MEM_B8TRA  		(IDENT_ADDR + 0x180000D00UL)
 
- /* Bank x Timing Register B */
 
- #define APECS_MEM_B0TRB                 (IDENT_ADDR + 0x180000E00UL)
 
- #define APECS_MEM_B1TRB  		(IDENT_ADDR + 0x180000E20UL)
 
- #define APECS_MEM_B2TRB  		(IDENT_ADDR + 0x180000E40UL)
 
- #define APECS_MEM_B3TRB  		(IDENT_ADDR + 0x180000E60UL)
 
- #define APECS_MEM_B4TRB  		(IDENT_ADDR + 0x180000E80UL)
 
- #define APECS_MEM_B5TRB  		(IDENT_ADDR + 0x180000EA0UL)
 
- #define APECS_MEM_B6TRB  		(IDENT_ADDR + 0x180000EC0UL)
 
- #define APECS_MEM_B7TRB  		(IDENT_ADDR + 0x180000EE0UL)
 
- #define APECS_MEM_B8TRB  		(IDENT_ADDR + 0x180000F00UL)
 
- /*
 
-  * Memory spaces:
 
-  */
 
- #define APECS_IACK_SC		        (IDENT_ADDR + 0x1b0000000UL)
 
- #define APECS_CONF		        (IDENT_ADDR + 0x1e0000000UL)
 
- #define APECS_IO			(IDENT_ADDR + 0x1c0000000UL)
 
- #define APECS_SPARSE_MEM		(IDENT_ADDR + 0x200000000UL)
 
- #define APECS_DENSE_MEM		        (IDENT_ADDR + 0x300000000UL)
 
- /*
 
-  * Bit definitions for I/O Controller status register 0:
 
-  */
 
- #define APECS_IOC_STAT0_CMD		0xf
 
- #define APECS_IOC_STAT0_ERR		(1<<4)
 
- #define APECS_IOC_STAT0_LOST		(1<<5)
 
- #define APECS_IOC_STAT0_THIT		(1<<6)
 
- #define APECS_IOC_STAT0_TREF		(1<<7)
 
- #define APECS_IOC_STAT0_CODE_SHIFT	8
 
- #define APECS_IOC_STAT0_CODE_MASK	0x7
 
- #define APECS_IOC_STAT0_P_NBR_SHIFT	13
 
- #define APECS_IOC_STAT0_P_NBR_MASK	0x7ffff
 
- #define APECS_HAE_ADDRESS		APECS_IOC_HAXR1
 
- /*
 
-  * Data structure for handling APECS machine checks:
 
-  */
 
- struct el_apecs_mikasa_sysdata_mcheck
 
- {
 
- 	unsigned long coma_gcr;
 
- 	unsigned long coma_edsr;
 
- 	unsigned long coma_ter;
 
- 	unsigned long coma_elar;
 
- 	unsigned long coma_ehar;
 
- 	unsigned long coma_ldlr;
 
- 	unsigned long coma_ldhr;
 
- 	unsigned long coma_base0;
 
- 	unsigned long coma_base1;
 
- 	unsigned long coma_base2;
 
- 	unsigned long coma_base3;
 
- 	unsigned long coma_cnfg0;
 
- 	unsigned long coma_cnfg1;
 
- 	unsigned long coma_cnfg2;
 
- 	unsigned long coma_cnfg3;
 
- 	unsigned long epic_dcsr;
 
- 	unsigned long epic_pear;
 
- 	unsigned long epic_sear;
 
- 	unsigned long epic_tbr1;
 
- 	unsigned long epic_tbr2;
 
- 	unsigned long epic_pbr1;
 
- 	unsigned long epic_pbr2;
 
- 	unsigned long epic_pmr1;
 
- 	unsigned long epic_pmr2;
 
- 	unsigned long epic_harx1;
 
- 	unsigned long epic_harx2;
 
- 	unsigned long epic_pmlt;
 
- 	unsigned long epic_tag0;
 
- 	unsigned long epic_tag1;
 
- 	unsigned long epic_tag2;
 
- 	unsigned long epic_tag3;
 
- 	unsigned long epic_tag4;
 
- 	unsigned long epic_tag5;
 
- 	unsigned long epic_tag6;
 
- 	unsigned long epic_tag7;
 
- 	unsigned long epic_data0;
 
- 	unsigned long epic_data1;
 
- 	unsigned long epic_data2;
 
- 	unsigned long epic_data3;
 
- 	unsigned long epic_data4;
 
 
  |