Improved and Pythonized helenos-pkg-config
[helenos.git] / uspace / drv / audio / hdaudio / hdactl.h
blob18e45b9add879bb50233c61ae6703398dfd51cc4
1 /*
2 * Copyright (c) 2014 Jiri Svoboda
3 * All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 /** @addtogroup hdaudio
30 * @{
32 /** @file High Definition Audio controller
35 #ifndef HDACTL_H
36 #define HDACTL_H
38 #include <fibril_synch.h>
39 #include <stdbool.h>
40 #include "hdaudio.h"
41 #include "spec/regs.h"
43 enum {
44 /** Software response buffer size in entries */
45 softrb_entries = 128
48 typedef struct hda_ctl {
49 bool ok64bit;
50 int iss;
51 int oss;
52 int bss;
54 uintptr_t corb_phys;
55 void *corb_virt;
56 size_t corb_entries;
58 uintptr_t rirb_phys;
59 void *rirb_virt;
60 size_t rirb_entries;
61 size_t rirb_rp;
63 fibril_mutex_t solrb_lock;
64 fibril_condvar_t solrb_cv;
65 hda_rirb_entry_t solrb[softrb_entries];
66 size_t solrb_rp;
67 size_t solrb_wp;
69 hda_rirb_entry_t unsolrb[softrb_entries];
70 size_t unsolrb_rp;
71 size_t unsolrb_wp;
73 struct hda_codec *codec;
74 struct hda *hda;
75 } hda_ctl_t;
77 extern hda_ctl_t *hda_ctl_init(hda_t *);
78 extern void hda_ctl_fini(hda_ctl_t *);
79 extern void hda_ctl_interrupt(hda_ctl_t *);
80 extern errno_t hda_cmd(hda_t *, uint32_t, uint32_t *);
81 extern void hda_ctl_dump_info(hda_ctl_t *);
83 #endif
85 /** @}