int devIocStatsGetMemUsage (memInfo *pval) { #ifdef RTEMS_PROTECTED_HEAP # if (__RTEMS_MAJOR__ > 4) \ || (__RTEMS_MAJOR__ == 4 && __RTEMS_MINOR__ > 9) extern Heap_Control *RTEMS_Malloc_Heap; Heap_Control *h = RTEMS_Malloc_Heap; # else extern Heap_Control RTEMS_Malloc_Heap; Heap_Control *h = &RTEMS_Malloc_Heap; # endif Heap_Information_block info; _Protected_heap_Get_information(h, &info); #else /* RTEMS_PROTECTED_HEAP */ extern rtems_id RTEMS_Malloc_Heap; rtems_id h = RTEMS_Malloc_Heap; region_information_block info; rtems_region_get_information(h, &info); /* rtems' malloc_free_space() looks at 'largest' -- why not 'total'? */ #endif /* RTEMS_PROTECTED_HEAP */ pval->numBytesTotal = info.Free.total + info.Used.total; pval->numBytesFree = info.Free.total; pval->numBytesAlloc = info.Used.total; pval->maxBlockSizeFree = info.Free.largest; return 0; }
void region_error_tests(void) { void *segment_address_1; void *segment_address_2; void *segment_address_3; uintptr_t segment_size; rtems_status_code status; Heap_Information_block the_info; rtems_id junk_id; Region_name[ 1 ] = rtems_build_name( 'R', 'N', '1', ' ' ); /* Check invalid name error case */ status = rtems_region_create( 0, Region_good_area, 0x40, 32, RTEMS_DEFAULT_ATTRIBUTES, &junk_id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_region_create with illegal name" ); puts( "TA1 - rtems_region_create - RTEMS_INVALID_NAME" ); /* Check NULL starting address error case */ status = rtems_region_create( Region_name[ 1 ], NULL, 0x40, 32, RTEMS_DEFAULT_ATTRIBUTES, &junk_id ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_create with NULL address" ); puts( "TA1 - rtems_region_create - RTEMS_INVALID_ADDRESS" ); /* Invalid size */ status = rtems_region_create( Region_name[ 1 ], Region_good_area, 0, 0, RTEMS_DEFAULT_ATTRIBUTES, &junk_id ); fatal_directive_status( status, RTEMS_INVALID_SIZE, "rtems_region_create with illegal size" ); puts( "TA1 - rtems_region_create - RTEMS_INVALID_SIZE" ); /* Check NULL id error case */ status = rtems_region_create( Region_name[ 1 ], Region_good_area, REGION_LENGTH, 0x40, RTEMS_DEFAULT_ATTRIBUTES, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_create with NULL id" ); puts( "TA1 - rtems_region_create - RTEMS_INVALID_ADDRESS" ); status = rtems_region_create( Region_name[ 1 ], &Region_good_area[ REGION_START_OFFSET ], REGION_LENGTH, 0x40, RTEMS_DEFAULT_ATTRIBUTES, &Region_id[ 1 ] ); directive_failed( status, "rtems_region_create" ); puts( "TA1 - rtems_region_create - RTEMS_SUCCESSFUL" ); /* extend NULL address */ status = rtems_region_extend( Region_id[ 1 ], NULL, REGION_LENGTH - 1 ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_extend with NULL" ); puts( "TA1 - rtems_region_extend - NULL address - RTEMS_INVALID_ADDRESS" ); /* extend within heap */ status = rtems_region_extend( Region_id[ 1 ], &Region_good_area[ REGION_START_OFFSET ], REGION_LENGTH - 1 ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_extend with address in heap" ); puts( "TA1 - rtems_region_extend - address within - RTEMS_INVALID_ADDRESS" ); status = rtems_region_create( Region_name[ 1 ], Region_good_area, REGION_LENGTH, 0x40, RTEMS_DEFAULT_ATTRIBUTES, &junk_id ); fatal_directive_status( status, RTEMS_TOO_MANY, "rtems_region_create of too many" ); puts( "TA1 - rtems_region_create - RTEMS_TOO_MANY" ); status = rtems_region_delete( 100 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_delete with illegal id" ); puts( "TA1 - rtems_region_delete - unknown RTEMS_INVALID_ID" ); status = rtems_region_delete( rtems_build_id( 1, 1, 1, 256 ) ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_delete with illegal id" ); puts( "TA1 - rtems_region_delete - local RTEMS_INVALID_ID" ); status = rtems_region_ident( 0, &junk_id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_region_ident with illegal name" ); puts( "TA1 - rtems_region_ident - RTEMS_INVALID_NAME" ); /* Check get_information errors */ status = rtems_region_get_information( Region_id[ 1 ], NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_get_information with NULL information" ); puts( "TA1 - rtems_region_get_information - RTEMS_INVALID_ADDRESS" ); status = rtems_region_get_information( 100, &the_info ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_get_information with illegal id" ); puts( "TA1 - rtems_region_get_information - unknown RTEMS_INVALID_ID" ); /* Check get_free_information errors */ status = rtems_region_get_free_information( Region_id[ 1 ], NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_get_free_information with NULL information" ); puts( "TA1 - rtems_region_get_free_information - RTEMS_INVALID_ADDRESS" ); status = rtems_region_get_free_information( 100, &the_info ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_get_free_information with illegal id" ); puts( "TA1 - rtems_region_get_free_information - unknown RTEMS_INVALID_ID" ); /* get segment illegal id */ status = rtems_region_get_segment( 100, 0x40, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_get_segment with illegal id" ); puts( "TA1 - rtems_region_get_segment - RTEMS_INVALID_ID" ); /* get_segment with NULL param */ status = rtems_region_get_segment( Region_id[ 1 ], 2, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_get_segment with NULL param" ); puts( "TA1 - rtems_region_get_segment - RTEMS_INVALID_ADDRESS" ); /* get_segment with illegal 0 size */ status = rtems_region_get_segment( Region_id[ 1 ], 0, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); fatal_directive_status( status, RTEMS_INVALID_SIZE, "rtems_region_get_segment with 0 size" ); puts( "TA1 - rtems_region_get_segment - 0 size - RTEMS_INVALID_SIZE" ); /* get_segment with illegal big size */ status = rtems_region_get_segment( Region_id[ 1 ], sizeof( Region_good_area ) * 2, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); fatal_directive_status( status, RTEMS_INVALID_SIZE, "rtems_region_get_segment with big size" ); puts( "TA1 - rtems_region_get_segment - too big - RTEMS_INVALID_SIZE" ); status = rtems_region_get_segment( Region_id[ 1 ], REGION_LENGTH / 2, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); directive_failed( status, "rtems_region_get_segment" ); puts( "TA1 - rtems_region_get_segment - RTEMS_SUCCESSFUL" ); status = rtems_region_get_segment( Region_id[ 1 ], REGION_LENGTH / 2, RTEMS_NO_WAIT, RTEMS_NO_TIMEOUT, &segment_address_2 ); fatal_directive_status( status, RTEMS_UNSATISFIED, "rtems_region_get_segment unsatisfied" ); puts( "TA1 - rtems_region_get_segment - RTEMS_UNSATISFIED" ); puts( "TA1 - rtems_region_get_segment - timeout in 3 seconds" ); status = rtems_region_get_segment( Region_id[ 1 ], REGION_LENGTH / 2, RTEMS_DEFAULT_OPTIONS, 3 * rtems_clock_get_ticks_per_second(), &segment_address_3 ); fatal_directive_status( status, RTEMS_TIMEOUT, "rtems_region_get_segment timeout" ); puts( "TA1 - rtems_region_get_segment - woke up with RTEMS_TIMEOUT" ); /* Check get_segment_size errors */ status = rtems_region_get_segment_size( Region_id[ 1 ], NULL, &segment_size ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_get_segment_size with NULL segment" ); puts( "TA1 - rtems_region_get_segment_size - RTEMS_INVALID_ADDRESS" ); status = rtems_region_get_segment_size( Region_id[ 1 ], segment_address_1, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_get_segment_size with NULL size" ); puts( "TA1 - rtems_region_get_segment_size - RTEMS_INVALID_ADDRESS" ); status = rtems_region_get_segment_size( 100, segment_address_1, &segment_size ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_get_segment_size with illegal id" ); puts( "TA1 - rtems_region_get_segment_size - unknown RTEMS_INVALID_ID" ); status = rtems_region_delete( Region_id[ 1 ] ); fatal_directive_status( status, RTEMS_RESOURCE_IN_USE, "rtems_region_delete with buffers in use" ); puts( "TA1 - rtems_region_delete - RTEMS_RESOURCE_IN_USE" ); /* Check resize_segment errors */ status = rtems_region_resize_segment( Region_id[ 1 ], segment_address_3, 256, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_resize_segment with NULL old size" ); puts( "TA1 - rtems_region_resize_segment - RTEMS_INVALID_ADDRESS" ); status = rtems_region_resize_segment( Region_id[ 1 ], NULL, 256, &segment_size ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_resize_segment with NULL segment" ); puts( "TA1 - rtems_region_resize_segment - RTEMS_INVALID_ADDRESS" ); status = rtems_region_resize_segment( 100, segment_address_3, 256, &segment_size ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_resize_segment with illegal id" ); puts( "TA1 - rtems_region_resize_segment - RTEMS_INVALID_ID" ); /* Check return_segment errors */ status = rtems_region_return_segment( 100, segment_address_1 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_return_segment with illegal id" ); puts( "TA1 - rtems_region_return_segment - RTEMS_INVALID_ID" ); status = rtems_region_return_segment( Region_id[ 1 ], Region_good_area ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_return_segment with illegal segment" ); puts( "TA1 - rtems_region_return_segment - RTEMS_INVALID_ADDRESS" ); /* * The following generate internal heap errors. Thus this code * is subject to change if the heap code changes. */ puts( "TA1 - rtems_debug_disable - RTEMS_DEBUG_REGION" ); rtems_debug_disable( RTEMS_DEBUG_REGION ); puts( "TA1 - rtems_debug_enable - RTEMS_DEBUG_REGION" ); rtems_debug_enable( RTEMS_DEBUG_REGION ); status = rtems_region_extend( 100, Region_good_area, 128 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_extend with illegal id" ); puts( "TA1 - rtems_region_extend - RTEMS_INVALID_ID" ); status = rtems_region_extend( Region_id[ 1 ], &Region_good_area[ REGION_START_OFFSET + 16 ], 128 ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_extend with illegal starting address" ); puts( "TA1 - rtems_region_extend - within heap - RTEMS_INVALID_ADDRESS" ); }
rtems_task Task_1( rtems_task_argument argument ) { void *address_1; void *address_2; void *address_3; void *address_4; void *address_5; void *address_6; void *address_7; void *address_8; rtems_id region_id; Heap_Information_block region_info; uintptr_t segment_size; rtems_status_code status; /* Obtain the region id */ status = rtems_region_ident(Region_name[ 1 ], ®ion_id); printf( "TA1 - rtems_region_ident - 0x%08" PRIxrtems_id "\n", region_id ); directive_failed(status, "rtems_region_ident of RN01"); /* Get a 64 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 64 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 64, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_1 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_1 ); new_line; /* Get the size of segment_1 */ puts_nocr( "TA1 - rtems_region_get_segment_size from - " ); Put_address_from_area_1( address_1 ); new_line; status = rtems_region_get_segment_size(region_id, address_1, &segment_size); directive_failed(status, "rtems_region_get_segment_size of segment 1"); printf( "TA1 - got segment size of %" PRIuPTR "\n", segment_size ); /* Get a 128 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 128 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 128, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_2 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_2 ); new_line; /* Get a 256 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 256 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 256, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_3 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_3 ); new_line; /* Get a 512 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 512 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 512, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_4 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_4 ); new_line; /* Get a 1024 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 1024 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 1024, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_5 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_5 ); new_line; /* Get a 2048 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 2048 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 2048, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_6 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_6 ); new_line; /* Get a 4096 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 4096 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 4096, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_7 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_7 ); new_line; /* Get a 8192 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 8192 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 8192, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_8 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_8 ); new_line; /* Get the size of segment_8 */ puts_nocr( "TA1 - rtems_region_get_segment_size from - " ); Put_address_from_area_1( address_8 ); new_line; status = rtems_region_get_segment_size(region_id, address_8, &segment_size); directive_failed(status, "rtems_region_get_segment_size of segment 8"); printf( "TA1 - got segment size of %" PRIuPTR "\n", segment_size ); /* Get information about the region */ printf( "TA1 - rtems_region_get_information - 0x%08" PRIxrtems_id "\n", region_id ); status = rtems_region_get_information(region_id, ®ion_info); directive_failed(status, "rtems_region_get_information of RN01"); printf( "TA1 - got information - free = %" PRIu32 ", used = %" PRIu32 "\n", region_info.Free.number, region_info.Used.number ); printf( "TA1 - rtems_region_get_free_information - 0x%08" PRIxrtems_id "\n", region_id ); status = rtems_region_get_free_information(region_id, ®ion_info); directive_failed(status, "rtems_region_get_free_information of RN01"); printf( "TA1 - got free information - free = %" PRIu32 ", used = %" PRIu32 "\n", region_info.Free.number, region_info.Used.number ); rtems_test_pause(); puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_3 ); status = rtems_region_return_segment( Region_id[ 1 ], address_3 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_3 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_4 ); status = rtems_region_return_segment( Region_id[ 1 ], address_4 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_4 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_1 ); status = rtems_region_return_segment( Region_id[ 1 ], address_1 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_1 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_2 ); status = rtems_region_return_segment( Region_id[ 1 ], address_2 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_2 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_7 ); status = rtems_region_return_segment( Region_id[ 1 ], address_7 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_7 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_6 ); status = rtems_region_return_segment( Region_id[ 1 ], address_6 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_6 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_8 ); status = rtems_region_return_segment( Region_id[ 1 ], address_8 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_8 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_5 ); status = rtems_region_return_segment( Region_id[ 1 ], address_5 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_5 = 0; puts( "TA1 - rtems_region_delete - walks heap if debug enabled" ); rtems_region_delete(Region_id[ 1 ]); puts( "*** END OF TEST 25 ***" ); rtems_test_exit( 0 ); }
void Screen12() { void *segment_address_1; void *segment_address_2; void *segment_address_3; uint32_t good_back_flag; uint32_t good_front_flag; uint32_t offset; uintptr_t segment_size; rtems_status_code status; Heap_Information_block the_info; /* Check invalid name error case */ status = rtems_region_create( 0, Region_good_area, 0x40, 32, RTEMS_DEFAULT_ATTRIBUTES, &Junk_id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_region_create with illegal name" ); puts( "TA1 - rtems_region_create - RTEMS_INVALID_NAME" ); /* Check NULL starting address error case */ status = rtems_region_create( Region_name[ 1 ], NULL, 0x40, 32, RTEMS_DEFAULT_ATTRIBUTES, &Junk_id ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_create with NULL address" ); puts( "TA1 - rtems_region_create - RTEMS_INVALID_ADDRESS" ); #if defined(_C3x) || defined(_C4x) puts( "TA1 - rtems_region_create - RTEMS_INVALID_ADDRESS - SKIPPED" ); #else status = rtems_region_create( Region_name[ 1 ], Region_bad_area, 0x40, 32, RTEMS_DEFAULT_ATTRIBUTES, &Junk_id ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_create with illegal address" ); puts( "TA1 - rtems_region_create - RTEMS_INVALID_ADDRESS" ); #endif #if defined(_C3x) || defined(_C4x) puts( "TA1 - rtems_region_create - RTEMS_INVALID_SIZE - SKIPPED" ); #else status = rtems_region_create( Region_name[ 1 ], Region_good_area, 34, 34, RTEMS_DEFAULT_ATTRIBUTES, &Junk_id ); fatal_directive_status( status, RTEMS_INVALID_SIZE, "rtems_region_create with illegal size" ); puts( "TA1 - rtems_region_create - RTEMS_INVALID_SIZE" ); #endif /* Check NULL id error case */ status = rtems_region_create( Region_name[ 1 ], Region_good_area, REGION_LENGTH, 0x40, RTEMS_DEFAULT_ATTRIBUTES, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_create with NULL id" ); puts( "TA1 - rtems_region_create - RTEMS_INVALID_ADDRESS" ); status = rtems_region_create( Region_name[ 1 ], &Region_good_area[ REGION_START_OFFSET ], REGION_LENGTH, 0x40, RTEMS_DEFAULT_ATTRIBUTES, &Region_id[ 1 ] ); directive_failed( status, "rtems_region_create" ); puts( "TA1 - rtems_region_create - RTEMS_SUCCESSFUL" ); /* extend NULL address */ status = rtems_region_extend( Region_id[ 1 ], NULL, REGION_LENGTH - 1 ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_extend with NULL" ); puts( "TA1 - rtems_region_extend - NULL address - RTEMS_INVALID_ADDRESS" ); /* extend within heap */ status = rtems_region_extend( Region_id[ 1 ], &Region_good_area[ REGION_START_OFFSET ], REGION_LENGTH - 1 ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_extend with address in heap" ); puts( "TA1 - rtems_region_extend - address within - RTEMS_INVALID_ADDRESS" ); status = rtems_region_create( Region_name[ 1 ], Region_good_area, REGION_LENGTH, 0x40, RTEMS_DEFAULT_ATTRIBUTES, &Junk_id ); fatal_directive_status( status, RTEMS_TOO_MANY, "rtems_region_create of too many" ); puts( "TA1 - rtems_region_create - RTEMS_TOO_MANY" ); status = rtems_region_delete( 100 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_delete with illegal id" ); puts( "TA1 - rtems_region_delete - unknown RTEMS_INVALID_ID" ); status = rtems_region_delete( rtems_build_id( 1, 1, 1, 256 ) ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_delete with illegal id" ); puts( "TA1 - rtems_region_delete - local RTEMS_INVALID_ID" ); status = rtems_region_ident( 0, &Junk_id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_region_ident with illegal name" ); puts( "TA1 - rtems_region_ident - RTEMS_INVALID_NAME" ); /* Check get_information errors */ status = rtems_region_get_information( Region_id[ 1 ], NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_get_information with NULL information" ); puts( "TA1 - rtems_region_get_information - RTEMS_INVALID_ADDRESS" ); status = rtems_region_get_information( 100, &the_info ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_get_information with illegal id" ); puts( "TA1 - rtems_region_get_information - unknown RTEMS_INVALID_ID" ); /* Check get_free_information errors */ status = rtems_region_get_free_information( Region_id[ 1 ], NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_get_free_information with NULL information" ); puts( "TA1 - rtems_region_get_free_information - RTEMS_INVALID_ADDRESS" ); status = rtems_region_get_free_information( 100, &the_info ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_get_free_information with illegal id" ); puts( "TA1 - rtems_region_get_free_information - unknown RTEMS_INVALID_ID" ); /* get segment illegal id */ status = rtems_region_get_segment( 100, 0x40, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_get_segment with illegal id" ); puts( "TA1 - rtems_region_get_segment - RTEMS_INVALID_ID" ); /* get_segment with NULL param */ status = rtems_region_get_segment( Region_id[ 1 ], 2, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_get_segment with NULL param" ); puts( "TA1 - rtems_region_get_segment - RTEMS_INVALID_ADDRESS" ); /* get_segment with illegal 0 size */ status = rtems_region_get_segment( Region_id[ 1 ], 0, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); fatal_directive_status( status, RTEMS_INVALID_SIZE, "rtems_region_get_segment with 0 size" ); puts( "TA1 - rtems_region_get_segment - 0 size - RTEMS_INVALID_SIZE" ); /* get_segment with illegal big size */ status = rtems_region_get_segment( Region_id[ 1 ], sizeof( Region_good_area ) * 2, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); fatal_directive_status( status, RTEMS_INVALID_SIZE, "rtems_region_get_segment with big size" ); puts( "TA1 - rtems_region_get_segment - too big - RTEMS_INVALID_SIZE" ); status = rtems_region_get_segment( Region_id[ 1 ], 384, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); directive_failed( status, "rtems_region_get_segment" ); puts( "TA1 - rtems_region_get_segment - RTEMS_SUCCESSFUL" ); status = rtems_region_get_segment( Region_id[ 1 ], REGION_LENGTH / 2, RTEMS_NO_WAIT, RTEMS_NO_TIMEOUT, &segment_address_2 ); fatal_directive_status( status, RTEMS_UNSATISFIED, "rtems_region_get_segment unsatisfied" ); puts( "TA1 - rtems_region_get_segment - RTEMS_UNSATISFIED" ); puts( "TA1 - rtems_region_get_segment - timeout in 3 seconds" ); status = rtems_region_get_segment( Region_id[ 1 ], 128, RTEMS_DEFAULT_OPTIONS, 3 * rtems_clock_get_ticks_per_second(), &segment_address_3 ); fatal_directive_status( status, RTEMS_TIMEOUT, "rtems_region_get_segment timeout" ); puts( "TA1 - rtems_region_get_segment - woke up with RTEMS_TIMEOUT" ); /* Check get_segment_size errors */ status = rtems_region_get_segment_size( Region_id[ 1 ], NULL, &segment_size ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_get_segment_size with NULL segment" ); puts( "TA1 - rtems_region_get_segment_size - RTEMS_INVALID_ADDRESS" ); status = rtems_region_get_segment_size( Region_id[ 1 ], segment_address_1, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_get_segment_size with NULL size" ); puts( "TA1 - rtems_region_get_segment_size - RTEMS_INVALID_ADDRESS" ); status = rtems_region_get_segment_size( 100, segment_address_1, &segment_size ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_get_segment_size with illegal id" ); puts( "TA1 - rtems_region_get_segment_size - unknown RTEMS_INVALID_ID" ); status = rtems_region_delete( Region_id[ 1 ] ); fatal_directive_status( status, RTEMS_RESOURCE_IN_USE, "rtems_region_delete with buffers in use" ); puts( "TA1 - rtems_region_delete - RTEMS_RESOURCE_IN_USE" ); /* Check resize_segment errors */ status = rtems_region_resize_segment( Region_id[ 1 ], segment_address_3, 256, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_resize_segment with NULL old size" ); puts( "TA1 - rtems_region_resize_segment - RTEMS_INVALID_ADDRESS" ); status = rtems_region_resize_segment( Region_id[ 1 ], NULL, 256, &segment_size ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_resize_segment with NULL segment" ); puts( "TA1 - rtems_region_resize_segment - RTEMS_INVALID_ADDRESS" ); status = rtems_region_resize_segment( 100, segment_address_3, 256, &segment_size ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_resize_segment with illegal id" ); puts( "TA1 - rtems_region_resize_segment - RTEMS_INVALID_ID" ); /* Check return_segment errors */ status = rtems_region_return_segment( 100, segment_address_1 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_return_segment with illegal id" ); puts( "TA1 - rtems_region_return_segment - RTEMS_INVALID_ID" ); status = rtems_region_return_segment( Region_id[ 1 ], Region_good_area ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_return_segment with illegal segment" ); puts( "TA1 - rtems_region_return_segment - RTEMS_INVALID_ADDRESS" ); /* * The following generate internal heap errors. Thus this code * is subject to change if the heap code changes. */ puts( "TA1 - rtems_debug_disable - RTEMS_DEBUG_REGION" ); rtems_debug_disable( RTEMS_DEBUG_REGION ); #if 0 offset = (segment_address_1 - (void *)Region_good_area) / 4; /* bad FRONT_FLAG error */ good_front_flag = Region_good_area[ offset - 1 ]; Region_good_area[ offset - 1 ] = good_front_flag + 2; status = rtems_region_return_segment( Region_id[ 1 ], segment_address_1 ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_return_segment with back_flag != front_flag" ); puts( "TA1 - rtems_region_return_segment - RTEMS_INVALID_ADDRESS" ); Region_good_area[ offset - 1 ] = good_front_flag; /* bad FRONT_FLAG error */ good_back_flag = Region_good_area[ offset - 2 ]; Region_good_area[ offset - 2 ] = 1024; status = rtems_region_return_segment( Region_id[ 1 ], segment_address_1 ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_return_segment with back_flag != front_flag" ); puts( "TA1 - rtems_region_return_segment - RTEMS_INVALID_ADDRESS" ); Region_good_area[ offset - 2 ] = good_back_flag; #else offset = 0; good_front_flag = 0; good_back_flag = 0; puts( "TA1 - rtems_region_return_segment - RTEMS_INVALID_ADDRESS - SKIPPED" ); puts( "TA1 - rtems_region_return_segment - RTEMS_INVALID_ADDRESS - SKIPPED" ); #endif puts( "TA1 - rtems_debug_enable - RTEMS_DEBUG_REGION" ); rtems_debug_enable( RTEMS_DEBUG_REGION ); status = rtems_region_extend( 100, Region_good_area, 128 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_extend with illegal id" ); puts( "TA1 - rtems_region_extend - RTEMS_INVALID_ID" ); status = rtems_region_extend( Region_id[ 1 ], &Region_good_area[ REGION_START_OFFSET + 16 ], 128 ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_extend with illegal starting address" ); puts( "TA1 - rtems_region_extend - within heap - RTEMS_INVALID_ADDRESS" ); status = rtems_region_extend( Region_id[ 1 ], Region_bad_area, 128 ); fatal_directive_status( status, RTEMS_NOT_IMPLEMENTED, "rtems_region_extend with unsupported starting address" ); puts( "TA1 - rtems_region_extend - non-contiguous lower - RTEMS_NOT_IMPLEMENTED" ); status = rtems_region_extend( Region_id[ 1 ], &Region_good_area[ REGION_START_OFFSET - REGION_LENGTH ], 128 ); fatal_directive_status( status, RTEMS_NOT_IMPLEMENTED, "rtems_region_extend with unsupported starting address" ); puts( "TA1 - rtems_region_extend - contiguous lower - RTEMS_NOT_IMPLEMENTED" ); status = rtems_region_extend( Region_id[ 1 ], &Region_good_area[ REGION_START_OFFSET + REGION_LENGTH + 16 ], 128 ); fatal_directive_status( status, RTEMS_NOT_IMPLEMENTED, "rtems_region_extend with unsupported starting address" ); puts( "TA1 - rtems_region_extend - non-contiguous higher - RTEMS_NOT_IMPLEMENTED" ); }