xref: /freebsd/share/man/man9/own.9 (revision 6829dae12bb055451fa467da4589c43bd03b1e64)
1.\"
2.\" Copyright (c) 2015 M. Warner Losh
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. The name of the author may not be used to endorse or promote products
11.\"    derived from this software without specific prior written permission.
12.\"
13.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23.\" SUCH DAMAGE.
24.\"
25.\" $FreeBSD$
26.\"
27.Dd July 20, 2015
28.Dt OWN 9
29.Os
30.Sh NAME
31.Nm own ,
32.Nm own_send_command ,
33.Nm own_commmand_wait ,
34.Nm own_self_command ,
35.Nm own_acquire_bus ,
36.Nm own crc ,
37.Nm own_release_bus ,
38.Nm OWN_ACQUIRE_BUS ,
39.Nm OWN_CRC ,
40.Nm OWN_RELEASE_BUS ,
41.Nm OWN_SEND_COMMAND
42.Nd Dallas Semiconductor 1-Wire Network and Transport Interface
43.Sh SYNOPSIS
44.In sys/bus.h
45.In dev/ow/own.h
46.Ft int
47.Fn own_send_command "device_t pdev" "struct ow_cmd *cmd"
48.Ft int
49.Fn own_command_wait "device_t pdev" "struct ow_cmd *cmd"
50.Ft int
51.Fn own_self_command "device_t pdev" "struct ow_cmd *cmd" "uint8_t xpt_cmd"
52.Ft int
53.Fn own_acquire_bus "device_t pdev" "int how"
54.Ft int
55.Fn own_release_bus "device_t pdev"
56.Ft int
57.Fn own_crc "device_t pdev" "uint8_t *buffer" "size_t len"
58.Ft int
59.Fn OWN_SEND_COMMAND "device_t ndev" "device_t pdev" "struct ow_cmd *cmd"
60.Ft int
61.Fn OWN_ACQUIRE_BUS "device_t ndev" "device_t pdev" "int how"
62.Ft void
63.Fn OWN_RELEASE_BUS "device_t ndev" "device_t pdev"
64.Ft uint8_t
65.Fn OWN_CRC "device_t ndev" "device_t pdev" "uint8_t *buffer" "size_t len"
66.Sh DESCRIPTION
67The
68.Nm
69interface defines three sets of functions for interacting with 1-Wire
70devices:
71sending commands,
72reserving the bus,
73and
74ensuring data integrity.
75Wrappers are provided for the raw
76.Nm OWN
77.Xr kobj 9
78interfaces and should be used for improved safety over the
79.Xr kobj 9
80ones.
81.Ss Bus Commands
82The 1-Wire bus defines different layers of access to the devices on
83the bus.
84The
85.Nm
86functions provide access to the network and transport layers.
87The network layer designates the next command as being either for all
88devices on the bus, or for a specific device.
89The network layer also specifies the speed used by the link layer.
90.Pp
91.Vt "struct ow_cmd"
92encapsulates network access, speed, and timing information.
93It specifies the commands to send and whether or not to read data.
94Its members are:
95.Bl -tag -width ".Va xxxx"
96.It Va flags
97Flags controlling the interpretation of the structure.
98These flags are defined in
99.In dev/ow/ow.h :
100.Bl -tag -width indent
101.It OW_FLAG_OVERDRIVE
102Send
103.Va xpt_cmd
104bytes and read
105.Va xpt_read
106bytes at overdrive speed.
107.It OW_FLAG_READ_BIT
108Interpret
109.Va xpt_read_len
110to be in bits to be read after
111.Va xpt_cmd
112rather than bytes.
113.El
114.It Va rom_cmd
115ROM command bytes to send.
116.It Va rom_len
117Number of ROM command bytes to send.
118.It Va rom_read_len
119Number of bytes to read after sending the ROM command.
120.It Va rom_read
121Buffer for bytes read after the ROM command.
122.It Va xpt_cmd
123Transport command to send.
124.It Va xpt_len
125Length of the transport command bytes to send.
126Specify 0 for no transport command.
127.It Va xpt_read_len
128Number of bytes to read after
129.Va xpt_cmd
130bytes are sent.
131If the
132.Dv OW_FLAG_READ_BIT
133bit is set in
134.Va flags ,
135then it is the number of bits to read.
136Bits read are packed into bytes.
137.It Va xpt_read
138Buffer for data read.
139.El
140.Pp
141.Fn own_command_wait
142acquires the 1-Wire bus, waiting if necessary,
143sends the command,
144and
145then releases the bus.
146.Fn own_send_command
147sends the command without bus reservation.
148.Fa pdev
149is the client device (the presentation layer device) sending the command.
150The
151.Fa cmd
152argument describes the transaction to send to the 1-Wire bus.
153.Pp
154.Fn own_self_command
155fills in
156.Fa cmd
157with a MATCH_ROM ROM command, the ROM address of
158.Fa pdev
159and the
160.Fa xpt_cmd
161as a convenient way to create directed commands.
162.Ss Bus Reservation
163The 1-Wire system includes an advisory lock for the bus that
164presentation layer devices can use to coordinate access.
165Locking is purely advisory at this time.
166.Pp
167.Fn own_acquire_bus
168reserves the bus.
169It waits indefinitely if the
170.Fa how
171argument is
172.Dv OWN_WAIT
173and returns the error
174.Dv EWOULDBLOCK
175if passed
176.Dv OWN_DONTWAIT
177when the bus is owned by another client.
178.Pp
179.Fn own_release_bus
180releases the bus.
181.Ss Data Integrity
182.Fn own_crc
183computes the 1-Wire standard CRC function over the data
184passed in
185.Fa buffer
186and
187.Fa len
188and returns the result.
189.Ss Notes
190The 1-Wire standard (Maxim AN937) defines layers that are akin to ISO
191networking layers.
192The lowest relevant layer, the link layer, defines the polling windows
193and the timing of the signaling of different modes.
194The network layer is built on top of the link layer
195and is used to address devices in a unicast or multicast manner.
196The transport layer defines commands and responses from the devices.
197The presentation layer is composed of the device specific commands and
198actions used to control the specific 1-Wire devices on bus.
199.Pp
200These interfaces are implemented by the
201.Xr ow 4
202device.
203Presentation layer devices (children of the newbus
204.Xr ow 4
205device) should only call the functions described here.
206The functionality provided by the
207.Xr owc 4
208device (specifically the
209.Xr owll 9
210interface) should only be called by the
211.Xr ow 4
212driver.
213.Sh SEE ALSO
214.Xr ow 4 ,
215.Xr owc 4 ,
216.Xr owll 9
217.Pa  https://pdfserv.maximintegrated.com/en/an/AN937.pdf
218.Sh LEGAL
219.Tn 1-Wire
220is a registered trademark of Maxim Integrated Products, Inc.
221.Sh HISTORY
222The
223.Nm
224driver first appeared in
225.Fx 11.0 .
226.Sh AUTHORS
227The
228.Nm
229device driver and this manual page were written by
230.An Warner Losh .
231