]>
Commit | Line | Data |
---|---|---|
58ac482a FK |
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/>. | |
58ac482a FK |
22 | */ |
23 | ||
0553d895 MA |
24 | #ifndef XLNX_DP_H |
25 | #define XLNX_DP_H | |
26 | ||
58ac482a FK |
27 | #include "hw/sysbus.h" |
28 | #include "ui/console.h" | |
e0dadc1e | 29 | #include "hw/misc/auxbus.h" |
58ac482a FK |
30 | #include "hw/i2c/i2c.h" |
31 | #include "hw/display/dpcd.h" | |
6306cae2 | 32 | #include "hw/display/i2c-ddc.h" |
58ac482a | 33 | #include "qemu/fifo8.h" |
f0353b0d | 34 | #include "qemu/units.h" |
58ac482a FK |
35 | #include "hw/dma/xlnx_dpdma.h" |
36 | #include "audio/audio.h" | |
db1015e9 | 37 | #include "qom/object.h" |
58ac482a | 38 | |
f0353b0d PMD |
39 | #define AUD_CHBUF_MAX_DEPTH (32 * KiB) |
40 | #define MAX_QEMU_BUFFER_SIZE (4 * KiB) | |
58ac482a FK |
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 | ||
db1015e9 | 52 | struct XlnxDPState { |
58ac482a FK |
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; | |
db1015e9 | 105 | }; |
58ac482a FK |
106 | |
107 | #define TYPE_XLNX_DP "xlnx.v-dp" | |
8063396b | 108 | OBJECT_DECLARE_SIMPLE_TYPE(XlnxDPState, XLNX_DP) |
58ac482a | 109 | |
0553d895 | 110 | #endif |