source: rtems/c/src/lib/libbsp/powerpc/helas403/include/coverhd.h @ 196094eb

4.104.114.84.95
Last change on this file since 196094eb was be4284d0, checked in by Joel Sherrill <joel.sherrill@…>, on Sep 30, 1998 at 9:50:42 PM

BSP submitted by Thomas Doerfler <td@…>:

Finally I am through: I have found the last bugs that made RTEMS-
4.0-beta3 start on my ppc403 board from ROM. So now the '403
support is up to date again.

Roughly I have added the following features:

  • support for the on-chip interrupt controller (in a separate module)
  • interrupt support for the console device
  • termios support for the console device

==============================================
Since the BSP behaivour changed in some details (console no
longer is polling, other memory layout etc) I have created a new
BSP "helas403" rather than changing the "papyrus" BSP. The old
"polled" console driver still sticks around in "console.c.polled"
To get the BSP up and running, I had to create the new BSP files
(derived from papyrus). Besides that, the following source areas
have been changed:

  • c/src/lib/libcpu/powerpc/ppc403: changes to console driver, small changes to clock driver, new "ictrl" interrupt controller driver
  • c/src/exec/score/cpu/powerpc/ppc.h: some small changes (added ppc403 characteristics like a exception vector prefix register, some special register definitions). I am quite sure, they are compatible with the existing sources, although I did not check
  • c/src/exec/score/cpu/powerpc/cpu.c: There is one severe limitation in the exception entries: Due to the current code arrangement, the "branch absolute" to the ISR handler may only jump to the first 128MByte or the last 128MByte of the 4GByte address range. When the ppc403 is running out of ROM, the ROM functions are located in the last 128MByte (0xFFF00000 and up). These addresses were not handled correctly (sign reduced) in "install_raw_handler". The change I added should work on existing ppc BSPs aswell...
  • c/src/lib/libc/termios.c: During my tests, I added one change you sent me, so this patch will already be incorporated in the current source tree.

There are some smaller changes, see the attached diff file.

=========================================
Concerning the GNU toolchain:

I tried several tool chains. Finally I almost succeeded with

egcs-1.0.3a with patch egcs-1.0.3-rtems-diff-19980527

I had to add the following lines to the egcs files. Without them
configure complaint that the cross compiler could not generate
executable output.

  • additional lines needed in egcs distribution in file gcc/config/rs6000/rtems.h:

+++ lines start
#undef STARTFILE_DEFAULT_SPEC
#define STARTFILE_DEFAULT_SPEC "ecrti.o%s"

#undef ENDFILE_DEFAULT_SPEC
#define ENDFILE_DEFAULT_SPEC "ecrtn.o%s"
++++ lines end

