Home | History | Annotate | Line # | Download | only in onewire
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