xref: /freebsd/share/man/man4/smb.4 (revision 409a390c3341fb4f162cd7de1fd595a323ebbfd8)
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 February 6, 2009
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.
75The slave address is specified in the seven most significant bits
76.Pq i.e. Dq "left-justified" .
77The least significant bit of the slave address must be zero.
78.Pp
79.Bl -column ".Dv SMB_QUICK_WRITE" -compact
80.It Em Ioctl Ta Em Description
81.Pp
82.It Dv SMB_QUICK_WRITE Ta
83The
84.Em QuickWrite
85command just issues the device address with write intent
86to the bus, without transferring any data.
87.It Dv SMB_QUICK_READ Ta
88The
89.Em QuickRead
90command just issues the device address with read intent
91to the bus, without transferring any data.
92.It Dv SMB_SENDB Ta
93The
94.Em SendByte
95command sends the byte provided in the
96.Fa cmd
97field to the device.
98.It Dv SMB_RECVB Ta
99The
100.Em ReceiveByte
101command reads a single byte from the device which will
102be returned in the
103.Fa cmd
104field.
105.It Dv SMB_WRITEB Ta
106The
107.Em WriteByte
108command first sends the byte from the
109.Fa cmd
110field to the device, followed by the byte given in
111.Fa data.byte .
112.It Dv SMB_WRITEW Ta
113The
114.Em WriteWord
115command first sends the byte from the
116.Fa cmd
117field to the device, followed by the word given in
118.Fa data.word .
119Note that the SMBus byte-order is little-endian by definition.
120.It Dv SMB_READB Ta
121The
122.Em ReadByte
123command first sends the byte from the
124.Fa cmd
125field to the device, and then reads one byte of data from
126the device.
127The returned data will be stored in the location pointed to by
128.Fa data.byte_ptr .
129.It Dv SMB_READW Ta
130The
131.Em ReadWord
132command first sends the byte from the
133.Fa cmd
134field to the device, and then reads one word of data from
135the device.
136The returned data will be stored in the location pointed to by
137.Fa data.word_ptr .
138.It Dv SMB_PCALL Ta
139The
140.Em ProcedureCall
141command first sends the byte from the
142.Fa cmd
143field to the device, followed by the word provided in
144.Fa data.process.sdata .
145It then reads one word of data from the device, and returns it
146in the location pointed to by
147.Fa data.process.rdata .
148.It Dv SMB_BWRITE Ta
149The
150.Em BlockWrite
151command first sends the byte from the
152.Fa cmd
153field to the device, followed by
154.Fa count
155bytes of data that are taken from the buffer pointed to by
156.Fa data.byte_ptr .
157The SMBus specification mandates that no more than 32 bytes of
158data can be transferred in a single block read or write command.
159This value is available in the constant
160.Dv SMB_MAXBLOCKSIZE .
161.It Dv SMB_BREAD Ta
162The
163.Em BlockRead
164command first sends the byte from the
165.Fa cmd
166field to the device, and then reads
167.Fa count
168bytes of data that from the device.
169These data will be returned in the buffer pointed to by
170.Fa data.byte_ptr .
171.El
172.Pp
173The
174.Xr read 2
175and
176.Xr write 2
177system calls are not implemented by this driver.
178.Sh ERRORS
179The
180.Xr ioctl 2
181commands can cause the following driver-specific errors:
182.Bl -tag -width Er
183.It Bq Er ENXIO
184Device did not respond to selection.
185.It Bq Er EBUSY
186Device still in use.
187.It Bq Er ENODEV
188Operation not supported by device (not supposed to happen).
189.It Bq Er EINVAL
190General argument error.
191.It Bq Er EWOULDBLOCK
192SMBus transaction timed out.
193.El
194.Sh SEE ALSO
195.Xr ioctl 2 ,
196.Xr smbus 4
197.Sh HISTORY
198The
199.Nm
200manual page first appeared in
201.Fx 3.0 .
202.Sh AUTHORS
203This
204manual page was written by
205.An Nicolas Souchu .
206