socsvn commit: r307280 - soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve
iateaca at FreeBSD.org
iateaca at FreeBSD.org
Sat Aug 6 15:38:27 UTC 2016
Author: iateaca
Date: Sat Aug 6 15:38:25 2016
New Revision: 307280
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=307280
Log:
redesign the init interface if the hda codec: add 2 more parameters (play and rec) in order to
transmit the codec the name of the audio devices
M hda_codec.c
M pci_hda.c
M pci_hda.h
Modified:
soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/hda_codec.c
soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/pci_hda.c
soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/pci_hda.h
Modified: soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/hda_codec.c
==============================================================================
--- soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/hda_codec.c Sat Aug 6 13:32:40 2016 (r307279)
+++ soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/hda_codec.c Sat Aug 6 15:38:25 2016 (r307280)
@@ -155,7 +155,7 @@
* HDA Codec module function declarations
*/
static int
-hda_codec_init(struct hda_codec_inst *hci, const char *opts);
+hda_codec_init(struct hda_codec_inst *hci, const char *play, const char *rec, const char *opts);
static int
hda_codec_reset(struct hda_codec_inst *hci);
static int
@@ -200,12 +200,6 @@
[HDA_PARAM_OUTPUT_AMP_CAP] = 0x00, /* None */ \
[HDA_PARAM_GPIO_COUNT] = 0x00, \
-#define HDA_CODEC_FG_NONE_DESC \
- [HDA_CODEC_FG_NID] = { \
- [HDA_PARAM_SUB_NODE_COUNT] = 0x00000000, /* 0 Subnodes, StartNid = 0 */ \
- HDA_CODEC_FG_COMMON_DESC \
- }, \
-
#define HDA_CODEC_FG_OUTPUT_DESC \
[HDA_CODEC_FG_NID] = { \
[HDA_PARAM_SUB_NODE_COUNT] = 0x00020002, /* 2 Subnodes, StartNid = 2 */ \
@@ -277,11 +271,6 @@
[HDA_PARAM_OUTPUT_AMP_CAP] = 0x00, /* None */ \
}, \
-static const uint32_t hda_codec_none_parameters[][HDA_CODEC_PARAMS_COUNT] = {
- HDA_CODEC_ROOT_DESC
- HDA_CODEC_FG_NONE_DESC
-};
-
static const uint32_t hda_codec_output_parameters[][HDA_CODEC_PARAMS_COUNT] = {
HDA_CODEC_ROOT_DESC
HDA_CODEC_FG_OUTPUT_DESC
@@ -334,21 +323,31 @@
*/
static int
-hda_codec_init(struct hda_codec_inst *hci, const char *opts)
+hda_codec_init(struct hda_codec_inst *hci, const char *play, const char *rec, const char *opts)
{
struct hda_codec_softc *sc = NULL;
struct hda_codec_stream *st = NULL;
int err;
+ if (!(play || rec))
+ return -1;
+
DPRINTF("cad: 0x%x opts: %s\n", hci->cad, opts);
sc = calloc(1, sizeof(*sc));
if (!sc)
return -1;
+ if (play && rec)
+ sc->get_parameters = hda_codec_duplex_parameters;
+ else {
+ if (play)
+ sc->get_parameters = hda_codec_output_parameters;
+ else
+ sc->get_parameters = hda_codec_input_parameters;
+ }
sc->subsystem_id = HDA_CODEC_SUBSYSTEM_ID;
sc->no_nodes = HDA_CODEC_NODES_COUNT;
- sc->get_parameters = hda_codec_duplex_parameters;
sc->conn_list = hda_codec_conn_list;
sc->conf_default = hda_codec_conf_default;
sc->pin_ctrl_default = hda_codec_pin_ctrl_default;
@@ -358,31 +357,35 @@
/*
* Initialize the Audio Output stream
*/
- st = &sc->streams[HDA_CODEC_STREAM_OUTPUT];
-
- err = hda_audio_ctxt_init(&st->actx, "hda-audio-output", hda_codec_audio_output_do_transfer, hda_codec_audio_output_do_setup, sc);
- assert(!err);
+ if (play) {
+ st = &sc->streams[HDA_CODEC_STREAM_OUTPUT];
- /* TODO Get the name of the sound device from the config string */
- st->aud = audio_init("/dev/dsp0", 1);
- if (!st->aud) {
- DPRINTF("Fail to init the output audio player\n");
- return -1;
+ err = hda_audio_ctxt_init(&st->actx, "hda-audio-output",
+ hda_codec_audio_output_do_transfer, hda_codec_audio_output_do_setup, sc);
+ assert(!err);
+
+ st->aud = audio_init(play, 1);
+ if (!st->aud) {
+ DPRINTF("Fail to init the output audio player\n");
+ return -1;
+ }
}
/*
* Initialize the Audio Input stream
*/
- st = &sc->streams[HDA_CODEC_STREAM_INPUT];
-
- err = hda_audio_ctxt_init(&st->actx, "hda-audio-input", hda_codec_audio_input_do_transfer, hda_codec_audio_input_do_setup, sc);
- assert(!err);
+ if (rec) {
+ st = &sc->streams[HDA_CODEC_STREAM_INPUT];
- /* TODO Get the name of the sound device from the config string */
- st->aud = audio_init("/dev/dsp1", 0);
- if (!st->aud) {
- DPRINTF("Fail to init the input audio player\n");
- return -1;
+ err = hda_audio_ctxt_init(&st->actx, "hda-audio-input",
+ hda_codec_audio_input_do_transfer, hda_codec_audio_input_do_setup, sc);
+ assert(!err);
+
+ st->aud = audio_init(rec, 0);
+ if (!st->aud) {
+ DPRINTF("Fail to init the input audio player\n");
+ return -1;
+ }
}
sc->hci = hci;
Modified: soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/pci_hda.c
==============================================================================
--- soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/pci_hda.c Sat Aug 6 13:32:40 2016 (r307279)
+++ soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/pci_hda.c Sat Aug 6 15:38:25 2016 (r307280)
@@ -432,7 +432,7 @@
return -1;
}
- return codec->init(hci, NULL);
+ return codec->init(hci, "/dev/dsp0", "/dev/dsp1", NULL);
}
static struct hda_codec_class *
Modified: soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/pci_hda.h
==============================================================================
--- soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/pci_hda.h Sat Aug 6 13:32:40 2016 (r307279)
+++ soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/pci_hda.h Sat Aug 6 15:38:25 2016 (r307280)
@@ -42,7 +42,7 @@
struct hda_codec_class {
char *name;
- int (*init)(struct hda_codec_inst *hci, const char *opts);
+ int (*init)(struct hda_codec_inst *hci, const char *play, const char *rec, const char *opts);
int (*reset)(struct hda_codec_inst *hci);
int (*command)(struct hda_codec_inst *hci, uint32_t cmd_data);
int (*notify)(struct hda_codec_inst *hci, uint8_t run, uint8_t stream, uint8_t dir);
More information about the svn-soc-all
mailing list