Logo Search packages:      
Sourcecode: linux version File versions

asm.h

/*
 * Copyright (C) 2004-2006 Atmel Corporation
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */
#ifndef __ASM_AVR32_ASM_H__
#define __ASM_AVR32_ASM_H__

#include <asm/sysreg.h>
#include <asm/asm-offsets.h>
#include <asm/thread_info.h>

#define mask_interrupts       ssrf  SYSREG_GM_OFFSET
#define mask_exceptions       ssrf  SYSREG_EM_OFFSET
#define unmask_interrupts     csrf  SYSREG_GM_OFFSET
#define unmask_exceptions     csrf  SYSREG_EM_OFFSET

#ifdef CONFIG_FRAME_POINTER
      .macro      save_fp
      st.w  --sp, r7
      .endm
      .macro      restore_fp
      ld.w  r7, sp++
      .endm
      .macro      zero_fp
      mov   r7, 0
      .endm
#else
      .macro      save_fp
      .endm
      .macro      restore_fp
      .endm
      .macro      zero_fp
      .endm
#endif
      .macro      get_thread_info reg
      mov   \reg, sp
      andl  \reg, ~(THREAD_SIZE - 1) & 0xffff
      .endm

      /* Save and restore registers */
      .macro      save_min sr, tmp=lr
      pushm lr
      mfsr  \tmp, \sr
      zero_fp
      st.w  --sp, \tmp
      .endm

      .macro      restore_min sr, tmp=lr
      ld.w  \tmp, sp++
      mtsr  \sr, \tmp
      popm  lr
      .endm

      .macro      save_half sr, tmp=lr
      save_fp
      pushm r8-r9,r10,r11,r12,lr
      zero_fp
      mfsr  \tmp, \sr
      st.w  --sp, \tmp
      .endm

      .macro      restore_half sr, tmp=lr
      ld.w  \tmp, sp++
      mtsr  \sr, \tmp
      popm  r8-r9,r10,r11,r12,lr
      restore_fp
      .endm

      .macro      save_full_user sr, tmp=lr
      stmts --sp, r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,sp,lr
      st.w  --sp, lr
      zero_fp
      mfsr  \tmp, \sr
      st.w  --sp, \tmp
      .endm

      .macro      restore_full_user sr, tmp=lr
      ld.w  \tmp, sp++
      mtsr  \sr, \tmp
      ld.w  lr, sp++
      ldmts sp++, r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,sp,lr
      .endm

      /* uaccess macros */
      .macro branch_if_kernel scratch, label
      get_thread_info \scratch
      ld.w  \scratch, \scratch[TI_flags]
      bld   \scratch, TIF_USERSPACE
      brcc  \label
      .endm

      .macro ret_if_privileged scratch, addr, size, ret
      sub   \scratch, \size, 1
      add   \scratch, \addr
      retcs \ret
      retmi \ret
      .endm

#endif /* __ASM_AVR32_ASM_H__ */

Generated by  Doxygen 1.6.0   Back to index