1 /* 2 * (C) Copyright 2007 Michal Simek 3 * 4 * Michal SIMEK <monstr@monstr.eu> 5 * 6 * See file CREDITS for list of people who contributed to this 7 * project. 8 * 9 * This program is free software; you can redistribute it and/or 10 * modify it under the terms of the GNU General Public License as 11 * published by the Free Software Foundation; either version 2 of 12 * the License, or (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, write to the Free Software 21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 22 * MA 02111-1307 USA 23 */ 24 25 /* FSL macros */ 26 #define NGET(val, fslnum) \ 27 __asm__ __volatile__ ("nget %0, rfsl" #fslnum :"=r" (val)); 28 29 #define GET(val, fslnum) \ 30 __asm__ __volatile__ ("get %0, rfsl" #fslnum :"=r" (val)); 31 32 #define NCGET(val, fslnum) \ 33 __asm__ __volatile__ ("ncget %0, rfsl" #fslnum :"=r" (val)); 34 35 #define CGET(val, fslnum) \ 36 __asm__ __volatile__ ("cget %0, rfsl" #fslnum :"=r" (val)); 37 38 #define NPUT(val, fslnum) \ 39 __asm__ __volatile__ ("nput %0, rfsl" #fslnum ::"r" (val)); 40 41 #define PUT(val, fslnum) \ 42 __asm__ __volatile__ ("put %0, rfsl" #fslnum ::"r" (val)); 43 44 #define NCPUT(val, fslnum) \ 45 __asm__ __volatile__ ("ncput %0, rfsl" #fslnum ::"r" (val)); 46 47 #define CPUT(val, fslnum) \ 48 __asm__ __volatile__ ("cput %0, rfsl" #fslnum ::"r" (val)); 49 50 /* CPU dependent */ 51 /* machine status register */ 52 #define MFS(val, reg) \ 53 __asm__ __volatile__ ("mfs %0," #reg :"=r" (val)); 54 55 #define MTS(val, reg) \ 56 __asm__ __volatile__ ("mts " #reg ", %0"::"r" (val)); 57 58 /* get return address from interrupt */ 59 #define R14(val) \ 60 __asm__ __volatile__ ("addi %0, r14, 0":"=r" (val)); 61 62 #define NOP __asm__ __volatile__ ("nop"); 63 64 /* use machine status registe USE_MSR_REG */ 65 #if XILINX_USE_MSR_INSTR == 1 66 #define MSRSET(val) \ 67 __asm__ __volatile__ ("msrset r0," #val ); 68 69 #define MSRCLR(val) \ 70 __asm__ __volatile__ ("msrclr r0," #val ); 71 72 #else 73 #define MSRSET(val) \ 74 { \ 75 register unsigned tmp; \ 76 __asm__ __volatile__ (" \ 77 mfs %0, rmsr; \ 78 ori %0, %0, "#val"; \ 79 mts rmsr, %0; \ 80 nop;" \ 81 : "=r" (tmp) \ 82 : "d" (val) \ 83 : "memory"); \ 84 } 85 86 #define MSRCLR(val) \ 87 { \ 88 register unsigned tmp; \ 89 __asm__ __volatile__ (" \ 90 mfs %0, rmsr; \ 91 andi %0, %0, ~"#val"; \ 92 mts rmsr, %0; \ 93 nop;" \ 94 : "=r" (tmp) \ 95 : "d" (val) \ 96 : "memory"); \ 97 } 98 #endif 99