NAME¶
smb
—
SMB generic I/O device driver
SYNOPSIS¶
device smb
DESCRIPTION¶
The
smb character device driver provides generic
i/o to any
smbus(4) instance. In order to control
SMB devices, use
/dev/smb? with the ioctls
described below. Any of these ioctl commands takes a pointer to
struct smbcmd as its argument.
#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;
};
The
slave field is always used, and provides
the address of the SMBus slave device to talk to. The slave address is
specified in the seven most significant bits (i.e.
“left-justified”). The least significant bit of the slave
address must be zero.
Ioctl |
Description
|
SMB_QUICK_WRITE |
The QuickWrite command just issues the
device address with write intent to the bus, without transferring any
data. |
SMB_QUICK_READ |
The QuickRead command just issues the
device address with read intent to the bus, without transferring any
data. |
SMB_SENDB |
The SendByte command sends the byte
provided in the cmd field to the
device. |
SMB_RECVB |
The ReceiveByte command reads a single byte
from the device which will be returned in the
cmd field. |
SMB_WRITEB |
The WriteByte command first sends the byte
from the cmd field to the device,
followed by the byte given in
data.byte. |
SMB_WRITEW |
The WriteWord command first sends the byte
from the cmd field to the device,
followed by the word given in data.word.
Note that the SMBus byte-order is little-endian by definition. |
SMB_READB |
The ReadByte command first sends the byte
from the 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
data.byte_ptr. |
SMB_READW |
The ReadWord command first sends the byte
from the 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
data.word_ptr. |
SMB_PCALL |
The ProcedureCall command first sends the
byte from the cmd field to the device,
followed by the word provided in
data.process.sdata. It then reads one
word of data from the device, and returns it in the location pointed to by
data.process.rdata. |
SMB_BWRITE |
The BlockWrite command first sends the byte
from the cmd field to the device,
followed by count bytes of data that are
taken from the buffer pointed to by
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
SMB_MAXBLOCKSIZE . |
SMB_BREAD |
The BlockRead command first sends the byte
from the cmd field to the device, and
then reads count bytes of data that from
the device. These data will be returned in the buffer pointed to by
data.byte_ptr. |
The
read(2) and
write(2) system calls are not implemented by this
driver.
ERRORS¶
The
ioctl(2) commands can cause the following
driver-specific errors:
- [
ENXIO
]
- Device did not respond to selection.
- [
EBUSY
]
- Device still in use.
- [
ENODEV
]
- Operation not supported by device (not supposed to happen).
- [
EINVAL
]
- General argument error.
- [
EWOULDBLOCK
]
- SMBus transaction timed out.
SEE ALSO¶
ioctl(2),
smbus(4)
HISTORY¶
The
smb
manual page first appeared in
FreeBSD 3.0.
AUTHORS¶
This manual page was written by
Nicolas
Souchu.