diff options
Diffstat (limited to 'testsuites/sptests/sp21/task1.c')
-rw-r--r-- | testsuites/sptests/sp21/task1.c | 89 |
1 files changed, 88 insertions, 1 deletions
diff --git a/testsuites/sptests/sp21/task1.c b/testsuites/sptests/sp21/task1.c index addb5e63bc..f2b7bf6f45 100644 --- a/testsuites/sptests/sp21/task1.c +++ b/testsuites/sptests/sp21/task1.c @@ -24,11 +24,19 @@ #define INVALID_DRIVER_MAJOR (Configuration.number_of_device_drivers + 1) /* #define INVALID_DRIVER_MAJOR 0xffffffff */ +/* driver entries to use with io_register */ +rtems_driver_address_table GoodDriver = DEVNULL_DRIVER_TABLE_ENTRY; +rtems_driver_address_table BadDriver_Nothing = { + NULL, NULL, NULL, NULL, NULL, NULL +}; + rtems_task Task_1( rtems_task_argument argument ) { - rtems_status_code status; + rtems_status_code status; + rtems_device_major_number registered; + rtems_device_major_number registered_worked; puts( "----- TESTING THE NULL DRIVER CHECKS -----" ); @@ -82,6 +90,10 @@ rtems_task Task_1( directive_failed( status, "rtems_io_control" ); puts( "TA1 - rtems_io_control - STUB DRIVER RTEMS_SUCCESSFUL" ); + + /* + * Invalid major number + */ puts( "----- RETURNING INVALID MAJOR NUMBER -----" ); status = rtems_io_initialize( INVALID_DRIVER_MAJOR, 0, NULL ); @@ -100,6 +112,81 @@ rtems_task Task_1( ); puts( "TA1 - rtems_io_open - RTEMS_INVALID_NUMBER" ); + /* + * Exercise the io register driver directive + */ + puts( "----- EXERCISE DRIVER REGISTER -----" ); + + status = rtems_io_register_driver( 0, &GoodDriver, NULL ); + fatal_directive_status( + status, + RTEMS_INVALID_ADDRESS, + "rtems_io_register_driver" + ); + puts( + "TA1 - rtems_io_register_driver - RTEMS_INVALID_ADDRESS - NULL registered" + ); + + status = rtems_io_register_driver( 0, NULL, ®istered ); + fatal_directive_status( + status, + RTEMS_INVALID_ADDRESS, + "rtems_io_register_driver" + ); + puts( + "TA1 - rtems_io_register_driver - RTEMS_INVALID_ADDRESS - NULL device" + ); + + status = rtems_io_register_driver( 0, &BadDriver_Nothing, ®istered ); + fatal_directive_status( + status, + RTEMS_INVALID_ADDRESS, + "rtems_io_register_driver" + ); + puts( + "TA1 - rtems_io_register_driver - RTEMS_INVALID_ADDRESS - no callouts" + ); + + status = rtems_io_register_driver( + INVALID_DRIVER_MAJOR, &GoodDriver, ®istered ); + fatal_directive_status( + status, + RTEMS_INVALID_NUMBER, + "rtems_io_register_driver" + ); + puts( "TA1 - rtems_io_register_driver - RTEMS_INVALID_NUMBER - bad major" ); + + /* this has to succeed to overwrite NULL driver entry required above. */ + status = rtems_io_register_driver( 0, &GoodDriver, ®istered_worked ); + directive_failed( status, "rtems_io_register_driver" ); + puts( "TA1 - rtems_io_register_driver - RTEMS_SUCCESSFUL - overwrite NULL" ); + + status = rtems_io_register_driver( 0, &GoodDriver, ®istered ); + if ( status == RTEMS_SUCCESSFUL ) + printf( "registered major = %d\n", registered ); + fatal_directive_status( + status, + RTEMS_TOO_MANY, + "rtems_io_register_driver" + ); + puts( "TA1 - rtems_io_register_driver - RTEMS_TOO_MANY - no slots" ); + + /* there shuld be a driver at major 1 -- clock, console, or stub */ + status = rtems_io_register_driver( 1, &GoodDriver, ®istered ); + fatal_directive_status( + status, + RTEMS_RESOURCE_IN_USE, + "rtems_io_register_driver" + ); + puts( + "TA1 - rtems_io_register_driver - RTEMS_RESOURCE_IN_USE - major in use" + ); + + /* this should unregister the device driver we registered above */ + status = rtems_io_unregister_driver( registered_worked ); + directive_failed( status, "rtems_io_unregister_driver" ); + puts( "TA1 - rtems_io_unregister_driver - RTEMS_SUCCESSFUL" ); + puts( "*** END OF TEST 21 ***" ); rtems_test_exit( 0 ); } |