summaryrefslogtreecommitdiffstats
path: root/share/man/man4/smb.4
diff options
context:
space:
mode:
authorjoerg <joerg@FreeBSD.org>2004-05-17 20:17:39 +0000
committerjoerg <joerg@FreeBSD.org>2004-05-17 20:17:39 +0000
commitd07b18d4db3e1e9145f597cef60770551a2eb125 (patch)
treec2e6235a7176474952e9045b44b81cf2a9fe7958 /share/man/man4/smb.4
parent6174e9d812cbeec3c44fad024556a69dea5e27cf (diff)
downloadFreeBSD-src-d07b18d4db3e1e9145f597cef60770551a2eb125.zip
FreeBSD-src-d07b18d4db3e1e9145f597cef60770551a2eb125.tar.gz
Now that I learned about how all this is working together, quickly
document it for anyone else who might be interested in it. MFC after: 2 weeks
Diffstat (limited to 'share/man/man4/smb.4')
-rw-r--r--share/man/man4/smb.4162
1 files changed, 147 insertions, 15 deletions
diff --git a/share/man/man4/smb.4 b/share/man/man4/smb.4
index 0a9075e..8645c03 100644
--- a/share/man/man4/smb.4
+++ b/share/man/man4/smb.4
@@ -1,4 +1,5 @@
.\" Copyright (c) 1998, Nicolas Souchu
+.\" Copyright (c) 2004, Joerg Wunsch
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
@@ -38,26 +39,157 @@ The
character device driver provides generic i/o to any
.Xr smbus 4
instance.
-In order to control SMB devices, use /dev/smb? with the
-following ioctls:
+In order to control SMB devices, use
+.Pa /dev/smb Ns Em ?
+with the ioctls described below.
+Any of these ioctl commands takes a pointer to
+.Vt struct smbcmd
+as its argument.
.Pp
-.Bl -column "System Management Bus ioctls" -compact
+.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 ".Sy SMB_QUICK_WRITE" -compact
.It Em Ioctl Ta Em Description
-.It Sy SMB_QUICK_WRITE Ta "QuickWrite command"
-.It Sy SMB_QUICK_READ Ta "QuickRead command"
-.It Sy SMB_SENDB Ta "SendByte command"
-.It Sy SMB_RECVB Ta "ReceiveByte command"
-.It Sy SMB_WRITEB Ta "WriteByte command"
-.It Sy SMB_WRITEW Ta "WriteWord command"
-.It Sy SMB_READB Ta "ReadByte command"
-.It Sy SMB_READW Ta "ReadWord command"
-.It Sy SMB_PCALL Ta "ProcedureCall command"
-.It Sy SMB_BWRITE Ta "BlockWrite command"
-.It Sy SMB_BREAD Ta "BlockRead command"
+.Pp
+.It Sy SMB_QUICK_WRITE Ta
+The
+.Em QuickWrite
+command just issues the device address with write intent
+to the bus, without transferring any data.
+.It Sy SMB_QUICK_READ Ta
+The
+.Em QuickRead
+command just issues the device address with read intent
+to the bus, without transferring any data.
+.It Sy SMB_SENDB Ta
+The
+.Em SendByte
+command sends the byte provided in the
+.Fa cmd
+field to the device.
+.It Sy SMB_RECVB Ta
+The
+.Em ReceiveByte
+command reads a single byte from the device which will
+be returned in the
+.Fa cmd
+field.
+.It Sy 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 Sy 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 Sy 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 Sy 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 Sy 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 Sy 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 Sy 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
-Using the write routine is equivalent to a SMB_WRITEW ioctl.
+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
OpenPOWER on IntegriCloud