summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--c/src/exec/rtems/src/msg.c2
-rw-r--r--c/src/exec/rtems/src/region.c2
-rw-r--r--c/src/exec/sapi/headers/directives.h2
-rw-r--r--c/src/exec/sapi/headers/io.h22
-rw-r--r--c/src/exec/sapi/include/rtems/directives.h2
-rw-r--r--c/src/exec/sapi/include/rtems/io.h22
-rw-r--r--c/src/exec/sapi/src/io.c29
-rw-r--r--c/src/exec/score/cpu/sparc/README8
-rw-r--r--c/src/exec/score/cpu/sparc/cpu.c15
-rw-r--r--c/src/exec/score/cpu/sparc/cpu.h15
-rw-r--r--c/src/exec/score/cpu/sparc/cpu_asm.s15
-rw-r--r--c/src/exec/score/cpu/sparc/erc32.h15
-rw-r--r--c/src/exec/score/cpu/sparc/rtems.s15
-rw-r--r--c/src/exec/score/cpu/sparc/sparc.h15
-rw-r--r--c/src/exec/score/cpu/sparc/sparctypes.h15
-rw-r--r--c/src/lib/libcpu/sparc/include/erc32.h15
-rw-r--r--c/src/lib/libcpu/sparc/reg_win/window.s257
-rw-r--r--c/src/tests/sptests/spsize/size.c5
-rw-r--r--cpukit/rtems/src/msg.c2
-rw-r--r--cpukit/rtems/src/region.c2
-rw-r--r--cpukit/sapi/include/rtems/io.h22
-rw-r--r--cpukit/sapi/src/io.c29
-rw-r--r--cpukit/score/cpu/sparc/README8
-rw-r--r--cpukit/score/cpu/sparc/cpu.c15
-rw-r--r--testsuites/sptests/spsize/size.c5
25 files changed, 481 insertions, 73 deletions
diff --git a/c/src/exec/rtems/src/msg.c b/c/src/exec/rtems/src/msg.c
index 899254d11d..7d7c6e3025 100644
--- a/c/src/exec/rtems/src/msg.c
+++ b/c/src/exec/rtems/src/msg.c
@@ -109,7 +109,7 @@ Message_queue_Control *_Message_queue_Allocate (
*
* Output parameters:
* id - queue id
- * RTEMS_SUCCESSFUL - if successful
+ * RTEMS_SUCCESSFUL - if successful
* error code - if unsuccessful
*/
diff --git a/c/src/exec/rtems/src/region.c b/c/src/exec/rtems/src/region.c
index ecfaf32382..d0720f5040 100644
--- a/c/src/exec/rtems/src/region.c
+++ b/c/src/exec/rtems/src/region.c
@@ -314,6 +314,8 @@ rtems_status_code rtems_region_get_segment(
Thread_Control *executing;
void *the_segment;
+ *segment = NULL;
+
if ( size == 0 )
return RTEMS_INVALID_SIZE;
diff --git a/c/src/exec/sapi/headers/directives.h b/c/src/exec/sapi/headers/directives.h
index afcd56278f..938cf68460 100644
--- a/c/src/exec/sapi/headers/directives.h
+++ b/c/src/exec/sapi/headers/directives.h
@@ -62,7 +62,7 @@ extern "C" {
#define RTEMS_MESSAGE_QUEUE_DELETE 38
#define RTEMS_MESSAGE_QUEUE_SEND 39
#define RTEMS_MESSAGE_QUEUE_URGENT 40
-#define RTEMS_MESSAGE_QUEUE_BROADCAst 41
+#define RTEMS_MESSAGE_QUEUE_BROADCAST 41
#define RTEMS_MESSAGE_QUEUE_RECEIVE 42
#define RTEMS_MESSAGE_QUEUE_FLUSH 43
#define RTEMS_EVENT_SEND 44
diff --git a/c/src/exec/sapi/headers/io.h b/c/src/exec/sapi/headers/io.h
index 6f3afba53e..592fbe08ed 100644
--- a/c/src/exec/sapi/headers/io.h
+++ b/c/src/exec/sapi/headers/io.h
@@ -115,9 +115,9 @@ STATIC INLINE void _IO_Manager_initialization(
*/
rtems_status_code rtems_io_register_name(
- char *device_name,
- rtems_device_major_number major,
- rtems_device_minor_number minor
+ char *device_name,
+ rtems_device_major_number major,
+ rtems_device_minor_number minor
);
@@ -130,8 +130,8 @@ rtems_status_code rtems_io_register_name(
*/
rtems_status_code rtems_io_lookup_name(
- const char *pathname,
- rtems_driver_name_t **rnp
+ const char *name,
+ rtems_driver_name_t **device_info
);
@@ -147,7 +147,7 @@ rtems_status_code rtems_io_lookup_name(
rtems_status_code rtems_io_initialize(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
);
/*
@@ -162,7 +162,7 @@ rtems_status_code rtems_io_initialize(
rtems_status_code rtems_io_open(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
);
/*
@@ -177,7 +177,7 @@ rtems_status_code rtems_io_open(
rtems_status_code rtems_io_close(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
);
/*
@@ -192,7 +192,7 @@ rtems_status_code rtems_io_close(
rtems_status_code rtems_io_read(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
);
/*
@@ -207,7 +207,7 @@ rtems_status_code rtems_io_read(
rtems_status_code rtems_io_write(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
);
/*
@@ -222,7 +222,7 @@ rtems_status_code rtems_io_write(
rtems_status_code rtems_io_control(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
);
/*
diff --git a/c/src/exec/sapi/include/rtems/directives.h b/c/src/exec/sapi/include/rtems/directives.h
index afcd56278f..938cf68460 100644
--- a/c/src/exec/sapi/include/rtems/directives.h
+++ b/c/src/exec/sapi/include/rtems/directives.h
@@ -62,7 +62,7 @@ extern "C" {
#define RTEMS_MESSAGE_QUEUE_DELETE 38
#define RTEMS_MESSAGE_QUEUE_SEND 39
#define RTEMS_MESSAGE_QUEUE_URGENT 40
-#define RTEMS_MESSAGE_QUEUE_BROADCAst 41
+#define RTEMS_MESSAGE_QUEUE_BROADCAST 41
#define RTEMS_MESSAGE_QUEUE_RECEIVE 42
#define RTEMS_MESSAGE_QUEUE_FLUSH 43
#define RTEMS_EVENT_SEND 44
diff --git a/c/src/exec/sapi/include/rtems/io.h b/c/src/exec/sapi/include/rtems/io.h
index 6f3afba53e..592fbe08ed 100644
--- a/c/src/exec/sapi/include/rtems/io.h
+++ b/c/src/exec/sapi/include/rtems/io.h
@@ -115,9 +115,9 @@ STATIC INLINE void _IO_Manager_initialization(
*/
rtems_status_code rtems_io_register_name(
- char *device_name,
- rtems_device_major_number major,
- rtems_device_minor_number minor
+ char *device_name,
+ rtems_device_major_number major,
+ rtems_device_minor_number minor
);
@@ -130,8 +130,8 @@ rtems_status_code rtems_io_register_name(
*/
rtems_status_code rtems_io_lookup_name(
- const char *pathname,
- rtems_driver_name_t **rnp
+ const char *name,
+ rtems_driver_name_t **device_info
);
@@ -147,7 +147,7 @@ rtems_status_code rtems_io_lookup_name(
rtems_status_code rtems_io_initialize(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
);
/*
@@ -162,7 +162,7 @@ rtems_status_code rtems_io_initialize(
rtems_status_code rtems_io_open(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
);
/*
@@ -177,7 +177,7 @@ rtems_status_code rtems_io_open(
rtems_status_code rtems_io_close(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
);
/*
@@ -192,7 +192,7 @@ rtems_status_code rtems_io_close(
rtems_status_code rtems_io_read(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
);
/*
@@ -207,7 +207,7 @@ rtems_status_code rtems_io_read(
rtems_status_code rtems_io_write(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
);
/*
@@ -222,7 +222,7 @@ rtems_status_code rtems_io_write(
rtems_status_code rtems_io_control(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
);
/*
diff --git a/c/src/exec/sapi/src/io.c b/c/src/exec/sapi/src/io.c
index 473fe9a444..49c89b22dc 100644
--- a/c/src/exec/sapi/src/io.c
+++ b/c/src/exec/sapi/src/io.c
@@ -46,8 +46,13 @@ void _IO_Initialize_all_drivers( void )
* Associate a name with a driver
*
* Input Paramters:
+ * device_name - pointer to name string to associate with device
+ * major - device major number to receive name
+ * minor - device minor number to receive name
*
* Output Parameters:
+ * RTEMS_SUCCESSFUL - if successful
+ * error code - if unsuccessful
*/
rtems_status_code rtems_io_register_name(
@@ -90,13 +95,17 @@ rtems_status_code rtems_io_register_name(
* Find what driver "owns" this name
*
* Input Paramters:
+ * name - name to lookup the associated device
*
* Output Parameters:
+ * device_info - device associate with name
+ * RTEMS_SUCCESSFUL - if successful
+ * error code - if unsuccessful
*/
rtems_status_code rtems_io_lookup_name(
- const char *pathname,
- rtems_driver_name_t **rnp
+ const char *name,
+ rtems_driver_name_t **device_info
)
{
rtems_driver_name_t *np;
@@ -106,13 +115,13 @@ rtems_status_code rtems_io_lookup_name(
index < _IO_Number_of_devices ;
index++, np++ )
if (np->device_name)
- if (strncmp(np->device_name, pathname, np->device_name_length) == 0)
+ if (strncmp(np->device_name, name, np->device_name_length) == 0)
{
- *rnp = np;
+ *device_info = np;
return RTEMS_SUCCESSFUL;
}
- *rnp = 0;
+ *device_info = 0;
return RTEMS_UNSATISFIED;
}
@@ -165,7 +174,7 @@ rtems_status_code rtems_io_initialize(
rtems_status_code rtems_io_open(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
)
{
rtems_device_driver_entry callout;
@@ -195,7 +204,7 @@ rtems_status_code rtems_io_open(
rtems_status_code rtems_io_close(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
)
{
rtems_device_driver_entry callout;
@@ -225,7 +234,7 @@ rtems_status_code rtems_io_close(
rtems_status_code rtems_io_read(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
)
{
rtems_device_driver_entry callout;
@@ -255,7 +264,7 @@ rtems_status_code rtems_io_read(
rtems_status_code rtems_io_write(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
)
{
rtems_device_driver_entry callout;
@@ -285,7 +294,7 @@ rtems_status_code rtems_io_write(
rtems_status_code rtems_io_control(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
)
{
rtems_device_driver_entry callout;
diff --git a/c/src/exec/score/cpu/sparc/README b/c/src/exec/score/cpu/sparc/README
index 0c481d67c1..c4c2200075 100644
--- a/c/src/exec/score/cpu/sparc/README
+++ b/c/src/exec/score/cpu/sparc/README
@@ -108,11 +108,3 @@ thus would be unable to restore the FP context of the incoming task.
2. On a deferred FP context switch. In this case, the system might switch
from FP Task A to non-FP Task B and then to FP Task C. In this scenario,
the floating point state must technically be saved by a non-FP task.
-
-
-
-
-
-
-
-
diff --git a/c/src/exec/score/cpu/sparc/cpu.c b/c/src/exec/score/cpu/sparc/cpu.c
index 23d998cab5..9f242d4a8f 100644
--- a/c/src/exec/score/cpu/sparc/cpu.c
+++ b/c/src/exec/score/cpu/sparc/cpu.c
@@ -1,6 +1,21 @@
/*
* SPARC Dependent Source
*
+ * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ * On-Line Applications Research Corporation (OAR).
+ * All rights assigned to U.S. Government, 1994.
+ *
+ * This material may be reproduced by or for the U.S. Government pursuant
+ * to the copyright license under the clause at DFARS 252.227-7013. This
+ * notice must appear in all copies of this file and its derivatives.
+ *
+ * Ported to ERC32 implementation of the SPARC by On-Line Applications
+ * Research Corporation (OAR) under contract to the European Space
+ * Agency (ESA).
+ *
+ * ERC32 modifications of respective RTEMS file: COPYRIGHT (c) 1995.
+ * European Space Agency.
+ *
* $Id$
*/
diff --git a/c/src/exec/score/cpu/sparc/cpu.h b/c/src/exec/score/cpu/sparc/cpu.h
index c631d6a85f..53e3dec407 100644
--- a/c/src/exec/score/cpu/sparc/cpu.h
+++ b/c/src/exec/score/cpu/sparc/cpu.h
@@ -3,6 +3,21 @@
* This include file contains information pertaining to the port of
* the executive to the SPARC processor.
*
+ * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ * On-Line Applications Research Corporation (OAR).
+ * All rights assigned to U.S. Government, 1994.
+ *
+ * This material may be reproduced by or for the U.S. Government pursuant
+ * to the copyright license under the clause at DFARS 252.227-7013. This
+ * notice must appear in all copies of this file and its derivatives.
+ *
+ * Ported to ERC32 implementation of the SPARC by On-Line Applications
+ * Research Corporation (OAR) under contract to the European Space
+ * Agency (ESA).
+ *
+ * ERC32 modifications of respective RTEMS file: COPYRIGHT (c) 1995.
+ * European Space Agency.
+ *
* $Id$
*/
diff --git a/c/src/exec/score/cpu/sparc/cpu_asm.s b/c/src/exec/score/cpu/sparc/cpu_asm.s
index 045157b074..5fe49f3e1d 100644
--- a/c/src/exec/score/cpu/sparc/cpu_asm.s
+++ b/c/src/exec/score/cpu/sparc/cpu_asm.s
@@ -4,6 +4,21 @@
* in an specific CPU port of RTEMS. These algorithms must be implemented
* in assembly language.
*
+ * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ * On-Line Applications Research Corporation (OAR).
+ * All rights assigned to U.S. Government, 1994.
+ *
+ * This material may be reproduced by or for the U.S. Government pursuant
+ * to the copyright license under the clause at DFARS 252.227-7013. This
+ * notice must appear in all copies of this file and its derivatives.
+ *
+ * Ported to ERC32 implementation of the SPARC by On-Line Applications
+ * Research Corporation (OAR) under contract to the European Space
+ * Agency (ESA).
+ *
+ * ERC32 modifications of respective RTEMS file: COPYRIGHT (c) 1995.
+ * European Space Agency.
+ *
* $Id$
*/
diff --git a/c/src/exec/score/cpu/sparc/erc32.h b/c/src/exec/score/cpu/sparc/erc32.h
index 9a8b875c49..8dd5162cea 100644
--- a/c/src/exec/score/cpu/sparc/erc32.h
+++ b/c/src/exec/score/cpu/sparc/erc32.h
@@ -18,6 +18,21 @@
* + Memory Control Register
* + Interrupt Control
*
+ * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ * On-Line Applications Research Corporation (OAR).
+ * All rights assigned to U.S. Government, 1994.
+ *
+ * This material may be reproduced by or for the U.S. Government pursuant
+ * to the copyright license under the clause at DFARS 252.227-7013. This
+ * notice must appear in all copies of this file and its derivatives.
+ *
+ * Ported to ERC32 implementation of the SPARC by On-Line Applications
+ * Research Corporation (OAR) under contract to the European Space
+ * Agency (ESA).
+ *
+ * ERC32 modifications of respective RTEMS file: COPYRIGHT (c) 1995.
+ * European Space Agency.
+ *
* $Id$
*/
diff --git a/c/src/exec/score/cpu/sparc/rtems.s b/c/src/exec/score/cpu/sparc/rtems.s
index 75aa41f83b..e4dfd83fd6 100644
--- a/c/src/exec/score/cpu/sparc/rtems.s
+++ b/c/src/exec/score/cpu/sparc/rtems.s
@@ -3,6 +3,21 @@
* This file contains the single entry point code for
* the SPARC port of RTEMS.
*
+ * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ * On-Line Applications Research Corporation (OAR).
+ * All rights assigned to U.S. Government, 1994.
+ *
+ * This material may be reproduced by or for the U.S. Government pursuant
+ * to the copyright license under the clause at DFARS 252.227-7013. This
+ * notice must appear in all copies of this file and its derivatives.
+ *
+ * Ported to ERC32 implementation of the SPARC by On-Line Applications
+ * Research Corporation (OAR) under contract to the European Space
+ * Agency (ESA).
+ *
+ * ERC32 modifications of respective RTEMS file: COPYRIGHT (c) 1995.
+ * European Space Agency.
+ *
* $Id$
*/
diff --git a/c/src/exec/score/cpu/sparc/sparc.h b/c/src/exec/score/cpu/sparc/sparc.h
index d6f263643b..b282aa0189 100644
--- a/c/src/exec/score/cpu/sparc/sparc.h
+++ b/c/src/exec/score/cpu/sparc/sparc.h
@@ -3,6 +3,21 @@
* This include file contains information pertaining to the SPARC
* processor family.
*
+ * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ * On-Line Applications Research Corporation (OAR).
+ * All rights assigned to U.S. Government, 1994.
+ *
+ * This material may be reproduced by or for the U.S. Government pursuant
+ * to the copyright license under the clause at DFARS 252.227-7013. This
+ * notice must appear in all copies of this file and its derivatives.
+ *
+ * Ported to ERC32 implementation of the SPARC by On-Line Applications
+ * Research Corporation (OAR) under contract to the European Space
+ * Agency (ESA).
+ *
+ * ERC32 modifications of respective RTEMS file: COPYRIGHT (c) 1995.
+ * European Space Agency.
+ *
* $Id$
*/
diff --git a/c/src/exec/score/cpu/sparc/sparctypes.h b/c/src/exec/score/cpu/sparc/sparctypes.h
index 13aeb2473e..1d23f8fea0 100644
--- a/c/src/exec/score/cpu/sparc/sparctypes.h
+++ b/c/src/exec/score/cpu/sparc/sparctypes.h
@@ -3,6 +3,21 @@
* This include file contains type definitions pertaining to the
* SPARC processor family.
*
+ * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ * On-Line Applications Research Corporation (OAR).
+ * All rights assigned to U.S. Government, 1994.
+ *
+ * This material may be reproduced by or for the U.S. Government pursuant
+ * to the copyright license under the clause at DFARS 252.227-7013. This
+ * notice must appear in all copies of this file and its derivatives.
+ *
+ * Ported to ERC32 implementation of the SPARC by On-Line Applications
+ * Research Corporation (OAR) under contract to the European Space
+ * Agency (ESA).
+ *
+ * ERC32 modifications of respective RTEMS file: COPYRIGHT (c) 1995.
+ * European Space Agency.
+ *
* $Id$
*/
diff --git a/c/src/lib/libcpu/sparc/include/erc32.h b/c/src/lib/libcpu/sparc/include/erc32.h
index 9a8b875c49..8dd5162cea 100644
--- a/c/src/lib/libcpu/sparc/include/erc32.h
+++ b/c/src/lib/libcpu/sparc/include/erc32.h
@@ -18,6 +18,21 @@
* + Memory Control Register
* + Interrupt Control
*
+ * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ * On-Line Applications Research Corporation (OAR).
+ * All rights assigned to U.S. Government, 1994.
+ *
+ * This material may be reproduced by or for the U.S. Government pursuant
+ * to the copyright license under the clause at DFARS 252.227-7013. This
+ * notice must appear in all copies of this file and its derivatives.
+ *
+ * Ported to ERC32 implementation of the SPARC by On-Line Applications
+ * Research Corporation (OAR) under contract to the European Space
+ * Agency (ESA).
+ *
+ * ERC32 modifications of respective RTEMS file: COPYRIGHT (c) 1995.
+ * European Space Agency.
+ *
* $Id$
*/
diff --git a/c/src/lib/libcpu/sparc/reg_win/window.s b/c/src/lib/libcpu/sparc/reg_win/window.s
new file mode 100644
index 0000000000..c21e73ebb4
--- /dev/null
+++ b/c/src/lib/libcpu/sparc/reg_win/window.s
@@ -0,0 +1,257 @@
+/*
+ * window.s
+ *
+ * This file contains the register window management routines for the
+ * SPARC architecture. Trap handlers for the following capabilities
+ * are included in this file:
+ *
+ * + Window Overflow
+ * + Window Underflow
+ * + Flushing All Windows
+ *
+ * COPYRIGHT:
+ *
+ * This file includes the window overflow and underflow handlers from
+ * the file srt0.s provided with the binary distribution of the SPARC
+ * Instruction Simulator (SIS) found at
+ * ftp://ftp.estec.esa.nl/pub/ws/wsd/erc32.
+ *
+ * COPYRIGHT (c) 1995. European Space Agency.
+ *
+ * This terms of the RTEMS license apply to this file.
+ *
+ * $Id$
+ */
+
+#include <asm.h>
+
+ .seg "text"
+ /*
+ * Window overflow trap handler.
+ *
+ * On entry:
+ *
+ * l0 = psr (from trap table)
+ * l1 = pc
+ * l2 = npc
+ */
+
+ PUBLIC(window_overflow_trap_handler)
+
+SYM(window_overflow_trap_handler):
+
+ /*
+ * Calculate new WIM by "rotating" the valid bits in the WIM right
+ * by one position. The following shows how the bits move for a SPARC
+ * cpu implementation where SPARC_NUMBER_OF_REGISTER_WINDOWS is 8.
+ *
+ * OLD WIM = 76543210
+ * NEW WIM = 07654321
+ *
+ * NOTE: New WIM must be stored in a global register since the
+ * "save" instruction just prior to the load of the wim
+ * register will result in the local register set changing.
+ */
+
+ mov %wim, %l3 ! l3 = WIM
+ mov %g1, %l7 ! save g1
+ srl %l3, 1, %g1 ! g1 = WIM >> 1
+ sll %l3, SPARC_NUMBER_OF_REGISTER_WINDOWS-1 , %l4
+ ! l4 = WIM << (Number Windows - 1)
+ or %l4, %g1, %g1 ! g1 = (WIM >> 1) |
+ ! (WIM << (Number Windows - 1))
+
+ save ! Get into window to be saved.
+ mov %g1, %wim ! load new WIM
+ nop; nop; nop ! 3 slot delay
+ std %l0, [%sp + 0x00] ! save local register set
+ std %l2, [%sp + 0x08]
+ std %l4, [%sp + 0x10]
+ std %l6, [%sp + 0x18]
+ std %i0, [%sp + 0x20] ! save input register set
+ std %i2, [%sp + 0x28]
+ std %i4, [%sp + 0x30]
+ std %i6, [%sp + 0x38]
+ restore ! Go back to trap window.
+ mov %l7, %g1 ! restore g1
+ jmp %l1 ! Re-execute save.
+ rett %l2
+
+ /*
+ * Window underflow trap handler.
+ *
+ * On entry:
+ *
+ * l0 = psr (from trap table)
+ * l1 = pc
+ * l2 = npc
+ */
+
+ PUBLIC(window_underflow_trap_handler)
+
+SYM(window_underflow_trap_handler):
+
+ /*
+ * Calculate new WIM by "rotating" the valid bits in the WIM left
+ * by one position. The following shows how the bits move for a SPARC
+ * cpu implementation where SPARC_NUMBER_OF_REGISTER_WINDOWS is 8.
+ *
+ * OLD WIM = 76543210
+ * NEW WIM = 07654321
+ *
+ * NOTE: New WIM must be stored in a global register since the
+ * "save" instruction just prior to the load of the wim
+ * register will result in the local register set changing.
+ */
+
+ mov %wim, %l3 ! Calculate new WIM
+ sll %l3, 1, %l4 ! l4 = WIM << 1
+ srl %l3, SPARC_NUMBER_OF_REGISTER_WINDOWS-1, %l5
+ ! l5 = WIM >> (Number Windows-1)
+ or %l5, %l4, %l5 ! l5 = (WIM << 1) |
+ ! (WIM >> (Number Windows-1))
+ mov %l5, %wim ! load the new WIM
+ nop; nop; nop
+ restore ! Two restores to get into the
+ restore ! window to restore
+ ldd [%sp + 0x00], %l0 ! First the local register set
+ ldd [%sp + 0x08], %l2
+ ldd [%sp + 0x10], %l4
+ ldd [%sp + 0x18], %l6
+ ldd [%sp + 0x20], %i0 ! Then the input registers
+ ldd [%sp + 0x28], %i2
+ ldd [%sp + 0x30], %i4
+ ldd [%sp + 0x38], %i6
+ save ! Get back to the trap window.
+ save
+ jmp %l1 ! Re-execute restore.
+ rett %l2
+
+ /*
+ * Flush All Windows trap handler.
+ *
+ * Flush all windows with valid contents except the current one
+ * and the one we will be returning to.
+ *
+ * In examining the set register windows, one may logically divide
+ * the windows into sets (some of which may be empty) based on their
+ * current status:
+ *
+ * + current (i.e. in use),
+ * + used (i.e. a restore would not trap)
+ * + invalid (i.e. 1 in corresponding bit in WIM)
+ * + unused
+ *
+ * Either the used or unused set of windows may be empty.
+ *
+ * NOTE: We assume only one bit is set in the WIM at a time.
+ *
+ * Given a CWP of 5 and a WIM of 0x1, the registers are divided
+ * into sets as follows:
+ *
+ * + 0 - invalid
+ * + 1-4 - unused
+ * + 5 - current
+ * + 6-7 - used
+ *
+ * In this case, we only would save the used windows which we
+ * will not be returning to -- 6.
+ *
+ * Register Usage while saving the windows:
+ * g1 = current PSR
+ * g2 = current wim
+ * g3 = CWP
+ * g4 = wim scratch
+ * g5 = scratch
+ *
+ * On entry:
+ *
+ * l0 = psr (from trap table)
+ * l1 = pc
+ * l2 = npc
+ */
+
+ PUBLIC(window_flush_trap_handler)
+
+SYM(window_flush_trap_handler):
+ /*
+ * Save the global registers we will be using
+ */
+
+ mov %g1, %l3
+ mov %g2, %l4
+ mov %g3, %l5
+ mov %g4, %l6
+ mov %g5, %l7
+
+ mov %l0, %g1 ! g1 = psr
+ mov %wim, %g2 ! g2 = wim
+ and %l0, SPARC_PSR_CWP_MASK, %g3 ! g3 = CWP
+
+ add %g3, 1, %g5 ! g5 = CWP + 1
+ and %g5, SPARC_NUMBER_OF_REGISTER_WINDOWS - 1, %g5
+
+ mov 1, %g4
+ sll %g4, %g5, %g4 ! g4 = WIM mask for CWP+1 invalid
+
+ restore ! go back one register window
+
+save_frame_loop:
+ sll %g4, 1, %g5 ! rotate the "wim" left 1
+ srl %g4, SPARC_NUMBER_OF_REGISTER_WINDOWS - 1, %g4
+ or %g4, %g5, %g4 ! g4 = wim if we do one restore
+
+ /*
+ * If a restore would not underflow, then continue.
+ */
+
+ andcc %g4, %g2, %g0 ! Any windows to flush?
+ bnz done_flushing ! No, then continue
+ nop
+
+ restore ! back one window
+
+ /*
+ * Now save the window just as if we overflowed to it.
+ */
+
+ std %l0, [%sp + CPU_STACK_FRAME_L0_OFFSET]
+ std %l2, [%sp + CPU_STACK_FRAME_L2_OFFSET]
+ std %l4, [%sp + CPU_STACK_FRAME_L4_OFFSET]
+ std %l6, [%sp + CPU_STACK_FRAME_L6_OFFSET]
+
+ std %i0, [%sp + CPU_STACK_FRAME_I0_OFFSET]
+ std %i2, [%sp + CPU_STACK_FRAME_I2_OFFSET]
+ std %i4, [%sp + CPU_STACK_FRAME_I4_OFFSET]
+ std %i6, [%sp + CPU_STACK_FRAME_I6_FP_OFFSET]
+
+ ba save_frame_loop
+ nop
+
+done_flushing:
+
+ add %g3, 2, %g3 ! calculate desired WIM
+ and %g3, SPARC_NUMBER_OF_REGISTER_WINDOWS - 1, %g3
+ mov 1, %g4
+ sll %g4, %g3, %g4 ! g4 = new WIM
+ mov %g4, %wim
+
+ mov %g1, %psr ! restore PSR
+ nop
+ nop
+ nop
+
+ /*
+ * Restore the global registers we used
+ */
+
+ mov %l3, %g1
+ mov %l4, %g2
+ mov %l5, %g3
+ mov %l6, %g4
+ mov %l7, %g5
+
+ jmpl %l2, %g0
+ rett %l2 + 4
+
+/* end of file */
diff --git a/c/src/tests/sptests/spsize/size.c b/c/src/tests/sptests/spsize/size.c
index 91ccbfb1a3..4fb949f14f 100644
--- a/c/src/tests/sptests/spsize/size.c
+++ b/c/src/tests/sptests/spsize/size.c
@@ -354,6 +354,8 @@ uninitialized =
uninitialized = 0;
+#ifndef unix /* make sure this is not a native compile */
+
#ifdef i386
/* cpu.h */
@@ -424,6 +426,7 @@ uninitialized += (sizeof _CPU_Interrupt_stack_low) +
(sizeof _CPU_IRQ_info);
#endif
+#endif /* !unix */
initialized +=
/*copyrt.h*/ (strlen(_Copyright_Notice)+1) +
@@ -437,11 +440,13 @@ initialized +=
(sizeof _TOD_Days_to_date) +
(sizeof _TOD_Days_since_last_leap_year);
+#ifndef unix /* make sure this is not native */
#ifdef sparc
initialized += (sizeof _CPU_Trap_slot_template);
#endif
+#endif /* !unix */
puts( "" );
diff --git a/cpukit/rtems/src/msg.c b/cpukit/rtems/src/msg.c
index 899254d11d..7d7c6e3025 100644
--- a/cpukit/rtems/src/msg.c
+++ b/cpukit/rtems/src/msg.c
@@ -109,7 +109,7 @@ Message_queue_Control *_Message_queue_Allocate (
*
* Output parameters:
* id - queue id
- * RTEMS_SUCCESSFUL - if successful
+ * RTEMS_SUCCESSFUL - if successful
* error code - if unsuccessful
*/
diff --git a/cpukit/rtems/src/region.c b/cpukit/rtems/src/region.c
index ecfaf32382..d0720f5040 100644
--- a/cpukit/rtems/src/region.c
+++ b/cpukit/rtems/src/region.c
@@ -314,6 +314,8 @@ rtems_status_code rtems_region_get_segment(
Thread_Control *executing;
void *the_segment;
+ *segment = NULL;
+
if ( size == 0 )
return RTEMS_INVALID_SIZE;
diff --git a/cpukit/sapi/include/rtems/io.h b/cpukit/sapi/include/rtems/io.h
index 6f3afba53e..592fbe08ed 100644
--- a/cpukit/sapi/include/rtems/io.h
+++ b/cpukit/sapi/include/rtems/io.h
@@ -115,9 +115,9 @@ STATIC INLINE void _IO_Manager_initialization(
*/
rtems_status_code rtems_io_register_name(
- char *device_name,
- rtems_device_major_number major,
- rtems_device_minor_number minor
+ char *device_name,
+ rtems_device_major_number major,
+ rtems_device_minor_number minor
);
@@ -130,8 +130,8 @@ rtems_status_code rtems_io_register_name(
*/
rtems_status_code rtems_io_lookup_name(
- const char *pathname,
- rtems_driver_name_t **rnp
+ const char *name,
+ rtems_driver_name_t **device_info
);
@@ -147,7 +147,7 @@ rtems_status_code rtems_io_lookup_name(
rtems_status_code rtems_io_initialize(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
);
/*
@@ -162,7 +162,7 @@ rtems_status_code rtems_io_initialize(
rtems_status_code rtems_io_open(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
);
/*
@@ -177,7 +177,7 @@ rtems_status_code rtems_io_open(
rtems_status_code rtems_io_close(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
);
/*
@@ -192,7 +192,7 @@ rtems_status_code rtems_io_close(
rtems_status_code rtems_io_read(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
);
/*
@@ -207,7 +207,7 @@ rtems_status_code rtems_io_read(
rtems_status_code rtems_io_write(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
);
/*
@@ -222,7 +222,7 @@ rtems_status_code rtems_io_write(
rtems_status_code rtems_io_control(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
);
/*
diff --git a/cpukit/sapi/src/io.c b/cpukit/sapi/src/io.c
index 473fe9a444..49c89b22dc 100644
--- a/cpukit/sapi/src/io.c
+++ b/cpukit/sapi/src/io.c
@@ -46,8 +46,13 @@ void _IO_Initialize_all_drivers( void )
* Associate a name with a driver
*
* Input Paramters:
+ * device_name - pointer to name string to associate with device
+ * major - device major number to receive name
+ * minor - device minor number to receive name
*
* Output Parameters:
+ * RTEMS_SUCCESSFUL - if successful
+ * error code - if unsuccessful
*/
rtems_status_code rtems_io_register_name(
@@ -90,13 +95,17 @@ rtems_status_code rtems_io_register_name(
* Find what driver "owns" this name
*
* Input Paramters:
+ * name - name to lookup the associated device
*
* Output Parameters:
+ * device_info - device associate with name
+ * RTEMS_SUCCESSFUL - if successful
+ * error code - if unsuccessful
*/
rtems_status_code rtems_io_lookup_name(
- const char *pathname,
- rtems_driver_name_t **rnp
+ const char *name,
+ rtems_driver_name_t **device_info
)
{
rtems_driver_name_t *np;
@@ -106,13 +115,13 @@ rtems_status_code rtems_io_lookup_name(
index < _IO_Number_of_devices ;
index++, np++ )
if (np->device_name)
- if (strncmp(np->device_name, pathname, np->device_name_length) == 0)
+ if (strncmp(np->device_name, name, np->device_name_length) == 0)
{
- *rnp = np;
+ *device_info = np;
return RTEMS_SUCCESSFUL;
}
- *rnp = 0;
+ *device_info = 0;
return RTEMS_UNSATISFIED;
}
@@ -165,7 +174,7 @@ rtems_status_code rtems_io_initialize(
rtems_status_code rtems_io_open(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
)
{
rtems_device_driver_entry callout;
@@ -195,7 +204,7 @@ rtems_status_code rtems_io_open(
rtems_status_code rtems_io_close(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
)
{
rtems_device_driver_entry callout;
@@ -225,7 +234,7 @@ rtems_status_code rtems_io_close(
rtems_status_code rtems_io_read(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
)
{
rtems_device_driver_entry callout;
@@ -255,7 +264,7 @@ rtems_status_code rtems_io_read(
rtems_status_code rtems_io_write(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
)
{
rtems_device_driver_entry callout;
@@ -285,7 +294,7 @@ rtems_status_code rtems_io_write(
rtems_status_code rtems_io_control(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *argument
+ void *argument
)
{
rtems_device_driver_entry callout;
diff --git a/cpukit/score/cpu/sparc/README b/cpukit/score/cpu/sparc/README
index 0c481d67c1..c4c2200075 100644
--- a/cpukit/score/cpu/sparc/README
+++ b/cpukit/score/cpu/sparc/README
@@ -108,11 +108,3 @@ thus would be unable to restore the FP context of the incoming task.
2. On a deferred FP context switch. In this case, the system might switch
from FP Task A to non-FP Task B and then to FP Task C. In this scenario,
the floating point state must technically be saved by a non-FP task.
-
-
-
-
-
-
-
-
diff --git a/cpukit/score/cpu/sparc/cpu.c b/cpukit/score/cpu/sparc/cpu.c
index 23d998cab5..9f242d4a8f 100644
--- a/cpukit/score/cpu/sparc/cpu.c
+++ b/cpukit/score/cpu/sparc/cpu.c
@@ -1,6 +1,21 @@
/*
* SPARC Dependent Source
*
+ * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+ * On-Line Applications Research Corporation (OAR).
+ * All rights assigned to U.S. Government, 1994.
+ *
+ * This material may be reproduced by or for the U.S. Government pursuant
+ * to the copyright license under the clause at DFARS 252.227-7013. This
+ * notice must appear in all copies of this file and its derivatives.
+ *
+ * Ported to ERC32 implementation of the SPARC by On-Line Applications
+ * Research Corporation (OAR) under contract to the European Space
+ * Agency (ESA).
+ *
+ * ERC32 modifications of respective RTEMS file: COPYRIGHT (c) 1995.
+ * European Space Agency.
+ *
* $Id$
*/
diff --git a/testsuites/sptests/spsize/size.c b/testsuites/sptests/spsize/size.c
index 91ccbfb1a3..4fb949f14f 100644
--- a/testsuites/sptests/spsize/size.c
+++ b/testsuites/sptests/spsize/size.c
@@ -354,6 +354,8 @@ uninitialized =
uninitialized = 0;
+#ifndef unix /* make sure this is not a native compile */
+
#ifdef i386
/* cpu.h */
@@ -424,6 +426,7 @@ uninitialized += (sizeof _CPU_Interrupt_stack_low) +
(sizeof _CPU_IRQ_info);
#endif
+#endif /* !unix */
initialized +=
/*copyrt.h*/ (strlen(_Copyright_Notice)+1) +
@@ -437,11 +440,13 @@ initialized +=
(sizeof _TOD_Days_to_date) +
(sizeof _TOD_Days_since_last_leap_year);
+#ifndef unix /* make sure this is not native */
#ifdef sparc
initialized += (sizeof _CPU_Trap_slot_template);
#endif
+#endif /* !unix */
puts( "" );