203 lines
5.0 KiB
Groff
203 lines
5.0 KiB
Groff
.\" Copyright (c) 1998, Nicolas Souchu
|
|
.\" Copyright (c) 2004, Joerg Wunsch
|
|
.\" All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
.\" SUCH DAMAGE.
|
|
.\"
|
|
.\" $FreeBSD$
|
|
.\"
|
|
.Dd October 25, 1998
|
|
.Dt SMB 4
|
|
.Os
|
|
.Sh NAME
|
|
.Nm smb
|
|
.Nd SMB generic I/O device driver
|
|
.Sh SYNOPSIS
|
|
.Cd "device smb"
|
|
.Sh DESCRIPTION
|
|
The
|
|
.Em smb
|
|
character device driver provides generic i/o to any
|
|
.Xr smbus 4
|
|
instance.
|
|
In order to control SMB devices, use
|
|
.Pa /dev/smb?
|
|
with the ioctls described below.
|
|
Any of these ioctl commands takes a pointer to
|
|
.Vt struct smbcmd
|
|
as its argument.
|
|
.Pp
|
|
.Bd -literal
|
|
#include <sys/types.h>
|
|
|
|
struct smbcmd {
|
|
char cmd;
|
|
int count;
|
|
u_char slave;
|
|
union {
|
|
char byte;
|
|
short word;
|
|
|
|
char *byte_ptr;
|
|
short *word_ptr;
|
|
|
|
struct {
|
|
short sdata;
|
|
short *rdata;
|
|
} process;
|
|
} data;
|
|
};
|
|
.Ed
|
|
.Pp
|
|
The
|
|
.Fa slave
|
|
field is always used, and provides the address of the
|
|
SMBus slave device to talk to.
|
|
.Pp
|
|
.Bl -column ".Dv SMB_QUICK_WRITE" -compact
|
|
.It Em Ioctl Ta Em Description
|
|
.Pp
|
|
.It Dv SMB_QUICK_WRITE Ta
|
|
The
|
|
.Em QuickWrite
|
|
command just issues the device address with write intent
|
|
to the bus, without transferring any data.
|
|
.It Dv SMB_QUICK_READ Ta
|
|
The
|
|
.Em QuickRead
|
|
command just issues the device address with read intent
|
|
to the bus, without transferring any data.
|
|
.It Dv SMB_SENDB Ta
|
|
The
|
|
.Em SendByte
|
|
command sends the byte provided in the
|
|
.Fa cmd
|
|
field to the device.
|
|
.It Dv SMB_RECVB Ta
|
|
The
|
|
.Em ReceiveByte
|
|
command reads a single byte from the device which will
|
|
be returned in the
|
|
.Fa cmd
|
|
field.
|
|
.It Dv SMB_WRITEB Ta
|
|
The
|
|
.Em WriteByte
|
|
command first sends the byte from the
|
|
.Fa cmd
|
|
field to the device, followed by the byte given in
|
|
.Fa data.byte .
|
|
.It Dv SMB_WRITEW Ta
|
|
The
|
|
.Em WriteWord
|
|
command first sends the byte from the
|
|
.Fa cmd
|
|
field to the device, followed by the word given in
|
|
.Fa data.word .
|
|
Note that the SMBus byte-order is little-endian by definition.
|
|
.It Dv SMB_READB Ta
|
|
The
|
|
.Em ReadByte
|
|
command first sends the byte from the
|
|
.Fa cmd
|
|
field to the device, and then reads one byte of data from
|
|
the device.
|
|
The returned data will be stored in the location pointed to by
|
|
.Fa data.byte_ptr .
|
|
.It Dv SMB_READW Ta
|
|
The
|
|
.Em ReadWord
|
|
command first sends the byte from the
|
|
.Fa cmd
|
|
field to the device, and then reads one word of data from
|
|
the device.
|
|
The returned data will be stored in the location pointed to by
|
|
.Fa data.word_ptr .
|
|
.It Dv SMB_PCALL Ta
|
|
The
|
|
.Em ProcedureCall
|
|
command first sends the byte from the
|
|
.Fa cmd
|
|
field to the device, followed by the word provided in
|
|
.Fa data.process.sdata .
|
|
It then reads one word of data from the device, and returns it
|
|
in the location pointed to by
|
|
.Fa data.process.rdata .
|
|
.It Dv SMB_BWRITE Ta
|
|
The
|
|
.Em BlockWrite
|
|
command first sends the byte from the
|
|
.Fa cmd
|
|
field to the device, followed by
|
|
.Fa count
|
|
bytes of data that are taken from the buffer pointed to by
|
|
.Fa data.byte_ptr .
|
|
The SMBus specification mandates that no more than 32 bytes of
|
|
data can be transferred in a single block read or write command.
|
|
This value is available in the constant
|
|
.Dv SMB_MAXBLOCKSIZE .
|
|
.It Dv SMB_BREAD Ta
|
|
The
|
|
.Em BlockRead
|
|
command first sends the byte from the
|
|
.Fa cmd
|
|
field to the device, and then reads
|
|
.Fa count
|
|
bytes of data that from the device.
|
|
These data will be returned in the buffer pointed to by
|
|
.Fa data.byte_ptr .
|
|
.El
|
|
.Pp
|
|
The
|
|
.Xr read 2
|
|
and
|
|
.Xr write 2
|
|
system calls are not implemented by this driver.
|
|
.Sh ERRORS
|
|
The
|
|
.Xr ioctl
|
|
commands can cause the following driver-specific errors:
|
|
.Bl -tag -width Er
|
|
.It Bq Er ENXIO
|
|
Device did not respond to selection.
|
|
.It Bq Er EBUSY
|
|
Device still in use.
|
|
.It Bq Er ENODEV
|
|
Operation not supported by device (not supposed to happen).
|
|
.It Bq Er EINVAL
|
|
General argument error.
|
|
.It Bq Er EWOULDBLOCK
|
|
SMBus transaction timed out.
|
|
.El
|
|
.Sh SEE ALSO
|
|
.Xr ioctl 2 ,
|
|
.Xr smbus 4
|
|
.Sh HISTORY
|
|
The
|
|
.Nm
|
|
manual page first appeared in
|
|
.Fx 3.0 .
|
|
.Sh AUTHORS
|
|
This
|
|
manual page was written by
|
|
.An Nicolas Souchu .
|