File indexing completed on 2025-05-11 08:23:04
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #ifndef LIBBSP_ARM_RASPBERRYPI_VC_DEFINES_H
0021 #define LIBBSP_ARM_RASPBERRYPI_VC_DEFINES_H
0022
0023 #include <string.h>
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041 #define BCM2835_MBOX_BUF_CODE_PROCESS_REQUEST 0x00000000
0042 #define BCM2835_MBOX_BUF_CODE_REQUEST_SUCCEED 0x80000000
0043 #define BCM2835_MBOX_BUF_CODE_REQUEST_PARSING_ERROR 0x80000001
0044 #define BCM2835_MBOX_TAG_VAL_LEN_REQUEST 0x00000000
0045 #define BCM2835_MBOX_TAG_VAL_LEN_RESPONSE 0x80000000
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055 typedef struct {
0056
0057
0058
0059
0060
0061
0062 uint32_t buf_size;
0063
0064
0065
0066
0067
0068
0069
0070
0071 uint32_t buf_code;
0072 } bcm2835_mbox_buf_hdr;
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082 typedef struct {
0083
0084
0085
0086 uint32_t tag;
0087
0088
0089
0090 uint32_t val_buf_size;
0091
0092
0093
0094
0095
0096 uint32_t val_len;
0097 } bcm2835_mbox_tag_hdr;
0098
0099 #define BCM2835_MBOX_TAG_REPLY_IS_SET( _t_ ) \
0100 ( ( _t_ )->tag_hdr.val_len & 0x80000000 )
0101
0102 #define BCM2835_MBOX_INIT_BUF( _m_ ) { \
0103 memset( ( _m_ ), 0, sizeof( *( _m_ ) ) ); \
0104 ( _m_ )->hdr.buf_size = (void *)&(( _m_ )->end_tag) + 4 - (void *)( _m_ ); \
0105 ( _m_ )->hdr.buf_code = BCM2835_MBOX_BUF_CODE_PROCESS_REQUEST; \
0106 ( _m_ )->end_tag = 0; \
0107 }
0108
0109 #define BCM2835_MBOX_INIT_TAG( _t_, _id_ ) { \
0110 ( _t_ )->tag_hdr.tag = _id_; \
0111 ( _t_ )->tag_hdr.val_buf_size = sizeof( ( _t_ )->body ); \
0112 ( _t_ )->tag_hdr.val_len = sizeof( ( _t_ )->body.req ); \
0113 }
0114
0115 #define BCM2835_MBOX_INIT_TAG_NO_REQ( _t_, _id_ ) { \
0116 ( _t_ )->tag_hdr.tag = _id_; \
0117 ( _t_ )->tag_hdr.val_buf_size = sizeof( ( _t_ )->body ); \
0118 ( _t_ )->tag_hdr.val_len = 0; \
0119 }
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137 #define BCM2835_MBOX_BUF_ALIGN_ATTRIBUTE __attribute__( ( aligned( 64 ) ) )
0138
0139
0140 #define BCM2835_MAILBOX_TAG_FIRMWARE_REVISION 0x00000001
0141 typedef struct {
0142 bcm2835_mbox_tag_hdr tag_hdr;
0143 union {
0144 struct {
0145 } req;
0146 struct {
0147 uint32_t rev;
0148 } resp;
0149 } body;
0150 } bcm2835_mbox_tag_get_fw_rev;
0151
0152
0153 #define BCM2835_MAILBOX_TAG_GET_BOARD_MODEL 0x00010001
0154 #define BCM2835_MAILBOX_TAG_GET_BOARD_VERSION 0x00010002
0155 typedef struct {
0156 bcm2835_mbox_tag_hdr tag_hdr;
0157 union {
0158 struct {
0159 } req;
0160 struct {
0161 uint32_t spec;
0162 } resp;
0163 } body;
0164 } bcm2835_mbox_tag_get_board_spec;
0165
0166 #if (BSP_IS_RPI2 == 1)
0167 #define BCM2836_MAILBOX_BOARD_V_2_B 0x4
0168 #else
0169 #define BCM2835_MAILBOX_BOARD_V_B_I2C0_2 0x2
0170 #define BCM2835_MAILBOX_BOARD_V_B_I2C0_3 0x3
0171 #define BCM2835_MAILBOX_BOARD_V_B_I2C1_4 0x4
0172 #define BCM2835_MAILBOX_BOARD_V_B_I2C1_5 0x5
0173 #define BCM2835_MAILBOX_BOARD_V_B_I2C1_6 0x6
0174 #define BCM2835_MAILBOX_BOARD_V_A_7 0x7
0175 #define BCM2835_MAILBOX_BOARD_V_A_8 0x8
0176 #define BCM2835_MAILBOX_BOARD_V_A_9 0x9
0177 #define BCM2835_MAILBOX_BOARD_V_B_REV2_d 0xd
0178 #define BCM2835_MAILBOX_BOARD_V_B_REV2_e 0xe
0179 #define BCM2835_MAILBOX_BOARD_V_B_REV2_f 0xf
0180 #define BCM2835_MAILBOX_BOARD_V_B_PLUS 0x10
0181 #define BCM2835_MAILBOX_BOARD_V_CM 0x11
0182 #define BCM2835_MAILBOX_BOARD_V_A_PLUS 0x12
0183 #endif
0184
0185 #define BCM2835_MAILBOX_TAG_GET_BOARD_MAC 0x00010003
0186 #define BCM2835_MAILBOX_TAG_GET_BOARD_SERIAL 0x00010004
0187 typedef struct {
0188 bcm2835_mbox_tag_hdr tag_hdr;
0189 union {
0190 struct {
0191 } req;
0192 struct {
0193 uint64_t board_serial;
0194 } resp;
0195 } body;
0196 } bcm2835_mbox_tag_get_board_serial;
0197
0198 #define BCM2835_MAILBOX_TAG_GET_ARM_MEMORY 0x00010005
0199 typedef struct {
0200 bcm2835_mbox_tag_hdr tag_hdr;
0201 union {
0202 struct {
0203 } req;
0204 struct {
0205 uint32_t base;
0206 uint32_t size;
0207 } resp;
0208 } body;
0209 } bcm2835_mbox_tag_get_arm_memory;
0210
0211 #define BCM2835_MAILBOX_TAG_GET_VC_MEMORY 0x00010006
0212 typedef struct {
0213 bcm2835_mbox_tag_hdr tag_hdr;
0214 union {
0215 struct {
0216 } req;
0217 struct {
0218 uint32_t base;
0219 uint32_t size;
0220 } resp;
0221 } body;
0222 } bcm2835_mbox_tag_get_vc_memory;
0223
0224 #define BCM2835_MAILBOX_TAG_GET_CLOCKS 0x00010007
0225 typedef struct {
0226 bcm2835_mbox_tag_hdr tag_hdr;
0227 union {
0228 struct {
0229 uint32_t clock_id;
0230 } req;
0231 struct {
0232 uint32_t clock_id;
0233 uint32_t clock_rate;
0234 } resp;
0235 } body;
0236 } bcm2835_mbox_tag_get_clock_rate;
0237
0238
0239 #define BCM2835_MAILBOX_TAG_GET_CMD_LINE 0x00050001
0240 typedef struct {
0241 bcm2835_mbox_tag_hdr tag_hdr;
0242 union {
0243 struct {
0244 } req;
0245 struct {
0246 uint8_t cmdline[ 1024 ];
0247 } resp;
0248 } body;
0249 } bcm2835_mbox_tag_get_cmd_line;
0250
0251
0252 #define BCM2835_MAILBOX_TAG_GET_DMA_CHANNELS 0x00060001
0253
0254
0255 #define BCM2835_MAILBOX_POWER_UDID_SD_Card 0x00000000
0256 #define BCM2835_MAILBOX_POWER_UDID_UART0 0x00000001
0257 #define BCM2835_MAILBOX_POWER_UDID_UART1 0x00000002
0258 #define BCM2835_MAILBOX_POWER_UDID_USB_HCD 0x00000003
0259 #define BCM2835_MAILBOX_POWER_UDID_I2C0 0x00000004
0260 #define BCM2835_MAILBOX_POWER_UDID_I2C1 0x00000005
0261 #define BCM2835_MAILBOX_POWER_UDID_I2C2 0x00000006
0262 #define BCM2835_MAILBOX_POWER_UDID_SPI 0x00000007
0263 #define BCM2835_MAILBOX_POWER_UDID_CCP2TX 0x00000008
0264
0265 #define BCM2835_MAILBOX_TAG_GET_POWER_STATE 0x00020001
0266 typedef struct {
0267 bcm2835_mbox_tag_hdr tag_hdr;
0268 union {
0269 struct {
0270 uint32_t dev_id;
0271 } req;
0272 struct {
0273 uint32_t dev_id;
0274 uint32_t state;
0275 } resp;
0276 } body;
0277 } bcm2835_mbox_tag_get_power_state;
0278
0279 #define BCM2835_MAILBOX_POWER_STATE_RESP_ON (1 << 0)
0280 #define BCM2835_MAILBOX_POWER_STATE_RESP_NODEV (1 << 1)
0281
0282 #define BCM2835_MAILBOX_TAG_GET_TIMING 0x00020002
0283 #define BCM2835_MAILBOX_TAG_SET_POWER_STATE 0x00028001
0284 typedef struct {
0285 bcm2835_mbox_tag_hdr tag_hdr;
0286 union {
0287 struct {
0288 uint32_t dev_id;
0289 uint32_t state;
0290 } req;
0291 struct {
0292 uint32_t dev_id;
0293 uint32_t state;
0294 } resp;
0295 } body;
0296 } bcm2835_mbox_tag_power_state;
0297
0298 #ifndef BCM2835_MAILBOX_SET_POWER_STATE_REQ_ON
0299
0300 #define BCM2835_MAILBOX_SET_POWER_STATE_REQ_ON (1 << 0)
0301 #define BCM2835_MAILBOX_SET_POWER_STATE_REQ_WAIT (1 << 1)
0302 #endif
0303
0304
0305 #define BCM2835_MAILBOX_UCID_CLOCK_RESERVED 0x000000000
0306 #define BCM2835_MAILBOX_UCID_CLOCK_EMMC 0x000000001
0307 #define BCM2835_MAILBOX_UCID_CLOCK_UART 0x000000002
0308 #define BCM2835_MAILBOX_UCID_CLOCK_ARM 0x000000003
0309 #define BCM2835_MAILBOX_UCID_CLOCK_CORE 0x000000004
0310 #define BCM2835_MAILBOX_UCID_CLOCK_V3D 0x000000005
0311 #define BCM2835_MAILBOX_UCID_CLOCK_H264 0x000000006
0312 #define BCM2835_MAILBOX_UCID_CLOCK_ISP 0x000000007
0313 #define BCM2835_MAILBOX_UCID_CLOCK_SDRAM 0x000000008
0314 #define BCM2835_MAILBOX_UCID_CLOCK_PIXEL 0x000000009
0315 #define BCM2835_MAILBOX_UCID_CLOCK_PWM 0x00000000a
0316
0317 #define BCM2835_MAILBOX_TAG_GET_CLOCK_STATE 0x00030001
0318 #define BCM2835_MAILBOX_TAG_SET_CLOCK_STATE 0x00038001
0319 #define BCM2835_MAILBOX_TAG_GET_CLOCK_RATE 0x00030002
0320 #define BCM2835_MAILBOX_TAG_SET_CLOCK_RATE 0x00038002
0321 #define BCM2835_MAILBOX_TAG_GET_MAX_CLOCK_RATE 0x00030004
0322 #define BCM2835_MAILBOX_TAG_GET_MIN_CLOCK_RATE 0x00030007
0323 #define BCM2835_MAILBOX_TAG_GET_TRUBO 0x00030009
0324 #define BCM2835_MAILBOX_TAG_SET_TURBO 0x00038009
0325
0326 #define BCM2835_MAILBOX_TAG_GET_DOMAIN_STATE 0x00030030
0327 #define BCM2835_MAILBOX_TAG_SET_DOMAIN_STATE 0x00038030
0328
0329
0330 #define BCM2835_MAILBOX_VOLTAGE_RESERVED_UVID 0x000000000
0331 #define BCM2835_MAILBOX_VOLTAGE_CORE_UVID 0x000000001
0332 #define BCM2835_MAILBOX_VOLTAGE_SDRAM_C_UVID 0x000000002
0333 #define BCM2835_MAILBOX_VOLTAGE_SDRAM_P_UVID 0x000000003
0334 #define BCM2835_MAILBOX_VOLTAGE_SDRAM_I_UVID 0x000000004
0335
0336 #define BCM2835_MAILBOX_TAG_GET_VOLTAGE 0x00030003
0337 #define BCM2835_MAILBOX_TAG_SET_VOLTAGE 0x00038003
0338 #define BCM2835_MAILBOX_TAG_GET_MAX_VOLTAGE 0x00030005
0339 #define BCM2835_MAILBOX_TAG_GET_MIN_VOLTAGE 0x00030008
0340 #define BCM2835_MAILBOX_TAG_GET_TEMPERATURE 0x00030006
0341 #define BCM2835_MAILBOX_TAG_GET_MAX_TEMPERATURE 0x0003000a
0342
0343
0344 #define BCM2835_MAILBOX_TAG_ALLOCATE_MEMORY 0x0003000c
0345 #define BCM2835_MAILBOX_TAG_LOCK_MEMORY 0x0003000d
0346 #define BCM2835_MAILBOX_TAG_UNLOCK_MEMORY 0x0003000e
0347 #define BCM2835_MAILBOX_TAG_RELEASE_MEMORY 0x0003000f
0348 #define BCM2835_MAILBOX_TAG_EXECUTE_CODE 0x00030010
0349 #define BCM2835_MAILBOX_TAG_GET_DISPMANX_RESOURCE_MEM_HANDLE 0x00030014
0350
0351 #define BCM2835_MAILBOX_TAG_GET_EDID_BLOCK 0x00030020
0352
0353
0354 #define BCM2835_MAILBOX_TAG_ALLOCATE_BUFFER 0x00040001
0355 typedef struct {
0356 bcm2835_mbox_tag_hdr tag_hdr;
0357 union {
0358 struct {
0359 uint32_t align;
0360 } req;
0361 struct {
0362 uint32_t base;
0363 uint32_t size;
0364 } resp;
0365 } body;
0366 } bcm2835_mbox_tag_allocate_buffer;
0367
0368 #define BCM2835_MAILBOX_TAG_RELEASE_BUFFER 0x00048001
0369
0370 #define BCM2835_MAILBOX_TAG_BLANK_SCREEN 0x00040002
0371
0372 #define BCM2835_MAILBOX_TAG_GET_DISPLAY_SIZE 0x00040003
0373 #define BCM2835_MAILBOX_TAG_TEST_DISPLAY_SIZE 0x00044003
0374 #define BCM2835_MAILBOX_TAG_SET_DISPLAY_SIZE 0x00048003
0375 typedef struct {
0376 bcm2835_mbox_tag_hdr tag_hdr;
0377 union {
0378 struct {
0379 uint32_t width;
0380 uint32_t height;
0381 } req;
0382 struct {
0383 uint32_t width;
0384 uint32_t height;
0385 } resp;
0386 } body;
0387 } bcm2835_mbox_tag_display_size;
0388
0389 #define BCM2835_MAILBOX_TAG_GET_VIRTUAL_SIZE 0x00040004
0390 #define BCM2835_MAILBOX_TAG_TEST_VIRTUAL_SIZE 0x00044004
0391 #define BCM2835_MAILBOX_TAG_SET_VIRTUAL_SIZE 0x00048004
0392 typedef struct {
0393 bcm2835_mbox_tag_hdr tag_hdr;
0394 union {
0395 struct {
0396 uint32_t vwidth;
0397 uint32_t vheight;
0398 } req;
0399 struct {
0400 uint32_t vwidth;
0401 uint32_t vheight;
0402 } resp;
0403 } body;
0404 } bcm2835_mbox_tag_virtual_size;
0405
0406 #define BCM2835_MAILBOX_TAG_GET_DEPTH 0x00040005
0407 #define BCM2835_MAILBOX_TAG_TEST_DEPTH 0x00044005
0408 #define BCM2835_MAILBOX_TAG_SET_DEPTH 0x00048005
0409 typedef struct {
0410 bcm2835_mbox_tag_hdr tag_hdr;
0411 union {
0412 struct {
0413 uint32_t depth;
0414 } req;
0415 struct {
0416 uint32_t depth;
0417 } resp;
0418 } body;
0419 } bcm2835_mbox_tag_depth;
0420
0421 #define BCM2835_MAILBOX_TAG_GET_PIXEL_ORDER 0x00040006
0422 #define BCM2835_MAILBOX_TAG_TEST_PIXEL_ORDER 0x00044006
0423 #define BCM2835_MAILBOX_TAG_SET_PIXEL_ORDER 0x00048006
0424
0425 #define BCM2835_MAILBOX_PIXEL_ORDER_BGR 0
0426 #define BCM2835_MAILBOX_PIXEL_ORDER_RGB 1
0427 typedef struct {
0428 bcm2835_mbox_tag_hdr tag_hdr;
0429 union {
0430 struct {
0431 uint32_t pixel_order;
0432 } req;
0433 struct {
0434 uint32_t pixel_order;
0435 } resp;
0436 } body;
0437 } bcm2835_mbox_tag_pixel_order;
0438
0439 #define BCM2835_MAILBOX_TAG_GET_ALPHA_MODE 0x00040007
0440 #define BCM2835_MAILBOX_TAG_TEST_ALPHA_MODE 0x00044007
0441 #define BCM2835_MAILBOX_TAG_SET_ALPHA_MODE 0x00048007
0442 typedef struct {
0443 bcm2835_mbox_tag_hdr tag_hdr;
0444 union {
0445 struct {
0446 uint32_t alpha_mode;
0447 } req;
0448 struct {
0449 uint32_t alpha_mode;
0450 } resp;
0451 } body;
0452 } bcm2835_mbox_tag_alpha_mode;
0453
0454 #define BCM2835_MAILBOX_ALPHA_MODE_0_OPAQUE 0
0455 #define BCM2835_MAILBOX_ALPHA_MODE_0_TRANSPARENT 1
0456 #define BCM2835_MAILBOX_ALPHA_MODE_IGNORED 2
0457
0458 #define BCM2835_MAILBOX_TAG_GET_PITCH 0x00040008
0459 typedef struct {
0460 bcm2835_mbox_tag_hdr tag_hdr;
0461 union {
0462 struct {
0463 } req;
0464 struct {
0465 uint32_t pitch;
0466 } resp;
0467 } body;
0468 } bcm2835_mbox_tag_get_pitch;
0469
0470 #define BCM2835_MAILBOX_TAG_GET_VIRTUAL_OFFSET 0x00040009
0471 #define BCM2835_MAILBOX_TAG_TEST_VIRTUAL_OFFSET 0x00044009
0472 #define BCM2835_MAILBOX_TAG_SET_VIRTUAL_OFFSET 0x00048009
0473 typedef struct {
0474 bcm2835_mbox_tag_hdr tag_hdr;
0475 union {
0476 struct {
0477 uint32_t voffset_x;
0478 uint32_t voffset_y;
0479 } req;
0480 struct {
0481 uint32_t voffset_x;
0482 uint32_t voffset_y;
0483 } resp;
0484 } body;
0485 } bcm2835_mbox_tag_virtual_offset;
0486
0487 #define BCM2835_MAILBOX_TAG_GET_OVERSCAN 0x0004000a
0488 #define BCM2835_MAILBOX_TAG_TEST_OVERSCAN 0x0004400a
0489 #define BCM2835_MAILBOX_TAG_SET_OVERSCAN 0x0004800a
0490 typedef struct {
0491 bcm2835_mbox_tag_hdr tag_hdr;
0492 union {
0493 struct {
0494 uint32_t overscan_top;
0495 uint32_t overscan_bottom;
0496 uint32_t overscan_left;
0497 uint32_t overscan_right;
0498 } req;
0499 struct {
0500 uint32_t overscan_top;
0501 uint32_t overscan_bottom;
0502 uint32_t overscan_left;
0503 uint32_t overscan_right;
0504 } resp;
0505 } body;
0506 } bcm2835_mbox_tag_overscan;
0507
0508 #define BCM2835_MAILBOX_TAG_GET_PALETTE 0x0004000b
0509 #define BCM2835_MAILBOX_TAG_TEST_PALETTE 0x0004400b
0510 #define BCM2835_MAILBOX_TAG_SET_PALETTE 0x0004800b
0511 #define BCM2835_MAILBOX_TAG_SET_CURSOR_INFO 0x00008011
0512 #define BCM2835_MAILBOX_TAG_SET_CURSOR_STATE 0x00008010
0513
0514
0515
0516
0517
0518 #endif