35#ifdef HAVE_KERNEL_OPTION_HEADERS
65#define hdacc_lock(codec) snd_mtxlock((codec)->lock)
66#define hdacc_unlock(codec) snd_mtxunlock((codec)->lock)
67#define hdacc_lockassert(codec) snd_mtxassert((codec)->lock)
425 device_printf(
dev,
"Suspend...\n");
427 bus_generic_suspend(
dev);
429 device_printf(
dev,
"Suspend done\n");
439 device_printf(
dev,
"Resume...\n");
441 bus_generic_resume(
dev);
443 device_printf(
dev,
"Resume done\n");
455 id = ((uint32_t)hda_get_vendor_id(
dev) << 16) + hda_get_device_id(
dev);
456 revid = ((uint32_t)hda_get_revision_id(
dev) << 8) +
457 hda_get_stepping_id(
dev);
471 snprintf(
buf,
sizeof(
buf),
"%s (0x%04x)",
474 snprintf(
buf,
sizeof(
buf),
"Generic (0x%04x)",
id);
475 strlcat(
buf,
" HDA CODEC",
sizeof(
buf));
476 device_set_desc_copy(
dev,
buf);
477 return (BUS_PROBE_DEFAULT);
485 int cad = (intptr_t)device_get_ivars(
dev);
491 codec->
lock = HDAC_GET_MTX(device_get_parent(
dev),
dev);
503 endnode = startnode + codec->
fgcnt;
507 "Root Node at nid=0: %d subnodes %d-%d\n",
509 startnode, endnode - 1);
513 M_HDACC, M_ZERO | M_WAITOK);
514 for (i = startnode,
n = 0; i < endnode; i++,
n++) {
525 device_printf(
dev,
"Failed to add function device\n");
531 bus_generic_attach(
dev);
542 error = device_delete_children(
dev);
552 sbuf_printf(sb,
"nid=%d", fg->
nid);
561 sbuf_printf(sb,
"type=0x%02x subsystem=0x%08x",
572 retval = bus_print_child_header(
dev,
child);
573 retval += printf(
" at nid %d", fg->
nid);
574 retval += bus_print_child_footer(
dev,
child);
585 device_printf(
child,
"<%s %s Function Group> at nid %d on %s "
586 "(no driver attached)\n",
587 device_get_desc(
dev),
590 "Unknown"), fg->
nid, device_get_nameunit(
dev));
592 device_printf(
dev,
"Subsystem ID: 0x%08x\n",
593 hda_get_subsystem_id(
dev));
596 device_printf(
dev,
"Power down FG nid=%d to the D3 state...\n",
621 return(BUS_READ_IVAR(device_get_parent(
dev),
dev,
632 return (codec->
lock);
639 return (HDAC_CODEC_COMMAND(device_get_parent(
dev),
dev,
verb));
670 return (HDAC_STREAM_START(device_get_parent(
dev),
dev,
714 if (codec->
tags[
tag] == NULL) {
716 HDAC_UNSOL_ALLOC(device_get_parent(
dev),
dev,
tag);
730 KASSERT(
tag >= 0 &&
tag <= 0x3f, (
"Wrong tag value %d\n",
tag));
732 HDAC_UNSOL_FREE(device_get_parent(
dev),
dev,
tag);
746 device_printf(codec->
dev,
"Unexpected unsolicited "
747 "response with tag %d: %08x\n",
tag,
resp);
756 if (device_get_children(
dev, &devlist, &devcount) != 0)
758 for (i = 0; i < devcount; i++)
759 HDAC_PINDUMP(devlist[i]);
760 free(devlist, M_TEMP);
#define HDA_PARAM_FCT_GRP_TYPE_NODE_TYPE_MODEM
#define HDA_PARAM_FCT_GRP_TYPE_NODE_TYPE_AUDIO
#define HDA_PARAM_SUB_NODE_COUNT
#define HDA_PARAM_SUB_NODE_COUNT_START(param)
#define HDA_CMD_SET_POWER_STATE(cad, nid, payload)
#define HDA_PARAM_FCT_GRP_TYPE
#define HDA_PARAM_FCT_GRP_TYPE_NODE_TYPE(param)
#define HDA_CMD_POWER_STATE_D3
#define HDA_CMD_GET_PARAMETER(cad, nid, payload)
#define HDA_PARAM_SUB_NODE_COUNT_TOTAL(param)
#define HDA_CMD_GET_SUBSYSTEM_ID(cad, nid)
static int hdac_stream_start(device_t dev, device_t child, int dir, int stream, bus_addr_t buf, int blksz, int blkcnt)
static int hdac_unsol_alloc(device_t dev, device_t child, int tag)
static uint32_t hdac_stream_getptr(device_t dev, device_t child, int dir, int stream)
static void hdac_stream_free(device_t dev, device_t child, int dir, int stream)
static void hdac_stream_reset(device_t dev, device_t child, int dir, int stream)
static int hdac_stream_alloc(device_t dev, device_t child, int dir, int format, int stripe, uint32_t **dmapos)
static void hdac_stream_stop(device_t dev, device_t child, int dir, int stream)
static struct mtx * hdac_get_mtx(device_t dev, device_t child)
static uint32_t hdac_codec_command(device_t dev, device_t child, uint32_t verb)
static void hdac_unsol_free(device_t dev, device_t child, int tag)
#define HDA_CODEC_IDT92HD66B1X3
#define HDA_CODEC_STAC9274D5NH
#define HDA_CODEC_CX20632
#define HDA_CODEC_IDT92HD73C1
#define HDA_CODEC_IDT92HD66B3X5
#define HDA_CODEC_NVIDIAGTX550
#define HDA_CODEC_IDT92HD71B8
#define HDA_CODEC_INTELKBLK
#define HDA_CODEC_ATIR6XX
#define HDA_CODEC_IDT92HD89C3
#define HDA_CODEC_CX20561
#define HDA_CODEC_NVIDIAGTS450
#define HDA_CODEC_CX20952
#define HDA_CODEC_CX20582
#define HDA_CODEC_IDT92HD99BXX
#define HDA_CODEC_IDT92HD91BXX
#define HDA_CODEC_INTELJLK
#define HDA_CODEC_IDT92HD66B2X5
#define HDA_CODEC_IDT92HD89F1
#define HDA_CODEC_IDT92HD71B7
#define HDA_CODEC_STAC9272D
#define HDA_CODEC_VT1702_4
#define HDA_CODEC_AD1984A
#define HDA_CODEC_IDT92HD71B6
#define HDA_CODEC_INTELBR
#define HDA_CODEC_INTELIP
#define HDA_CODEC_NVIDIAGT21X
#define HDA_CODEC_CX20755
#define HDA_CODEC_AD1984B
#define HDA_CODEC_IDT92HD89E1
#define HDA_CODEC_NVIDIATEGRA114
#define HDA_CODEC_INTELALLK
#define HDA_CODEC_IDT92HD75BX
#define HDA_CODEC_IDT92HD73D1
#define HDA_CODEC_ALC861VD
#define HDA_CODEC_IDT92HD87B2_4
#define HDA_CODEC_INTELHSW
#define HDA_CODEC_VT1718S_1
#define HDA_CODEC_IDT92HD71B5
#define HDA_CODEC_VT1708S_2
#define HDA_CODEC_IDTXXXX
#define HDA_CODEC_IDT92HD66C3_65
#define HDA_CODEC_IDT92HD206X
#define HDA_CODEC_AD1989B
#define HDA_CODEC_AD1884A
#define HDA_CODEC_CX20724
#define HDA_CODEC_NVIDIAMCP67
#define HDA_CODEC_ATIRS600_2
#define HDA_CODEC_ATIXXXX
#define HDA_CODEC_VT2002P_1
#define HDA_CODEC_CMI9880
#define HDA_CODEC_CX21724
#define HDA_CODEC_IDT92HD206D
#define HDA_CODEC_CX21722
#define HDA_CODEC_IDT92HD005
#define HDA_CODEC_NVIDIAMCP78
#define HDA_CODEC_STAC9205D
#define HDA_CODEC_IDT92HD89B1
#define HDA_CODEC_VT1708B_4
#define HDA_CODEC_CX20757
#define HDA_CODEC_AD1882A
#define HDA_CODEC_VT1709_0
#define HDA_CODEC_AD1986A
#define HDA_CODEC_NVIDIAMCP78_3
#define HDA_CODEC_SII1390
#define HDA_CODEC_STAC9230X
#define HDA_CODEC_CX20665
#define HDA_CODEC_VT1708B_2
#define HDA_CODEC_IDT92HD66B1X5
#define HDA_CODEC_INTELSKLK
#define HDA_CODEC_CX20664
#define HDA_CODEC_STAC9271X
#define HDA_CODEC_STAC922XD
#define HDA_CODEC_STAC9255
#define HDA_CODEC_VT1702_2
#define HDA_CODEC_INTELBL
#define HDA_CODEC_IDT92HD66C2X5
#define HDA_CODEC_STAC9227D
#define HDA_CODEC_IDT92HD90BXX
#define HDA_CODEC_STAC9250
#define HDA_CODEC_CXD9872RDK
#define HDA_CODEC_VT1702_7
#define HDA_CODEC_STAC9230D
#define HDA_CODEC_IDT92HD89E3
#define HDA_CODEC_IDT92HD89C1
#define HDA_CODEC_IDT92HD71B7_2
#define HDA_CODEC_CX20651
#define HDA_CODEC_INTELCT
#define HDA_CODEC_INTELCPT
#define HDA_CODEC_STAC9229D
#define HDA_CODEC_CX20641
#define HDA_CODEC_VT2002P_0
#define HDA_CODEC_STAC9220
#define HDA_CODEC_INTELICLK
#define HDA_CODEC_IDT92HD89B3
#define HDA_CODEC_INTELIP2
#define HDA_CODEC_VT1708_B
#define HDA_CODEC_VT1828S
#define HDA_CODEC_NVIDIATEGRA210
#define HDA_CODEC_INTELBXTN
#define HDA_CODEC_STAC9274
#define HDA_CODEC_STAC9221_A2
#define HDA_BOOTHVERBOSE(stmt)
#define HDA_CODEC_VT1708B_0
#define HDA_CODEC_CMIXXXX
#define HDA_CODEC_STAC9228D
#define HDA_CODEC_VT1709_1
#define HDA_CODEC_VT1708B_6
#define HDA_CODEC_NVIDIAGT240
#define HDA_CODEC_VT1702_0
#define HDA_CODEC_VT1709_2
#define HDA_CODEC_INTELBDW
#define HDA_CODEC_IDT92HD71B8_2
#define HDA_CODEC_STAC9274X5NH
#define HDA_CODEC_VT1708S_1
#define HDA_CODEC_AD1989A
#define HDA_CODEC_CX20722
#define HDA_CODEC_STAC9872AK
#define HDA_CODEC_IDT92HD89D3
#define HDA_CODEC_IDT92HD81B1X
#define HDA_CODEC_CXD9872AKD
#define HDA_CODEC_IDT92HD71B5_2
#define HDA_CODEC_NVIDIAXXXX
#define HDA_CODEC_AD1988B
#define HDA_CODEC_VT1802_0
#define HDA_CODEC_INTELEL
#define HDA_CODEC_ALC1150
#define HDA_CODEC_CX20583
#define HDA_CODEC_CX20753
#define HDA_CODEC_IDT92HD66C2X3
#define HDA_CODEC_ATIRS690
#define HDA_CODEC_STAC9227X
#define HDA_CODEC_STAC9221
#define HDA_CODEC_IDT92HD95B
#define HDA_CODEC_IDT92HD75B3
#define HDA_CODEC_IDT92HD87B1_3
#define HDA_CODEC_IDT92HD89F3
#define HDA_CODEC_ALCS1200A
#define HDA_CODEC_ATIRS600_1
#define HDA_CODEC_VT1709_5
#define HDA_CODEC_VT1708_8
#define HDA_CODEC_NVIDIAMCP78_4
#define HDA_CODEC_NVIDIAMCP89
#define HDA_CODEC_STAC9229X
#define HDA_CODEC_CX20756
#define HDA_CODEC_INTELELLK
#define HDA_CODEC_CX20652
#define HDA_CODEC_IDT92HD81B1C
#define HDA_CODEC_VT1702_5
#define HDA_CODEC_IDT92HD89C2
#define HDA_CODEC_NVIDIAMCP73
#define HDA_CODEC_INTELGMLK
#define HDA_CODEC_IDT92HD700D
#define HDA_CODEC_AGEREXXXX
#define HDA_CODEC_VT1716S_0
#define HDA_CODEC_CA0110_2
#define HDA_CODEC_SII1392
#define HDA_CODEC_VT1708B_7
#define HDA_CODEC_VT1709_3
#define HDA_CODEC_VT1708S_5
#define HDA_CODEC_STAC9274D
#define HDA_CODEC_VT1708B_1
#define HDA_CODEC_IDT92HD66C3X5
#define HDA_CODEC_INTELPPT
#define HDA_CODEC_INTELTGLK
#define HDA_CODEC_NVIDIATEGRA124
#define HDA_CODEC_IDT92HD83C1X
#define HDA_CODEC_VT1716S_1
#define HDA_CODEC_IDT92HD89D2
#define HDA_CODEC_CX20751
#define HDA_CODEC_INTELXXXX
#define HDA_CODEC_CX20751_2
#define HDA_CODEC_INTELCL
#define HDA_CODEC_VT1709_7
#define HDA_CODEC_SIIXXXX
#define HDA_CODEC_VT1708_9
#define HDA_CODEC_STAC9255D
#define HDA_CODEC_CMIXXXX2
#define HDA_CODEC_CX20642
#define HDA_CODEC_INTELGMLK1
#define HDA_CODEC_STAC9272X
#define HDA_CODEC_STAC9251
#define HDA_CODEC_VT1708B_3
#define HDA_CODEC_STAC9220_A2
#define HDA_CODEC_IDT92HD89D1
#define HDA_DEV_MATCH(fl, v)
#define HDA_CODEC_STACXXXX
#define HDA_CODEC_VT1708S_6
#define HDA_CODEC_STAC9254D
#define HDA_CODEC_INTELCNLK
#define HDA_CODEC_VT1708S_0
#define HDA_CODEC_IDT92HD71B6_2
#define HDA_CODEC_STAC9254
#define HDA_CODEC_IDT92HD89F2
#define HDA_CODEC_IDT92HD66C1X3
#define HDA_CODEC_IDT92HD66C1X5
#define HDA_CODEC_STAC9273D
#define HDA_CODEC_NVIDIATEGRA30
#define HDA_CODEC_NVIDIAMCP78_2
#define HDA_CODEC_VT1708S_4
#define HDA_CODEC_STAC9221D
#define HDA_CODEC_IDT92HD66B2X3
#define HDA_CODEC_IDT92HD73E1
#define HDA_CODEC_VT1702_6
#define HDA_CODEC_STAC9228X
#define HDA_CODEC_INTELVV2
#define HDA_CODEC_ALC1220
#define HDA_CODEC_STAC9271D
#define HDA_CODEC_ALC1220_1
#define HDA_CODEC_CMI98802
#define HDA_CODEC_VT1718S_0
#define HDA_CODEC_STAC9204D
#define HDA_CODEC_AD1981HD
#define HDA_CODEC_VT1818S
#define HDA_CODEC_STAC9200D
#define HDA_CODEC_IDT92HD98BXX
#define HDA_CODEC_IDT92HD93BXX
#define hda_command(dev, verb)
#define HDA_CODEC_IDT92HD66B3X3
#define HDA_CODEC_CX20588
#define HDA_CODEC_VT1802_1
#define HDA_CODEC_CX20631
#define HDA_CODEC_CX20584
#define HDA_CODEC_MOTOXXXX
#define HDA_CODEC_IDT92HD83C1C
#define HDA_CODEC_CX20585
#define HDA_CODEC_ALCXXXX
#define HDA_CODEC_NVIDIAGT220
#define HDA_CODEC_NVIDIAGT440
#define HDA_CODEC_VT1708_A
#define HDA_CODEC_VT1708S_7
#define HDA_CODEC_VT1702_3
#define HDA_CODEC_CX20551
#define HDA_CODEC_NVIDIAMCP7A
#define HDA_CODEC_STAC9205X
#define HDA_CODEC_STAC9273X
#define HDA_CODEC_VT1709_4
#define HDA_CODEC_STAC9204X
#define HDA_CODEC_VT1708B_5
#define HDA_CODEC_IDT92HD005D
#define HDA_CODEC_IDT92HD89E2
#define HDA_CODEC_IDT92HD700X
#define HDA_CODEC_CX20549
#define HDA_CODEC_INTELCA
#define HDA_CODEC_VT1702_1
#define HDA_CODEC_CX20590
#define HDA_CODEC_NVIDIAGTX570
#define HDA_CODEC_VT1709_6
#define HDA_BOOTVERBOSE(stmt)
#define HDA_CODEC_IDT92HD89B2
#define HDA_CODEC_STAC9220_A1
#define HDA_CODEC_VT1708S_3
static uint32_t hdacc_stream_getptr(device_t dev, device_t child, int dir, int stream)
static void hdacc_stream_reset(device_t dev, device_t child, int dir, int stream)
#define hdacc_unlock(codec)
static void hdacc_pindump(device_t dev)
DRIVER_MODULE(snd_hda, hdac, hdacc_driver, hdacc_devclass, NULL, NULL)
static devclass_t hdacc_devclass
static void hdacc_stream_free(device_t dev, device_t child, int dir, int stream)
static int hdacc_read_ivar(device_t dev, device_t child, int which, uintptr_t *result)
static int hdacc_probe(device_t dev)
static int hdacc_print_child(device_t dev, device_t child)
static void hdacc_unsol_intr(device_t dev, uint32_t resp)
static struct mtx * hdacc_get_mtx(device_t dev, device_t child)
static int hdacc_detach(device_t dev)
static void hdacc_stream_intr(device_t dev, int dir, int stream)
static void hdacc_probe_nomatch(device_t dev, device_t child)
static int hdacc_stream_alloc(device_t dev, device_t child, int dir, int format, int stripe, uint32_t **dmapos)
static void hdacc_unsol_free(device_t dev, device_t child, int tag)
static driver_t hdacc_driver
SND_DECLARE_FILE("$FreeBSD$")
static int hdacc_stream_start(device_t dev, device_t child, int dir, int stream, bus_addr_t buf, int blksz, int blkcnt)
#define hdacc_lock(codec)
static int hdacc_attach(device_t dev)
static device_method_t hdacc_methods[]
static int hdacc_resume(device_t dev)
static uint32_t hdacc_codec_command(device_t dev, device_t child, uint32_t verb)
static int hdacc_unsol_alloc(device_t dev, device_t child, int wanted)
static int hdacc_suspend(device_t dev)
MALLOC_DEFINE(M_HDACC, "hdacc", "HDA CODEC")
static int hdacc_child_pnpinfo_method(device_t dev, device_t child, struct sbuf *sb)
static void hdacc_stream_stop(device_t dev, device_t child, int dir, int stream)
static const struct @20 hdacc_codecs[]
static int hdacc_child_location(device_t dev, device_t child, struct sbuf *sb)