root / hw / audio / intel-hda.h @ a8aec295
History | View | Annotate | Download (2.7 kB)
1 | d61a4ce8 | Gerd Hoffmann | #ifndef HW_INTEL_HDA_H
|
---|---|---|---|
2 | d61a4ce8 | Gerd Hoffmann | #define HW_INTEL_HDA_H
|
3 | d61a4ce8 | Gerd Hoffmann | |
4 | 83c9f4ca | Paolo Bonzini | #include "hw/qdev.h" |
5 | d61a4ce8 | Gerd Hoffmann | |
6 | d61a4ce8 | Gerd Hoffmann | /* --------------------------------------------------------------------- */
|
7 | d61a4ce8 | Gerd Hoffmann | /* hda bus */
|
8 | d61a4ce8 | Gerd Hoffmann | |
9 | dbaa7904 | Anthony Liguori | #define TYPE_HDA_CODEC_DEVICE "hda-codec" |
10 | dbaa7904 | Anthony Liguori | #define HDA_CODEC_DEVICE(obj) \
|
11 | dbaa7904 | Anthony Liguori | OBJECT_CHECK(HDACodecDevice, (obj), TYPE_HDA_CODEC_DEVICE) |
12 | dbaa7904 | Anthony Liguori | #define HDA_CODEC_DEVICE_CLASS(klass) \
|
13 | dbaa7904 | Anthony Liguori | OBJECT_CLASS_CHECK(HDACodecDeviceClass, (klass), TYPE_HDA_CODEC_DEVICE) |
14 | dbaa7904 | Anthony Liguori | #define HDA_CODEC_DEVICE_GET_CLASS(obj) \
|
15 | dbaa7904 | Anthony Liguori | OBJECT_GET_CLASS(HDACodecDeviceClass, (obj), TYPE_HDA_CODEC_DEVICE) |
16 | dbaa7904 | Anthony Liguori | |
17 | 0d936928 | Anthony Liguori | #define TYPE_HDA_BUS "HDA" |
18 | 0d936928 | Anthony Liguori | #define HDA_BUS(obj) OBJECT_CHECK(HDACodecBus, (obj), TYPE_HDA_BUS)
|
19 | 0d936928 | Anthony Liguori | |
20 | d61a4ce8 | Gerd Hoffmann | typedef struct HDACodecBus HDACodecBus; |
21 | d61a4ce8 | Gerd Hoffmann | typedef struct HDACodecDevice HDACodecDevice; |
22 | d61a4ce8 | Gerd Hoffmann | |
23 | d61a4ce8 | Gerd Hoffmann | typedef void (*hda_codec_response_func)(HDACodecDevice *dev, |
24 | d61a4ce8 | Gerd Hoffmann | bool solicited, uint32_t response);
|
25 | d61a4ce8 | Gerd Hoffmann | typedef bool (*hda_codec_xfer_func)(HDACodecDevice *dev, |
26 | d61a4ce8 | Gerd Hoffmann | uint32_t stnr, bool output,
|
27 | d61a4ce8 | Gerd Hoffmann | uint8_t *buf, uint32_t len); |
28 | d61a4ce8 | Gerd Hoffmann | |
29 | d61a4ce8 | Gerd Hoffmann | struct HDACodecBus {
|
30 | d61a4ce8 | Gerd Hoffmann | BusState qbus; |
31 | d61a4ce8 | Gerd Hoffmann | uint32_t next_cad; |
32 | d61a4ce8 | Gerd Hoffmann | hda_codec_response_func response; |
33 | d61a4ce8 | Gerd Hoffmann | hda_codec_xfer_func xfer; |
34 | d61a4ce8 | Gerd Hoffmann | }; |
35 | d61a4ce8 | Gerd Hoffmann | |
36 | dbaa7904 | Anthony Liguori | typedef struct HDACodecDeviceClass |
37 | dbaa7904 | Anthony Liguori | { |
38 | dbaa7904 | Anthony Liguori | DeviceClass parent_class; |
39 | d61a4ce8 | Gerd Hoffmann | |
40 | d61a4ce8 | Gerd Hoffmann | int (*init)(HDACodecDevice *dev);
|
41 | dc4b9240 | Gerd Hoffmann | int (*exit)(HDACodecDevice *dev);
|
42 | d61a4ce8 | Gerd Hoffmann | void (*command)(HDACodecDevice *dev, uint32_t nid, uint32_t data);
|
43 | ba43d289 | Marc-André Lureau | void (*stream)(HDACodecDevice *dev, uint32_t stnr, bool running, bool output); |
44 | dbaa7904 | Anthony Liguori | } HDACodecDeviceClass; |
45 | dbaa7904 | Anthony Liguori | |
46 | dbaa7904 | Anthony Liguori | struct HDACodecDevice {
|
47 | dbaa7904 | Anthony Liguori | DeviceState qdev; |
48 | dbaa7904 | Anthony Liguori | uint32_t cad; /* codec address */
|
49 | d61a4ce8 | Gerd Hoffmann | }; |
50 | d61a4ce8 | Gerd Hoffmann | |
51 | d61a4ce8 | Gerd Hoffmann | void hda_codec_bus_init(DeviceState *dev, HDACodecBus *bus,
|
52 | d61a4ce8 | Gerd Hoffmann | hda_codec_response_func response, |
53 | d61a4ce8 | Gerd Hoffmann | hda_codec_xfer_func xfer); |
54 | d61a4ce8 | Gerd Hoffmann | HDACodecDevice *hda_codec_find(HDACodecBus *bus, uint32_t cad); |
55 | d61a4ce8 | Gerd Hoffmann | |
56 | d61a4ce8 | Gerd Hoffmann | void hda_codec_response(HDACodecDevice *dev, bool solicited, uint32_t response); |
57 | d61a4ce8 | Gerd Hoffmann | bool hda_codec_xfer(HDACodecDevice *dev, uint32_t stnr, bool output, |
58 | d61a4ce8 | Gerd Hoffmann | uint8_t *buf, uint32_t len); |
59 | d61a4ce8 | Gerd Hoffmann | |
60 | d61a4ce8 | Gerd Hoffmann | /* --------------------------------------------------------------------- */
|
61 | d61a4ce8 | Gerd Hoffmann | |
62 | d61a4ce8 | Gerd Hoffmann | #define dprint(_dev, _level, _fmt, ...) \
|
63 | d61a4ce8 | Gerd Hoffmann | do { \
|
64 | d61a4ce8 | Gerd Hoffmann | if (_dev->debug >= _level) { \
|
65 | d61a4ce8 | Gerd Hoffmann | fprintf(stderr, "%s: ", _dev->name); \
|
66 | d61a4ce8 | Gerd Hoffmann | fprintf(stderr, _fmt, ## __VA_ARGS__); \ |
67 | d61a4ce8 | Gerd Hoffmann | } \ |
68 | d61a4ce8 | Gerd Hoffmann | } while (0) |
69 | d61a4ce8 | Gerd Hoffmann | |
70 | d61a4ce8 | Gerd Hoffmann | /* --------------------------------------------------------------------- */
|
71 | d61a4ce8 | Gerd Hoffmann | |
72 | d61a4ce8 | Gerd Hoffmann | #endif |