diff options
author | Pavel Pisa <pisa@cmp.felk.cvut.cz> | 2016-06-28 16:15:38 +0200 |
---|---|---|
committer | Pavel Pisa <pisa@cmp.felk.cvut.cz> | 2016-06-28 16:15:38 +0200 |
commit | 68565b090e683872a7c0564a6af049e977307f41 (patch) | |
tree | 927f8e41ed257b3ce90eea189a2038b90f57d2a7 /c/src/lib/libbsp/arm/raspberrypi | |
parent | arm/raspberrypi: Adding functionalities to Mailbox RPi (diff) | |
download | rtems-68565b090e683872a7c0564a6af049e977307f41.tar.bz2 |
arm/raspberrypi: run VideoCore and mailbox code through rtems.uncrustify.
Some changes have been reverted to keep readability.
For example squash of BCM2835_MBOX_TAG_* defines
which are visually aligned in column.
Diffstat (limited to 'c/src/lib/libbsp/arm/raspberrypi')
-rw-r--r-- | c/src/lib/libbsp/arm/raspberrypi/include/vc.h | 91 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/raspberrypi/misc/mailbox.c | 42 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/raspberrypi/misc/timer.c | 20 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/raspberrypi/misc/vc.c | 315 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/raspberrypi/misc/vc_defines.h | 44 |
5 files changed, 266 insertions, 246 deletions
diff --git a/c/src/lib/libbsp/arm/raspberrypi/include/vc.h b/c/src/lib/libbsp/arm/raspberrypi/include/vc.h index dbf98120a5..00414ff306 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/include/vc.h +++ b/c/src/lib/libbsp/arm/raspberrypi/include/vc.h @@ -30,31 +30,26 @@ * @{ */ -typedef struct -{ +typedef struct { uint32_t width; uint32_t height; } bcm2835_get_display_size_entries; -int -bcm2835_mailbox_get_display_size(bcm2835_get_display_size_entries* _entries); +int bcm2835_mailbox_get_display_size( + bcm2835_get_display_size_entries *_entries ); - -typedef enum -{ +typedef enum { bcm2835_mailbox_pixel_order_bgr = 0, bcm2835_mailbox_pixel_order_rgb = 1 } bcm2835_pixel_order; -typedef enum -{ +typedef enum { bcm2835_mailbox_alpha_mode_0_opaque = 0, bcm2835_mailbox_alpha_mode_0_transparent = 1, bcm2835_mailbox_alpha_mode_ignored = 2 } bcm2835_alpha_mode; -typedef struct -{ +typedef struct { uint32_t xres; uint32_t yres; uint32_t xvirt; @@ -73,27 +68,22 @@ typedef struct uint32_t pitch; } bcm2835_init_frame_buffer_entries; -int -bcm2835_mailbox_init_frame_buffer(bcm2835_init_frame_buffer_entries* _entries); +int bcm2835_mailbox_init_frame_buffer( + bcm2835_init_frame_buffer_entries *_entries ); -typedef struct -{ +typedef struct { uint32_t pitch; -}bcm2835_get_pitch_entries; +} bcm2835_get_pitch_entries; -int -bcm2835_mailbox_get_pitch(bcm2835_get_pitch_entries* _entries); +int bcm2835_mailbox_get_pitch( bcm2835_get_pitch_entries *_entries ); -typedef struct -{ - char cmdline[1024]; +typedef struct { + char cmdline[ 1024 ]; } bcm2835_get_cmdline_entries; -int -bcm2835_mailbox_get_cmdline(bcm2835_get_cmdline_entries* _entries); +int bcm2835_mailbox_get_cmdline( bcm2835_get_cmdline_entries *_entries ); -typedef enum -{ +typedef enum { bcm2835_mailbox_power_udid_sd_card = 0x00000000u, bcm2835_mailbox_power_udid_uart0 = 0x00000001u, bcm2835_mailbox_power_udid_uart1 = 0x00000002u, @@ -105,55 +95,46 @@ typedef enum bcm2835_mailbox_power_udid_ccp2tx = 0x00000008u, } bcm2835_power_device_id; -typedef struct -{ +typedef struct { bcm2835_power_device_id dev_id; uint32_t state; } bcm2835_set_power_state_entries; -#define BCM2835_MAILBOX_SET_POWER_STATE_REQ_ON (1 << 0) -#define BCM2835_MAILBOX_SET_POWER_STATE_REQ_WAIT (1 << 1) -#define BCM2835_MAILBOX_POWER_STATE_ON (1 << 0) -#define BCM2835_MAILBOX_POWER_STATE_NODEV (1 << 1) -int -bcm2835_mailbox_set_power_state(bcm2835_set_power_state_entries* _entries); +#define BCM2835_MAILBOX_SET_POWER_STATE_REQ_ON ( 1 << 0 ) +#define BCM2835_MAILBOX_SET_POWER_STATE_REQ_WAIT ( 1 << 1 ) +#define BCM2835_MAILBOX_POWER_STATE_ON ( 1 << 0 ) +#define BCM2835_MAILBOX_POWER_STATE_NODEV ( 1 << 1 ) +int bcm2835_mailbox_set_power_state( bcm2835_set_power_state_entries *_entries ); -typedef struct -{ +typedef struct { uint32_t base; - size_t size; -}bcm2835_get_arm_memory_entries; + size_t size; +} bcm2835_get_arm_memory_entries; -int -bcm2835_mailbox_get_arm_memory(bcm2835_get_arm_memory_entries* _entries); +int bcm2835_mailbox_get_arm_memory( bcm2835_get_arm_memory_entries *_entries ); -typedef struct -{ +typedef struct { uint32_t base; - size_t size; -}bcm2835_get_vc_memory_entries; + size_t size; +} bcm2835_get_vc_memory_entries; -int -bcm2835_mailbox_get_vc_memory(bcm2835_get_vc_memory_entries* _entries); +int bcm2835_mailbox_get_vc_memory( bcm2835_get_vc_memory_entries *_entries ); -typedef struct -{ +typedef struct { uint32_t fw_rev; } bcm2835_mailbox_get_fw_rev_entries; -int -bcm2835_mailbox_get_firmware_revision(bcm2835_mailbox_get_fw_rev_entries* _entries); +int bcm2835_mailbox_get_firmware_revision( + bcm2835_mailbox_get_fw_rev_entries *_entries ); -typedef struct -{ +typedef struct { uint32_t spec; } bcm2835_get_board_spec_entries; -int -bcm2835_mailbox_get_board_model(bcm2835_get_board_spec_entries* _entries); +int bcm2835_mailbox_get_board_model( bcm2835_get_board_spec_entries *_entries ); -int -bcm2835_mailbox_get_board_revision(bcm2835_get_board_spec_entries* _entries); +int bcm2835_mailbox_get_board_revision( + bcm2835_get_board_spec_entries *_entries ); /** @} */ #endif /* LIBBSP_ARM_RASPBERRYPI_VC_H */ diff --git a/c/src/lib/libbsp/arm/raspberrypi/misc/mailbox.c b/c/src/lib/libbsp/arm/raspberrypi/misc/mailbox.c index 37890ddbc0..8196781ee5 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/misc/mailbox.c +++ b/c/src/lib/libbsp/arm/raspberrypi/misc/mailbox.c @@ -21,37 +21,43 @@ #include <bsp/raspberrypi.h> #include <bsp/mailbox.h> -#define BCM2835_MBOX_DATA_MASK(data) (data & 0xFFFFFFF0U) -#define BCM2835_MBOX_CHANNEL_MASK(data) (data & 0xFU) +#define BCM2835_MBOX_DATA_MASK( data ) ( data & 0xFFFFFFF0U ) +#define BCM2835_MBOX_CHANNEL_MASK( data ) ( data & 0xFU ) -static inline bool bcm2835_mailbox_is_empty(void) +static inline bool bcm2835_mailbox_is_empty( void ) { - return (BCM2835_REG(BCM2835_MBOX_STATUS) & BCM2835_MBOX_EMPTY); + return ( BCM2835_REG( BCM2835_MBOX_STATUS ) & BCM2835_MBOX_EMPTY ); } -static inline bool bcm2835_mailbox_is_full(void) +static inline bool bcm2835_mailbox_is_full( void ) { - return (BCM2835_REG(BCM2835_MBOX_STATUS) & BCM2835_MBOX_FULL); + return ( BCM2835_REG( BCM2835_MBOX_STATUS ) & BCM2835_MBOX_FULL ); } -unsigned int raspberrypi_mailbox_read(unsigned int channel) +unsigned int raspberrypi_mailbox_read( unsigned int channel ) { unsigned int raw; unsigned int read_channel; - while (1){ - while (bcm2835_mailbox_is_empty()); - raw = BCM2835_REG (BCM2835_MBOX_READ ); - read_channel = BCM2835_MBOX_CHANNEL_MASK(raw) ; - if (read_channel == channel) - return BCM2835_MBOX_DATA_MASK(raw); + while ( 1 ) { + while ( bcm2835_mailbox_is_empty() ) ; + + raw = BCM2835_REG( BCM2835_MBOX_READ ); + read_channel = BCM2835_MBOX_CHANNEL_MASK( raw ); + + if ( read_channel == channel ) + return BCM2835_MBOX_DATA_MASK( raw ); } } -void raspberrypi_mailbox_write(unsigned int channel, unsigned int data) +void raspberrypi_mailbox_write( + unsigned int channel, + unsigned int data +) { - while (bcm2835_mailbox_is_full()); - BCM2835_REG(BCM2835_MBOX_WRITE) = - BCM2835_MBOX_DATA_MASK(data) | - BCM2835_MBOX_CHANNEL_MASK(channel); + while ( bcm2835_mailbox_is_full() ) ; + + BCM2835_REG( BCM2835_MBOX_WRITE ) = + BCM2835_MBOX_DATA_MASK( data ) | + BCM2835_MBOX_CHANNEL_MASK( channel ); } diff --git a/c/src/lib/libbsp/arm/raspberrypi/misc/timer.c b/c/src/lib/libbsp/arm/raspberrypi/misc/timer.c index 1047b3e417..f52ecb3a26 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/misc/timer.c +++ b/c/src/lib/libbsp/arm/raspberrypi/misc/timer.c @@ -25,26 +25,24 @@ static bool benchmark_timer_find_average_overhead = false; static uint64_t benchmark_timer_base; -void benchmark_timer_initialize(void) +void benchmark_timer_initialize( void ) { - benchmark_timer_base = BCM2835_REG(BCM2835_GPU_TIMER_CLO); + benchmark_timer_base = BCM2835_REG( BCM2835_GPU_TIMER_CLO ); } -benchmark_timer_t benchmark_timer_read(void) +benchmark_timer_t benchmark_timer_read( void ) { - uint32_t delta = BCM2835_REG(BCM2835_GPU_TIMER_CLO) - benchmark_timer_base; + uint32_t delta = BCM2835_REG( BCM2835_GPU_TIMER_CLO ) - benchmark_timer_base; - if (benchmark_timer_find_average_overhead) - { + if ( benchmark_timer_find_average_overhead ) { return delta; - } - else - { - return BCM2835_REG(BCM2835_GPU_TIMER_CLO); + } else { + return BCM2835_REG( BCM2835_GPU_TIMER_CLO ); } } -void benchmark_timer_disable_subtracting_average_overhead(bool find_average_overhead) +void benchmark_timer_disable_subtracting_average_overhead( + bool find_average_overhead ) { benchmark_timer_find_average_overhead = find_average_overhead; } diff --git a/c/src/lib/libbsp/arm/raspberrypi/misc/vc.c b/c/src/lib/libbsp/arm/raspberrypi/misc/vc.c index 2467833756..7bc17ba797 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/misc/vc.c +++ b/c/src/lib/libbsp/arm/raspberrypi/misc/vc.c @@ -25,25 +25,24 @@ #include <libcpu/arm-cp15.h> #include "vc_defines.h" -#if (RPI_L2_CACHE_ENABLE == 1) +#if ( RPI_L2_CACHE_ENABLE == 1 ) #define BCM2835_VC_MEMORY_MAPPING 0x40000000 #else #define BCM2835_VC_MEMORY_MAPPING 0xC0000000 #endif -static inline bool -bcm2835_mailbox_buffer_suceeded(const bcm2835_mbox_buf_hdr *hdr) +static inline bool bcm2835_mailbox_buffer_suceeded( + const bcm2835_mbox_buf_hdr *hdr ) { RTEMS_COMPILER_MEMORY_BARRIER(); - return (hdr->buf_code == BCM2835_MBOX_BUF_CODE_REQUEST_SUCCEED); + return ( hdr->buf_code == BCM2835_MBOX_BUF_CODE_REQUEST_SUCCEED ); } -static inline int -bcm2835_mailbox_send_read_buffer(void *buf) +static inline int bcm2835_mailbox_send_read_buffer( void *buf ) { - raspberrypi_mailbox_write(BCM2835_MBOX_CHANNEL_PROP_AVC, - (unsigned int)buf + BCM2835_VC_MEMORY_MAPPING); - raspberrypi_mailbox_read(BCM2835_MBOX_CHANNEL_PROP_AVC); + raspberrypi_mailbox_write( BCM2835_MBOX_CHANNEL_PROP_AVC, + (unsigned int) buf + BCM2835_VC_MEMORY_MAPPING ); + raspberrypi_mailbox_read( BCM2835_MBOX_CHANNEL_PROP_AVC ); return 0; } @@ -52,8 +51,10 @@ bcm2835_mailbox_send_read_buffer(void *buf) * with VideoCore has to be propagated through ARM11/Cortex-A7 * caches */ -static inline void -bcm2835_mailbox_buffer_flush_and_invalidate(void *buf, size_t size) +static inline void bcm2835_mailbox_buffer_flush_and_invalidate( + void *buf, + size_t size +) { uint32_t sctlr_val; @@ -61,16 +62,17 @@ bcm2835_mailbox_buffer_flush_and_invalidate(void *buf, size_t size) RTEMS_COMPILER_MEMORY_BARRIER(); arm_cp15_drain_write_buffer(); - if (sctlr_val & (ARM_CP15_CTRL_C | ARM_CP15_CTRL_M)) { + + if ( sctlr_val & ( ARM_CP15_CTRL_C | ARM_CP15_CTRL_M ) ) { #if 0 /* - These architecture independent RTEMS API functions should be - used there but CPU_DATA_CACHE_ALIGNMENT is not defined - for ARM architecture version used on RPi and functions - are dummy for now and do not provide required synchronization - */ - rtems_cache_flush_multiple_data_lines(buf, size); - rtems_cache_invalidate_multiple_data_lines(buf, size); + These architecture independent RTEMS API functions should be + used there but CPU_DATA_CACHE_ALIGNMENT is not defined + for ARM architecture version used on RPi and functions + are dummy for now and do not provide required synchronization + */ + rtems_cache_flush_multiple_data_lines( buf, size ); + rtems_cache_invalidate_multiple_data_lines( buf, size ); #else /* Flush complete data cache */ arm_cp15_data_cache_clean_and_invalidate(); @@ -78,32 +80,36 @@ bcm2835_mailbox_buffer_flush_and_invalidate(void *buf, size_t size) } } -#define BCM2835_MBOX_VAL_LENGTH_MASK(_val_len) \ - (_val_len&(~BCM2835_MBOX_TAG_VAL_LEN_RESPONSE)) +#define BCM2835_MBOX_VAL_LENGTH_MASK( _val_len ) \ + ( _val_len & ( ~BCM2835_MBOX_TAG_VAL_LEN_RESPONSE ) ) -int -bcm2835_mailbox_get_display_size(bcm2835_get_display_size_entries *_entries) +int bcm2835_mailbox_get_display_size( + bcm2835_get_display_size_entries *_entries ) { struct { bcm2835_mbox_buf_hdr hdr; bcm2835_mbox_tag_display_size get_display_size; uint32_t end_tag; - }buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; - BCM2835_MBOX_INIT_BUF(&buffer); - BCM2835_MBOX_INIT_TAG_NO_REQ(&buffer.get_display_size, - BCM2835_MAILBOX_TAG_GET_DISPLAY_SIZE); - bcm2835_mailbox_buffer_flush_and_invalidate(&buffer, sizeof(&buffer)); - if (bcm2835_mailbox_send_read_buffer(&buffer)) + } buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; + BCM2835_MBOX_INIT_BUF( &buffer ); + BCM2835_MBOX_INIT_TAG_NO_REQ( &buffer.get_display_size, + BCM2835_MAILBOX_TAG_GET_DISPLAY_SIZE ); + bcm2835_mailbox_buffer_flush_and_invalidate( &buffer, sizeof( &buffer ) ); + + if ( bcm2835_mailbox_send_read_buffer( &buffer ) ) return -1; + _entries->width = buffer.get_display_size.body.resp.width; _entries->height = buffer.get_display_size.body.resp.height; - if( !bcm2835_mailbox_buffer_suceeded(&buffer.hdr) ) + + if ( !bcm2835_mailbox_buffer_suceeded( &buffer.hdr ) ) return -2; + return 0; } -int -bcm2835_mailbox_init_frame_buffer(bcm2835_init_frame_buffer_entries* _entries) +int bcm2835_mailbox_init_frame_buffer( + bcm2835_init_frame_buffer_entries *_entries ) { struct { bcm2835_mbox_buf_hdr hdr; @@ -118,52 +124,54 @@ bcm2835_mailbox_init_frame_buffer(bcm2835_init_frame_buffer_entries* _entries) bcm2835_mbox_tag_get_pitch get_pitch; uint32_t end_tag; } buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; - BCM2835_MBOX_INIT_BUF(&buffer); - BCM2835_MBOX_INIT_TAG(&buffer.set_display_size, - BCM2835_MAILBOX_TAG_SET_DISPLAY_SIZE); + BCM2835_MBOX_INIT_BUF( &buffer ); + BCM2835_MBOX_INIT_TAG( &buffer.set_display_size, + BCM2835_MAILBOX_TAG_SET_DISPLAY_SIZE ); buffer.set_display_size.body.req.width = _entries->xres; buffer.set_display_size.body.req.height = _entries->yres; - BCM2835_MBOX_INIT_TAG(&buffer.set_virtual_size, - BCM2835_MAILBOX_TAG_SET_VIRTUAL_SIZE); + BCM2835_MBOX_INIT_TAG( &buffer.set_virtual_size, + BCM2835_MAILBOX_TAG_SET_VIRTUAL_SIZE ); buffer.set_virtual_size.body.req.vwidth = _entries->xvirt; buffer.set_virtual_size.body.req.vheight = _entries->yvirt; - BCM2835_MBOX_INIT_TAG(&buffer.set_depth, - BCM2835_MAILBOX_TAG_SET_DEPTH); + BCM2835_MBOX_INIT_TAG( &buffer.set_depth, + BCM2835_MAILBOX_TAG_SET_DEPTH ); buffer.set_depth.body.req.depth = _entries->depth; - BCM2835_MBOX_INIT_TAG(&buffer.set_pixel_order, - BCM2835_MAILBOX_TAG_SET_PIXEL_ORDER); + BCM2835_MBOX_INIT_TAG( &buffer.set_pixel_order, + BCM2835_MAILBOX_TAG_SET_PIXEL_ORDER ); buffer.set_pixel_order.body.req.pixel_order = _entries->pixel_order; - BCM2835_MBOX_INIT_TAG(&buffer.set_alpha_mode, - BCM2835_MAILBOX_TAG_SET_ALPHA_MODE); + BCM2835_MBOX_INIT_TAG( &buffer.set_alpha_mode, + BCM2835_MAILBOX_TAG_SET_ALPHA_MODE ); buffer.set_alpha_mode.body.req.alpha_mode = _entries->alpha_mode; - BCM2835_MBOX_INIT_TAG(&buffer.set_virtual_offset, - BCM2835_MAILBOX_TAG_SET_VIRTUAL_OFFSET); + BCM2835_MBOX_INIT_TAG( &buffer.set_virtual_offset, + BCM2835_MAILBOX_TAG_SET_VIRTUAL_OFFSET ); buffer.set_virtual_offset.body.req.voffset_x = _entries->voffset_x; buffer.set_virtual_offset.body.req.voffset_x = _entries->voffset_y; - BCM2835_MBOX_INIT_TAG(&buffer.set_overscan, - BCM2835_MAILBOX_TAG_SET_OVERSCAN); + BCM2835_MBOX_INIT_TAG( &buffer.set_overscan, + BCM2835_MAILBOX_TAG_SET_OVERSCAN ); buffer.set_overscan.body.req.overscan_top = _entries->overscan_top; buffer.set_overscan.body.req.overscan_bottom = _entries->overscan_bottom; buffer.set_overscan.body.req.overscan_left = _entries->overscan_left; buffer.set_overscan.body.req.overscan_right = _entries->overscan_right; - BCM2835_MBOX_INIT_TAG(&buffer.allocate_buffer, - BCM2835_MAILBOX_TAG_ALLOCATE_BUFFER); + BCM2835_MBOX_INIT_TAG( &buffer.allocate_buffer, + BCM2835_MAILBOX_TAG_ALLOCATE_BUFFER ); buffer.allocate_buffer.body.req.align = 0x100; - BCM2835_MBOX_INIT_TAG_NO_REQ(&buffer.get_pitch, - BCM2835_MAILBOX_TAG_GET_PITCH); - bcm2835_mailbox_buffer_flush_and_invalidate(&buffer, sizeof(&buffer)); - if (bcm2835_mailbox_send_read_buffer(&buffer)) + BCM2835_MBOX_INIT_TAG_NO_REQ( &buffer.get_pitch, + BCM2835_MAILBOX_TAG_GET_PITCH ); + bcm2835_mailbox_buffer_flush_and_invalidate( &buffer, sizeof( &buffer ) ); + + if ( bcm2835_mailbox_send_read_buffer( &buffer ) ) return -1; + _entries->xres = buffer.set_display_size.body.resp.width; _entries->yres = buffer.set_display_size.body.resp.height; _entries->xvirt = buffer.set_virtual_size.body.resp.vwidth; _entries->yvirt = buffer.set_virtual_size.body.resp.vheight; _entries->depth = buffer.set_depth.body.resp.depth; -#if (BSP_IS_RPI2 == 1) +#if ( BSP_IS_RPI2 == 1 ) _entries->base = buffer.allocate_buffer.body.resp.base; #else - _entries->base = buffer.allocate_buffer.body.resp.base - - BCM2835_VC_MEMORY_MAPPING; + _entries->base = buffer.allocate_buffer.body.resp.base - + BCM2835_VC_MEMORY_MAPPING; #endif _entries->size = buffer.allocate_buffer.body.resp.size; _entries->pixel_order = buffer.set_pixel_order.body.resp.pixel_order; @@ -174,179 +182,208 @@ bcm2835_mailbox_init_frame_buffer(bcm2835_init_frame_buffer_entries* _entries) _entries->overscan_right = buffer.set_overscan.body.resp.overscan_right; _entries->overscan_top = buffer.set_overscan.body.resp.overscan_top; _entries->overscan_bottom = buffer.set_overscan.body.resp.overscan_bottom; - if( !bcm2835_mailbox_buffer_suceeded(&buffer.hdr) ) + + if ( !bcm2835_mailbox_buffer_suceeded( &buffer.hdr ) ) return -2; + return 0; } -int -bcm2835_mailbox_get_pitch(bcm2835_get_pitch_entries* _entries) +int bcm2835_mailbox_get_pitch( bcm2835_get_pitch_entries *_entries ) { struct { bcm2835_mbox_buf_hdr hdr; bcm2835_mbox_tag_get_pitch get_pitch; uint32_t end_tag; - }buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; - BCM2835_MBOX_INIT_BUF(&buffer); - BCM2835_MBOX_INIT_TAG_NO_REQ(&buffer.get_pitch, - BCM2835_MAILBOX_TAG_GET_PITCH); - bcm2835_mailbox_buffer_flush_and_invalidate(&buffer, sizeof(&buffer)); - if (bcm2835_mailbox_send_read_buffer(&buffer)) + } buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; + BCM2835_MBOX_INIT_BUF( &buffer ); + BCM2835_MBOX_INIT_TAG_NO_REQ( &buffer.get_pitch, + BCM2835_MAILBOX_TAG_GET_PITCH ); + bcm2835_mailbox_buffer_flush_and_invalidate( &buffer, sizeof( &buffer ) ); + + if ( bcm2835_mailbox_send_read_buffer( &buffer ) ) return -1; + _entries->pitch = buffer.get_pitch.body.resp.pitch; - if( !bcm2835_mailbox_buffer_suceeded(&buffer.hdr) ) + + if ( !bcm2835_mailbox_buffer_suceeded( &buffer.hdr ) ) return -2; + return 0; } -int -bcm2835_mailbox_get_cmdline(bcm2835_get_cmdline_entries* _entries) +int bcm2835_mailbox_get_cmdline( bcm2835_get_cmdline_entries *_entries ) { int i; + struct { bcm2835_mbox_buf_hdr hdr; bcm2835_mbox_tag_get_cmd_line get_cmd_line; uint32_t end_tag; - }buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; - BCM2835_MBOX_INIT_BUF(&buffer); - BCM2835_MBOX_INIT_TAG_NO_REQ(&buffer.get_cmd_line, - BCM2835_MAILBOX_TAG_GET_CMD_LINE); - bcm2835_mailbox_buffer_flush_and_invalidate(&buffer, sizeof(&buffer)); - if (bcm2835_mailbox_send_read_buffer(&buffer)) + } buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; + BCM2835_MBOX_INIT_BUF( &buffer ); + BCM2835_MBOX_INIT_TAG_NO_REQ( &buffer.get_cmd_line, + BCM2835_MAILBOX_TAG_GET_CMD_LINE ); + bcm2835_mailbox_buffer_flush_and_invalidate( &buffer, sizeof( &buffer ) ); + + if ( bcm2835_mailbox_send_read_buffer( &buffer ) ) return -1; - for (i = 0; - i < BCM2835_MBOX_VAL_LENGTH_MASK(buffer.get_cmd_line.tag_hdr.val_len); - ++i) - { - _entries->cmdline[i] = buffer.get_cmd_line.body.resp.cmdline[i]; + + for ( i = 0; + i < BCM2835_MBOX_VAL_LENGTH_MASK( buffer.get_cmd_line.tag_hdr.val_len ); + ++i ) { + _entries->cmdline[ i ] = buffer.get_cmd_line.body.resp.cmdline[ i ]; } - _entries->cmdline[i] = '\0'; - if( !bcm2835_mailbox_buffer_suceeded(&buffer.hdr) ) + + _entries->cmdline[ i ] = '\0'; + + if ( !bcm2835_mailbox_buffer_suceeded( &buffer.hdr ) ) return -2; + return 0; } -int -bcm2835_mailbox_set_power_state(bcm2835_set_power_state_entries *_entries) +int bcm2835_mailbox_set_power_state( bcm2835_set_power_state_entries *_entries ) { struct { bcm2835_mbox_buf_hdr hdr; bcm2835_mbox_tag_power_state set_power_state; uint32_t end_tag; - }buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; - BCM2835_MBOX_INIT_BUF(&buffer); - BCM2835_MBOX_INIT_TAG(&buffer.set_power_state, - BCM2835_MAILBOX_TAG_SET_POWER_STATE); + } buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; + BCM2835_MBOX_INIT_BUF( &buffer ); + BCM2835_MBOX_INIT_TAG( &buffer.set_power_state, + BCM2835_MAILBOX_TAG_SET_POWER_STATE ); buffer.set_power_state.body.req.dev_id = _entries->dev_id; buffer.set_power_state.body.req.state = _entries->state; - bcm2835_mailbox_buffer_flush_and_invalidate(&buffer, sizeof(&buffer)); - if (bcm2835_mailbox_send_read_buffer(&buffer)) + bcm2835_mailbox_buffer_flush_and_invalidate( &buffer, sizeof( &buffer ) ); + + if ( bcm2835_mailbox_send_read_buffer( &buffer ) ) return -1; + _entries->dev_id = buffer.set_power_state.body.resp.dev_id; - _entries->state = buffer.set_power_state.body.resp.state; - if( !bcm2835_mailbox_buffer_suceeded(&buffer.hdr) ) + _entries->state = buffer.set_power_state.body.resp.state; + + if ( !bcm2835_mailbox_buffer_suceeded( &buffer.hdr ) ) return -2; + return 0; } -int -bcm2835_mailbox_get_arm_memory(bcm2835_get_arm_memory_entries* _entries) +int bcm2835_mailbox_get_arm_memory( bcm2835_get_arm_memory_entries *_entries ) { struct { bcm2835_mbox_buf_hdr hdr; bcm2835_mbox_tag_get_arm_memory get_arm_memory; uint32_t end_tag; - }buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; - BCM2835_MBOX_INIT_BUF(&buffer); - BCM2835_MBOX_INIT_TAG_NO_REQ(&buffer.get_arm_memory, - BCM2835_MAILBOX_TAG_GET_ARM_MEMORY); - bcm2835_mailbox_buffer_flush_and_invalidate(&buffer, sizeof(&buffer)); - if (bcm2835_mailbox_send_read_buffer(&buffer)) + } buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; + BCM2835_MBOX_INIT_BUF( &buffer ); + BCM2835_MBOX_INIT_TAG_NO_REQ( &buffer.get_arm_memory, + BCM2835_MAILBOX_TAG_GET_ARM_MEMORY ); + bcm2835_mailbox_buffer_flush_and_invalidate( &buffer, sizeof( &buffer ) ); + + if ( bcm2835_mailbox_send_read_buffer( &buffer ) ) return -1; + _entries->base = buffer.get_arm_memory.body.resp.base; _entries->size = buffer.get_arm_memory.body.resp.size; - if( !bcm2835_mailbox_buffer_suceeded(&buffer.hdr) ) + + if ( !bcm2835_mailbox_buffer_suceeded( &buffer.hdr ) ) return -2; + return 0; } -int -bcm2835_mailbox_get_vc_memory(bcm2835_get_vc_memory_entries* _entries) +int bcm2835_mailbox_get_vc_memory( bcm2835_get_vc_memory_entries *_entries ) { struct { bcm2835_mbox_buf_hdr hdr; bcm2835_mbox_tag_get_vc_memory get_vc_memory; uint32_t end_tag; - }buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; - BCM2835_MBOX_INIT_BUF(&buffer); - BCM2835_MBOX_INIT_TAG_NO_REQ(&buffer.get_vc_memory, - BCM2835_MAILBOX_TAG_GET_VC_MEMORY); - bcm2835_mailbox_buffer_flush_and_invalidate(&buffer, sizeof(&buffer)); - if (bcm2835_mailbox_send_read_buffer(&buffer)) + } buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; + BCM2835_MBOX_INIT_BUF( &buffer ); + BCM2835_MBOX_INIT_TAG_NO_REQ( &buffer.get_vc_memory, + BCM2835_MAILBOX_TAG_GET_VC_MEMORY ); + bcm2835_mailbox_buffer_flush_and_invalidate( &buffer, sizeof( &buffer ) ); + + if ( bcm2835_mailbox_send_read_buffer( &buffer ) ) return -1; + _entries->base = buffer.get_vc_memory.body.resp.base; _entries->size = buffer.get_vc_memory.body.resp.size; - if( !bcm2835_mailbox_buffer_suceeded(&buffer.hdr) ) + + if ( !bcm2835_mailbox_buffer_suceeded( &buffer.hdr ) ) return -2; + return 0; } -int -bcm2835_mailbox_get_firmware_revision(bcm2835_mailbox_get_fw_rev_entries* _entries) +int bcm2835_mailbox_get_firmware_revision( + bcm2835_mailbox_get_fw_rev_entries *_entries ) { - struct{ + struct { bcm2835_mbox_buf_hdr hdr; bcm2835_mbox_tag_get_fw_rev get_fw_rev; uint32_t end_tag; - }buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; - BCM2835_MBOX_INIT_BUF(&buffer); - BCM2835_MBOX_INIT_TAG_NO_REQ(&buffer.get_fw_rev, - BCM2835_MAILBOX_TAG_FIRMWARE_REVISION); - bcm2835_mailbox_buffer_flush_and_invalidate(&buffer, sizeof(&buffer)); - if (bcm2835_mailbox_send_read_buffer(&buffer)) + } buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; + BCM2835_MBOX_INIT_BUF( &buffer ); + BCM2835_MBOX_INIT_TAG_NO_REQ( &buffer.get_fw_rev, + BCM2835_MAILBOX_TAG_FIRMWARE_REVISION ); + bcm2835_mailbox_buffer_flush_and_invalidate( &buffer, sizeof( &buffer ) ); + + if ( bcm2835_mailbox_send_read_buffer( &buffer ) ) return -1; + _entries->fw_rev = buffer.get_fw_rev.body.resp.rev; - if( !bcm2835_mailbox_buffer_suceeded(&buffer.hdr) ) + + if ( !bcm2835_mailbox_buffer_suceeded( &buffer.hdr ) ) return -2; + return 0; } -int -bcm2835_mailbox_get_board_model(bcm2835_get_board_spec_entries* _entries) +int bcm2835_mailbox_get_board_model( bcm2835_get_board_spec_entries *_entries ) { - struct{ + struct { bcm2835_mbox_buf_hdr hdr; bcm2835_mbox_tag_get_board_spec get_board_model; uint32_t end_tag; - }buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; - BCM2835_MBOX_INIT_BUF(&buffer); - BCM2835_MBOX_INIT_TAG_NO_REQ(&buffer.get_board_model, - BCM2835_MAILBOX_TAG_GET_BOARD_MODEL); - bcm2835_mailbox_buffer_flush_and_invalidate(&buffer, sizeof(&buffer)); - if (bcm2835_mailbox_send_read_buffer(&buffer)) + } buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; + BCM2835_MBOX_INIT_BUF( &buffer ); + BCM2835_MBOX_INIT_TAG_NO_REQ( &buffer.get_board_model, + BCM2835_MAILBOX_TAG_GET_BOARD_MODEL ); + bcm2835_mailbox_buffer_flush_and_invalidate( &buffer, sizeof( &buffer ) ); + + if ( bcm2835_mailbox_send_read_buffer( &buffer ) ) return -1; + _entries->spec = buffer.get_board_model.body.resp.spec; - if( !bcm2835_mailbox_buffer_suceeded(&buffer.hdr) ) + + if ( !bcm2835_mailbox_buffer_suceeded( &buffer.hdr ) ) return -2; + return 0; } -int -bcm2835_mailbox_get_board_revision(bcm2835_get_board_spec_entries* _entries) +int bcm2835_mailbox_get_board_revision( + bcm2835_get_board_spec_entries *_entries ) { - struct{ + struct { bcm2835_mbox_buf_hdr hdr; bcm2835_mbox_tag_get_board_spec get_board_revision; uint32_t end_tag; - }buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; - BCM2835_MBOX_INIT_BUF(&buffer); - BCM2835_MBOX_INIT_TAG_NO_REQ(&buffer.get_board_revision, - BCM2835_MAILBOX_TAG_GET_BOARD_VERSION); - bcm2835_mailbox_buffer_flush_and_invalidate(&buffer, sizeof(&buffer)); - if (bcm2835_mailbox_send_read_buffer(&buffer)) + } buffer BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE; + BCM2835_MBOX_INIT_BUF( &buffer ); + BCM2835_MBOX_INIT_TAG_NO_REQ( &buffer.get_board_revision, + BCM2835_MAILBOX_TAG_GET_BOARD_VERSION ); + bcm2835_mailbox_buffer_flush_and_invalidate( &buffer, sizeof( &buffer ) ); + + if ( bcm2835_mailbox_send_read_buffer( &buffer ) ) return -1; + _entries->spec = buffer.get_board_revision.body.resp.spec; - if( !bcm2835_mailbox_buffer_suceeded(&buffer.hdr) ) + + if ( !bcm2835_mailbox_buffer_suceeded( &buffer.hdr ) ) return -2; + return 0; } diff --git a/c/src/lib/libbsp/arm/raspberrypi/misc/vc_defines.h b/c/src/lib/libbsp/arm/raspberrypi/misc/vc_defines.h index 1b2bf92f5e..2956c0827d 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/misc/vc_defines.h +++ b/c/src/lib/libbsp/arm/raspberrypi/misc/vc_defines.h @@ -30,7 +30,7 @@ * @{ */ - /** +/** * @name Mailbox Property tags (ARM <-> VC) * * @{ @@ -51,7 +51,6 @@ * */ typedef struct { - /** * @brief Buffer Size * @@ -70,7 +69,6 @@ typedef struct { uint32_t buf_code; } bcm2835_mbox_buf_hdr; - /** * @brief Tag Header * @@ -96,24 +94,24 @@ typedef struct { uint32_t val_len; } bcm2835_mbox_tag_hdr; -#define BCM2835_MBOX_INIT_BUF(_m_) { \ - memset((_m_), 0, sizeof(*(_m_))); \ - (_m_)->hdr.buf_size = sizeof(*(_m_)); \ - (_m_)->hdr.buf_code = BCM2835_MBOX_BUF_CODE_PROCESS_REQUEST; \ - (_m_)->end_tag = 0; \ - } - -#define BCM2835_MBOX_INIT_TAG(_t_, _id_) { \ - (_t_)->tag_hdr.tag = _id_; \ - (_t_)->tag_hdr.val_buf_size = sizeof((_t_)->body); \ - (_t_)->tag_hdr.val_len = sizeof((_t_)->body.req); \ - } - -#define BCM2835_MBOX_INIT_TAG_NO_REQ(_t_, _id_) { \ - (_t_)->tag_hdr.tag = _id_; \ - (_t_)->tag_hdr.val_buf_size = sizeof((_t_)->body); \ - (_t_)->tag_hdr.val_len = 0; \ - } +#define BCM2835_MBOX_INIT_BUF( _m_ ) { \ + memset( ( _m_ ), 0, sizeof( *( _m_ ) ) ); \ + ( _m_ )->hdr.buf_size = sizeof( *( _m_ ) ); \ + ( _m_ )->hdr.buf_code = BCM2835_MBOX_BUF_CODE_PROCESS_REQUEST; \ + ( _m_ )->end_tag = 0; \ +} + +#define BCM2835_MBOX_INIT_TAG( _t_, _id_ ) { \ + ( _t_ )->tag_hdr.tag = _id_; \ + ( _t_ )->tag_hdr.val_buf_size = sizeof( ( _t_ )->body ); \ + ( _t_ )->tag_hdr.val_len = sizeof( ( _t_ )->body.req ); \ +} + +#define BCM2835_MBOX_INIT_TAG_NO_REQ( _t_, _id_ ) { \ + ( _t_ )->tag_hdr.tag = _id_; \ + ( _t_ )->tag_hdr.val_buf_size = sizeof( ( _t_ )->body ); \ + ( _t_ )->tag_hdr.val_len = 0; \ +} /* * Mailbox buffers has to be aligned to 16 bytes because @@ -131,7 +129,7 @@ typedef struct { * Cache line length is 64 bytes for RPi2 Cortex-A7 data cache * so align buffers to this value. */ -#define BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE __attribute__((aligned (64))) +#define BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE __attribute__( ( aligned( 64 ) ) ) /* Video Core */ #define BCM2835_MAILBOX_TAG_FIRMWARE_REVISION 0x00000001 @@ -217,7 +215,7 @@ typedef struct { struct { } req; struct { - uint8_t cmdline[1024]; + uint8_t cmdline[ 1024 ]; } resp; } body; } bcm2835_mbox_tag_get_cmd_line; |