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