socsvn commit: r289968 - soc2015/iateaca/bhyve-ne2000-head/usr.sbin/bhyve

iateaca at FreeBSD.org iateaca at FreeBSD.org
Thu Aug 20 14:52:54 UTC 2015


Author: iateaca
Date: Thu Aug 20 14:52:53 2015
New Revision: 289968
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=289968

Log:
  redesign: add locked wrappers for the read/write register functions

Modified:
  soc2015/iateaca/bhyve-ne2000-head/usr.sbin/bhyve/pci_ne2000.c

Modified: soc2015/iateaca/bhyve-ne2000-head/usr.sbin/bhyve/pci_ne2000.c
==============================================================================
--- soc2015/iateaca/bhyve-ne2000-head/usr.sbin/bhyve/pci_ne2000.c	Thu Aug 20 13:37:08 2015	(r289967)
+++ soc2015/iateaca/bhyve-ne2000-head/usr.sbin/bhyve/pci_ne2000.c	Thu Aug 20 14:52:53 2015	(r289968)
@@ -114,6 +114,16 @@
 static int
 ne2000_write_asic(struct ne2000_softc *sc, uint8_t offset, uint16_t value);
 
+static uint8_t
+ne2000_read_nic_locked(struct ne2000_softc *sc, uint8_t offset);
+static uint16_t
+ne2000_read_asic_locked(struct ne2000_softc *sc, uint8_t offset);
+
+static int
+ne2000_write_nic_locked(struct ne2000_softc *sc, uint8_t offset, uint8_t value);
+static int
+ne2000_write_asic_locked(struct ne2000_softc *sc, uint8_t offset, uint16_t value);
+
 static int
 ne2000_emul_reg_cr(struct ne2000_softc *sc, uint8_t value);
 static int
@@ -570,7 +580,7 @@
 }
 
 static int
-ne2000_write_nic(struct ne2000_softc *sc, uint8_t offset, uint8_t value)
+ne2000_write_nic_locked(struct ne2000_softc *sc, uint8_t offset, uint8_t value)
 {
 	int err;
 
@@ -596,7 +606,7 @@
 }
 
 static int
-ne2000_write_asic(struct ne2000_softc *sc, uint8_t offset, uint16_t value)
+ne2000_write_asic_locked(struct ne2000_softc *sc, uint8_t offset, uint16_t value)
 {
 	uint8_t dcr = 0;
 	uint8_t rbcr0 = 0;
@@ -900,6 +910,74 @@
 {
 	int err;
 	uint8_t value = 0;
+
+	err = pthread_mutex_lock(&sc->mtx);
+	assert(err == 0);
+
+	value = ne2000_read_nic_locked(sc, offset);
+
+	err = pthread_mutex_unlock(&sc->mtx);
+	assert(err == 0);
+
+	return value;
+}
+
+static uint16_t
+ne2000_read_asic(struct ne2000_softc *sc, uint8_t offset)
+{
+	int err;
+	uint16_t value = 0;
+
+	err = pthread_mutex_lock(&sc->mtx);
+	assert(err == 0);
+
+	value = ne2000_read_asic_locked(sc, offset);
+
+	err = pthread_mutex_unlock(&sc->mtx);
+	assert(err == 0);
+
+	return value;
+}
+
+static int
+ne2000_write_nic(struct ne2000_softc *sc, uint8_t offset, uint8_t value)
+{
+	int err;
+	int rc = -1;
+
+	err = pthread_mutex_lock(&sc->mtx);
+	assert(err == 0);
+
+	rc = ne2000_write_nic_locked(sc, offset, value);
+
+	err = pthread_mutex_unlock(&sc->mtx);
+	assert(err == 0);
+
+	return rc;
+}
+
+static int
+ne2000_write_asic(struct ne2000_softc *sc, uint8_t offset, uint16_t value)
+{
+	int err;
+	int rc = -1;
+
+	err = pthread_mutex_lock(&sc->mtx);
+	assert(err == 0);
+
+	rc = ne2000_write_asic_locked(sc, offset, value);
+
+	err = pthread_mutex_unlock(&sc->mtx);
+	assert(err == 0);
+
+	return rc;
+}
+
+static uint8_t
+ne2000_read_nic_locked(struct ne2000_softc *sc, uint8_t offset)
+{
+	int err;
+	uint8_t value = 0;
 	uint8_t cr = 0;
 
 	/*
@@ -956,7 +1034,7 @@
 }
 
 static uint16_t
-ne2000_read_asic(struct ne2000_softc *sc, uint8_t offset)
+ne2000_read_asic_locked(struct ne2000_softc *sc, uint8_t offset)
 {
 	int err;
 	uint8_t dcr = 0;
@@ -1073,9 +1151,6 @@
 	assert(sc != NULL);
 	assert(offset <= 0x0f);
 
-	err = pthread_mutex_lock(&sc->mtx);
-	assert(err == 0);
-
 	switch (baridx) {
 	case NE2000_BAR_NIC:
 		assert(size == 1);
@@ -1092,9 +1167,6 @@
 
 	assert(err == 0);
 
-	err = pthread_mutex_unlock(&sc->mtx);
-	assert(err == 0);
-
 	return;
 }
 
@@ -1104,14 +1176,10 @@
 {
 	struct ne2000_softc *sc = pi->pi_arg;
 	uint64_t value = 0;
-	int err;
 
 	assert(sc != NULL);
 	assert(offset <= 0x0f);
 
-	err = pthread_mutex_lock(&sc->mtx);
-	assert(err == 0);
-
 	switch (baridx) {
 	case NE2000_BAR_NIC:
 		assert(size == 1);
@@ -1125,9 +1193,6 @@
 		assert(0);
 	}
 
-	err = pthread_mutex_unlock(&sc->mtx);
-	assert(err == 0);
-
 	return value;
 }
 


More information about the svn-soc-all mailing list