linux/arch/powerpc/sysdev/dcr-low.S
<<
>>
Prefs
   1/*
   2 * "Indirect" DCR access
   3 *
   4 * Copyright (c) 2004 Eugene Surovegin <ebs@ebshome.net>
   5 *
   6 * This program is free software; you can redistribute it and/or modify it
   7 * under  the terms of  the GNU General Public License as published by the
   8 * Free Software Foundation;  either version 2 of the License, or (at your
   9 * option) any later version.
  10 */
  11
  12#include <asm/ppc_asm.h>
  13#include <asm/processor.h>
  14#include <asm/bug.h>
  15
  16#define DCR_ACCESS_PROLOG(table) \
  17        cmpli   cr0,r3,1024;     \
  18        rlwinm  r3,r3,4,18,27;   \
  19        lis     r5,table@h;      \
  20        ori     r5,r5,table@l;   \
  21        add     r3,r3,r5;        \
  22        bge-    1f;              \
  23        mtctr   r3;              \
  24        bctr;                    \
  251:      trap;                    \
  26        EMIT_BUG_ENTRY 1b,__FILE__,__LINE__,0;  \
  27        blr
  28
  29_GLOBAL(__mfdcr)
  30        DCR_ACCESS_PROLOG(__mfdcr_table)
  31
  32_GLOBAL(__mtdcr)
  33        DCR_ACCESS_PROLOG(__mtdcr_table)
  34
  35__mfdcr_table:
  36        mfdcr  r3,0; blr
  37__mtdcr_table:
  38        mtdcr  0,r4; blr
  39
  40dcr     = 1
  41        .rept   1023
  42        mfdcr   r3,dcr; blr
  43        mtdcr   dcr,r4; blr
  44        dcr     = dcr + 1
  45        .endr
  46