source: rtems/testsuites/sptests/sp40/init.c @ 6c0301d

4.115
Last change on this file since 6c0301d was 6c0301d, checked in by Sebastian Huber <sebastian.huber@…>, on 03/25/14 at 07:06:21

tests/sptests: Use <rtems/test.h>

  • Property mode set to 100644
File size: 5.4 KB
RevLine 
[c8f8ffd]1/*
2 *  IO Manager Dynamic Registration
3 *
[3c8eda7]4 *  COPYRIGHT (c) 1989-2012.
[c8f8ffd]5 *  On-Line Applications Research Corporation (OAR).
6 *
[bbf6253]7 *  Copyright (c) 2009 embedded brains GmbH.
8 *
[c8f8ffd]9 *  The license and distribution terms for this file may be
10 *  found in the file LICENSE in this distribution or at
[c499856]11 *  http://www.rtems.org/license/LICENSE.
[c8f8ffd]12 */
13
[7d3f9c6]14#ifdef HAVE_CONFIG_H
15#include "config.h"
16#endif
17
[96b8762]18#include <tmacros.h>
19
[6c0301d]20const char rtems_test_name[] = "SP 40";
21
[3c8eda7]22/* forward declarations to avoid warnings */
23rtems_task Init(rtems_task_argument argument);
24
[bbf6253]25static rtems_device_driver test_open(
[96b8762]26     rtems_device_major_number  minor,
27     rtems_device_minor_number  major,
28     void                      *ignored
29)
30{
[bbf6253]31  return RTEMS_IO_ERROR;
[96b8762]32}
[c8f8ffd]33
[bbf6253]34static rtems_driver_address_table test_driver = {
35  .initialization_entry = NULL,
36  .open_entry = test_open,
37  .close_entry = NULL,
38  .read_entry = NULL,
39  .write_entry = NULL,
40  .control_entry = NULL
[96b8762]41};
[bbf6253]42
43#define test_interrupt_context_enter( level ) \
44  do { \
45    _Thread_Disable_dispatch(); \
46    rtems_interrupt_disable( level ); \
47    ++_ISR_Nest_level; \
48  } while (0)
49
50#define test_interrupt_context_leave( level ) \
51  do { \
52    --_ISR_Nest_level; \
53    rtems_interrupt_enable( level ); \
54    _Thread_Enable_dispatch(); \
55  } while (0)
56
[c8f8ffd]57rtems_task Init(
58  rtems_task_argument argument
59)
60{
[96b8762]61  rtems_status_code         sc;
62  rtems_device_major_number registered;
[7467542]63  rtems_device_major_number registered_not;
[bbf6253]64  rtems_device_major_number invalid_major = _IO_Number_of_drivers + 1;
65  rtems_interrupt_level level;
[1c0749b9]66  bool do_interrupt_context_test = true;
[c8f8ffd]67
[6c0301d]68  TEST_BEGIN();
[403c507]69
[1c0749b9]70  /* Ensure that this test works as expected */
71  test_interrupt_context_enter( level );
72  do_interrupt_context_test = rtems_interrupt_is_in_progress();
73  test_interrupt_context_leave( level );
74
[c8f8ffd]75  /*
[96b8762]76   *  Register a driver with init == NULL and open != NULL
[c8f8ffd]77   */
78
[96b8762]79  puts( "Init - rtems_io_register_driver - init == NULL, open != NULL OK" );
80  sc = rtems_io_register_driver( 0, &test_driver, &registered );
81  printf( "Init - Major slot returned = %d\n", (int) registered );
82  directive_failed( sc, "rtems_io_register_driver" );
[c8f8ffd]83
[7467542]84  puts( "Init - rtems_io_register_driver - init == NULL, open != NULL OK" );
85  sc = rtems_io_register_driver( 0, &test_driver, &registered_not );
86  printf( "Init - Major slot returned = %d\n", (int) registered_not );
87  fatal_directive_status(
88    sc,
89    RTEMS_TOO_MANY,
90    "rtems_io_register_driver too many"
91  );
92
[96b8762]93  puts( "Init - rtems_io_register_driver - used slot" );
[bbf6253]94  sc = rtems_io_register_driver( registered, &test_driver, &registered_not );
[96b8762]95  fatal_directive_status(
96    sc,
97    RTEMS_RESOURCE_IN_USE,
98    "rtems_io_register_driver slot in use"
99  );
[c8f8ffd]100
[bbf6253]101  puts( "Init - rtems_io_unregister_driver - used slot" );
102  sc = rtems_io_unregister_driver( registered );
103  directive_failed( sc, "rtems_io_unregister_driver" );
104
105  puts( "Init - rtems_io_register_driver - free slot" );
106  sc = rtems_io_register_driver( registered, &test_driver, &registered );
107  directive_failed( sc, "rtems_io_register_driver" );
[96b8762]108
[bbf6253]109  puts( "Init - rtems_io_register_driver - called from interrupt context" );
[1c0749b9]110  if ( do_interrupt_context_test ) {
111    test_interrupt_context_enter( level );
112    sc = rtems_io_register_driver( 0, NULL, NULL );
113    test_interrupt_context_leave( level );
114    fatal_directive_status(
115      sc,
116      RTEMS_CALLED_FROM_ISR,
117      "rtems_io_register_driver"
118    );
119  }
[96b8762]120
[bbf6253]121  puts( "Init - rtems_io_register_driver - invalid registered major pointer" );
122  sc = rtems_io_register_driver( 0, NULL, NULL );
123  fatal_directive_status(
124    sc,
125    RTEMS_INVALID_ADDRESS,
126    "rtems_io_register_driver"
127  );
[96b8762]128
[bbf6253]129  puts( "Init - rtems_io_register_driver - invalid driver table pointer" );
130  sc = rtems_io_register_driver( 0, NULL, &registered );
131  fatal_directive_status(
132    sc,
133    RTEMS_INVALID_ADDRESS,
134    "rtems_io_register_driver"
135  );
136
137  puts( "Init - rtems_io_register_driver - invalid empty driver table" );
138  test_driver.open_entry = NULL;
139  sc = rtems_io_register_driver( 0, &test_driver, &registered );
140  test_driver.open_entry = test_open;
141  fatal_directive_status(
142    sc,
143    RTEMS_INVALID_ADDRESS,
144    "rtems_io_register_driver"
145  );
146
147  puts( "Init - rtems_io_register_driver - invalid major" );
148  sc = rtems_io_register_driver( invalid_major, &test_driver, &registered );
149  fatal_directive_status(
150    sc,
151    RTEMS_INVALID_NUMBER,
152    "rtems_io_register_driver"
153  );
154
155  puts( "Init - rtems_io_unregister_driver - called from interrupt context" );
[1c0749b9]156  if ( do_interrupt_context_test ) {
157    test_interrupt_context_enter( level );
158    sc = rtems_io_unregister_driver( 0 );
159    test_interrupt_context_leave( level );
160    fatal_directive_status(
161      sc,
162      RTEMS_CALLED_FROM_ISR,
163      "rtems_io_unregister_driver"
164    );
165  }
[bbf6253]166
167  puts( "Init - rtems_io_unregister_driver - invalid major number" );
168  sc = rtems_io_unregister_driver( invalid_major );
169  fatal_directive_status(
170    sc,
171    RTEMS_UNSATISFIED,
172    "rtems_io_unregister_driver"
173  );
174
[6c0301d]175  TEST_END();
[bbf6253]176  rtems_test_exit( 0 );
177}
[96b8762]178
179/* configuration information */
180
181#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
182#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
183
184/* more one more driver slot than are statically configured */
[7467542]185#define CONFIGURE_MAXIMUM_DRIVERS 3
[96b8762]186
187#define CONFIGURE_MAXIMUM_TASKS  1
[6c0301d]188#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
189
[96b8762]190#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
191
192#define CONFIGURE_INIT
193#include <rtems/confdefs.h>
194
195/* end of include file */
Note: See TracBrowser for help on using the repository browser.