Home | History | Annotate | Line # | Download | only in include
cacheops_40.h revision 1.10.18.1
      1  1.10.18.1     yamt /*	$NetBSD: cacheops_40.h,v 1.10.18.1 2008/05/18 12:32:20 yamt Exp $	*/
      2        1.1      leo 
      3        1.1      leo /*-
      4        1.1      leo  * Copyright (c) 1997 The NetBSD Foundation, Inc.
      5        1.1      leo  * All rights reserved.
      6        1.1      leo  *
      7        1.1      leo  * This code is derived from software contributed to The NetBSD Foundation
      8        1.1      leo  * by Leo Weppelman
      9        1.1      leo  *
     10        1.1      leo  * Redistribution and use in source and binary forms, with or without
     11        1.1      leo  * modification, are permitted provided that the following conditions
     12        1.1      leo  * are met:
     13        1.1      leo  * 1. Redistributions of source code must retain the above copyright
     14        1.1      leo  *    notice, this list of conditions and the following disclaimer.
     15        1.1      leo  * 2. Redistributions in binary form must reproduce the above copyright
     16        1.1      leo  *    notice, this list of conditions and the following disclaimer in the
     17        1.1      leo  *    documentation and/or other materials provided with the distribution.
     18        1.1      leo  *
     19        1.1      leo  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     20        1.1      leo  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     21        1.1      leo  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     22        1.1      leo  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     23        1.1      leo  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     24        1.1      leo  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     25        1.1      leo  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     26        1.1      leo  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     27        1.1      leo  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     28        1.1      leo  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     29        1.1      leo  * POSSIBILITY OF SUCH DAMAGE.
     30        1.1      leo  */
     31        1.1      leo 
     32        1.1      leo /*
     33        1.1      leo  * Invalidate entire TLB.
     34        1.1      leo  */
     35        1.8    perry static __inline void __attribute__((__unused__))
     36        1.6      chs TBIA_40(void)
     37        1.1      leo {
     38        1.7    perry 	__asm volatile (" .word 0xf518" ); /*  pflusha */
     39        1.1      leo }
     40        1.1      leo 
     41        1.1      leo /*
     42        1.1      leo  * Invalidate any TLB entry for given VA (TB Invalidate Single)
     43        1.1      leo  */
     44        1.8    perry static __inline void __attribute__((__unused__))
     45        1.6      chs TBIS_40(vaddr_t va)
     46        1.1      leo {
     47        1.9  tsutsui 	register uint8_t *r_va __asm("%a0") = (void *)va;
     48        1.1      leo 	int	tmp;
     49        1.1      leo 
     50        1.7    perry 	__asm volatile (" movc   %1, %%dfc;"	/* select supervisor	*/
     51        1.5  thorpej 			  " .word 0xf508;"	/* pflush %a0@		*/
     52        1.1      leo 			  " moveq  %3, %1;"	/* select user		*/
     53        1.5  thorpej 			  " movc   %1, %%dfc;"
     54        1.1      leo 			  " .word 0xf508;" : "=d" (tmp) :
     55        1.1      leo 			  "0" (FC_SUPERD), "a" (r_va), "i" (FC_USERD));
     56        1.1      leo }
     57        1.1      leo 
     58        1.1      leo /*
     59        1.1      leo  * Invalidate supervisor side of TLB
     60        1.1      leo  */
     61        1.8    perry static __inline void __attribute__((__unused__))
     62        1.6      chs TBIAS_40(void)
     63        1.1      leo {
     64        1.1      leo 	/*
     65        1.1      leo 	 * Cannot specify supervisor/user on pflusha, so we flush all
     66        1.1      leo 	 */
     67        1.7    perry 	__asm volatile (" .word 0xf518;");
     68        1.1      leo }
     69        1.1      leo 
     70        1.1      leo /*
     71        1.1      leo  * Invalidate user side of TLB
     72        1.1      leo  */
     73        1.8    perry static __inline void __attribute__((__unused__))
     74        1.6      chs TBIAU_40(void)
     75        1.1      leo {
     76        1.1      leo 	/*
     77        1.1      leo 	 * Cannot specify supervisor/user on pflusha, so we flush all
     78        1.1      leo 	 */
     79        1.7    perry 	__asm volatile (" .word 0xf518;");
     80        1.1      leo }
     81        1.1      leo 
     82        1.1      leo /*
     83        1.1      leo  * Invalidate instruction cache
     84        1.1      leo  */
     85        1.8    perry static __inline void __attribute__((__unused__))
     86        1.6      chs ICIA_40(void)
     87        1.1      leo {
     88        1.7    perry 	__asm volatile (" .word 0xf498;"); /* cinva ic */
     89        1.1      leo }
     90        1.1      leo 
     91        1.8    perry static __inline void __attribute__((__unused__))
     92        1.6      chs ICPA_40(void)
     93        1.1      leo {
     94        1.7    perry 	__asm volatile (" .word 0xf498;"); /* cinva ic */
     95        1.1      leo }
     96        1.1      leo 
     97        1.1      leo /*
     98        1.1      leo  * Invalidate data cache.
     99        1.1      leo  */
    100        1.8    perry static __inline void __attribute__((__unused__))
    101        1.6      chs DCIA_40(void)
    102        1.1      leo {
    103        1.7    perry 	__asm volatile (" .word 0xf478;"); /* cpusha dc */
    104        1.1      leo }
    105        1.1      leo 
    106        1.8    perry static __inline void __attribute__((__unused__))
    107        1.6      chs DCIS_40(void)
    108        1.1      leo {
    109        1.7    perry 	__asm volatile (" .word 0xf478;"); /* cpusha dc */
    110        1.1      leo }
    111        1.1      leo 
    112        1.8    perry static __inline void __attribute__((__unused__))
    113        1.6      chs DCIU_40(void)
    114        1.1      leo {
    115        1.7    perry 	__asm volatile (" .word 0xf478;"); /* cpusha dc */
    116        1.1      leo }
    117        1.1      leo 
    118        1.8    perry static __inline void __attribute__((__unused__))
    119        1.6      chs DCIAS_40(paddr_t pa)
    120        1.1      leo {
    121        1.9  tsutsui 	register uint8_t *r_pa __asm("%a0") = (void *)pa;
    122        1.1      leo 
    123        1.7    perry 	__asm volatile (" .word 0xf468;" : : "a" (r_pa)); /* cpushl dc,%a0@ */
    124        1.1      leo }
    125        1.1      leo 
    126        1.8    perry static __inline void __attribute__((__unused__))
    127        1.6      chs PCIA_40(void)
    128        1.1      leo {
    129        1.7    perry 	__asm volatile (" .word 0xf478;"); /* cpusha dc */
    130        1.1      leo }
    131        1.1      leo 
    132        1.8    perry static __inline void __attribute__((__unused__))
    133        1.6      chs DCFA_40(void)
    134        1.1      leo {
    135        1.7    perry 	__asm volatile (" .word 0xf478;"); /* cpusha dc */
    136        1.1      leo }
    137        1.1      leo 
    138        1.1      leo /* invalidate instruction physical cache line */
    139        1.8    perry static __inline void __attribute__((__unused__))
    140        1.6      chs ICPL_40(paddr_t pa)
    141        1.1      leo {
    142        1.9  tsutsui 	register uint8_t *r_pa __asm("%a0") = (void *)pa;
    143        1.1      leo 
    144        1.7    perry 	__asm volatile (" .word 0xf488;" : : "a" (r_pa)); /* cinvl ic,%a0@ */
    145        1.1      leo }
    146        1.1      leo 
    147        1.1      leo /* invalidate instruction physical cache page */
    148        1.8    perry static __inline void __attribute__((__unused__))
    149        1.6      chs ICPP_40(paddr_t pa)
    150        1.1      leo {
    151        1.9  tsutsui 	register uint8_t *r_pa __asm("%a0") = (void *)pa;
    152        1.1      leo 
    153        1.7    perry 	__asm volatile (" .word 0xf490;" : : "a" (r_pa)); /* cinvp ic,%a0@ */
    154        1.1      leo }
    155        1.1      leo 
    156        1.1      leo /* invalidate data physical cache line */
    157        1.8    perry static __inline void __attribute__((__unused__))
    158        1.6      chs DCPL_40(paddr_t pa)
    159        1.1      leo {
    160        1.9  tsutsui 	register uint8_t *r_pa __asm("%a0") = (void *)pa;
    161        1.1      leo 
    162        1.7    perry 	__asm volatile (" .word 0xf448;" : : "a" (r_pa)); /* cinvl dc,%a0@ */
    163        1.1      leo }
    164        1.1      leo 
    165        1.1      leo /* invalidate data physical cache page */
    166        1.8    perry static __inline void __attribute__((__unused__))
    167        1.6      chs DCPP_40(paddr_t pa)
    168        1.1      leo {
    169        1.9  tsutsui 	register uint8_t *r_pa __asm("%a0") = (void *)pa;
    170        1.1      leo 
    171        1.7    perry 	__asm volatile (" .word 0xf450;" : : "a" (r_pa)); /* cinvp dc,%a0@ */
    172        1.1      leo }
    173        1.1      leo 
    174        1.1      leo /* invalidate data physical all */
    175        1.8    perry static __inline void __attribute__((__unused__))
    176        1.6      chs DCPA_40(void)
    177        1.1      leo {
    178        1.7    perry 	__asm volatile (" .word 0xf458;"); /* cinva dc */
    179        1.1      leo }
    180        1.1      leo 
    181        1.1      leo /* data cache flush line */
    182        1.8    perry static __inline void __attribute__((__unused__))
    183        1.6      chs DCFL_40(paddr_t pa)
    184        1.1      leo {
    185        1.9  tsutsui 	register uint8_t *r_pa __asm("%a0") = (void *)pa;
    186        1.1      leo 
    187        1.7    perry 	__asm volatile (" .word 0xf468;" : : "a" (r_pa)); /* cpushl dc,%a0@ */
    188        1.1      leo }
    189        1.1      leo 
    190        1.1      leo /* data cache flush page */
    191        1.8    perry static __inline void __attribute__((__unused__))
    192        1.6      chs DCFP_40(paddr_t pa)
    193        1.1      leo {
    194        1.9  tsutsui 	register uint8_t *r_pa __asm("%a0") = (void *)pa;
    195        1.1      leo 
    196        1.7    perry 	__asm volatile (" .word 0xf470;" : : "a" (r_pa)); /* cpushp dc,%a0@ */
    197        1.1      leo }
    198