As far as I have seen in the Changelog of egcs, you have recently
sent two patches affecting the powerpc support, but they were
added in the wrong order.... :-(

egcs-19980628 with patch egcs-19980628-rtems-diff-19980707 does
not work!

I used binutils 2.9.1 with patch binutils-2.9.1-rtems-diff-19980515

(binutils 2.8.1 does not work, internal error in gas)

and newlib-1.8.0 with patch newlib-1.8.0-rtems-diff-19980707

Finally I had to poke a line in the "bit" script, since, on my LINUX
machine, the GNU make is only available as "make", not as
"gmake"...

For all the tools and newlib I selected configuration "powerpc-
rtems".


IMD Ingenieurbuero fuer Microcomputertechnik
Thomas Doerfler Herbststrasse 8
D-82178 Puchheim Germany
email: td@…

  • Property mode set to 100644
File size: 5.6 KB
Line 
1/*  coverhd.h
2 *
3 *  This include file has defines to represent the overhead associated
4 *  with calling a particular directive from C.  These are used in the
5 *  Timing Test Suite to ignore the overhead required to pass arguments
6 *  to directives.  On some CPUs and/or target boards, this overhead
7 *  is significant and makes it difficult to distinguish internal
8 *  RTEMS execution time from that used to call the directive.
9 *  This file should be updated after running the C overhead timing
10 *  test.  Once this update has been performed, the RTEMS Time Test
11 *  Suite should be rebuilt to account for these overhead times in the
12 *  timing results.
13 *
14 *  NOTE:  If these are all zero, then the times reported include
15 *         all calling overhead including passing of arguments.
16 *
17 *  COPYRIGHT (c) 1989-1998.
18 *  On-Line Applications Research Corporation (OAR).
19 *  Copyright assigned to U.S. Government, 1994.
20 *
21 *  The license and distribution terms for this file may be
22 *  found in the file LICENSE in this distribution or at
23 *  http://www.OARcorp.com/rtems/license.html.
24 *
25 *  $Id$
26 */
27
28/*
29 *  Updated for a 25MHz Papyrus by Andrew Bray <andy@i-cubed.co.uk>
30 *
31 *  Units are 100ns.
32 *
33 *  These numbers are of questionable use, as they are developed by calling
34 *  the routine many times, thus getting its entry veneer into the (small)
35 *  cache on the 403GA.  This in general is not true of the RTEMS timing
36 *  tests, which usually call a routine only once, thus having no cache loaded
37 *  advantage.
38 *
39 *  Whether the directive times are useful after deducting the function call
40 *  overhead is also questionable.  The user is more interested generally
41 *  in the total cost of a directive, not the cost if the procedure call
42 *  is inlined!  (In general this is not true).
43 *
44 *  Andrew Bray 18/08/1995
45 *
46 */
47
48#ifndef __COVERHD_h
49#define __COVERHD_h
50
51#ifdef __cplusplus
52extern "C" {
53#endif
54
55#define CALLING_OVERHEAD_INITIALIZE_EXECUTIVE      1
56#define CALLING_OVERHEAD_SHUTDOWN_EXECUTIVE        1
57#define CALLING_OVERHEAD_TASK_CREATE               3
58#define CALLING_OVERHEAD_TASK_IDENT                1
59#define CALLING_OVERHEAD_TASK_START                1
60#define CALLING_OVERHEAD_TASK_RESTART              1
61#define CALLING_OVERHEAD_TASK_DELETE               1
62#define CALLING_OVERHEAD_TASK_SUSPEND              1
63#define CALLING_OVERHEAD_TASK_RESUME               1
64#define CALLING_OVERHEAD_TASK_SET_PRIORITY         1
65#define CALLING_OVERHEAD_TASK_MODE                 1
66#define CALLING_OVERHEAD_TASK_GET_NOTE             1
67#define CALLING_OVERHEAD_TASK_SET_NOTE             1
68#define CALLING_OVERHEAD_TASK_WAKE_WHEN            4
69#define CALLING_OVERHEAD_TASK_WAKE_AFTER           1
70#define CALLING_OVERHEAD_INTERRUPT_CATCH           1
71#define CALLING_OVERHEAD_CLOCK_GET                 4
72#define CALLING_OVERHEAD_CLOCK_SET                 3
73#define CALLING_OVERHEAD_CLOCK_TICK                1
74
75#define CALLING_OVERHEAD_TIMER_CREATE              1
76#define CALLING_OVERHEAD_TIMER_IDENT               1
77#define CALLING_OVERHEAD_TIMER_DELETE              1
78#define CALLING_OVERHEAD_TIMER_FIRE_AFTER          2
79#define CALLING_OVERHEAD_TIMER_FIRE_WHEN           5
80#define CALLING_OVERHEAD_TIMER_RESET               1
81#define CALLING_OVERHEAD_TIMER_CANCEL              1
82#define CALLING_OVERHEAD_SEMAPHORE_CREATE          2
83#define CALLING_OVERHEAD_SEMAPHORE_IDENT           1
84#define CALLING_OVERHEAD_SEMAPHORE_DELETE          1
85#define CALLING_OVERHEAD_SEMAPHORE_OBTAIN          1
86#define CALLING_OVERHEAD_SEMAPHORE_RELEASE         1
87#define CALLING_OVERHEAD_MESSAGE_QUEUE_CREATE      2
88#define CALLING_OVERHEAD_MESSAGE_QUEUE_IDENT       1
89#define CALLING_OVERHEAD_MESSAGE_QUEUE_DELETE      1
90#define CALLING_OVERHEAD_MESSAGE_QUEUE_SEND        1
91#define CALLING_OVERHEAD_MESSAGE_QUEUE_URGENT      1
92#define CALLING_OVERHEAD_MESSAGE_QUEUE_BROADCAST   1
93#define CALLING_OVERHEAD_MESSAGE_QUEUE_RECEIVE     2
94#define CALLING_OVERHEAD_MESSAGE_QUEUE_FLUSH       1
95
96#define CALLING_OVERHEAD_EVENT_SEND                1
97#define CALLING_OVERHEAD_EVENT_RECEIVE             2
98#define CALLING_OVERHEAD_SIGNAL_CATCH              1
99#define CALLING_OVERHEAD_SIGNAL_SEND               1
100#define CALLING_OVERHEAD_PARTITION_CREATE          3
101#define CALLING_OVERHEAD_PARTITION_IDENT           1
102#define CALLING_OVERHEAD_PARTITION_DELETE          1
103#define CALLING_OVERHEAD_PARTITION_GET_BUFFER      1
104#define CALLING_OVERHEAD_PARTITION_RETURN_BUFFER   1
105#define CALLING_OVERHEAD_REGION_CREATE             3
106#define CALLING_OVERHEAD_REGION_IDENT              1
107#define CALLING_OVERHEAD_REGION_DELETE             1
108#define CALLING_OVERHEAD_REGION_GET_SEGMENT        2
109#define CALLING_OVERHEAD_REGION_RETURN_SEGMENT     1
110#define CALLING_OVERHEAD_PORT_CREATE               2
111#define CALLING_OVERHEAD_PORT_IDENT                1
112#define CALLING_OVERHEAD_PORT_DELETE               1
113#define CALLING_OVERHEAD_PORT_EXTERNAL_TO_INTERNAL 1
114#define CALLING_OVERHEAD_PORT_INTERNAL_TO_EXTERNAL 2
115
116#define CALLING_OVERHEAD_IO_INITIALIZE             2
117#define CALLING_OVERHEAD_IO_OPEN                   2
118#define CALLING_OVERHEAD_IO_CLOSE                  2
119#define CALLING_OVERHEAD_IO_READ                   2
120#define CALLING_OVERHEAD_IO_WRITE                  2
121#define CALLING_OVERHEAD_IO_CONTROL                2
122#define CALLING_OVERHEAD_FATAL_ERROR_OCCURRED      1
123#define CALLING_OVERHEAD_RATE_MONOTONIC_CREATE     1
124#define CALLING_OVERHEAD_RATE_MONOTONIC_IDENT      1
125#define CALLING_OVERHEAD_RATE_MONOTONIC_DELETE     1
126#define CALLING_OVERHEAD_RATE_MONOTONIC_CANCEL     1
127#define CALLING_OVERHEAD_RATE_MONOTONIC_PERIOD     1
128#define CALLING_OVERHEAD_MULTIPROCESSING_ANNOUNCE  1
129
130#ifdef __cplusplus
131}
132#endif
133
134#endif
135/* end of include file */
Note: See TracBrowser for help on using the repository browser.