onewire_subr.c revision 1.3.8.2 1 1.3.8.2 tron /* $NetBSD: onewire_subr.c,v 1.3.8.2 2006/05/24 15:50:27 tron Exp $ */
2 1.3.8.2 tron /* $OpenBSD: onewire_subr.c,v 1.1 2006/03/04 16:27:03 grange Exp $ */
3 1.3.8.2 tron
4 1.3.8.2 tron /*
5 1.3.8.2 tron * Copyright (c) 2006 Alexander Yurchenko <grange (at) openbsd.org>
6 1.3.8.2 tron *
7 1.3.8.2 tron * Permission to use, copy, modify, and distribute this software for any
8 1.3.8.2 tron * purpose with or without fee is hereby granted, provided that the above
9 1.3.8.2 tron * copyright notice and this permission notice appear in all copies.
10 1.3.8.2 tron *
11 1.3.8.2 tron * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 1.3.8.2 tron * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 1.3.8.2 tron * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 1.3.8.2 tron * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 1.3.8.2 tron * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 1.3.8.2 tron * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 1.3.8.2 tron * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 1.3.8.2 tron */
19 1.3.8.2 tron
20 1.3.8.2 tron /*
21 1.3.8.2 tron * 1-Wire bus miscellaneous routines.
22 1.3.8.2 tron */
23 1.3.8.2 tron
24 1.3.8.2 tron #include <sys/param.h>
25 1.3.8.2 tron #include <sys/systm.h>
26 1.3.8.2 tron #include <sys/device.h>
27 1.3.8.2 tron
28 1.3.8.2 tron #include <dev/onewire/onewiredevs.h>
29 1.3.8.2 tron #include <dev/onewire/onewirereg.h>
30 1.3.8.2 tron #include <dev/onewire/onewirevar.h>
31 1.3.8.2 tron
32 1.3.8.2 tron #ifdef ONEWIREVERBOSE
33 1.3.8.2 tron struct onewire_family {
34 1.3.8.2 tron int of_type;
35 1.3.8.2 tron const char * of_name;
36 1.3.8.2 tron };
37 1.3.8.2 tron #include <dev/onewire/onewiredevs_data.h>
38 1.3.8.2 tron #endif
39 1.3.8.2 tron
40 1.3.8.2 tron static const u_int8_t crctable[] = {
41 1.3.8.2 tron 0x00, 0x5e, 0xbc, 0xe2, 0x61, 0x3f, 0xdd, 0x83,
42 1.3.8.2 tron 0xc2, 0x9c, 0x7e, 0x20, 0xa3, 0xfd, 0x1f, 0x41,
43 1.3.8.2 tron 0x9d, 0xc3, 0x21, 0x7f, 0xfc, 0xa2, 0x40, 0x1e,
44 1.3.8.2 tron 0x5f, 0x01, 0xe3, 0xbd, 0x3e, 0x60, 0x82, 0xdc,
45 1.3.8.2 tron 0x23, 0x7d, 0x9f, 0xc1, 0x42, 0x1c, 0xfe, 0xa0,
46 1.3.8.2 tron 0xe1, 0xbf, 0x5d, 0x03, 0x80, 0xde, 0x3c, 0x62,
47 1.3.8.2 tron 0xbe, 0xe0, 0x02, 0x5c, 0xdf, 0x81, 0x63, 0x3d,
48 1.3.8.2 tron 0x7c, 0x22, 0xc0, 0x9e, 0x1d, 0x43, 0xa1, 0xff,
49 1.3.8.2 tron 0x46, 0x18, 0xfa, 0xa4, 0x27, 0x79, 0x9b, 0xc5,
50 1.3.8.2 tron 0x84, 0xda, 0x38, 0x66, 0xe5, 0xbb, 0x59, 0x07,
51 1.3.8.2 tron 0xdb, 0x85, 0x67, 0x39, 0xba, 0xe4, 0x06, 0x58,
52 1.3.8.2 tron 0x19, 0x47, 0xa5, 0xfb, 0x78, 0x26, 0xc4, 0x9a,
53 1.3.8.2 tron 0x65, 0x3b, 0xd9, 0x87, 0x04, 0x5a, 0xb8, 0xe6,
54 1.3.8.2 tron 0xa7, 0xf9, 0x1b, 0x45, 0xc6, 0x98, 0x7a, 0x24,
55 1.3.8.2 tron 0xf8, 0xa6, 0x44, 0x1a, 0x99, 0xc7, 0x25, 0x7b,
56 1.3.8.2 tron 0x3a, 0x64, 0x86, 0xd8, 0x5b, 0x05, 0xe7, 0xb9,
57 1.3.8.2 tron 0x8c, 0xd2, 0x30, 0x6e, 0xed, 0xb3, 0x51, 0x0f,
58 1.3.8.2 tron 0x4e, 0x10, 0xf2, 0xac, 0x2f, 0x71, 0x93, 0xcd,
59 1.3.8.2 tron 0x11, 0x4f, 0xad, 0xf3, 0x70, 0x2e, 0xcc, 0x92,
60 1.3.8.2 tron 0xd3, 0x8d, 0x6f, 0x31, 0xb2, 0xec, 0x0e, 0x50,
61 1.3.8.2 tron 0xaf, 0xf1, 0x13, 0x4d, 0xce, 0x90, 0x72, 0x2c,
62 1.3.8.2 tron 0x6d, 0x33, 0xd1, 0x8f, 0x0c, 0x52, 0xb0, 0xee,
63 1.3.8.2 tron 0x32, 0x6c, 0x8e, 0xd0, 0x53, 0x0d, 0xef, 0xb1,
64 1.3.8.2 tron 0xf0, 0xae, 0x4c, 0x12, 0x91, 0xcf, 0x2d, 0x73,
65 1.3.8.2 tron 0xca, 0x94, 0x76, 0x28, 0xab, 0xf5, 0x17, 0x49,
66 1.3.8.2 tron 0x08, 0x56, 0xb4, 0xea, 0x69, 0x37, 0xd5, 0x8b,
67 1.3.8.2 tron 0x57, 0x09, 0xeb, 0xb5, 0x36, 0x68, 0x8a, 0xd4,
68 1.3.8.2 tron 0x95, 0xcb, 0x29, 0x77, 0xf4, 0xaa, 0x48, 0x16,
69 1.3.8.2 tron 0xe9, 0xb7, 0x55, 0x0b, 0x88, 0xd6, 0x34, 0x6a,
70 1.3.8.2 tron 0x2b, 0x75, 0x97, 0xc9, 0x4a, 0x14, 0xf6, 0xa8,
71 1.3.8.2 tron 0x74, 0x2a, 0xc8, 0x96, 0x15, 0x4b, 0xa9, 0xf7,
72 1.3.8.2 tron 0xb6, 0xe8, 0x0a, 0x54, 0xd7, 0x89, 0x6b, 0x35
73 1.3.8.2 tron };
74 1.3.8.2 tron
75 1.3.8.2 tron int
76 1.3.8.2 tron onewire_crc(const void *buf, int len)
77 1.3.8.2 tron {
78 1.3.8.2 tron const u_int8_t *p = buf;
79 1.3.8.2 tron u_int8_t crc = 0;
80 1.3.8.2 tron
81 1.3.8.2 tron while (len--)
82 1.3.8.2 tron crc = crctable[crc ^ *p++];
83 1.3.8.2 tron
84 1.3.8.2 tron return (crc);
85 1.3.8.2 tron }
86 1.3.8.2 tron
87 1.3.8.2 tron const char *
88 1.3.8.2 tron onewire_famname(int type)
89 1.3.8.2 tron {
90 1.3.8.2 tron #ifdef ONEWIREVERBOSE
91 1.3.8.2 tron const struct onewire_family *of;
92 1.3.8.2 tron
93 1.3.8.2 tron for (of = onewire_famtab; of->of_name != NULL; of++)
94 1.3.8.2 tron if (of->of_type == type)
95 1.3.8.2 tron return (of->of_name);
96 1.3.8.2 tron #endif
97 1.3.8.2 tron
98 1.3.8.2 tron return (NULL);
99 1.3.8.2 tron }
100 1.3.8.2 tron
101 1.3.8.2 tron int
102 1.3.8.2 tron onewire_matchbyfam(struct onewire_attach_args *oa,
103 1.3.8.2 tron const struct onewire_matchfam *fams, int nent)
104 1.3.8.2 tron {
105 1.3.8.2 tron const struct onewire_matchfam *om;
106 1.3.8.2 tron int i;
107 1.3.8.2 tron
108 1.3.8.2 tron for (i = 0, om = fams; i < nent; i++, om++)
109 1.3.8.2 tron if (ONEWIRE_ROM_FAMILY_TYPE(oa->oa_rom) == om->om_type)
110 1.3.8.2 tron return (1);
111 1.3.8.2 tron
112 1.3.8.2 tron return (0);
113 1.3.8.2 tron }
114