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>
|
2009-10-04 Sebastian Huber <Sebastian.Huber@embedded-brains.de>
|
||||||
|
|
||||||
* sptests/spintrcritical09/init.c, sptests/spintrcritical10/init.c,
|
* spintrcritical09/init.c, spintrcritical10/init.c,
|
||||||
sptests/spintrcritical11/init.c: Fixed potentially infinite loops.
|
spintrcritical11/init.c: Fixed potentially infinite loops.
|
||||||
* sp20/system.h: Increased micro seconds per tick in order to be more
|
* sp20/system.h: Increased micro seconds per tick in order to be more
|
||||||
independent of the console output speed.
|
independent of the console output speed.
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
* COPYRIGHT (c) 1989-2007.
|
* COPYRIGHT (c) 1989-2007.
|
||||||
* On-Line Applications Research Corporation (OAR).
|
* On-Line Applications Research Corporation (OAR).
|
||||||
*
|
*
|
||||||
|
* Copyright (c) 2009 embedded brains GmbH.
|
||||||
|
*
|
||||||
* The license and distribution terms for this file may be
|
* The license and distribution terms for this file may be
|
||||||
* found in the file LICENSE in this distribution or at
|
* found in the file LICENSE in this distribution or at
|
||||||
* http://www.rtems.com/license/LICENSE.
|
* http://www.rtems.com/license/LICENSE.
|
||||||
@@ -11,24 +13,42 @@
|
|||||||
* $Id$
|
* $Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__
|
||||||
|
|
||||||
#include <tmacros.h>
|
#include <tmacros.h>
|
||||||
|
|
||||||
rtems_device_driver test_open(
|
static rtems_device_driver test_open(
|
||||||
rtems_device_major_number minor,
|
rtems_device_major_number minor,
|
||||||
rtems_device_minor_number major,
|
rtems_device_minor_number major,
|
||||||
void *ignored
|
void *ignored
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
return RTEMS_IO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
rtems_driver_address_table test_driver = {
|
static rtems_driver_address_table test_driver = {
|
||||||
NULL, /* initialization procedure */
|
.initialization_entry = NULL,
|
||||||
test_open, /* open request procedure */
|
.open_entry = test_open,
|
||||||
NULL, /* close request procedure */
|
.close_entry = NULL,
|
||||||
NULL, /* read request procedure */
|
.read_entry = NULL,
|
||||||
NULL, /* write request procedure */
|
.write_entry = NULL,
|
||||||
NULL, /* special functions procedure */
|
.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 Init(
|
||||||
rtems_task_argument argument
|
rtems_task_argument argument
|
||||||
)
|
)
|
||||||
@@ -36,6 +56,8 @@ rtems_task Init(
|
|||||||
rtems_status_code sc;
|
rtems_status_code sc;
|
||||||
rtems_device_major_number registered;
|
rtems_device_major_number registered;
|
||||||
rtems_device_major_number registered_not;
|
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 ***" );
|
puts( "\n\n*** TEST 40 ***" );
|
||||||
|
|
||||||
@@ -58,24 +80,87 @@ rtems_task Init(
|
|||||||
);
|
);
|
||||||
|
|
||||||
puts( "Init - rtems_io_register_driver - used slot" );
|
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(
|
fatal_directive_status(
|
||||||
sc,
|
sc,
|
||||||
RTEMS_RESOURCE_IN_USE,
|
RTEMS_RESOURCE_IN_USE,
|
||||||
"rtems_io_register_driver slot 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 ***" );
|
puts( "*** END OF TEST 40 ***" );
|
||||||
rtems_test_exit( 0 );
|
rtems_test_exit( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* functions */
|
|
||||||
|
|
||||||
rtems_task Init(
|
|
||||||
rtems_task_argument argument
|
|
||||||
);
|
|
||||||
|
|
||||||
/* configuration information */
|
/* configuration information */
|
||||||
|
|
||||||
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
|
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ test set name: sp40
|
|||||||
directives:
|
directives:
|
||||||
|
|
||||||
rtems_io_register_driver
|
rtems_io_register_driver
|
||||||
|
rtems_io_unregister_driver
|
||||||
|
|
||||||
concepts:
|
concepts:
|
||||||
|
|
||||||
@@ -23,3 +24,5 @@ concepts:
|
|||||||
when inserting into a slot that is already in use.
|
when inserting into a slot that is already in use.
|
||||||
|
|
||||||
+ Focus on case where initialization entry is NULL and open entry is NOT NULL.
|
+ 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 - rtems_io_register_driver - init == NULL, open != NULL OK
|
||||||
Init - Major slot returned = 2
|
Init - Major slot returned = 2
|
||||||
Init - rtems_io_register_driver - init == NULL, open != NULL OK
|
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_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 ***
|
*** END OF TEST 40 ***
|
||||||
|
|||||||
Reference in New Issue
Block a user