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