mirror of
https://github.com/qemu/qemu.git
synced 2025-08-02 12:45:00 +00:00

Set frame buffer endianness according to requested endianness for frame buffer apertures. We set frame buffer to big endian if any of the two apertures are set to big endian. Using different endianness for the two apertures is not implemented. This fixes inverted colors with MacOS and Xorg frame buffer driver but some Linux drivers may have endianness issues even on real hardware so this may not fix all cases. MorphOS uses aper0 in LE, Linux uses aper0 in BE and MacOS uses aper1 in BE but not sure about others or if MacOS also may need aper0 in which case we'll need a more complex fix but MacOS has other problems yet so for now this might work. Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu> Message-id: e2a7ec7af3fc30523213bcd27832ccad34323f2c.1565558093.git.balaton@eik.bme.hu Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
103 lines
2.4 KiB
C
103 lines
2.4 KiB
C
/*
|
|
* QEMU ATI SVGA emulation
|
|
*
|
|
* Copyright (c) 2019 BALATON Zoltan
|
|
*
|
|
* This work is licensed under the GNU GPL license version 2 or later.
|
|
*/
|
|
|
|
#ifndef ATI_INT_H
|
|
#define ATI_INT_H
|
|
|
|
#include "hw/pci/pci.h"
|
|
#include "hw/i2c/bitbang_i2c.h"
|
|
#include "vga_int.h"
|
|
|
|
/*#define DEBUG_ATI*/
|
|
|
|
#ifdef DEBUG_ATI
|
|
#define DPRINTF(fmt, ...) printf("%s: " fmt, __func__, ## __VA_ARGS__)
|
|
#else
|
|
#define DPRINTF(fmt, ...) do {} while (0)
|
|
#endif
|
|
|
|
#define PCI_VENDOR_ID_ATI 0x1002
|
|
/* Rage128 Pro GL */
|
|
#define PCI_DEVICE_ID_ATI_RAGE128_PF 0x5046
|
|
/* Radeon RV100 (VE) */
|
|
#define PCI_DEVICE_ID_ATI_RADEON_QY 0x5159
|
|
|
|
#define TYPE_ATI_VGA "ati-vga"
|
|
#define ATI_VGA(obj) OBJECT_CHECK(ATIVGAState, (obj), TYPE_ATI_VGA)
|
|
|
|
typedef struct ATIVGARegs {
|
|
uint32_t mm_index;
|
|
uint32_t bios_scratch[8];
|
|
uint32_t crtc_gen_cntl;
|
|
uint32_t crtc_ext_cntl;
|
|
uint32_t dac_cntl;
|
|
uint32_t gpio_vga_ddc;
|
|
uint32_t gpio_dvi_ddc;
|
|
uint32_t gpio_monid;
|
|
uint32_t config_cntl;
|
|
uint32_t crtc_h_total_disp;
|
|
uint32_t crtc_h_sync_strt_wid;
|
|
uint32_t crtc_v_total_disp;
|
|
uint32_t crtc_v_sync_strt_wid;
|
|
uint32_t crtc_offset;
|
|
uint32_t crtc_offset_cntl;
|
|
uint32_t crtc_pitch;
|
|
uint32_t cur_offset;
|
|
uint32_t cur_hv_pos;
|
|
uint32_t cur_hv_offs;
|
|
uint32_t cur_color0;
|
|
uint32_t cur_color1;
|
|
uint32_t dst_offset;
|
|
uint32_t dst_pitch;
|
|
uint32_t dst_tile;
|
|
uint32_t dst_width;
|
|
uint32_t dst_height;
|
|
uint32_t src_offset;
|
|
uint32_t src_pitch;
|
|
uint32_t src_tile;
|
|
uint32_t src_x;
|
|
uint32_t src_y;
|
|
uint32_t dst_x;
|
|
uint32_t dst_y;
|
|
uint32_t dp_gui_master_cntl;
|
|
uint32_t dp_brush_bkgd_clr;
|
|
uint32_t dp_brush_frgd_clr;
|
|
uint32_t dp_src_frgd_clr;
|
|
uint32_t dp_src_bkgd_clr;
|
|
uint32_t dp_cntl;
|
|
uint32_t dp_datatype;
|
|
uint32_t dp_mix;
|
|
uint32_t dp_write_mask;
|
|
uint32_t default_offset;
|
|
uint32_t default_pitch;
|
|
uint32_t default_tile;
|
|
uint32_t default_sc_bottom_right;
|
|
} ATIVGARegs;
|
|
|
|
typedef struct ATIVGAState {
|
|
PCIDevice dev;
|
|
VGACommonState vga;
|
|
char *model;
|
|
uint16_t dev_id;
|
|
uint8_t mode;
|
|
bool cursor_guest_mode;
|
|
uint16_t cursor_size;
|
|
uint32_t cursor_offset;
|
|
QEMUCursor *cursor;
|
|
bitbang_i2c_interface bbi2c;
|
|
MemoryRegion io;
|
|
MemoryRegion mm;
|
|
ATIVGARegs regs;
|
|
} ATIVGAState;
|
|
|
|
const char *ati_reg_name(int num);
|
|
|
|
void ati_2d_blt(ATIVGAState *s);
|
|
|
|
#endif /* ATI_INT_H */
|