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