.

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); };로 변환되어 수행됩니다.

results matching ""

    No results matching ""