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