1 /*        $NetBSD: iomap.h,v 1.17 2024/09/08 09:36:49 rillig Exp $    */
2 
3 /*
4  * Copyright (c) 1995 Leo Weppelman.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 #ifndef _MACHINE_IOMAP_H
29 #define _MACHINE_IOMAP_H
30 
31 #ifdef _KERNEL_OPT
32 #include "opt_mbtype.h"
33 #endif
34 /*
35  * Atari TT hardware:
36  * I/O Address maps
37  */
38 #ifdef _KERNEL
39 extern vaddr_t      stio_addr;          /* Where the st io-area is mapped       */
40 #define   AD_STIO   (stio_addr)         /* .. see atari_init.c                            */
41 
42 /*
43  * PCI KVA addresses. These are determined in atari_init.c. Except for
44  * the config-space, they should be used for a PCI-console only. Other
45  * cards should use the bus-functions to map io & mem spaces.
46  * Each card gets a config area of PAGE_SIZE bytes.
47  * 'pci_mem_uncached' is used by the Milan interrupt handler that frobs
48  * with the PLX. Also, the Milan uses the first page of 'pci_io_addr' for
49  * access to some of its ISA I/O devices (RTC, Interrupt controller, etc.)
50  */
51 extern vaddr_t      pci_conf_addr;      /* KVA base of PCI config space                   */
52 extern vaddr_t      pci_io_addr;        /* KVA base of PCI io-space             */
53 extern vaddr_t      pci_mem_addr;       /* KVA base of PCI mem-space            */
54 extern vaddr_t      pci_mem_uncached; /* KVA base of an uncached PCI mem-page */
55 #endif /* _KERNEL */
56 
57 #define   PCI_CONFB_PHYS                (0xA0000000L)
58 #define   PCI_CONFM_PHYS                (0x00010000L)
59 
60 #if defined(_ATARIHW_)
61 #define   PCI_IO_PHYS                   (0xB0000000L)
62 #define   PCI_MEM_PHYS                  (0x80000000L)
63 #define PCI_VGA_PHYS                    (0x800a0000L)
64 #define   ISA_IOSTART                   (0xfff30000L) /* XXX: With byte frobbing */
65 #define   ISA_MEMSTART                  (0xff000000L)
66 #endif /* defined(_ATARIHW_) */
67 
68 #if defined(_MILANHW_)
69 #define   PCI_IO_PHYS                   (0x80000000L)
70 #define   PCI_MEM_PHYS                  (0x40000000L)
71 #define PCI_VGA_PHYS                    (0x400a0000L)
72 #define   ISA_IOSTART                   (0x80000000L) /* !NO! byte frobbing      */
73 #define   ISA_MEMSTART                  (0x40000000L)
74 #endif    /* defined(_MILANHW_) */
75 
76 /*
77  * Pre-allocated PCI-memory regions (atari_init.c). We need those in the
78  * boot-stages.
79  * XXX: Can probably be reduced to only PCI_CONFIG_SIZE (Leo).
80  */
81 #define PCI_CONFIG_SIZE       (4 * PAGE_SIZE)
82 #define PCI_IO_SIZE (PAGE_SIZE)
83 #define PCI_MEM_SIZE          (PAGE_SIZE)
84 
85 #define   PCI_VGA_SIZE        (32 * 1024) /* XXX Leo: Only used by grfabs_et now. */
86 
87 /*
88  * See bootm_init()/bootm_alloc() in bus.c for the usage of this pool
89  * of pre-allocated VA-space.
90  */
91 #define   BOOTM_VA_POOL       (32 * 8192)         /* Pre-allocated VA-space     */
92 
93 #define   AD_RAM              (0x000000L)         /* main memory                          */
94 #define   AD_CART             (0xFA0000L)         /* expansion cartridge                  */
95 #define   AD_ROM              (0xFC0000L)         /* system ROM                           */
96 #define   STIO_SIZE (0x8000L) /* Size of mapped I/O devices */
97 
98 /*
99  * Physical address of I/O area. Use only for pte initialisation!
100  */
101 #define   STIO_PHYS ((machineid & (ATARI_HADES | ATARI_MILAN))        \
102                                         ? 0xffff8000L                                     \
103                                         : 0x00ff8000L)
104 
105 #if defined(_ATARIHW_)
106 
107 /*
108  * I/O addresses in the STIO area:
109  */
110 #define   AD_RAMCFG (AD_STIO + 0x0000)  /* ram configuration          */
111 #define AD_FAL_MON_TYPE       (AD_STIO + 0x0006)  /* Falcon monitor type        */
112 #define   AD_VIDEO  (AD_STIO + 0x0200)  /* video controller */
113 #define AD_RESERVED (AD_STIO + 0x0400)  /* reserved                   */
114 #define   AD_DMA              (AD_STIO + 0x0600)  /* DMA device access          */
115 #define   AD_SCSI_DMA         (AD_STIO + 0x0700)  /* SCSI DMA registers         */
116 #define   AD_NCR5380          (AD_STIO + 0x0780)  /* SCSI controller  */
117 #define   AD_SOUND  (AD_STIO + 0x0800)  /* YM-2149                    */
118 #define   AD_RTC              (AD_STIO + 0x0960)  /* TT realtime clock          */
119 #define   AD_SCC              (AD_STIO + 0x0C80)  /* SCC 8530                   */
120 #define   AD_SCU              (AD_STIO + 0x0E00)  /* System Control Unit        */
121 #define   AD_CFG_SWITCH       (AD_STIO + 0x1200)  /* Config switches  */
122 #define   AD_MFP              (AD_STIO + 0x7A00)  /* 68901            */
123 #define   AD_MFP2             (AD_STIO + 0x7A80)  /* 68901-TT                   */
124 #define   AD_ACIA             (AD_STIO + 0x7C00)  /* 2 * 6850                   */
125 #endif /* defined(_ATARIHW_) */
126 
127 #if defined(_MILANHW_)
128 /*
129  * Milan onboard I/O
130  */
131 #define   AD_MFP              (AD_STIO + 0x4100)  /* 68901            */
132 #define   AD_PLX              (AD_STIO + 0x4200)  /* PLX9080                    */
133 
134 /*
135  * Milan special locations in the first page of the PCI I/O space.
136  */
137 #define   AD_8259_MASTER      (pci_io_addr + 0x20)          /* Master int. contr.         */
138 #define   AD_8259_SLAVE       (pci_io_addr + 0xA0)          /* Slave int. contr.          */
139 #define   AD_RTC              (pci_io_addr + 0x70)          /* MC146818 compat. RTC       */
140 
141 #endif /* defined(_MILANHW_) */
142 
143 #endif /* _MACHINE_IOMAP_H */
144