forked from Imagelibrary/rtems
arm/raspberrypi: Adding functionalities to Mailbox RPi
Added functions for retrieving firmware revision, board model and board revision.
This commit is contained in:
@@ -135,6 +135,25 @@ typedef struct
|
||||
|
||||
int
|
||||
bcm2835_mailbox_get_vc_memory(bcm2835_get_vc_memory_entries* _entries);
|
||||
|
||||
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);
|
||||
|
||||
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_revision(bcm2835_get_board_spec_entries* _entries);
|
||||
/** @} */
|
||||
|
||||
#endif /* LIBBSP_ARM_RASPBERRYPI_VC_H */
|
||||
|
||||
@@ -290,3 +290,63 @@ bcm2835_mailbox_get_vc_memory(bcm2835_get_vc_memory_entries* _entries)
|
||||
return -2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
bcm2835_mailbox_get_firmware_revision(bcm2835_mailbox_get_fw_rev_entries* _entries)
|
||||
{
|
||||
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))
|
||||
return -1;
|
||||
_entries->fw_rev = buffer.get_fw_rev.body.resp.rev;
|
||||
if( !bcm2835_mailbox_buffer_suceeded(&buffer.hdr) )
|
||||
return -2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
bcm2835_mailbox_get_board_model(bcm2835_get_board_spec_entries* _entries)
|
||||
{
|
||||
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))
|
||||
return -1;
|
||||
_entries->spec = buffer.get_board_model.body.resp.spec;
|
||||
if( !bcm2835_mailbox_buffer_suceeded(&buffer.hdr) )
|
||||
return -2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
bcm2835_mailbox_get_board_revision(bcm2835_get_board_spec_entries* _entries)
|
||||
{
|
||||
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))
|
||||
return -1;
|
||||
_entries->spec = buffer.get_board_revision.body.resp.spec;
|
||||
if( !bcm2835_mailbox_buffer_suceeded(&buffer.hdr) )
|
||||
return -2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -135,10 +135,30 @@ typedef struct {
|
||||
|
||||
/* Video Core */
|
||||
#define BCM2835_MAILBOX_TAG_FIRMWARE_REVISION 0x00000001
|
||||
typedef struct {
|
||||
bcm2835_mbox_tag_hdr tag_hdr;
|
||||
union {
|
||||
struct {
|
||||
} req;
|
||||
struct {
|
||||
uint32_t rev;
|
||||
} resp;
|
||||
} body;
|
||||
} bcm2835_mbox_tag_get_fw_rev;
|
||||
|
||||
/* Hardware */
|
||||
#define BCM2835_MAILBOX_TAG_GET_BOARD_MODEL 0x00010001
|
||||
#define BCM2835_MAILBOX_TAG_GET_BOARD_VERSION 0x00010002
|
||||
typedef struct {
|
||||
bcm2835_mbox_tag_hdr tag_hdr;
|
||||
union {
|
||||
struct {
|
||||
} req;
|
||||
struct {
|
||||
uint32_t spec;
|
||||
} resp;
|
||||
} body;
|
||||
} bcm2835_mbox_tag_get_board_spec;
|
||||
|
||||
#if (BSP_IS_RPI2 == 1)
|
||||
#define BCM2836_MAILBOX_BOARD_V_2_B 0x4
|
||||
|
||||
Reference in New Issue
Block a user