Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/fb/kfb/port.c

    rf4665bdc r8d2dd7f2  
    6666
    6767typedef struct {
    68         sysarg_t paddr;
    6968        sysarg_t width;
    7069        sysarg_t height;
     
    8685static vslmode_list_element_t pixel_mode;
    8786
     87static pixel_t color_table[16] = {
     88        [COLOR_BLACK]       = 0x000000,
     89        [COLOR_BLUE]        = 0x0000f0,
     90        [COLOR_GREEN]       = 0x00f000,
     91        [COLOR_CYAN]        = 0x00f0f0,
     92        [COLOR_RED]         = 0xf00000,
     93        [COLOR_MAGENTA]     = 0xf000f0,
     94        [COLOR_YELLOW]      = 0xf0f000,
     95        [COLOR_WHITE]       = 0xf0f0f0,
     96
     97        [COLOR_BLACK + 8]   = 0x000000,
     98        [COLOR_BLUE + 8]    = 0x0000ff,
     99        [COLOR_GREEN + 8]   = 0x00ff00,
     100        [COLOR_CYAN + 8]    = 0x00ffff,
     101        [COLOR_RED + 8]     = 0xff0000,
     102        [COLOR_MAGENTA + 8] = 0xff00ff,
     103        [COLOR_YELLOW + 8]  = 0xffff00,
     104        [COLOR_WHITE + 8]   = 0xffffff,
     105};
     106
     107static inline void attrs_rgb(char_attrs_t attrs, pixel_t *bgcolor, pixel_t *fgcolor)
     108{
     109        switch (attrs.type) {
     110        case CHAR_ATTR_STYLE:
     111                switch (attrs.val.style) {
     112                case STYLE_NORMAL:
     113                        *bgcolor = color_table[COLOR_WHITE];
     114                        *fgcolor = color_table[COLOR_BLACK];
     115                        break;
     116                case STYLE_EMPHASIS:
     117                        *bgcolor = color_table[COLOR_WHITE];
     118                        *fgcolor = color_table[COLOR_RED];
     119                        break;
     120                case STYLE_INVERTED:
     121                        *bgcolor = color_table[COLOR_BLACK];
     122                        *fgcolor = color_table[COLOR_WHITE];
     123                        break;
     124                case STYLE_SELECTED:
     125                        *bgcolor = color_table[COLOR_RED];
     126                        *fgcolor = color_table[COLOR_WHITE];
     127                        break;
     128                }
     129                break;
     130        case CHAR_ATTR_INDEX:
     131                *bgcolor = color_table[(attrs.val.index.bgcolor & 7) |
     132                    ((attrs.val.index.attr & CATTR_BRIGHT) ? 8 : 0)];
     133                *fgcolor = color_table[(attrs.val.index.fgcolor & 7) |
     134                    ((attrs.val.index.attr & CATTR_BRIGHT) ? 8 : 0)];
     135                break;
     136        case CHAR_ATTR_RGB:
     137                *bgcolor = attrs.val.rgb.bgcolor;
     138                *fgcolor = attrs.val.rgb.fgcolor;
     139                break;
     140        }
     141}
     142
    88143static int kfb_claim(visualizer_t *vs)
    89144{
    90         return physmem_map(kfb.paddr + kfb.offset,
    91             ALIGN_UP(kfb.size, PAGE_SIZE) >> PAGE_WIDTH,
    92             AS_AREA_READ | AS_AREA_WRITE, (void *) &kfb.addr);
     145        return EOK;
    93146}
    94147
    95148static int kfb_yield(visualizer_t *vs)
    96149{
    97         int rc;
    98 
    99150        if (vs->mode_set) {
    100151                vs->ops.handle_damage = NULL;
    101152        }
    102153
    103         rc = physmem_unmap(kfb.addr);
    104         if (rc != EOK)
    105                 return rc;
    106 
    107         kfb.addr = NULL;
    108154        return EOK;
    109155}
     
    165211{
    166212        visualizer_t *vsl;
    167         int rc;
    168213
    169214        vsl = (visualizer_t *) ddf_fun_data_get((ddf_fun_t *)arg);
    170215        graph_visualizer_connection(vsl, iid, icall, NULL);
    171 
    172         if (kfb.addr != NULL) {
    173                 rc = physmem_unmap(kfb.addr);
    174                 if (rc == EOK)
    175                         kfb.addr = NULL;
    176         }
    177216}
    178217
     
    227266        kfb.width = width;
    228267        kfb.height = height;
    229         kfb.paddr = paddr;
    230268        kfb.offset = offset;
    231269        kfb.scanline = scanline;
     
    305343        kfb.size = scanline * height;
    306344        kfb.addr = AS_AREA_ANY;
     345       
     346        rc = physmem_map(paddr + offset,
     347            ALIGN_UP(kfb.size, PAGE_SIZE) >> PAGE_WIDTH,
     348            AS_AREA_READ | AS_AREA_WRITE, (void *) &kfb.addr);
     349        if (rc != EOK)
     350                return rc;
    307351       
    308352        ddf_fun_t *fun_vs = ddf_fun_create(dev, fun_exposed, "vsl0");
Note: See TracChangeset for help on using the changeset viewer.