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 #include "hw/ptimer.h" 39 40 #define AUD_CHBUF_MAX_DEPTH (32 * KiB) 41 #define MAX_QEMU_BUFFER_SIZE (4 * KiB) 42 43 #define DP_CORE_REG_OFFSET (0x0000) 44 #define DP_CORE_REG_ARRAY_SIZE (0x3B0 >> 2) 45 #define DP_AVBUF_REG_OFFSET (0xB000) 46 #define DP_AVBUF_REG_ARRAY_SIZE (0x238 >> 2) 47 #define DP_VBLEND_REG_OFFSET (0xA000) 48 #define DP_VBLEND_REG_ARRAY_SIZE (0x1E0 >> 2) 49 #define DP_AUDIO_REG_OFFSET (0xC000) 50 #define DP_AUDIO_REG_ARRAY_SIZE (0x50 >> 2) 51 #define DP_CONTAINER_SIZE (0xC050) 52 53 struct PixmanPlane { 54 pixman_format_code_t format; 55 DisplaySurface *surface; 56 }; 57 58 struct XlnxDPState { 59 /*< private >*/ 60 SysBusDevice parent_obj; 61 62 /* < public >*/ 63 MemoryRegion container; 64 65 uint32_t core_registers[DP_CORE_REG_ARRAY_SIZE]; 66 MemoryRegion core_iomem; 67 68 uint32_t avbufm_registers[DP_AVBUF_REG_ARRAY_SIZE]; 69 MemoryRegion avbufm_iomem; 70 71 uint32_t vblend_registers[DP_VBLEND_REG_ARRAY_SIZE]; 72 MemoryRegion vblend_iomem; 73 74 uint32_t audio_registers[DP_AUDIO_REG_ARRAY_SIZE]; 75 MemoryRegion audio_iomem; 76 77 QemuConsole *console; 78 79 /* 80 * This is the planes used to display in console. When the blending is 81 * enabled bout_plane is displayed in console else it's g_plane. 82 */ 83 struct PixmanPlane g_plane; 84 struct PixmanPlane v_plane; 85 struct PixmanPlane bout_plane; 86 87 QEMUSoundCard aud_card; 88 SWVoiceOut *amixer_output_stream; 89 int16_t audio_buffer_0[AUD_CHBUF_MAX_DEPTH]; 90 int16_t audio_buffer_1[AUD_CHBUF_MAX_DEPTH]; 91 size_t audio_data_available[2]; 92 int64_t temp_buffer[AUD_CHBUF_MAX_DEPTH]; 93 int16_t out_buffer[AUD_CHBUF_MAX_DEPTH]; 94 size_t byte_left; /* byte available in out_buffer. */ 95 size_t data_ptr; /* next byte to be sent to QEMU. */ 96 97 /* Associated DPDMA controller. */ 98 XlnxDPDMAState *dpdma; 99 100 qemu_irq irq; 101 102 AUXBus *aux_bus; 103 Fifo8 rx_fifo; 104 Fifo8 tx_fifo; 105 106 /* 107 * XXX: This should be in an other module. 108 */ 109 DPCDState *dpcd; 110 I2CDDCState *edid; 111 112 ptimer_state *vblank; 113 }; 114 115 #define TYPE_XLNX_DP "xlnx.v-dp" 116 OBJECT_DECLARE_SIMPLE_TYPE(XlnxDPState, XLNX_DP) 117 118 #endif 119