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