xref: /freebsd/share/man/man4/smb.4 (revision 9336e0699bda8a301cd2bfa37106b6ec5e32012e)
1.\" Copyright (c) 1998, Nicolas Souchu
2.\" Copyright (c) 2004, Joerg Wunsch
3.\" All rights reserved.
4.\"
5.\" Redistribution and use in source and binary forms, with or without
6.\" modification, are permitted provided that the following conditions
7.\" are met:
8.\" 1. Redistributions of source code must retain the above copyright
9.\"    notice, this list of conditions and the following disclaimer.
10.\" 2. Redistributions in binary form must reproduce the above copyright
11.\"    notice, this list of conditions and the following disclaimer in the
12.\"    documentation and/or other materials provided with the distribution.
13.\"
14.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24.\" SUCH DAMAGE.
25.\"
26.\" $FreeBSD$
27.\"
28.Dd October 25, 1998
29.Dt SMB 4
30.Os
31.Sh NAME
32.Nm smb
33.Nd SMB generic I/O device driver
34.Sh SYNOPSIS
35.Cd "device smb"
36.Sh DESCRIPTION
37The
38.Em smb
39character device driver provides generic i/o to any
40.Xr smbus 4
41instance.
42In order to control SMB devices, use
43.Pa /dev/smb?
44with the ioctls described below.
45Any of these ioctl commands takes a pointer to
46.Vt struct smbcmd
47as its argument.
48.Pp
49.Bd -literal
50#include <sys/types.h>
51
52struct smbcmd {
53	char cmd;
54	int count;
55	u_char slave;
56	union {
57		char byte;
58		short word;
59
60		char *byte_ptr;
61		short *word_ptr;
62
63		struct {
64			short sdata;
65			short *rdata;
66		} process;
67	} data;
68};
69.Ed
70.Pp
71The
72.Fa slave
73field is always used, and provides the address of the
74SMBus slave device to talk to.
75.Pp
76.Bl -column ".Dv SMB_QUICK_WRITE" -compact
77.It Em Ioctl Ta Em Description
78.Pp
79.It Dv SMB_QUICK_WRITE Ta
80The
81.Em QuickWrite
82command just issues the device address with write intent
83to the bus, without transferring any data.
84.It Dv SMB_QUICK_READ Ta
85The
86.Em QuickRead
87command just issues the device address with read intent
88to the bus, without transferring any data.
89.It Dv SMB_SENDB Ta
90The
91.Em SendByte
92command sends the byte provided in the
93.Fa cmd
94field to the device.
95.It Dv SMB_RECVB Ta
96The
97.Em ReceiveByte
98command reads a single byte from the device which will
99be returned in the
100.Fa cmd
101field.
102.It Dv SMB_WRITEB Ta
103The
104.Em WriteByte
105command first sends the byte from the
106.Fa cmd
107field to the device, followed by the byte given in
108.Fa data.byte .
109.It Dv SMB_WRITEW Ta
110The
111.Em WriteWord
112command first sends the byte from the
113.Fa cmd
114field to the device, followed by the word given in
115.Fa data.word .
116Note that the SMBus byte-order is little-endian by definition.
117.It Dv SMB_READB Ta
118The
119.Em ReadByte
120command first sends the byte from the
121.Fa cmd
122field to the device, and then reads one byte of data from
123the device.
124The returned data will be stored in the location pointed to by
125.Fa data.byte_ptr .
126.It Dv SMB_READW Ta
127The
128.Em ReadWord
129command first sends the byte from the
130.Fa cmd
131field to the device, and then reads one word of data from
132the device.
133The returned data will be stored in the location pointed to by
134.Fa data.word_ptr .
135.It Dv SMB_PCALL Ta
136The
137.Em ProcedureCall
138command first sends the byte from the
139.Fa cmd
140field to the device, followed by the word provided in
141.Fa data.process.sdata .
142It then reads one word of data from the device, and returns it
143in the location pointed to by
144.Fa data.process.rdata .
145.It Dv SMB_BWRITE Ta
146The
147.Em BlockWrite
148command first sends the byte from the
149.Fa cmd
150field to the device, followed by
151.Fa count
152bytes of data that are taken from the buffer pointed to by
153.Fa data.byte_ptr .
154The SMBus specification mandates that no more than 32 bytes of
155data can be transferred in a single block read or write command.
156This value is available in the constant
157.Dv SMB_MAXBLOCKSIZE .
158.It Dv SMB_BREAD Ta
159The
160.Em BlockRead
161command first sends the byte from the
162.Fa cmd
163field to the device, and then reads
164.Fa count
165bytes of data that from the device.
166These data will be returned in the buffer pointed to by
167.Fa data.byte_ptr .
168.El
169.Pp
170The
171.Xr read 2
172and
173.Xr write 2
174system calls are not implemented by this driver.
175.Sh ERRORS
176The
177.Xr ioctl 2
178commands can cause the following driver-specific errors:
179.Bl -tag -width Er
180.It Bq Er ENXIO
181Device did not respond to selection.
182.It Bq Er EBUSY
183Device still in use.
184.It Bq Er ENODEV
185Operation not supported by device (not supposed to happen).
186.It Bq Er EINVAL
187General argument error.
188.It Bq Er EWOULDBLOCK
189SMBus transaction timed out.
190.El
191.Sh SEE ALSO
192.Xr ioctl 2 ,
193.Xr smbus 4
194.Sh HISTORY
195The
196.Nm
197manual page first appeared in
198.Fx 3.0 .
199.Sh AUTHORS
200This
201manual page was written by
202.An Nicolas Souchu .
203