forked from Imagelibrary/rtems
2009-10-09 Sebastian Huber <Sebastian.Huber@embedded-brains.de>
* sp40/init.c, sp40/sp40.doc, sp40/sp40.scn: New test cases. * spintrcritical09/init.c, spintrcritical10/init.c, spintrcritical11/init.c: Fixed potentially infinite loops.
This commit is contained in:
@@ -1,7 +1,11 @@
|
||||
2009-10-09 Sebastian Huber <Sebastian.Huber@embedded-brains.de>
|
||||
|
||||
* sp40/init.c, sp40/sp40.doc, sp40/sp40.scn: New test cases.
|
||||
|
||||
2009-10-04 Sebastian Huber <Sebastian.Huber@embedded-brains.de>
|
||||
|
||||
* sptests/spintrcritical09/init.c, sptests/spintrcritical10/init.c,
|
||||
sptests/spintrcritical11/init.c: Fixed potentially infinite loops.
|
||||
* spintrcritical09/init.c, spintrcritical10/init.c,
|
||||
spintrcritical11/init.c: Fixed potentially infinite loops.
|
||||
* sp20/system.h: Increased micro seconds per tick in order to be more
|
||||
independent of the console output speed.
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
* COPYRIGHT (c) 1989-2007.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* Copyright (c) 2009 embedded brains GmbH.
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.rtems.com/license/LICENSE.
|
||||
@@ -11,24 +13,42 @@
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__
|
||||
|
||||
#include <tmacros.h>
|
||||
|
||||
rtems_device_driver test_open(
|
||||
static rtems_device_driver test_open(
|
||||
rtems_device_major_number minor,
|
||||
rtems_device_minor_number major,
|
||||
void *ignored
|
||||
)
|
||||
{
|
||||
return RTEMS_IO_ERROR;
|
||||
}
|
||||
|
||||
rtems_driver_address_table test_driver = {
|
||||
NULL, /* initialization procedure */
|
||||
test_open, /* open request procedure */
|
||||
NULL, /* close request procedure */
|
||||
NULL, /* read request procedure */
|
||||
NULL, /* write request procedure */
|
||||
NULL, /* special functions procedure */
|
||||
static rtems_driver_address_table test_driver = {
|
||||
.initialization_entry = NULL,
|
||||
.open_entry = test_open,
|
||||
.close_entry = NULL,
|
||||
.read_entry = NULL,
|
||||
.write_entry = NULL,
|
||||
.control_entry = NULL
|
||||
};
|
||||
|
||||
#define test_interrupt_context_enter( level ) \
|
||||
do { \
|
||||
_Thread_Disable_dispatch(); \
|
||||
rtems_interrupt_disable( level ); \
|
||||
++_ISR_Nest_level; \
|
||||
} while (0)
|
||||
|
||||
#define test_interrupt_context_leave( level ) \
|
||||
do { \
|
||||
--_ISR_Nest_level; \
|
||||
rtems_interrupt_enable( level ); \
|
||||
_Thread_Enable_dispatch(); \
|
||||
} while (0)
|
||||
|
||||
rtems_task Init(
|
||||
rtems_task_argument argument
|
||||
)
|
||||
@@ -36,6 +56,8 @@ rtems_task Init(
|
||||
rtems_status_code sc;
|
||||
rtems_device_major_number registered;
|
||||
rtems_device_major_number registered_not;
|
||||
rtems_device_major_number invalid_major = _IO_Number_of_drivers + 1;
|
||||
rtems_interrupt_level level;
|
||||
|
||||
puts( "\n\n*** TEST 40 ***" );
|
||||
|
||||
@@ -58,24 +80,87 @@ rtems_task Init(
|
||||
);
|
||||
|
||||
puts( "Init - rtems_io_register_driver - used slot" );
|
||||
sc = rtems_io_register_driver( registered, &test_driver, ®istered );
|
||||
sc = rtems_io_register_driver( registered, &test_driver, ®istered_not );
|
||||
fatal_directive_status(
|
||||
sc,
|
||||
RTEMS_RESOURCE_IN_USE,
|
||||
"rtems_io_register_driver slot in use"
|
||||
);
|
||||
|
||||
puts( "Init - rtems_io_unregister_driver - used slot" );
|
||||
sc = rtems_io_unregister_driver( registered );
|
||||
directive_failed( sc, "rtems_io_unregister_driver" );
|
||||
|
||||
puts( "Init - rtems_io_register_driver - free slot" );
|
||||
sc = rtems_io_register_driver( registered, &test_driver, ®istered );
|
||||
directive_failed( sc, "rtems_io_register_driver" );
|
||||
|
||||
puts( "Init - rtems_io_register_driver - called from interrupt context" );
|
||||
test_interrupt_context_enter( level );
|
||||
sc = rtems_io_register_driver( 0, NULL, NULL );
|
||||
test_interrupt_context_leave( level );
|
||||
fatal_directive_status(
|
||||
sc,
|
||||
RTEMS_CALLED_FROM_ISR,
|
||||
"rtems_io_register_driver"
|
||||
);
|
||||
|
||||
puts( "Init - rtems_io_register_driver - invalid registered major pointer" );
|
||||
sc = rtems_io_register_driver( 0, NULL, NULL );
|
||||
fatal_directive_status(
|
||||
sc,
|
||||
RTEMS_INVALID_ADDRESS,
|
||||
"rtems_io_register_driver"
|
||||
);
|
||||
|
||||
puts( "Init - rtems_io_register_driver - invalid driver table pointer" );
|
||||
sc = rtems_io_register_driver( 0, NULL, ®istered );
|
||||
fatal_directive_status(
|
||||
sc,
|
||||
RTEMS_INVALID_ADDRESS,
|
||||
"rtems_io_register_driver"
|
||||
);
|
||||
|
||||
puts( "Init - rtems_io_register_driver - invalid empty driver table" );
|
||||
test_driver.open_entry = NULL;
|
||||
sc = rtems_io_register_driver( 0, &test_driver, ®istered );
|
||||
test_driver.open_entry = test_open;
|
||||
fatal_directive_status(
|
||||
sc,
|
||||
RTEMS_INVALID_ADDRESS,
|
||||
"rtems_io_register_driver"
|
||||
);
|
||||
|
||||
puts( "Init - rtems_io_register_driver - invalid major" );
|
||||
sc = rtems_io_register_driver( invalid_major, &test_driver, ®istered );
|
||||
fatal_directive_status(
|
||||
sc,
|
||||
RTEMS_INVALID_NUMBER,
|
||||
"rtems_io_register_driver"
|
||||
);
|
||||
|
||||
puts( "Init - rtems_io_unregister_driver - called from interrupt context" );
|
||||
test_interrupt_context_enter( level );
|
||||
sc = rtems_io_unregister_driver( 0 );
|
||||
test_interrupt_context_leave( level );
|
||||
fatal_directive_status(
|
||||
sc,
|
||||
RTEMS_CALLED_FROM_ISR,
|
||||
"rtems_io_unregister_driver"
|
||||
);
|
||||
|
||||
puts( "Init - rtems_io_unregister_driver - invalid major number" );
|
||||
sc = rtems_io_unregister_driver( invalid_major );
|
||||
fatal_directive_status(
|
||||
sc,
|
||||
RTEMS_UNSATISFIED,
|
||||
"rtems_io_unregister_driver"
|
||||
);
|
||||
|
||||
puts( "*** END OF TEST 40 ***" );
|
||||
rtems_test_exit( 0 );
|
||||
}
|
||||
|
||||
|
||||
/* functions */
|
||||
|
||||
rtems_task Init(
|
||||
rtems_task_argument argument
|
||||
);
|
||||
|
||||
/* configuration information */
|
||||
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
|
||||
|
||||
@@ -16,6 +16,7 @@ test set name: sp40
|
||||
directives:
|
||||
|
||||
rtems_io_register_driver
|
||||
rtems_io_unregister_driver
|
||||
|
||||
concepts:
|
||||
|
||||
@@ -23,3 +24,5 @@ concepts:
|
||||
when inserting into a slot that is already in use.
|
||||
|
||||
+ Focus on case where initialization entry is NULL and open entry is NOT NULL.
|
||||
|
||||
+ Provoke error conditions.
|
||||
|
||||
@@ -2,6 +2,15 @@
|
||||
Init - rtems_io_register_driver - init == NULL, open != NULL OK
|
||||
Init - Major slot returned = 2
|
||||
Init - rtems_io_register_driver - init == NULL, open != NULL OK
|
||||
Init - Major slot returned = 0
|
||||
Init - Major slot returned = 3
|
||||
Init - rtems_io_register_driver - used slot
|
||||
Init - rtems_io_unregister_driver - used slot
|
||||
Init - rtems_io_register_driver - free slot
|
||||
Init - rtems_io_register_driver - called from interrupt context
|
||||
Init - rtems_io_register_driver - invalid registered major pointer
|
||||
Init - rtems_io_register_driver - invalid driver table pointer
|
||||
Init - rtems_io_register_driver - invalid empty driver table
|
||||
Init - rtems_io_register_driver - invalid major
|
||||
Init - rtems_io_unregister_driver - called from interrupt context
|
||||
Init - rtems_io_unregister_driver - invalid major number
|
||||
*** END OF TEST 40 ***
|
||||
|
||||
Reference in New Issue
Block a user