Ignore:
Timestamp:
2020-12-29T22:17:21Z (3 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
11e394f, d70dc1c4
Parents:
1483981
Message:

Show kernel console again when its physical area is unmapped

It's good to be able to see the stack trace if e.g. display server
crashes.

File:
1 edited

Legend:

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

    r1483981 re037cf37  
    568568}
    569569
    570 static void ega_redraw(outdev_t *dev)
    571 {
    572         ega_instance_t *instance = (ega_instance_t *) dev->data;
    573 
    574         irq_spinlock_lock(&instance->lock, true);
    575 
     570static void ega_redraw_internal(ega_instance_t *instance)
     571{
    576572        memcpy(instance->addr, instance->backbuf, EGA_VRAM_SIZE);
    577573        ega_move_cursor(instance);
    578574        ega_show_cursor(instance);
    579 
     575}
     576
     577static void ega_redraw(outdev_t *dev)
     578{
     579        ega_instance_t *instance = (ega_instance_t *) dev->data;
     580
     581        irq_spinlock_lock(&instance->lock, true);
     582        ega_redraw_internal(instance);
    580583        irq_spinlock_unlock(&instance->lock, true);
     584}
     585
     586/** EGA was mapped or unmapped.
     587 *
     588 * @param arg EGA instance
     589 */
     590static void ega_mapped_changed(void *arg)
     591{
     592        ega_instance_t *instance = (ega_instance_t *) arg;
     593
     594        if (!instance->parea.mapped) {
     595                irq_spinlock_lock(&instance->lock, true);
     596                ega_redraw_internal(instance);
     597                irq_spinlock_unlock(&instance->lock, true);
     598        }
    581599}
    582600
     
    621639        instance->parea.unpriv = false;
    622640        instance->parea.mapped = false;
     641        instance->parea.mapped_changed = ega_mapped_changed;
     642        instance->parea.arg = (void *) instance;
    623643        ddi_parea_register(&instance->parea);
    624644
Note: See TracChangeset for help on using the changeset viewer.