linux/arch/sparc/mm/srmmu_access.S
<<
>>
Prefs
   1/* Assembler variants of srmmu access functions.
   2 * Implemented in assembler to allow run-time patching.
   3 * LEON uses a different ASI for MMUREGS than SUN.
   4 *
   5 * The leon_1insn_patch infrastructure is used
   6 * for the run-time patching.
   7 */
   8
   9#include <linux/linkage.h>
  10
  11#include <asm/asmmacro.h>
  12#include <asm/pgtsrmmu.h>
  13#include <asm/asi.h>
  14
  15/* unsigned int srmmu_get_mmureg(void) */
  16ENTRY(srmmu_get_mmureg)
  17LEON_PI(lda     [%g0] ASI_LEON_MMUREGS, %o0)
  18SUN_PI_(lda     [%g0] ASI_M_MMUREGS, %o0)
  19        retl
  20         nop
  21ENDPROC(srmmu_get_mmureg)
  22
  23/* void srmmu_set_mmureg(unsigned long regval) */
  24ENTRY(srmmu_set_mmureg)
  25LEON_PI(sta     %o0, [%g0] ASI_LEON_MMUREGS)
  26SUN_PI_(sta     %o0, [%g0] ASI_M_MMUREGS)
  27        retl
  28         nop
  29ENDPROC(srmmu_set_mmureg)
  30
  31/* void srmmu_set_ctable_ptr(unsigned long paddr) */
  32ENTRY(srmmu_set_ctable_ptr)
  33        /* paddr = ((paddr >> 4) & SRMMU_CTX_PMASK); */
  34        srl     %o0, 4, %g1
  35        and     %g1, SRMMU_CTX_PMASK, %g1
  36
  37        mov     SRMMU_CTXTBL_PTR, %g2
  38LEON_PI(sta     %g1, [%g2] ASI_LEON_MMUREGS)
  39SUN_PI_(sta     %g1, [%g2] ASI_M_MMUREGS)
  40        retl
  41         nop
  42ENDPROC(srmmu_set_ctable_ptr)
  43
  44
  45/* void srmmu_set_context(int context) */
  46ENTRY(srmmu_set_context)
  47        mov     SRMMU_CTX_REG, %g1
  48LEON_PI(sta     %o0, [%g1] ASI_LEON_MMUREGS)
  49SUN_PI_(sta     %o0, [%g1] ASI_M_MMUREGS)
  50        retl
  51         nop
  52ENDPROC(srmmu_set_context)
  53
  54
  55/* int srmmu_get_context(void) */
  56ENTRY(srmmu_get_context)
  57        mov     SRMMU_CTX_REG, %o0
  58LEON_PI(lda     [%o0] ASI_LEON_MMUREGS, %o0)
  59SUN_PI_(lda     [%o0] ASI_M_MMUREGS, %o0)
  60        retl
  61         nop
  62ENDPROC(srmmu_get_context)
  63
  64
  65/* unsigned int srmmu_get_fstatus(void) */
  66ENTRY(srmmu_get_fstatus)
  67        mov     SRMMU_FAULT_STATUS, %o0
  68LEON_PI(lda     [%o0] ASI_LEON_MMUREGS, %o0)
  69SUN_PI_(lda     [%o0] ASI_M_MMUREGS, %o0)
  70        retl
  71         nop
  72ENDPROC(srmmu_get_fstatus)
  73
  74
  75/* unsigned int srmmu_get_faddr(void) */
  76ENTRY(srmmu_get_faddr)
  77        mov     SRMMU_FAULT_ADDR, %o0
  78LEON_PI(lda     [%o0] ASI_LEON_MMUREGS, %o0)
  79SUN_PI_(lda     [%o0] ASI_M_MMUREGS, %o0)
  80        retl
  81         nop
  82ENDPROC(srmmu_get_faddr)
  83