]>
Commit | Line | Data |
---|---|---|
58ac482a FK |
1 | /* |
2 | * xlnx_dp.h | |
3 | * | |
4 | * Copyright (C) 2015 : GreenSocs Ltd | |
5 | * http://www.greensocs.com/ , email: [email protected] | |
6 | * | |
7 | * Developed by : | |
8 | * Frederic Konrad <[email protected]> | |
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 | ||
25 | #include "hw/sysbus.h" | |
26 | #include "ui/console.h" | |
e0dadc1e | 27 | #include "hw/misc/auxbus.h" |
58ac482a FK |
28 | #include "hw/i2c/i2c.h" |
29 | #include "hw/display/dpcd.h" | |
30 | #include "hw/i2c/i2c-ddc.h" | |
31 | #include "qemu/fifo8.h" | |
32 | #include "hw/dma/xlnx_dpdma.h" | |
33 | #include "audio/audio.h" | |
34 | ||
35 | #ifndef XLNX_DP_H | |
36 | #define XLNX_DP_H | |
37 | ||
38 | #define AUD_CHBUF_MAX_DEPTH 32768 | |
39 | #define MAX_QEMU_BUFFER_SIZE 4096 | |
40 | ||
41 | #define DP_CORE_REG_ARRAY_SIZE (0x3AF >> 2) | |
42 | #define DP_AVBUF_REG_ARRAY_SIZE (0x238 >> 2) | |
43 | #define DP_VBLEND_REG_ARRAY_SIZE (0x1DF >> 2) | |
44 | #define DP_AUDIO_REG_ARRAY_SIZE (0x50 >> 2) | |
45 | ||
46 | struct PixmanPlane { | |
47 | pixman_format_code_t format; | |
48 | DisplaySurface *surface; | |
49 | }; | |
50 | ||
51 | typedef struct XlnxDPState { | |
52 | /*< private >*/ | |
53 | SysBusDevice parent_obj; | |
54 | ||
55 | /* < public >*/ | |
56 | MemoryRegion container; | |
57 | ||
58 | uint32_t core_registers[DP_CORE_REG_ARRAY_SIZE]; | |
59 | MemoryRegion core_iomem; | |
60 | ||
61 | uint32_t avbufm_registers[DP_AVBUF_REG_ARRAY_SIZE]; | |
62 | MemoryRegion avbufm_iomem; | |
63 | ||
64 | uint32_t vblend_registers[DP_VBLEND_REG_ARRAY_SIZE]; | |
65 | MemoryRegion vblend_iomem; | |
66 | ||
67 | uint32_t audio_registers[DP_AUDIO_REG_ARRAY_SIZE]; | |
68 | MemoryRegion audio_iomem; | |
69 | ||
70 | QemuConsole *console; | |
71 | ||
72 | /* | |
73 | * This is the planes used to display in console. When the blending is | |
74 | * enabled bout_plane is displayed in console else it's g_plane. | |
75 | */ | |
76 | struct PixmanPlane g_plane; | |
77 | struct PixmanPlane v_plane; | |
78 | struct PixmanPlane bout_plane; | |
79 | ||
80 | QEMUSoundCard aud_card; | |
81 | SWVoiceOut *amixer_output_stream; | |
82 | int16_t audio_buffer_0[AUD_CHBUF_MAX_DEPTH]; | |
83 | int16_t audio_buffer_1[AUD_CHBUF_MAX_DEPTH]; | |
84 | size_t audio_data_available[2]; | |
85 | int64_t temp_buffer[AUD_CHBUF_MAX_DEPTH]; | |
86 | int16_t out_buffer[AUD_CHBUF_MAX_DEPTH]; | |
87 | size_t byte_left; /* byte available in out_buffer. */ | |
88 | size_t data_ptr; /* next byte to be sent to QEMU. */ | |
89 | ||
90 | /* Associated DPDMA controller. */ | |
91 | XlnxDPDMAState *dpdma; | |
92 | ||
93 | qemu_irq irq; | |
94 | ||
95 | AUXBus *aux_bus; | |
96 | Fifo8 rx_fifo; | |
97 | Fifo8 tx_fifo; | |
98 | ||
99 | /* | |
100 | * XXX: This should be in an other module. | |
101 | */ | |
102 | DPCDState *dpcd; | |
103 | I2CDDCState *edid; | |
104 | } XlnxDPState; | |
105 | ||
106 | #define TYPE_XLNX_DP "xlnx.v-dp" | |
107 | #define XLNX_DP(obj) OBJECT_CHECK(XlnxDPState, (obj), TYPE_XLNX_DP) | |
108 | ||
109 | #endif /* !XLNX_DP_H */ |