source: rtems/cpukit/score/cpu/epiphany/epiphany-context-initialize.c @ 66a5000d

4.115
Last change on this file since 66a5000d was 66a5000d, checked in by Hesham ALMatary <heshamelmatary@…>, on May 21, 2015 at 4:52:56 PM

cpukit: Add Epiphany architecture port v4

  • Property mode set to 100644
File size: 2.2 KB
Line 
1/*
2 *
3 * Copyright (c) 2015 University of York.
4 * Hesham ALMatary <hmka501@york.ac.uk>
5 *
6 * COPYRIGHT (c) 1989-2006.
7 * On-Line Applications Research Corporation (OAR).
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 *    notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 *    notice, this list of conditions and the following disclaimer in the
16 *    documentation and/or other materials provided with the distribution.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 */
30
31#ifdef HAVE_CONFIG_H
32  #include "config.h"
33#endif
34
35#include <string.h>
36
37#include <rtems/score/cpu.h>
38#include <rtems/score/interr.h>
39
40void _CPU_Context_Initialize(
41  Context_Control *context,
42  void *stack_area_begin,
43  size_t stack_area_size,
44  uint32_t new_level,
45  void (*entry_point)( void ),
46  bool is_fp,
47  void *tls_area
48)
49{
50  uintptr_t stack = ((uintptr_t) stack_area_begin);
51  uint32_t sr, iret;
52
53  /* Account for red-zone */
54  uintptr_t stack_high = stack + stack_area_size - EPIPHANY_GCC_RED_ZONE_SIZE;
55
56  asm volatile ("movfs %0, status \n" : "=r" (sr):);
57  asm volatile ("movfs %0, iret \n" : "=r" (iret):);
58
59  memset(context, 0, sizeof(*context));
60
61  context->r[11] = stack_high;
62  context->r[13] = stack_high;
63  context->r[14] = (uintptr_t) entry_point;
64  context->status = sr;
65  context->iret = iret;
66}
Note: See TracBrowser for help on using the repository browser.