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#include <asm/export.h>
  16
  17#define DCR_ACCESS_PROLOG(table) \
  18        cmpli   cr0,r3,1024;     \
  19        rlwinm  r3,r3,4,18,27;   \
  20        lis     r5,table@h;      \
  21        ori     r5,r5,table@l;   \
  22        add     r3,r3,r5;        \
  23        bge-    1f;              \
  24        mtctr   r3;              \
  25        bctr;                    \
  261:      trap;                    \
  27        EMIT_BUG_ENTRY 1b,__FILE__,__LINE__,0;  \
  28        blr
  29
  30_GLOBAL(__mfdcr)
  31        DCR_ACCESS_PROLOG(__mfdcr_table)
  32EXPORT_SYMBOL(__mfdcr)
  33
  34_GLOBAL(__mtdcr)
  35        DCR_ACCESS_PROLOG(__mtdcr_table)
  36EXPORT_SYMBOL(__mtdcr)
  37
  38__mfdcr_table:
  39        mfdcr  r3,0; blr
  40__mtdcr_table:
  41        mtdcr  0,r4; blr
  42
  43dcr     = 1
  44        .rept   1023
  45        mfdcr   r3,dcr; blr
  46        mtdcr   dcr,r4; blr
  47        dcr     = dcr + 1
  48        .endr
  49