Date: Thu, 20 Aug 2015 14:52:53 GMT From: iateaca@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r289968 - soc2015/iateaca/bhyve-ne2000-head/usr.sbin/bhyve Message-ID: <201508201452.t7KEqra9078187@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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; }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201508201452.t7KEqra9078187>