diff options
author | nsouch <nsouch@FreeBSD.org> | 1999-02-13 17:57:19 +0000 |
---|---|---|
committer | nsouch <nsouch@FreeBSD.org> | 1999-02-13 17:57:19 +0000 |
commit | b54915a02a005ac44ae03d3389cbd4bb9eb36eb0 (patch) | |
tree | 37871233440dda9b3049179b011bef26a64be298 /sys/dev/smbus | |
parent | 9c9f54385422ba14291ad62aa195016e871d5b8a (diff) | |
download | FreeBSD-src-b54915a02a005ac44ae03d3389cbd4bb9eb36eb0.zip FreeBSD-src-b54915a02a005ac44ae03d3389cbd4bb9eb36eb0.tar.gz |
Fix smbus allocation and add the alsmb (see alpm(4)) driver.
Diffstat (limited to 'sys/dev/smbus')
-rw-r--r-- | sys/dev/smbus/smb.c | 18 | ||||
-rw-r--r-- | sys/dev/smbus/smbconf.c | 17 | ||||
-rw-r--r-- | sys/dev/smbus/smbconf.h | 8 | ||||
-rw-r--r-- | sys/dev/smbus/smbus.c | 4 |
4 files changed, 29 insertions, 18 deletions
diff --git a/sys/dev/smbus/smb.c b/sys/dev/smbus/smb.c index b5d2919..a26f3fa 100644 --- a/sys/dev/smbus/smb.c +++ b/sys/dev/smbus/smb.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: smb.c,v 1.5 1999/01/09 18:08:23 nsouch Exp $ + * $Id: smb.c,v 1.6 1999/01/14 22:55:03 nsouch Exp $ * */ #include <sys/param.h> @@ -35,6 +35,7 @@ #include <sys/buf.h> #include <sys/uio.h> #include <sys/malloc.h> +#include <sys/fcntl.h> #include <machine/clock.h> @@ -183,17 +184,20 @@ smbioctl(dev_t dev, u_long cmd, caddr_t data, int flags, struct proc *p) if (!sc || !s) return (EINVAL); + /* allocate the bus */ + if ((error = smbus_request_bus(parent, smbdev, + (flags & O_NONBLOCK) ? SMB_DONTWAIT : (SMB_WAIT | SMB_INTR)))) + return (error); + switch (cmd) { case SMB_QUICK_WRITE: error=smbus_quick(parent, s->slave, SMB_QWRITE); - goto end; + break; case SMB_QUICK_READ: error=smbus_quick(parent, s->slave, SMB_QREAD); - goto end; - }; + break; - switch (cmd) { case SMB_SENDB: error=smbus_sendb(parent, s->slave, s->cmd); break; @@ -243,7 +247,9 @@ smbioctl(dev_t dev, u_long cmd, caddr_t data, int flags, struct proc *p) error = ENODEV; } -end: + /* release the bus */ + smbus_release_bus(parent, smbdev); + return (error); } diff --git a/sys/dev/smbus/smbconf.c b/sys/dev/smbus/smbconf.c index 458916f..1e7d8c4 100644 --- a/sys/dev/smbus/smbconf.c +++ b/sys/dev/smbus/smbconf.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: smbconf.c,v 1.3 1998/11/22 22:01:42 nsouch Exp $ + * $Id: smbconf.c,v 1.4 1999/01/09 18:08:23 nsouch Exp $ * */ #include <sys/param.h> @@ -104,16 +104,12 @@ smbus_request_bus(device_t bus, device_t dev, int how) int s, error = 0; /* first, ask the underlying layers if the request is ok */ - do { - error = SMBUS_CALLBACK(device_get_parent(bus), - SMB_REQUEST_BUS, (caddr_t)&how); - if (error) - error = smbus_poll(sc, how); - } while (error); + error = SMBUS_CALLBACK(device_get_parent(bus), SMB_REQUEST_BUS, + (caddr_t)&how); while (!error) { s = splhigh(); - if (sc->owner) { + if (sc->owner && sc->owner != dev) { splx(s); error = smbus_poll(sc, how); @@ -123,6 +119,11 @@ smbus_request_bus(device_t bus, device_t dev, int how) splx(s); return (0); } + + /* free any allocated resource */ + if (error) + SMBUS_CALLBACK(device_get_parent(bus), SMB_RELEASE_BUS, + (caddr_t)&how); } return (error); diff --git a/sys/dev/smbus/smbconf.h b/sys/dev/smbus/smbconf.h index 3c06489..c5fca85 100644 --- a/sys/dev/smbus/smbconf.h +++ b/sys/dev/smbus/smbconf.h @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: smbconf.h,v 1.2 1998/10/31 11:39:54 nsouch Exp $ + * $Id: smbconf.h,v 1.3 1999/01/27 19:58:53 dillon Exp $ */ #ifndef __SMBONF_H #define __SMBONF_H @@ -54,7 +54,11 @@ #define SMB_ENOERR 0x0 #define SMB_EBUSERR 0x1 #define SMB_ENOTSUPP 0x2 -#define SMB_ENOACK 0x3 +#define SMB_ENOACK 0x4 +#define SMB_ECOLLI 0x8 +#define SMB_EABORT 0x10 +#define SMB_ETIMEOUT 0x20 +#define SMB_EBUSY 0x40 /* * How Quick command is executed diff --git a/sys/dev/smbus/smbus.c b/sys/dev/smbus/smbus.c index ca06710..4171a0f 100644 --- a/sys/dev/smbus/smbus.c +++ b/sys/dev/smbus/smbus.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: smbus.c,v 1.6 1998/12/28 19:07:51 nsouch Exp $ + * $Id: smbus.c,v 1.7 1999/01/09 18:08:24 nsouch Exp $ * */ #include <sys/param.h> @@ -159,4 +159,4 @@ smbus_read_ivar(device_t bus, device_t dev, int index, u_long* result) DRIVER_MODULE(smbus, iicsmb, smbus_driver, smbus_devclass, 0, 0); DRIVER_MODULE(smbus, bti2c, smbus_driver, smbus_devclass, 0, 0); DRIVER_MODULE(smbus, intsmb, smbus_driver, smbus_devclass, 0, 0); -DRIVER_MODULE(smbus, smbv, smbus_driver, smbus_devclass, 0, 0); +DRIVER_MODULE(smbus, alsmb, smbus_driver, smbus_devclass, 0, 0); |