1 /* 2 * Copyright (c) 1999 Andreas Schwab <schwab (at) issan.cs.uni-dortmund.de> 3 * Copyright (c) 2010 Mike Frysinger <vapier (at) gentoo.org> 4 * Copyright (c) 2010 Carmelo Amoroso <carmelo.amoroso (at) st.com> 5 * Copyright (c) 2015 Ezequiel Garcia <ezequiel (at) vanguardiasur.com.ar> 6 * Copyright (c) 2014-2015 Dmitry V. Levin <ldv (at) altlinux.org> 7 * All rights reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 3. The name of the author may not be used to endorse or promote products 18 * derived from this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 21 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 22 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 23 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 24 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 25 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 29 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 #include "defs.h" 33 34 #ifdef HAVE_ASM_CACHECTL_H 35 # include <asm/cachectl.h> 36 #endif 37 38 #ifdef M68K 39 # include "xlat/cacheflush_scope.h" 40 41 static const struct xlat cacheflush_flags[] = { 42 #ifdef FLUSH_CACHE_BOTH 43 XLAT(FLUSH_CACHE_BOTH), 44 #endif 45 #ifdef FLUSH_CACHE_DATA 46 XLAT(FLUSH_CACHE_DATA), 47 #endif 48 #ifdef FLUSH_CACHE_INSN 49 XLAT(FLUSH_CACHE_INSN), 50 #endif 51 XLAT_END 52 }; 53 54 SYS_FUNC(cacheflush) 55 { 56 /* addr */ 57 printaddr(tcp->u_arg[0]); 58 tprints(", "); 59 /* scope */ 60 printxval(cacheflush_scope, tcp->u_arg[1], "FLUSH_SCOPE_???"); 61 tprints(", "); 62 /* flags */ 63 printflags(cacheflush_flags, tcp->u_arg[2], "FLUSH_CACHE_???"); 64 /* len */ 65 tprintf(", %lu", tcp->u_arg[3]); 66 67 return RVAL_DECODED; 68 } 69 #endif /* M68K */ 70 71 #ifdef BFIN 72 static const struct xlat cacheflush_flags[] = { 73 XLAT(ICACHE), 74 XLAT(DCACHE), 75 XLAT(BCACHE), 76 XLAT_END 77 }; 78 79 SYS_FUNC(cacheflush) 80 { 81 /* start addr */ 82 printaddr(tcp->u_arg[0]); 83 /* length */ 84 tprintf(", %lu, ", tcp->u_arg[1]); 85 /* flags */ 86 printxval(cacheflush_flags, tcp->u_arg[2], "?CACHE"); 87 88 return RVAL_DECODED; 89 } 90 #endif /* BFIN */ 91 92 #ifdef SH 93 static const struct xlat cacheflush_flags[] = { 94 #ifdef CACHEFLUSH_D_INVAL 95 XLAT(CACHEFLUSH_D_INVAL), 96 #endif 97 #ifdef CACHEFLUSH_D_WB 98 XLAT(CACHEFLUSH_D_WB), 99 #endif 100 #ifdef CACHEFLUSH_D_PURGE 101 XLAT(CACHEFLUSH_D_PURGE), 102 #endif 103 #ifdef CACHEFLUSH_I 104 XLAT(CACHEFLUSH_I), 105 #endif 106 XLAT_END 107 }; 108 109 SYS_FUNC(cacheflush) 110 { 111 /* addr */ 112 printaddr(tcp->u_arg[0]); 113 /* len */ 114 tprintf(", %lu, ", tcp->u_arg[1]); 115 /* flags */ 116 printflags(cacheflush_flags, tcp->u_arg[2], "CACHEFLUSH_???"); 117 118 return RVAL_DECODED; 119 } 120 #endif /* SH */ 121 122 #ifdef NIOS2 123 SYS_FUNC(cacheflush) 124 { 125 /* addr */ 126 printaddr(tcp->u_arg[0]); 127 /* len */ 128 tprintf(", %lu, ", tcp->u_arg[3]); 129 /* scope and flags (cache type) are currently ignored */ 130 131 return RVAL_DECODED; 132 } 133 #endif /* NIOS2 */ 134