1 /* 2 * xlnx_dp.h 3 * 4 * Copyright (C) 2015 : GreenSocs Ltd 5 * http://www.greensocs.com/ , email: info@greensocs.com 6 * 7 * Developed by : 8 * Frederic Konrad <fred.konrad@greensocs.com> 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License as published by 12 * the Free Software Foundation, either version 2 of the License, or 13 * (at your option) any later version. 14 * 15 * This program is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU General Public License for more details. 19 * 20 * You should have received a copy of the GNU General Public License along 21 * with this program; if not, see <http://www.gnu.org/licenses/>. 22 */ 23 24 #ifndef XLNX_DP_H 25 #define XLNX_DP_H 26 27 #include "hw/sysbus.h" 28 #include "ui/console.h" 29 #include "hw/misc/auxbus.h" 30 #include "hw/i2c/i2c.h" 31 #include "hw/display/dpcd.h" 32 #include "hw/display/i2c-ddc.h" 33 #include "qemu/fifo8.h" 34 #include "qemu/units.h" 35 #include "hw/dma/xlnx_dpdma.h" 36 #include "audio/audio.h" 37 #include "qom/object.h" 38 39 #define AUD_CHBUF_MAX_DEPTH (32 * KiB) 40 #define MAX_QEMU_BUFFER_SIZE (4 * KiB) 41 42 #define DP_CORE_REG_ARRAY_SIZE (0x3AF >> 2) 43 #define DP_AVBUF_REG_ARRAY_SIZE (0x238 >> 2) 44 #define DP_VBLEND_REG_ARRAY_SIZE (0x1DF >> 2) 45 #define DP_AUDIO_REG_ARRAY_SIZE (0x50 >> 2) 46 47 struct PixmanPlane { 48 pixman_format_code_t format; 49 DisplaySurface *surface; 50 }; 51 52 struct XlnxDPState { 53 /*< private >*/ 54 SysBusDevice parent_obj; 55 56 /* < public >*/ 57 MemoryRegion container; 58 59 uint32_t core_registers[DP_CORE_REG_ARRAY_SIZE]; 60 MemoryRegion core_iomem; 61 62 uint32_t avbufm_registers[DP_AVBUF_REG_ARRAY_SIZE]; 63 MemoryRegion avbufm_iomem; 64 65 uint32_t vblend_registers[DP_VBLEND_REG_ARRAY_SIZE]; 66 MemoryRegion vblend_iomem; 67 68 uint32_t audio_registers[DP_AUDIO_REG_ARRAY_SIZE]; 69 MemoryRegion audio_iomem; 70 71 QemuConsole *console; 72 73 /* 74 * This is the planes used to display in console. When the blending is 75 * enabled bout_plane is displayed in console else it's g_plane. 76 */ 77 struct PixmanPlane g_plane; 78 struct PixmanPlane v_plane; 79 struct PixmanPlane bout_plane; 80 81 QEMUSoundCard aud_card; 82 SWVoiceOut *amixer_output_stream; 83 int16_t audio_buffer_0[AUD_CHBUF_MAX_DEPTH]; 84 int16_t audio_buffer_1[AUD_CHBUF_MAX_DEPTH]; 85 size_t audio_data_available[2]; 86 int64_t temp_buffer[AUD_CHBUF_MAX_DEPTH]; 87 int16_t out_buffer[AUD_CHBUF_MAX_DEPTH]; 88 size_t byte_left; /* byte available in out_buffer. */ 89 size_t data_ptr; /* next byte to be sent to QEMU. */ 90 91 /* Associated DPDMA controller. */ 92 XlnxDPDMAState *dpdma; 93 94 qemu_irq irq; 95 96 AUXBus *aux_bus; 97 Fifo8 rx_fifo; 98 Fifo8 tx_fifo; 99 100 /* 101 * XXX: This should be in an other module. 102 */ 103 DPCDState *dpcd; 104 I2CDDCState *edid; 105 }; 106 typedef struct XlnxDPState XlnxDPState; 107 108 #define TYPE_XLNX_DP "xlnx.v-dp" 109 DECLARE_INSTANCE_CHECKER(XlnxDPState, XLNX_DP, 110 TYPE_XLNX_DP) 111 112 #endif 113