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

iateaca at FreeBSD.org iateaca at FreeBSD.org
Sun Jul 3 16:46:48 UTC 2016


Author: iateaca
Date: Sun Jul  3 16:46:47 2016
New Revision: 305694
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305694

Log:
  fix the hda_write_reg: for one offset allow writes of sizes 1, 2, 3, 4 bytes
  
  M    bhyve/pci_hda.c

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

Modified: soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/pci_hda.c
==============================================================================
--- soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/pci_hda.c	Sun Jul  3 15:00:12 2016	(r305693)
+++ soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/pci_hda.c	Sun Jul  3 16:46:47 2016	(r305694)
@@ -120,7 +120,7 @@
 static uint32_t
 hda_read(struct hda_softc *sc, uint32_t offset);
 static int
-hda_write(struct hda_softc *sc, uint32_t offset, uint32_t value);
+hda_write(struct hda_softc *sc, uint32_t offset, uint8_t size, uint32_t value);
 
 static void
 hda_print_cmd_ctl_data(struct hda_codec_cmd_ctl *p);
@@ -616,12 +616,13 @@
 }
 
 static int
-hda_write(struct hda_softc *sc, uint32_t offset, uint32_t value)
+hda_write(struct hda_softc *sc, uint32_t offset, uint8_t size, uint32_t value)
 {
 	uint32_t old = hda_get_reg_by_offset(sc, offset);
+	uint32_t masks[] = {0x00000000, 0x000000ff, 0x0000ffff, 0x00ffffff, 0xffffffff};
 	hda_set_reg_handler set_reg_handler = hda_set_reg_table[offset];
 
-	hda_set_reg_by_offset(sc, offset, value);
+	hda_set_field_by_offset(sc, offset, masks[size], value);
 
 	if (set_reg_handler)
 		set_reg_handler(sc, offset, old);
@@ -853,8 +854,6 @@
 
 	DPRINTF("stream_ind: 0x%x old: 0x%x value: 0x%x\n", stream_ind, old, value);
 
-	hda_set_field_by_offset(sc, offset, 0x00ffff00, old);
-
 	if (value & HDAC_SDCTL_SRST) {
 		hda_stream_reset(sc, stream_ind);
 	}
@@ -1069,7 +1068,7 @@
 
 	DPRINTF("offset: 0x%lx value: 0x%lx\n", offset, value);
 
-	err = hda_write(sc, offset, value);
+	err = hda_write(sc, offset, size, value);
 	assert(!err);
 
 	return;


More information about the svn-soc-all mailing list