.
board/raspberrypi/rpi/rpi.c
1 int dram_init(void)
2 {
3 ALLOC_CACHE_ALIGN_BUFFER(struct msg_get_arm_mem, msg, 1);
4 int ret;
5
6 BCM2835_MBOX_INIT_HDR(msg);
7 BCM2835_MBOX_INIT_TAG(&msg->get_arm_mem, GET_ARM_MEMORY);
8
9 ret = bcm2835_mbox_call_prop(BCM2835_MBOX_PROP_CHAN, &msg->hdr);
10 if (ret) {
11 printf("bcm2835: Could not query ARM memory size\n");
12 return -1;
13 }
14
15 gd->ram_size = msg->get_arm_mem.body.resp.mem_size;
16
17 return 0;
18 }
- 3번 줄과 6번, 7번줄의 함수는
include/memalign.h
에서 define으로 정의된 함수입니다. - 3번 줄의
ALLOC_CACHE_ALIGN_BUFFER(struct msg_get_arm_mem, msg, 1);
은char __msg[((((((((1) * sizeof(struct msg_get_arm_mem)) - 1) / (1) + 1) * 1)) + (64) - 1) & ~((64) - 1)) + (64 - 1)]; struct msg_get_arm_mem *msg = (struct msg_get_arm_mem *)(((((uintptr_t)__msg))+((typeof((uintptr_t)__msg))(64)-1))&~((typeof((uintptr_t)__msg))(64)-1));
로 변환되어 수행됩니다. - 6번 줄의
BCM2835_MBOX_INIT_HDR(msg);
은{ memset((msg), 0, sizeof(*(msg))); (msg)->hdr.buf_size = sizeof(*(msg)); (msg)->hdr.code = 0; (msg)->end_tag = 0; };
로 변환되어 수행되어 집니다. - 7번 줄의
BCM2835_MBOX_INIT_TAG(&msg->get_arm_mem, GET_ARM_MEMORY);
은{ (&msg->get_arm_mem)->tag_hdr.tag = 0x00010005; (&msg->get_arm_mem)->tag_hdr.val_buf_size = sizeof((&msg->get_arm_mem)->body); (&msg->get_arm_mem)->tag_hdr.val_len = sizeof((&msg->get_arm_mem)->body.req); };
로 변환되어 수행됩니다.