The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Распечатка 9.2 Зависимые от оборудования определения драйвера кадрового буфера

Распечатка 9.2 Зависимые от оборудования определения драйвера кадрового буфера

Предыдущая  Содержание  Следующая V*D*V

Распечатка 9.2

 

/* sfb.h */

 

#define SFB_VIDEOMEMSTART 0xA00000

#define SFB_VIDEOMEMSIZE 0x12C000

#define SFB_MAX_X 640

#define SFB_MAX_Y 480

#define SFB_MIN_X 320

#define SFB_MIN_Y 240

 

/* Наше оборудование не поддерживает прозрачность */

#define TRANSP_OFFSET 0

#define TRANSP_LENGTH 0

 

/*

 * Оборудование имеет от 0 до 255 (256) программируемых регистров

 * цветовой палитры

 */

#define SFB_MAX_PALETTE_REG256

#define SFB_PALETTE_START 0xB2C100

 

/* Регистр режимов и режимы */

#define SFB_MODE_REG 0xB2C004

#define SFB_8BPP 0x1

#define SFB_16BPP 0x10

#define SFB_32BPP 0x100

 

/* Регистр разрешения экрана */

#define SFB_RESOLUTION_REG 0xB2C008

 

/*

 * Другой режим bits_per_pixel (8/16/24/32) является аппаратно

 * зависимым. Таким образом, этот режим должен быть обработан соответствующим образом.

 * Оборудование SFB поддерживает только режимы 8, 16 и 32 бита, Проверьте

 * соответствие режимов и внесите соответствующие коррективы

 */

 

static inline int sfb_check_bpp(struct fb_var_screeninfo *var)

{

    if (var->bits_per_pixel <= 8)

        var->bits_per_pixel = 8;

    else if (var->bits_per_pixel <= 16)

        var->bits_per_pixel = 16;

    else if (var->bits_per_pixel <= 32)

        var->bits_per_pixel = 32;

    else

        return -EINVAL;

    return 0;

}

 

static inline void sfb_fixup_var_modes(struct fb_var_screeninfo *var)

{

    switch (var->bits_per_pixel) {

    case 8:

        var->red.offset = 0;

        var->red.length = 3;

        var->green.offset = 3;

        var->green.length = 3;

        var->blue.offset = 6;

        var->blue.length = 2;

        var->transp.offset = TRANSP_OFFSET;

        var->transp.length = TRANSP_LENGTH;

        break;

 

    case 16: /*RGB565*/

        var->red.offset = 0;

        var->red.length = 5;

        var->green.offset = 5;

        var->green.length = 6;

        var->blue.offset = 11;

        var->blue.length = 5;

        var->transp.offset = TRANSP_OFFSET;

        var->transp.length = TRANSP_LENGTH;

        break;

 

    case 24:

    case 32: /* RGBX 888 */

        var->red.offset = 0;

        var->red.length = 8;

        var->green.offset = 8;

        var->green.length = 8;

        var->blue.offset = 16;

        var->blue.length = 8;

        var->transp.offset = TRANSP_OFFSET;

        var->transp.length = TRANSP_LENGTH;

        break;

    }

    var->red.msb_right = 0;

    var->green.msb_right = 0;

    var->blue.msb_right = 0;

    var->transp.msb_right = 0;

}

 

/* Программируем оборудование, базируясь на настройках пользователя */

static inline sfb_program_hardware(struct fb_info *info)

{

    *((unsigned int*)(SFB_RESOLUTION_REG)) =

        ((info->var.yres_virtual & 0xFFFF) << 0xFFFF) |

        (info->var.xres_virtual & 0xFFFF)

 

    switch(info->var.bits_per_pixel) {

    case 8:

        *((unsigned int*)(SFB_MODE_REG)) = SFB_8BPP;

        break;

 

    case 16:

        *((unsigned int*)(SFB_MODE_REG)) = SFB_16BPP;

        break;

 

    case 32:

        *((unsigned int*)(SFB_MODE_REG)) = SFB_32BPP;

        break;

    }

}

 

Предыдущая  Содержание  Следующая