root / hw / intel-hda.h @ f76e1d81
History | View | Annotate | Download (2.6 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 | 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 | d61a4ce8 | Gerd Hoffmann | typedef struct HDACodecBus HDACodecBus; |
18 | d61a4ce8 | Gerd Hoffmann | typedef struct HDACodecDevice HDACodecDevice; |
19 | d61a4ce8 | Gerd Hoffmann | |
20 | d61a4ce8 | Gerd Hoffmann | typedef void (*hda_codec_response_func)(HDACodecDevice *dev, |
21 | d61a4ce8 | Gerd Hoffmann | bool solicited, uint32_t response);
|
22 | d61a4ce8 | Gerd Hoffmann | typedef bool (*hda_codec_xfer_func)(HDACodecDevice *dev, |
23 | d61a4ce8 | Gerd Hoffmann | uint32_t stnr, bool output,
|
24 | d61a4ce8 | Gerd Hoffmann | uint8_t *buf, uint32_t len); |
25 | d61a4ce8 | Gerd Hoffmann | |
26 | d61a4ce8 | Gerd Hoffmann | struct HDACodecBus {
|
27 | d61a4ce8 | Gerd Hoffmann | BusState qbus; |
28 | d61a4ce8 | Gerd Hoffmann | uint32_t next_cad; |
29 | d61a4ce8 | Gerd Hoffmann | hda_codec_response_func response; |
30 | d61a4ce8 | Gerd Hoffmann | hda_codec_xfer_func xfer; |
31 | d61a4ce8 | Gerd Hoffmann | }; |
32 | d61a4ce8 | Gerd Hoffmann | |
33 | dbaa7904 | Anthony Liguori | typedef struct HDACodecDeviceClass |
34 | dbaa7904 | Anthony Liguori | { |
35 | dbaa7904 | Anthony Liguori | DeviceClass parent_class; |
36 | d61a4ce8 | Gerd Hoffmann | |
37 | d61a4ce8 | Gerd Hoffmann | int (*init)(HDACodecDevice *dev);
|
38 | dc4b9240 | Gerd Hoffmann | int (*exit)(HDACodecDevice *dev);
|
39 | d61a4ce8 | Gerd Hoffmann | void (*command)(HDACodecDevice *dev, uint32_t nid, uint32_t data);
|
40 | ba43d289 | Marc-André Lureau | void (*stream)(HDACodecDevice *dev, uint32_t stnr, bool running, bool output); |
41 | dbaa7904 | Anthony Liguori | } HDACodecDeviceClass; |
42 | dbaa7904 | Anthony Liguori | |
43 | dbaa7904 | Anthony Liguori | struct HDACodecDevice {
|
44 | dbaa7904 | Anthony Liguori | DeviceState qdev; |
45 | dbaa7904 | Anthony Liguori | uint32_t cad; /* codec address */
|
46 | d61a4ce8 | Gerd Hoffmann | }; |
47 | d61a4ce8 | Gerd Hoffmann | |
48 | d61a4ce8 | Gerd Hoffmann | void hda_codec_bus_init(DeviceState *dev, HDACodecBus *bus,
|
49 | d61a4ce8 | Gerd Hoffmann | hda_codec_response_func response, |
50 | d61a4ce8 | Gerd Hoffmann | hda_codec_xfer_func xfer); |
51 | d61a4ce8 | Gerd Hoffmann | HDACodecDevice *hda_codec_find(HDACodecBus *bus, uint32_t cad); |
52 | d61a4ce8 | Gerd Hoffmann | |
53 | d61a4ce8 | Gerd Hoffmann | void hda_codec_response(HDACodecDevice *dev, bool solicited, uint32_t response); |
54 | d61a4ce8 | Gerd Hoffmann | bool hda_codec_xfer(HDACodecDevice *dev, uint32_t stnr, bool output, |
55 | d61a4ce8 | Gerd Hoffmann | uint8_t *buf, uint32_t len); |
56 | d61a4ce8 | Gerd Hoffmann | |
57 | d61a4ce8 | Gerd Hoffmann | /* --------------------------------------------------------------------- */
|
58 | d61a4ce8 | Gerd Hoffmann | |
59 | d61a4ce8 | Gerd Hoffmann | #define dprint(_dev, _level, _fmt, ...) \
|
60 | d61a4ce8 | Gerd Hoffmann | do { \
|
61 | d61a4ce8 | Gerd Hoffmann | if (_dev->debug >= _level) { \
|
62 | d61a4ce8 | Gerd Hoffmann | fprintf(stderr, "%s: ", _dev->name); \
|
63 | d61a4ce8 | Gerd Hoffmann | fprintf(stderr, _fmt, ## __VA_ARGS__); \ |
64 | d61a4ce8 | Gerd Hoffmann | } \ |
65 | d61a4ce8 | Gerd Hoffmann | } while (0) |
66 | d61a4ce8 | Gerd Hoffmann | |
67 | d61a4ce8 | Gerd Hoffmann | /* --------------------------------------------------------------------- */
|
68 | d61a4ce8 | Gerd Hoffmann | |
69 | d61a4ce8 | Gerd Hoffmann | #endif |