linux/arch/arm/mach-iop13xx/include/mach/entry-macro.S
<<
>>
Prefs
   1/*
   2 * iop13xx low level irq macros
   3 * Copyright (c) 2005-2006, Intel Corporation.
   4 *
   5 * This program is free software; you can redistribute it and/or modify it
   6 * under the terms and conditions of the GNU General Public License,
   7 * version 2, as published by the Free Software Foundation.
   8 *
   9 * This program is distributed in the hope it will be useful, but WITHOUT
  10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  12 * more details.
  13 *
  14 * You should have received a copy of the GNU General Public License along with
  15 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
  16 * Place - Suite 330, Boston, MA 02111-1307 USA.
  17 *
  18 */
  19        .macro get_irqnr_preamble, base, tmp
  20        mrc     p15, 0, \tmp, c15, c1, 0
  21        orr     \tmp, \tmp, #(1 << 6)
  22        mcr     p15, 0, \tmp, c15, c1, 0        @ Enable cp6 access
  23        .endm
  24
  25        /*
  26         * Note: a 1-cycle window exists where iintvec will return the value
  27         * of iintbase, so we explicitly check for "bad zeros"
  28         */
  29        .macro  get_irqnr_and_base, irqnr, irqstat, base, tmp
  30        mrc     p6, 0, \irqnr, c3, c2, 0        @ Read IINTVEC
  31        cmp     \irqnr, #0
  32        mrceq   p6, 0, \irqnr, c3, c2, 0        @ Re-read on potentially bad zero
  33        adds    \irqstat, \irqnr, #1            @ Check for 0xffffffff
  34        movne   \irqnr, \irqnr, lsr #2          @ Convert to irqnr
  35        .endm
  36
  37        .macro arch_ret_to_user, tmp1, tmp2
  38        mrc     p15, 0, \tmp1, c15, c1, 0
  39        ands    \tmp2, \tmp1, #(1 << 6)
  40        bicne   \tmp1, \tmp1, #(1 << 6)
  41        mcrne   p15, 0, \tmp1, c15, c1, 0       @ Disable cp6 access
  42        .endm
  43