socsvn commit: r304659 - soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve

iateaca at FreeBSD.org iateaca at FreeBSD.org
Sat Jun 4 18:53:28 UTC 2016


Author: iateaca
Date: Sat Jun  4 18:53:26 2016
New Revision: 304659
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=304659

Log:
  decode the (verb, payload) content from the cmd_data function of 12bit or 4bit

Modified:
  soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/hda_codec.c

Modified: soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/hda_codec.c
==============================================================================
--- soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/hda_codec.c	Sat Jun  4 17:40:23 2016	(r304658)
+++ soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/hda_codec.c	Sat Jun  4 18:53:26 2016	(r304659)
@@ -56,11 +56,16 @@
 	uint8_t cad = 0, nid = 0;
 	uint16_t verb = 0, payload = 0;
 
-	// TODO find if the cmd is 12bit or 4bit
 	cad = (cmd_data >> HDA_CMD_CAD_SHIFT) & 0x0f;			// 4 bits
 	nid = (cmd_data >> HDA_CMD_NID_SHIFT) & 0xff;			// 8 bits
-	verb = (cmd_data >> HDA_CMD_VERB_12BIT_SHIFT) & 0x0fff;		// 12 bits
-	payload = cmd_data & 0xff;					// 8 bits
+
+	if ((cmd_data & 0x70000) == 0x70000) {
+		verb = (cmd_data >> HDA_CMD_VERB_12BIT_SHIFT) & 0x0fff;	// 12 bits
+		payload = cmd_data & 0xff;				// 8 bits
+	} else {
+		verb = (cmd_data >> HDA_CMD_VERB_4BIT_SHIFT) & 0x0f;	// 4 bits
+		payload = cmd_data & 0xffff;				// 16 bits
+	}
 
 	assert(cad == hci->cad);
 	assert(hci);


More information about the svn-soc-all mailing list