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.