Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/genarch/src/drivers/ega/ega.c

    rb366a6f4 rc263c77  
    6464        IRQ_SPINLOCK_DECLARE(lock);
    6565       
    66         parea_t parea;
    67        
    6866        uint32_t cursor;
    6967        uint8_t *addr;
     
    7270} ega_instance_t;
    7371
    74 static void ega_putchar(outdev_t *, wchar_t);
     72static void ega_putchar(outdev_t *, wchar_t, bool);
    7573static void ega_redraw(outdev_t *);
    7674
     
    439437 * This function takes care of scrolling.
    440438 */
    441 static void ega_check_cursor(ega_instance_t *instance)
     439static void ega_check_cursor(ega_instance_t *instance, bool silent)
    442440{
    443441        if (instance->cursor < EGA_SCREEN)
     
    450448            EGA_COLS, EMPTY_CHAR);
    451449       
    452         if ((!instance->parea.mapped) || (console_override)) {
     450        if (!silent) {
    453451                memmove((void *) instance->addr,
    454452                    (void *) (instance->addr + EGA_COLS * 2),
     
    461459}
    462460
    463 static void ega_show_cursor(ega_instance_t *instance)
    464 {
    465         if ((!instance->parea.mapped) || (console_override)) {
     461static void ega_show_cursor(ega_instance_t *instance, bool silent)
     462{
     463        if (!silent) {
    466464                pio_write_8(instance->base + EGA_INDEX_REG, 0x0a);
    467465                uint8_t stat = pio_read_8(instance->base + EGA_DATA_REG);
     
    471469}
    472470
    473 static void ega_move_cursor(ega_instance_t *instance)
    474 {
    475         if ((!instance->parea.mapped) || (console_override)) {
     471static void ega_move_cursor(ega_instance_t *instance, bool silent)
     472{
     473        if (!silent) {
    476474                pio_write_8(instance->base + EGA_INDEX_REG, 0x0e);
    477475                pio_write_8(instance->base + EGA_DATA_REG,
     
    483481}
    484482
    485 static void ega_sync_cursor(ega_instance_t *instance)
    486 {
    487         if ((!instance->parea.mapped) || (console_override)) {
     483static void ega_sync_cursor(ega_instance_t *instance, bool silent)
     484{
     485        if (!silent) {
    488486                pio_write_8(instance->base + EGA_INDEX_REG, 0x0e);
    489487                uint8_t hi = pio_read_8(instance->base + EGA_DATA_REG);
     
    505503            EGA_SCREEN - instance->cursor, EMPTY_CHAR);
    506504       
    507         if ((!instance->parea.mapped) || (console_override))
     505        if (!silent)
    508506                memsetw(instance->addr + instance->cursor * 2,
    509507                    EGA_SCREEN - instance->cursor, EMPTY_CHAR);
    510508       
    511         ega_check_cursor(instance);
    512         ega_move_cursor(instance);
    513         ega_show_cursor(instance);
    514 }
    515 
    516 static void ega_display_char(ega_instance_t *instance, wchar_t ch)
     509        ega_check_cursor(instance, silent);
     510        ega_move_cursor(instance, silent);
     511        ega_show_cursor(instance, silent);
     512}
     513
     514static void ega_display_char(ega_instance_t *instance, wchar_t ch, bool silent)
    517515{
    518516        uint16_t index = ega_oem_glyph(ch);
     
    531529        instance->backbuf[instance->cursor * 2 + 1] = style;
    532530       
    533         if ((!instance->parea.mapped) || (console_override)) {
     531        if (!silent) {
    534532                instance->addr[instance->cursor * 2] = glyph;
    535533                instance->addr[instance->cursor * 2 + 1] = style;
     
    537535}
    538536
    539 static void ega_putchar(outdev_t *dev, wchar_t ch)
     537static void ega_putchar(outdev_t *dev, wchar_t ch, bool silent)
    540538{
    541539        ega_instance_t *instance = (ega_instance_t *) dev->data;
     
    557555                break;
    558556        default:
    559                 ega_display_char(instance, ch);
     557                ega_display_char(instance, ch, silent);
    560558                instance->cursor++;
    561559                break;
    562560        }
    563         ega_check_cursor(instance);
    564         ega_move_cursor(instance);
     561        ega_check_cursor(instance, silent);
     562        ega_move_cursor(instance, silent);
    565563       
    566564        irq_spinlock_unlock(&instance->lock, true);
     
    574572       
    575573        memcpy(instance->addr, instance->backbuf, EGA_VRAM_SIZE);
    576         ega_move_cursor(instance);
    577         ega_show_cursor(instance);
     574        ega_move_cursor(instance, silent);
     575        ega_show_cursor(instance, silent);
    578576       
    579577        irq_spinlock_unlock(&instance->lock, true);
     
    614612        }
    615613       
    616         link_initialize(&instance->parea.link);
    617         instance->parea.pbase = addr;
    618         instance->parea.frames = SIZE2FRAMES(EGA_VRAM_SIZE);
    619         instance->parea.unpriv = false;
    620         instance->parea.mapped = false;
    621         ddi_parea_register(&instance->parea);
    622        
    623614        /* Synchronize the back buffer and cursor position. */
    624615        memcpy(instance->backbuf, instance->addr, EGA_VRAM_SIZE);
    625         ega_sync_cursor(instance);
     616        ega_sync_cursor(instance, silent);
    626617       
    627618        if (!fb_exported) {
    628619                /*
    629                  * We export the kernel framebuffer for uspace usage.
    630                  * This is used in the case the uspace framebuffer
    631                  * driver is not self-sufficient.
     620                 * This is the necessary evil until the userspace driver is entirely
     621                 * self-sufficient.
    632622                 */
    633623                sysinfo_set_item_val("fb", NULL, true);
Note: See TracChangeset for help on using the changeset viewer.