root / hw / intel-hda.h @ 78ced65e
History | View | Annotate | Download (2.2 kB)
1 | d61a4ce8 | Gerd Hoffmann | #ifndef HW_INTEL_HDA_H
|
---|---|---|---|
2 | d61a4ce8 | Gerd Hoffmann | #define HW_INTEL_HDA_H
|
3 | d61a4ce8 | Gerd Hoffmann | |
4 | d61a4ce8 | Gerd Hoffmann | #include "qdev.h" |
5 | d61a4ce8 | Gerd Hoffmann | |
6 | d61a4ce8 | Gerd Hoffmann | /* --------------------------------------------------------------------- */
|
7 | d61a4ce8 | Gerd Hoffmann | /* hda bus */
|
8 | d61a4ce8 | Gerd Hoffmann | |
9 | d61a4ce8 | Gerd Hoffmann | typedef struct HDACodecBus HDACodecBus; |
10 | d61a4ce8 | Gerd Hoffmann | typedef struct HDACodecDevice HDACodecDevice; |
11 | d61a4ce8 | Gerd Hoffmann | typedef struct HDACodecDeviceInfo HDACodecDeviceInfo; |
12 | d61a4ce8 | Gerd Hoffmann | |
13 | d61a4ce8 | Gerd Hoffmann | typedef void (*hda_codec_response_func)(HDACodecDevice *dev, |
14 | d61a4ce8 | Gerd Hoffmann | bool solicited, uint32_t response);
|
15 | d61a4ce8 | Gerd Hoffmann | typedef bool (*hda_codec_xfer_func)(HDACodecDevice *dev, |
16 | d61a4ce8 | Gerd Hoffmann | uint32_t stnr, bool output,
|
17 | d61a4ce8 | Gerd Hoffmann | uint8_t *buf, uint32_t len); |
18 | d61a4ce8 | Gerd Hoffmann | |
19 | d61a4ce8 | Gerd Hoffmann | struct HDACodecBus {
|
20 | d61a4ce8 | Gerd Hoffmann | BusState qbus; |
21 | d61a4ce8 | Gerd Hoffmann | uint32_t next_cad; |
22 | d61a4ce8 | Gerd Hoffmann | hda_codec_response_func response; |
23 | d61a4ce8 | Gerd Hoffmann | hda_codec_xfer_func xfer; |
24 | d61a4ce8 | Gerd Hoffmann | }; |
25 | d61a4ce8 | Gerd Hoffmann | |
26 | d61a4ce8 | Gerd Hoffmann | struct HDACodecDevice {
|
27 | d61a4ce8 | Gerd Hoffmann | DeviceState qdev; |
28 | d61a4ce8 | Gerd Hoffmann | HDACodecDeviceInfo *info; |
29 | d61a4ce8 | Gerd Hoffmann | uint32_t cad; /* codec address */
|
30 | d61a4ce8 | Gerd Hoffmann | }; |
31 | d61a4ce8 | Gerd Hoffmann | |
32 | d61a4ce8 | Gerd Hoffmann | struct HDACodecDeviceInfo {
|
33 | d61a4ce8 | Gerd Hoffmann | DeviceInfo qdev; |
34 | d61a4ce8 | Gerd Hoffmann | int (*init)(HDACodecDevice *dev);
|
35 | d61a4ce8 | Gerd Hoffmann | void (*command)(HDACodecDevice *dev, uint32_t nid, uint32_t data);
|
36 | d61a4ce8 | Gerd Hoffmann | void (*stream)(HDACodecDevice *dev, uint32_t stnr, bool running); |
37 | d61a4ce8 | Gerd Hoffmann | }; |
38 | d61a4ce8 | Gerd Hoffmann | |
39 | d61a4ce8 | Gerd Hoffmann | void hda_codec_bus_init(DeviceState *dev, HDACodecBus *bus,
|
40 | d61a4ce8 | Gerd Hoffmann | hda_codec_response_func response, |
41 | d61a4ce8 | Gerd Hoffmann | hda_codec_xfer_func xfer); |
42 | d61a4ce8 | Gerd Hoffmann | void hda_codec_register(HDACodecDeviceInfo *info);
|
43 | d61a4ce8 | Gerd Hoffmann | HDACodecDevice *hda_codec_find(HDACodecBus *bus, uint32_t cad); |
44 | d61a4ce8 | Gerd Hoffmann | |
45 | d61a4ce8 | Gerd Hoffmann | void hda_codec_response(HDACodecDevice *dev, bool solicited, uint32_t response); |
46 | d61a4ce8 | Gerd Hoffmann | bool hda_codec_xfer(HDACodecDevice *dev, uint32_t stnr, bool output, |
47 | d61a4ce8 | Gerd Hoffmann | uint8_t *buf, uint32_t len); |
48 | d61a4ce8 | Gerd Hoffmann | |
49 | d61a4ce8 | Gerd Hoffmann | /* --------------------------------------------------------------------- */
|
50 | d61a4ce8 | Gerd Hoffmann | |
51 | d61a4ce8 | Gerd Hoffmann | #define dprint(_dev, _level, _fmt, ...) \
|
52 | d61a4ce8 | Gerd Hoffmann | do { \
|
53 | d61a4ce8 | Gerd Hoffmann | if (_dev->debug >= _level) { \
|
54 | d61a4ce8 | Gerd Hoffmann | fprintf(stderr, "%s: ", _dev->name); \
|
55 | d61a4ce8 | Gerd Hoffmann | fprintf(stderr, _fmt, ## __VA_ARGS__); \ |
56 | d61a4ce8 | Gerd Hoffmann | } \ |
57 | d61a4ce8 | Gerd Hoffmann | } while (0) |
58 | d61a4ce8 | Gerd Hoffmann | |
59 | d61a4ce8 | Gerd Hoffmann | /* --------------------------------------------------------------------- */
|
60 | d61a4ce8 | Gerd Hoffmann | |
61 | d61a4ce8 | Gerd Hoffmann | #endif |