2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-22 20:23:57 +08:00
linux-next/include/asm-avr32/elf.h
Haavard Skinnemoen 5f97f7f940 [PATCH] avr32 architecture
This adds support for the Atmel AVR32 architecture as well as the AT32AP7000
CPU and the AT32STK1000 development board.

AVR32 is a new high-performance 32-bit RISC microprocessor core, designed for
cost-sensitive embedded applications, with particular emphasis on low power
consumption and high code density.  The AVR32 architecture is not binary
compatible with earlier 8-bit AVR architectures.

The AVR32 architecture, including the instruction set, is described by the
AVR32 Architecture Manual, available from

http://www.atmel.com/dyn/resources/prod_documents/doc32000.pdf

The Atmel AT32AP7000 is the first CPU implementing the AVR32 architecture.  It
features a 7-stage pipeline, 16KB instruction and data caches and a full
Memory Management Unit.  It also comes with a large set of integrated
peripherals, many of which are shared with the AT91 ARM-based controllers from
Atmel.

Full data sheet is available from

http://www.atmel.com/dyn/resources/prod_documents/doc32003.pdf

while the CPU core implementation including caches and MMU is documented by
the AVR32 AP Technical Reference, available from

http://www.atmel.com/dyn/resources/prod_documents/doc32001.pdf

Information about the AT32STK1000 development board can be found at

http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3918

including a BSP CD image with an earlier version of this patch, development
tools (binaries and source/patches) and a root filesystem image suitable for
booting from SD card.

Alternatively, there's a preliminary "getting started" guide available at
http://avr32linux.org/twiki/bin/view/Main/GettingStarted which provides links
to the sources and patches you will need in order to set up a cross-compiling
environment for avr32-linux.

This patch, as well as the other patches included with the BSP and the
toolchain patches, is actively supported by Atmel Corporation.

[dmccr@us.ibm.com: Fix more pxx_page macro locations]
[bunk@stusta.de: fix `make defconfig']
Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
Signed-off-by: Adrian Bunk <bunk@stusta.de>
Signed-off-by: Dave McCracken <dmccr@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-09-26 08:48:54 -07:00

111 lines
2.9 KiB
C

#ifndef __ASM_AVR32_ELF_H
#define __ASM_AVR32_ELF_H
/* AVR32 relocation numbers */
#define R_AVR32_NONE 0
#define R_AVR32_32 1
#define R_AVR32_16 2
#define R_AVR32_8 3
#define R_AVR32_32_PCREL 4
#define R_AVR32_16_PCREL 5
#define R_AVR32_8_PCREL 6
#define R_AVR32_DIFF32 7
#define R_AVR32_DIFF16 8
#define R_AVR32_DIFF8 9
#define R_AVR32_GOT32 10
#define R_AVR32_GOT16 11
#define R_AVR32_GOT8 12
#define R_AVR32_21S 13
#define R_AVR32_16U 14
#define R_AVR32_16S 15
#define R_AVR32_8S 16
#define R_AVR32_8S_EXT 17
#define R_AVR32_22H_PCREL 18
#define R_AVR32_18W_PCREL 19
#define R_AVR32_16B_PCREL 20
#define R_AVR32_16N_PCREL 21
#define R_AVR32_14UW_PCREL 22
#define R_AVR32_11H_PCREL 23
#define R_AVR32_10UW_PCREL 24
#define R_AVR32_9H_PCREL 25
#define R_AVR32_9UW_PCREL 26
#define R_AVR32_HI16 27
#define R_AVR32_LO16 28
#define R_AVR32_GOTPC 29
#define R_AVR32_GOTCALL 30
#define R_AVR32_LDA_GOT 31
#define R_AVR32_GOT21S 32
#define R_AVR32_GOT18SW 33
#define R_AVR32_GOT16S 34
#define R_AVR32_GOT7UW 35
#define R_AVR32_32_CPENT 36
#define R_AVR32_CPCALL 37
#define R_AVR32_16_CP 38
#define R_AVR32_9W_CP 39
#define R_AVR32_RELATIVE 40
#define R_AVR32_GLOB_DAT 41
#define R_AVR32_JMP_SLOT 42
#define R_AVR32_ALIGN 43
/*
* ELF register definitions..
*/
#include <asm/ptrace.h>
#include <asm/user.h>
typedef unsigned long elf_greg_t;
#define ELF_NGREG (sizeof (struct pt_regs) / sizeof (elf_greg_t))
typedef elf_greg_t elf_gregset_t[ELF_NGREG];
typedef struct user_fpu_struct elf_fpregset_t;
/*
* This is used to ensure we don't load something for the wrong architecture.
*/
#define elf_check_arch(x) ( (x)->e_machine == EM_AVR32 )
/*
* These are used to set parameters in the core dumps.
*/
#define ELF_CLASS ELFCLASS32
#ifdef __LITTLE_ENDIAN__
#define ELF_DATA ELFDATA2LSB
#else
#define ELF_DATA ELFDATA2MSB
#endif
#define ELF_ARCH EM_AVR32
#define USE_ELF_CORE_DUMP
#define ELF_EXEC_PAGESIZE 4096
/* This is the location that an ET_DYN program is loaded if exec'ed. Typical
use of this is to invoke "./ld.so someprog" to test out a new version of
the loader. We need to make sure that it is out of the way of the program
that it will "exec", and that there is sufficient room for the brk. */
#define ELF_ET_DYN_BASE (2 * TASK_SIZE / 3)
/* This yields a mask that user programs can use to figure out what
instruction set this CPU supports. This could be done in user space,
but it's not easy, and we've already done it here. */
#define ELF_HWCAP (0)
/* This yields a string that ld.so will use to load implementation
specific libraries for optimization. This is more specific in
intent than poking at uname or /proc/cpuinfo.
For the moment, we have only optimizations for the Intel generations,
but that could change... */
#define ELF_PLATFORM (NULL)
#ifdef __KERNEL__
#define SET_PERSONALITY(ex, ibcs2) set_personality(PER_LINUX_32BIT)
#endif
#endif /* __ASM_AVR32_ELF_H */