Home | History | Annotate | Line # | Download | only in m68k
      1 /*	$NetBSD: cacheops.c,v 1.15 2010/06/06 04:50:07 mrg Exp $	*/
      2 
      3 /*-
      4  * Copyright (c) 1997 The NetBSD Foundation, Inc.
      5  * All rights reserved.
      6  *
      7  * This code is derived from software contributed to The NetBSD Foundation
      8  * by Leo Weppelman
      9  *
     10  * Redistribution and use in source and binary forms, with or without
     11  * modification, are permitted provided that the following conditions
     12  * are met:
     13  * 1. Redistributions of source code must retain the above copyright
     14  *    notice, this list of conditions and the following disclaimer.
     15  * 2. Redistributions in binary form must reproduce the above copyright
     16  *    notice, this list of conditions and the following disclaimer in the
     17  *    documentation and/or other materials provided with the distribution.
     18  *
     19  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     23  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     29  * POSSIBILITY OF SUCH DAMAGE.
     30  */
     31 
     32 #include "opt_m68k_arch.h"
     33 
     34 #include <sys/cdefs.h>
     35 __KERNEL_RCSID(0, "$NetBSD: cacheops.c,v 1.15 2010/06/06 04:50:07 mrg Exp $");
     36 
     37 #include <sys/types.h>
     38 #include <machine/cpu.h>
     39 #include <m68k/cacheops.h>
     40 #ifdef M68K_CACHEOPS_MACHDEP
     41 #include <machine/cacheops_machdep.h>
     42 #endif
     43 
     44 void
     45 _TBIA(void)
     46 {
     47 
     48 #ifdef M68K_CACHEOPS_MACHDEP_TBIA
     49 	if (TBIA_md())
     50 		return;
     51 #endif
     52 
     53 	switch (cputype) {
     54 	default:
     55 #ifdef M68020
     56 	case CPU_68020:
     57 		TBIA_20();
     58 		break;
     59 #endif
     60 #ifdef M68030
     61 	case CPU_68030:
     62 		TBIA_30();
     63 		break;
     64 #endif
     65 #ifdef M68040
     66 	case CPU_68040:
     67 		TBIA_40();
     68 		break;
     69 #endif
     70 #ifdef M68060
     71 	case CPU_68060:
     72 		TBIA_60();
     73 		break;
     74 #endif
     75 	}
     76 }
     77 
     78 void
     79 _TBIAS(void)
     80 {
     81 
     82 #ifdef M68K_CACHEOPS_MACHDEP_TBIAS
     83 	if (TBIAS_md())
     84 		return;
     85 #endif
     86 
     87 	switch (cputype) {
     88 	default:
     89 #ifdef M68020
     90 	case CPU_68020:
     91 		TBIAS_20();
     92 		break;
     93 #endif
     94 #ifdef M68030
     95 	case CPU_68030:
     96 		TBIAS_30();
     97 		break;
     98 #endif
     99 #ifdef M68040
    100 	case CPU_68040:
    101 		TBIAS_40();
    102 		break;
    103 #endif
    104 #ifdef M68060
    105 	case CPU_68060:
    106 		TBIAS_60();
    107 		break;
    108 #endif
    109 	}
    110 }
    111 
    112 void
    113 _TBIAU(void)
    114 {
    115 
    116 #ifdef M68K_CACHEOPS_MACHDEP_TBIAU
    117 	if (TBIAU_md())
    118 		return;
    119 #endif
    120 
    121 	switch (cputype) {
    122 	default:
    123 #ifdef M68020
    124 	case CPU_68020:
    125 		TBIAU_20();
    126 		break;
    127 #endif
    128 #ifdef M68030
    129 	case CPU_68030:
    130 		TBIAU_30();
    131 		break;
    132 #endif
    133 #ifdef M68040
    134 	case CPU_68040:
    135 		TBIAU_40();
    136 		break;
    137 #endif
    138 #ifdef M68060
    139 	case CPU_68060:
    140 		TBIAU_60();
    141 		break;
    142 #endif
    143 	}
    144 }
    145 
    146 void
    147 _ICIA(void)
    148 {
    149 
    150 	switch (cputype) {
    151 	default:
    152 #ifdef M68020
    153 	case CPU_68020:
    154 		ICIA_20();
    155 		break;
    156 #endif
    157 #ifdef M68030
    158 	case CPU_68030:
    159 		ICIA_30();
    160 		break;
    161 #endif
    162 #ifdef M68040
    163 	case CPU_68040:
    164 		ICIA_40();
    165 		break;
    166 #endif
    167 #ifdef M68060
    168 	case CPU_68060:
    169 		ICIA_60();
    170 		break;
    171 #endif
    172 	}
    173 }
    174 
    175 void
    176 _ICPA(void)
    177 {
    178 
    179 	switch (cputype) {
    180 	default:
    181 #ifdef M68020
    182 	case CPU_68020:
    183 		ICPA_20();
    184 		break;
    185 #endif
    186 #ifdef M68030
    187 	case CPU_68030:
    188 		ICPA_30();
    189 		break;
    190 #endif
    191 #ifdef M68040
    192 	case CPU_68040:
    193 		ICPA_40();
    194 		break;
    195 #endif
    196 #ifdef M68060
    197 	case CPU_68060:
    198 		ICPA_60();
    199 		break;
    200 #endif
    201 	}
    202 }
    203 
    204 void
    205 _DCIA(void)
    206 {
    207 
    208 #ifdef M68K_CACHEOPS_MACHDEP_DCIA
    209 	if (DCIA_md())
    210 		return;
    211 #endif
    212 
    213 	switch (cputype) {
    214 	default:
    215 #ifdef M68020
    216 	case CPU_68020:
    217 		DCIA_20();
    218 		break;
    219 #endif
    220 #ifdef M68030
    221 	case CPU_68030:
    222 		DCIA_30();
    223 		break;
    224 #endif
    225 #ifdef M68040
    226 	case CPU_68040:
    227 		DCIA_40();
    228 		break;
    229 #endif
    230 #ifdef M68060
    231 	case CPU_68060:
    232 		DCIA_60();
    233 		break;
    234 #endif
    235 	}
    236 }
    237 
    238 void
    239 _DCIS(void)
    240 {
    241 
    242 #ifdef M68K_CACHEOPS_MACHDEP_DCIS
    243 	if (DCIS_md())
    244 		return;
    245 #endif
    246 
    247 	switch (cputype) {
    248 	default:
    249 #ifdef M68020
    250 	case CPU_68020:
    251 		DCIS_20();
    252 		break;
    253 #endif
    254 #ifdef M68030
    255 	case CPU_68030:
    256 		DCIS_30();
    257 		break;
    258 #endif
    259 #ifdef M68040
    260 	case CPU_68040:
    261 		DCIS_40();
    262 		break;
    263 #endif
    264 #ifdef M68060
    265 	case CPU_68060:
    266 		DCIS_60();
    267 		break;
    268 #endif
    269 	}
    270 }
    271 
    272 void
    273 _DCIU(void)
    274 {
    275 
    276 #ifdef M68K_CACHEOPS_MACHDEP_DCIU
    277 	if (DCIU_md())
    278 		return;
    279 #endif
    280 
    281 	switch (cputype) {
    282 	default:
    283 #ifdef M68020
    284 	case CPU_68020:
    285 		DCIU_20();
    286 		break;
    287 #endif
    288 #ifdef M68030
    289 	case CPU_68030:
    290 		DCIU_30();
    291 		break;
    292 #endif
    293 #ifdef M68040
    294 	case CPU_68040:
    295 		DCIU_40();
    296 		break;
    297 #endif
    298 #ifdef M68060
    299 	case CPU_68060:
    300 		DCIU_60();
    301 		break;
    302 #endif
    303 	}
    304 }
    305 
    306 void
    307 _PCIA(void)
    308 {
    309 
    310 #ifdef M68K_CACHEOPS_MACHDEP_PCIA
    311 	if (PCIA_md())
    312 		return;
    313 #endif
    314 
    315 	switch (cputype) {
    316 	default:
    317 #ifdef M68020
    318 	case CPU_68020:
    319 		PCIA_20();
    320 		break;
    321 #endif
    322 #ifdef M68030
    323 	case CPU_68030:
    324 		PCIA_30();
    325 		break;
    326 #endif
    327 #ifdef M68040
    328 	case CPU_68040:
    329 		PCIA_40();
    330 		break;
    331 #endif
    332 #ifdef M68060
    333 	case CPU_68060:
    334 		PCIA_60();
    335 		break;
    336 #endif
    337 	}
    338 }
    339 
    340 void
    341 _TBIS(vaddr_t va)
    342 {
    343 
    344 #ifdef M68K_CACHEOPS_MACHDEP_TBIS
    345 	if (TBIS_md(va))
    346 		return;
    347 #endif
    348 
    349 	switch (cputype) {
    350 	default:
    351 #ifdef M68020
    352 	case CPU_68020:
    353 		TBIS_20(va);
    354 		break;
    355 #endif
    356 #ifdef M68030
    357 	case CPU_68030:
    358 		TBIS_30(va);
    359 		break;
    360 #endif
    361 #ifdef M68040
    362 	case CPU_68040:
    363 		TBIS_40(va);
    364 		break;
    365 #endif
    366 #ifdef M68060
    367 	case CPU_68060:
    368 		TBIS_60(va);
    369 		break;
    370 #endif
    371 	}
    372 }
    373 
    374 void
    375 _DCIAS(paddr_t pa)
    376 {
    377 
    378 	switch (cputype) {
    379 	default:
    380 #ifdef M68020
    381 	case CPU_68020:
    382 		DCIAS_20(pa);
    383 		break;
    384 #endif
    385 #ifdef M68030
    386 	case CPU_68030:
    387 		DCIAS_30(pa);
    388 		break;
    389 #endif
    390 #ifdef M68040
    391 	case CPU_68040:
    392 		DCIAS_40(pa);
    393 		break;
    394 #endif
    395 #ifdef M68060
    396 	case CPU_68060:
    397 		DCIAS_60(pa);
    398 		break;
    399 #endif
    400 	}
    401 }
    402