void processor_start(int mode) { const struct video_timing *m = &video_modes[mode]; processor_mode = mode; processor_h_active = m->h_active; processor_v_active = m->v_active; processor_refresh = calculate_refresh_rate(m); hdmi_out0_fi_enable_write(0); hdmi_out1_fi_enable_write(0); hdmi_out0_driver_clocking_pll_reset_write(1); hdmi_in0_edid_hpd_en_write(0); hdmi_in1_edid_hpd_en_write(0); hdmi_in0_disable(); hdmi_in1_disable(); hdmi_in0_clear_framebuffers(); hdmi_in1_clear_framebuffers(); pattern_fill_framebuffer(m->h_active, m->v_active); pll_config_for_clock(m->pixel_clock); fb_set_mode(m); edid_set_mode(m); hdmi_in0_init_video(m->h_active, m->v_active); hdmi_in1_init_video(m->h_active, m->v_active); hdmi_out0_driver_clocking_pll_reset_write(0); hdmi_out0_fi_enable_write(1); hdmi_out1_fi_enable_write(1); hdmi_in0_edid_hpd_en_write(1); hdmi_in1_edid_hpd_en_write(1); }
void kmain() { irq_disable(); /* * A primeira coisa a se fazer é iniciar todo o gerenciador * de memória. */ mm_init(); arch_early_init(); ioremap_init(); irq_init(); sched_init(); timer_init(); /* * Neste momento temos o gerenciador de memória e escalonador prontos, * já podemos habilitar as interrupções, que podem ser utilizadas * pelos drivers. */ irq_enable(); /* Inicia os drivers da plataforma */ arch_setup(); /* Requisita um modo se existir um framebuffer*/ fb_set_mode(); /* Inicia o console sobre o framebuffer */ fb_console_init(); kernel_info(); #if 1 irq_disable(); semaphore_init(&sem, 1); create_task("a", 4); create_task("b", 5); create_task("c", 6); create_task("d", 7); create_task("b", 8); create_task("b", 9); irq_enable(); /* Fica de boas esperando as trocas de contexto */ #endif /* Como queremos imprimir para depuração do driver, inicializamos ele agora */ //bcm2835_emmc_init(); for (;;) { led_blink(); //printk("-"); } }