source: rtems/testsuites/libtests/block07/init.c @ 4c86e3d

4.115
Last change on this file since 4c86e3d was 4c86e3d, checked in by Joel Sherrill <joel.sherrill@…>, on 05/11/12 at 17:20:47

libtmtests - Eliminate missing prototype warnings

  • Property mode set to 100644
File size: 5.5 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup test_bdbuf
5 *
6 * @brief Bdbuf test for block size change event.
7 */
8
9/*
10 * Copyright (c) 2009
11 * embedded brains GmbH
12 * Obere Lagerstr. 30
13 * D-82178 Puchheim
14 * Germany
15 * <rtems@embedded-brains.de>
16 *
17 * The license and distribution terms for this file may be
18 * found in the file LICENSE in this distribution or at
19 * http://www.rtems.com/license/LICENSE.
20 */
21
22#ifdef HAVE_CONFIG_H
23#include "config.h"
24#endif
25
26#include <sys/ioctl.h>
27#include <sys/types.h>
28#include <sys/stat.h>
29#include <fcntl.h>
30#include "tmacros.h"
31
32#include <rtems.h>
33#include <rtems/ramdisk.h>
34#include <rtems/bdbuf.h>
35#include <rtems/diskdevs.h>
36
37/* forward declarations to avoid warnings */
38static rtems_task Init(rtems_task_argument argument);
39
40#define ASSERT_SC(sc) rtems_test_assert((sc) == RTEMS_SUCCESSFUL)
41
42#define PRIORITY_INIT 1
43
44#define PRIORITY_HIGH 2
45
46#define PRIORITY_MID 3
47
48#define PRIORITY_LOW 4
49
50#define PRIORITY_SWAPOUT 5
51
52#define PRIORITY_IDLE 6
53
54#define BLOCK_SIZE_A 1
55
56#define BLOCK_SIZE_B 2
57
58#define BLOCK_COUNT 2
59
60static rtems_disk_device *dd;
61
62static rtems_id task_id_low;
63
64static rtems_id task_id_mid;
65
66static rtems_id task_id_high;
67
68static void change_block_size(void)
69{
70  int rv = 0;
71  int fd = open("/dev/rda", O_RDWR);
72
73  rtems_test_assert(fd >= 0);
74
75  rv = rtems_disk_fd_set_block_size(fd, BLOCK_SIZE_B);
76  rtems_test_assert(rv == 0);
77
78  rv = close(fd);
79  rtems_test_assert(rv == 0);
80}
81
82static void task_low(rtems_task_argument arg)
83{
84  rtems_status_code sc = RTEMS_SUCCESSFUL;
85  rtems_bdbuf_buffer *bd = NULL;
86
87  printk("L: try access: 0\n");
88
89  sc = rtems_bdbuf_get(dd, 0, &bd);
90  ASSERT_SC(sc);
91
92  printk("L: access: 0\n");
93
94  rtems_test_assert(bd->group->bds_per_group == 2);
95
96  printk("L: release: 0\n");
97
98  sc = rtems_bdbuf_release(bd);
99  ASSERT_SC(sc);
100
101  printk("L: release done: 0\n");
102
103  printk("*** END OF TEST BLOCK 7 ***\n");
104
105  exit(0);
106}
107
108static void task_mid(rtems_task_argument arg)
109{
110  rtems_status_code sc = RTEMS_SUCCESSFUL;
111  rtems_bdbuf_buffer *bd = NULL;
112
113  printk("M: try access: 0\n");
114
115  sc = rtems_bdbuf_get(dd, 0, &bd);
116  ASSERT_SC(sc);
117
118  printk("M: access: 0\n");
119
120  rtems_test_assert(bd->group->bds_per_group == 1);
121
122  printk("M: release: 0\n");
123
124  sc = rtems_bdbuf_release(bd);
125  ASSERT_SC(sc);
126
127  printk("M: release done: 0\n");
128
129  rtems_task_delete(RTEMS_SELF);
130}
131
132static void task_high(rtems_task_argument arg)
133{
134  rtems_status_code sc = RTEMS_SUCCESSFUL;
135  rtems_bdbuf_buffer *bd = NULL;
136
137  change_block_size();
138
139  printk("H: try access: 0\n");
140
141  sc = rtems_bdbuf_get(dd, 0, &bd);
142  ASSERT_SC(sc);
143
144  printk("H: access: 0\n");
145
146  rtems_test_assert(bd->group->bds_per_group == 1);
147
148  printk("H: release: 0\n");
149
150  sc = rtems_bdbuf_release(bd);
151  ASSERT_SC(sc);
152
153  printk("H: release done: 0\n");
154
155  rtems_task_delete(RTEMS_SELF);
156}
157
158static rtems_task Init(rtems_task_argument argument)
159{
160  rtems_status_code sc = RTEMS_SUCCESSFUL;
161  rtems_task_priority cur_prio = 0;
162  rtems_bdbuf_buffer *bd = NULL;
163  dev_t dev = 0;
164
165  printk("\n\n*** TEST BLOCK 7 ***\n");
166
167  sc = rtems_disk_io_initialize();
168  ASSERT_SC(sc);
169
170  sc = ramdisk_register(BLOCK_SIZE_A, BLOCK_COUNT, false, "/dev/rda", &dev);
171  ASSERT_SC(sc);
172
173  dd = rtems_disk_obtain(dev);
174  rtems_test_assert(dd != NULL);
175
176  sc = rtems_task_create(
177    rtems_build_name(' ', 'L', 'O', 'W'),
178    PRIORITY_LOW,
179    0,
180    RTEMS_DEFAULT_MODES,
181    RTEMS_DEFAULT_ATTRIBUTES,
182    &task_id_low
183  );
184  ASSERT_SC(sc);
185
186  sc = rtems_task_start(task_id_low, task_low, 0);
187  ASSERT_SC(sc);
188
189  sc = rtems_task_create(
190    rtems_build_name(' ', 'M', 'I', 'D'),
191    PRIORITY_MID,
192    0,
193    RTEMS_DEFAULT_MODES,
194    RTEMS_DEFAULT_ATTRIBUTES,
195    &task_id_mid
196  );
197  ASSERT_SC(sc);
198
199  sc = rtems_task_start(task_id_mid, task_mid, 0);
200  ASSERT_SC(sc);
201
202  sc = rtems_task_create(
203    rtems_build_name('H', 'I', 'G', 'H'),
204    PRIORITY_HIGH,
205    0,
206    RTEMS_DEFAULT_MODES,
207    RTEMS_DEFAULT_ATTRIBUTES,
208    &task_id_high
209  );
210  ASSERT_SC(sc);
211
212  sc = rtems_task_start(task_id_high, task_high, 0);
213  ASSERT_SC(sc);
214
215  sc = rtems_task_suspend(task_id_mid);
216  ASSERT_SC(sc);
217
218  sc = rtems_task_suspend(task_id_high);
219  ASSERT_SC(sc);
220
221  sc = rtems_bdbuf_get(dd, 1, &bd);
222  ASSERT_SC(sc);
223
224  sc = rtems_bdbuf_release(bd);
225  ASSERT_SC(sc);
226
227  printk("I: try access: 0\n");
228
229  sc = rtems_bdbuf_get(dd, 0, &bd);
230  ASSERT_SC(sc);
231
232  printk("I: access: 0\n");
233
234  sc = rtems_task_set_priority(RTEMS_SELF, PRIORITY_IDLE, &cur_prio);
235  ASSERT_SC(sc);
236
237  sc = rtems_task_resume(task_id_high);
238  ASSERT_SC(sc);
239
240  sc = rtems_task_resume(task_id_mid);
241  ASSERT_SC(sc);
242
243  sc = rtems_task_set_priority(RTEMS_SELF, PRIORITY_INIT, &cur_prio);
244  ASSERT_SC(sc);
245
246  printk("I: release: 0\n");
247
248  sc = rtems_bdbuf_release(bd);
249  ASSERT_SC(sc);
250
251  printk("I: release done: 0\n");
252
253  rtems_task_delete(RTEMS_SELF);
254}
255
256#define CONFIGURE_INIT
257
258#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
259#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
260#define CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
261
262#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
263#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 4
264
265#define CONFIGURE_MAXIMUM_TASKS 6
266#define CONFIGURE_MAXIMUM_DRIVERS 2
267
268#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
269
270#define CONFIGURE_INIT_TASK_PRIORITY PRIORITY_INIT
271#define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES
272#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_DEFAULT_MODES
273
274#define CONFIGURE_SWAPOUT_TASK_PRIORITY PRIORITY_SWAPOUT
275
276#define CONFIGURE_BDBUF_BUFFER_MIN_SIZE BLOCK_SIZE_A
277#define CONFIGURE_BDBUF_BUFFER_MAX_SIZE BLOCK_SIZE_B
278#define CONFIGURE_BDBUF_CACHE_MEMORY_SIZE (BLOCK_SIZE_A * BLOCK_COUNT)
279
280#include <rtems/confdefs.h>
Note: See TracBrowser for help on using the repository browser.