xref: /openbsd/sys/dev/onewire/onewirevar.h (revision 73471bf0)
1 /*	$OpenBSD: onewirevar.h,v 1.7 2010/07/19 23:44:09 deraadt Exp $	*/
2 
3 /*
4  * Copyright (c) 2006 Alexander Yurchenko <grange@openbsd.org>
5  *
6  * Permission to use, copy, modify, and distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 #ifndef _DEV_ONEWIRE_ONEWIREVAR_H_
20 #define _DEV_ONEWIRE_ONEWIREVAR_H_
21 
22 /*
23  * 1-Wire bus interface.
24  */
25 
26 /* Bus master interface */
27 struct onewire_bus {
28 	void *	bus_cookie;
29 
30 	int	(*bus_reset)(void *);
31 	int	(*bus_bit)(void *, int);
32 	int	(*bus_read_byte)(void *);
33 	void	(*bus_write_byte)(void *, int);
34 	void	(*bus_read_block)(void *, void *, int);
35 	void	(*bus_write_block)(void *, const void *, int);
36 	int	(*bus_triplet)(void *, int);
37 	void	(*bus_matchrom)(void *, u_int64_t);
38 	int	(*bus_search)(void *, u_int64_t *, int, u_int64_t);
39 };
40 
41 /* Bus methods */
42 int		onewire_lock(void *, int);
43 void		onewire_unlock(void *);
44 
45 int		onewire_reset(void *);
46 int		onewire_bit(void *, int);
47 int		onewire_read_byte(void *);
48 void		onewire_write_byte(void *, int);
49 void		onewire_read_block(void *, void *, int);
50 void		onewire_write_block(void *, const void *, int);
51 int		onewire_triplet(void *, int);
52 void		onewire_matchrom(void *, u_int64_t);
53 int		onewire_search(void *, u_int64_t *, int, u_int64_t);
54 
55 #define ONEWIRE_NOWAIT		0x0001
56 
57 /* Bus attachment */
58 struct onewirebus_attach_args {
59 	struct onewire_bus *	oba_bus;
60 	int			oba_flags;
61 #define	ONEWIRE_SCAN_NOW		0x0001
62 #define	ONEWIRE_NO_PERIODIC_SCAN	0x0002
63 };
64 
65 int	onewirebus_print(void *, const char *);
66 
67 /* Device attachment */
68 struct onewire_attach_args {
69 	void *			oa_onewire;
70 	u_int64_t		oa_rom;
71 };
72 
73 /* Family matching */
74 struct onewire_matchfam {
75 	int om_type;
76 };
77 
78 /* Miscellaneous routines */
79 int		onewire_crc(const void *, int);
80 u_int16_t	onewire_crc16(const void *, int);
81 const char *	onewire_famname(int);
82 int		onewire_matchbyfam(struct onewire_attach_args *,
83 		    const struct onewire_matchfam *, int);
84 
85 /* Bus bit-banging */
86 struct onewire_bbops {
87 	void	(*bb_rx)(void *);
88 	void	(*bb_tx)(void *);
89 	int	(*bb_get)(void *);
90 	void	(*bb_set)(void *, int);
91 };
92 
93 int		onewire_bb_reset(const struct onewire_bbops *, void *);
94 int		onewire_bb_bit(const struct onewire_bbops *, void *, int);
95 
96 #endif	/* !_DEV_ONEWIRE_ONEWIREVAR_H_ */
97