bond/hal/boot.c
2018-03-23 20:58:24 -04:00

48 lines
993 B
C

#include "hal/print.h"
#include "hal/mem.h"
#include "hal/intr.h"
#include "hal/cpu.h"
#include "lib/sxtdlib.h"
#include "hal/boot.h"
#include "status.h"
static void SXAPI halp_obtain_cpu_info(struct boot_info *hal_info)
{
if (hal_info == NULL)
{
return;
}
uint32 eax = 0, ebx = 0, ecx = 0, edx = 0;
hal_cpuid(&eax, &ebx, &ecx, &edx);
lb_mem_copy(&ebx, &hal_info->cpu_vd_str[0], sizeof(uint32));
lb_mem_copy(&edx, &hal_info->cpu_vd_str[4], sizeof(uint32));
lb_mem_copy(&ecx, &hal_info->cpu_vd_str[8], sizeof(uint32));
hal_info->cpu_vd_str[12] = 0;
}
sx_status SXAPI hal_init(void *m_info)
{
if (m_info == NULL || (uint64) m_info & lb_bit_field_mask(0, 2))
{
return STATUS_FAIL;
}
// init HAL infrastructures
hal_print_init();
hal_mem_init();
struct boot_info *boot_info = halloc(sizeof(struct boot_info));
// obtain cpu info
halp_obtain_cpu_info(boot_info);
// init interrupt
if (hal_interrupt_init() != 0)
{
return STATUS_FAIL;
}
return STATUS_SUCCESS;
}