1 /* 2 * w1.c 3 * 4 * Copyright (c) 2004 Evgeniy Polyakov <johnpol@2ka.mipt.ru> 5 * 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 */ 21 22 #include <linux/delay.h> 23 #include <linux/kernel.h> 24 #include <linux/module.h> 25 #include <linux/moduleparam.h> 26 #include <linux/list.h> 27 #include <linux/interrupt.h> 28 #include <linux/spinlock.h> 29 #include <linux/timer.h> 30 #include <linux/device.h> 31 #include <linux/slab.h> 32 #include <linux/sched.h> 33 #include <linux/kthread.h> 34 #include <linux/freezer.h> 35 36 #include <asm/atomic.h> 37 38 #include "w1.h" 39 #include "w1_log.h" 40 #include "w1_int.h" 41 #include "w1_family.h" 42 #include "w1_netlink.h" 43 44 MODULE_LICENSE("GPL"); 45 MODULE_AUTHOR("Evgeniy Polyakov <johnpol@2ka.mipt.ru>"); 46 MODULE_DESCRIPTION("Driver for 1-wire Dallas network protocol."); 47 48 static int w1_timeout = 10; 49 static int w1_control_timeout = 1; 50 int w1_max_slave_count = 10; 51 int w1_max_slave_ttl = 10; 52 53 module_param_named(timeout, w1_timeout, int, 0); 54 module_param_named(control_timeout, w1_control_timeout, int, 0); 55 module_param_named(max_slave_count, w1_max_slave_count, int, 0); 56 module_param_named(slave_ttl, w1_max_slave_ttl, int, 0); 57 58 DEFINE_MUTEX(w1_mlock); 59 LIST_HEAD(w1_masters); 60 61 static struct task_struct *w1_control_thread; 62 63 static int w1_master_match(struct device *dev, struct device_driver *drv) 64 { 65 return 1; 66 } 67 68 static int w1_master_probe(struct device *dev) 69 { 70 return -ENODEV; 71 } 72 73 static void w1_master_release(struct device *dev) 74 { 75 struct w1_master *md = dev_to_w1_master(dev); 76 77 dev_dbg(dev, "%s: Releasing %s.\n", __func__, md->name); 78 memset(md, 0, sizeof(struct w1_master) + sizeof(struct w1_bus_master)); 79 kfree(md); 80 } 81 82 static void w1_slave_release(struct device *dev) 83 { 84 struct w1_slave *sl = dev_to_w1_slave(dev); 85 86 printk("%s: Releasing %s.\n", __func__, sl->name); 87 88 while (atomic_read(&sl->refcnt)) { 89 printk("Waiting for %s to become free: refcnt=%d.\n", 90 sl->name, atomic_read(&sl->refcnt)); 91 if (msleep_interruptible(1000)) 92 flush_signals(current); 93 } 94 95 w1_family_put(sl->family); 96 sl->master->slave_count--; 97 98 complete(&sl->released); 99 } 100 101 static ssize_t w1_slave_read_name(struct device *dev, struct device_attribute *attr, char *buf) 102 { 103 struct w1_slave *sl = dev_to_w1_slave(dev); 104 105 return sprintf(buf, "%s\n", sl->name); 106 } 107 108 static ssize_t w1_slave_read_id(struct kobject *kobj, 109 struct bin_attribute *bin_attr, 110 char *buf, loff_t off, size_t count) 111 { 112 struct w1_slave *sl = kobj_to_w1_slave(kobj); 113 114 if (off > 8) { 115 count = 0; 116 } else { 117 if (off + count > 8) 118 count = 8 - off; 119 120 memcpy(buf, (u8 *)&sl->reg_num, count); 121 } 122 123 return count; 124 } 125 126 static struct device_attribute w1_slave_attr_name = 127 __ATTR(name, S_IRUGO, w1_slave_read_name, NULL); 128 129 static struct bin_attribute w1_slave_attr_bin_id = { 130 .attr = { 131 .name = "id", 132 .mode = S_IRUGO, 133 }, 134 .size = 8, 135 .read = w1_slave_read_id, 136 }; 137 138 /* Default family */ 139 140 static ssize_t w1_default_write(struct kobject *kobj, 141 struct bin_attribute *bin_attr, 142 char *buf, loff_t off, size_t count) 143 { 144 struct w1_slave *sl = kobj_to_w1_slave(kobj); 145 146 mutex_lock(&sl->master->mutex); 147 if (w1_reset_select_slave(sl)) { 148 count = 0; 149 goto out_up; 150 } 151 152 w1_write_block(sl->master, buf, count); 153 154 out_up: 155 mutex_unlock(&sl->master->mutex); 156 return count; 157 } 158 159 static ssize_t w1_default_read(struct kobject *kobj, 160 struct bin_attribute *bin_attr, 161 char *buf, loff_t off, size_t count) 162 { 163 struct w1_slave *sl = kobj_to_w1_slave(kobj); 164 165 mutex_lock(&sl->master->mutex); 166 w1_read_block(sl->master, buf, count); 167 mutex_unlock(&sl->master->mutex); 168 return count; 169 } 170 171 static struct bin_attribute w1_default_attr = { 172 .attr = { 173 .name = "rw", 174 .mode = S_IRUGO | S_IWUSR, 175 }, 176 .size = PAGE_SIZE, 177 .read = w1_default_read, 178 .write = w1_default_write, 179 }; 180 181 static int w1_default_add_slave(struct w1_slave *sl) 182 { 183 return sysfs_create_bin_file(&sl->dev.kobj, &w1_default_attr); 184 } 185 186 static void w1_default_remove_slave(struct w1_slave *sl) 187 { 188 sysfs_remove_bin_file(&sl->dev.kobj, &w1_default_attr); 189 } 190 191 static struct w1_family_ops w1_default_fops = { 192 .add_slave = w1_default_add_slave, 193 .remove_slave = w1_default_remove_slave, 194 }; 195 196 static struct w1_family w1_default_family = { 197 .fops = &w1_default_fops, 198 }; 199 200 static int w1_uevent(struct device *dev, struct kobj_uevent_env *env); 201 202 static struct bus_type w1_bus_type = { 203 .name = "w1", 204 .match = w1_master_match, 205 .uevent = w1_uevent, 206 }; 207 208 struct device_driver w1_master_driver = { 209 .name = "w1_master_driver", 210 .bus = &w1_bus_type, 211 .probe = w1_master_probe, 212 }; 213 214 struct device w1_master_device = { 215 .parent = NULL, 216 .bus = &w1_bus_type, 217 .bus_id = "w1 bus master", 218 .driver = &w1_master_driver, 219 .release = &w1_master_release 220 }; 221 222 static struct device_driver w1_slave_driver = { 223 .name = "w1_slave_driver", 224 .bus = &w1_bus_type, 225 }; 226 227 #if 0 228 struct device w1_slave_device = { 229 .parent = NULL, 230 .bus = &w1_bus_type, 231 .bus_id = "w1 bus slave", 232 .driver = &w1_slave_driver, 233 .release = &w1_slave_release 234 }; 235 #endif /* 0 */ 236 237 static ssize_t w1_master_attribute_show_name(struct device *dev, struct device_attribute *attr, char *buf) 238 { 239 struct w1_master *md = dev_to_w1_master(dev); 240 ssize_t count; 241 242 mutex_lock(&md->mutex); 243 count = sprintf(buf, "%s\n", md->name); 244 mutex_unlock(&md->mutex); 245 246 return count; 247 } 248 249 static ssize_t w1_master_attribute_store_search(struct device * dev, 250 struct device_attribute *attr, 251 const char * buf, size_t count) 252 { 253 struct w1_master *md = dev_to_w1_master(dev); 254 255 mutex_lock(&md->mutex); 256 md->search_count = simple_strtol(buf, NULL, 0); 257 mutex_unlock(&md->mutex); 258 259 return count; 260 } 261 262 static ssize_t w1_master_attribute_show_search(struct device *dev, 263 struct device_attribute *attr, 264 char *buf) 265 { 266 struct w1_master *md = dev_to_w1_master(dev); 267 ssize_t count; 268 269 mutex_lock(&md->mutex); 270 count = sprintf(buf, "%d\n", md->search_count); 271 mutex_unlock(&md->mutex); 272 273 return count; 274 } 275 276 static ssize_t w1_master_attribute_show_pointer(struct device *dev, struct device_attribute *attr, char *buf) 277 { 278 struct w1_master *md = dev_to_w1_master(dev); 279 ssize_t count; 280 281 mutex_lock(&md->mutex); 282 count = sprintf(buf, "0x%p\n", md->bus_master); 283 mutex_unlock(&md->mutex); 284 return count; 285 } 286 287 static ssize_t w1_master_attribute_show_timeout(struct device *dev, struct device_attribute *attr, char *buf) 288 { 289 ssize_t count; 290 count = sprintf(buf, "%d\n", w1_timeout); 291 return count; 292 } 293 294 static ssize_t w1_master_attribute_show_max_slave_count(struct device *dev, struct device_attribute *attr, char *buf) 295 { 296 struct w1_master *md = dev_to_w1_master(dev); 297 ssize_t count; 298 299 mutex_lock(&md->mutex); 300 count = sprintf(buf, "%d\n", md->max_slave_count); 301 mutex_unlock(&md->mutex); 302 return count; 303 } 304 305 static ssize_t w1_master_attribute_show_attempts(struct device *dev, struct device_attribute *attr, char *buf) 306 { 307 struct w1_master *md = dev_to_w1_master(dev); 308 ssize_t count; 309 310 mutex_lock(&md->mutex); 311 count = sprintf(buf, "%lu\n", md->attempts); 312 mutex_unlock(&md->mutex); 313 return count; 314 } 315 316 static ssize_t w1_master_attribute_show_slave_count(struct device *dev, struct device_attribute *attr, char *buf) 317 { 318 struct w1_master *md = dev_to_w1_master(dev); 319 ssize_t count; 320 321 mutex_lock(&md->mutex); 322 count = sprintf(buf, "%d\n", md->slave_count); 323 mutex_unlock(&md->mutex); 324 return count; 325 } 326 327 static ssize_t w1_master_attribute_show_slaves(struct device *dev, struct device_attribute *attr, char *buf) 328 { 329 struct w1_master *md = dev_to_w1_master(dev); 330 int c = PAGE_SIZE; 331 332 mutex_lock(&md->mutex); 333 334 if (md->slave_count == 0) 335 c -= snprintf(buf + PAGE_SIZE - c, c, "not found.\n"); 336 else { 337 struct list_head *ent, *n; 338 struct w1_slave *sl; 339 340 list_for_each_safe(ent, n, &md->slist) { 341 sl = list_entry(ent, struct w1_slave, w1_slave_entry); 342 343 c -= snprintf(buf + PAGE_SIZE - c, c, "%s\n", sl->name); 344 } 345 } 346 347 mutex_unlock(&md->mutex); 348 349 return PAGE_SIZE - c; 350 } 351 352 #define W1_MASTER_ATTR_RO(_name, _mode) \ 353 struct device_attribute w1_master_attribute_##_name = \ 354 __ATTR(w1_master_##_name, _mode, \ 355 w1_master_attribute_show_##_name, NULL) 356 357 #define W1_MASTER_ATTR_RW(_name, _mode) \ 358 struct device_attribute w1_master_attribute_##_name = \ 359 __ATTR(w1_master_##_name, _mode, \ 360 w1_master_attribute_show_##_name, \ 361 w1_master_attribute_store_##_name) 362 363 static W1_MASTER_ATTR_RO(name, S_IRUGO); 364 static W1_MASTER_ATTR_RO(slaves, S_IRUGO); 365 static W1_MASTER_ATTR_RO(slave_count, S_IRUGO); 366 static W1_MASTER_ATTR_RO(max_slave_count, S_IRUGO); 367 static W1_MASTER_ATTR_RO(attempts, S_IRUGO); 368 static W1_MASTER_ATTR_RO(timeout, S_IRUGO); 369 static W1_MASTER_ATTR_RO(pointer, S_IRUGO); 370 static W1_MASTER_ATTR_RW(search, S_IRUGO | S_IWUGO); 371 372 static struct attribute *w1_master_default_attrs[] = { 373 &w1_master_attribute_name.attr, 374 &w1_master_attribute_slaves.attr, 375 &w1_master_attribute_slave_count.attr, 376 &w1_master_attribute_max_slave_count.attr, 377 &w1_master_attribute_attempts.attr, 378 &w1_master_attribute_timeout.attr, 379 &w1_master_attribute_pointer.attr, 380 &w1_master_attribute_search.attr, 381 NULL 382 }; 383 384 static struct attribute_group w1_master_defattr_group = { 385 .attrs = w1_master_default_attrs, 386 }; 387 388 int w1_create_master_attributes(struct w1_master *master) 389 { 390 return sysfs_create_group(&master->dev.kobj, &w1_master_defattr_group); 391 } 392 393 static void w1_destroy_master_attributes(struct w1_master *master) 394 { 395 sysfs_remove_group(&master->dev.kobj, &w1_master_defattr_group); 396 } 397 398 #ifdef CONFIG_HOTPLUG 399 static int w1_uevent(struct device *dev, struct kobj_uevent_env *env) 400 { 401 struct w1_master *md = NULL; 402 struct w1_slave *sl = NULL; 403 char *event_owner, *name; 404 int err; 405 406 if (dev->driver == &w1_master_driver) { 407 md = container_of(dev, struct w1_master, dev); 408 event_owner = "master"; 409 name = md->name; 410 } else if (dev->driver == &w1_slave_driver) { 411 sl = container_of(dev, struct w1_slave, dev); 412 event_owner = "slave"; 413 name = sl->name; 414 } else { 415 dev_dbg(dev, "Unknown event.\n"); 416 return -EINVAL; 417 } 418 419 dev_dbg(dev, "Hotplug event for %s %s, bus_id=%s.\n", 420 event_owner, name, dev->bus_id); 421 422 if (dev->driver != &w1_slave_driver || !sl) 423 return 0; 424 425 err = add_uevent_var(env, "W1_FID=%02X", sl->reg_num.family); 426 if (err) 427 return err; 428 429 err = add_uevent_var(env, "W1_SLAVE_ID=%024LX", 430 (unsigned long long)sl->reg_num.id); 431 if (err) 432 return err; 433 434 return 0; 435 }; 436 #else 437 static int w1_uevent(struct device *dev, struct kobj_uevent_env *env) 438 { 439 return 0; 440 } 441 #endif 442 443 static int __w1_attach_slave_device(struct w1_slave *sl) 444 { 445 int err; 446 447 sl->dev.parent = &sl->master->dev; 448 sl->dev.driver = &w1_slave_driver; 449 sl->dev.bus = &w1_bus_type; 450 sl->dev.release = &w1_slave_release; 451 452 snprintf(&sl->dev.bus_id[0], sizeof(sl->dev.bus_id), 453 "%02x-%012llx", 454 (unsigned int) sl->reg_num.family, 455 (unsigned long long) sl->reg_num.id); 456 snprintf(&sl->name[0], sizeof(sl->name), 457 "%02x-%012llx", 458 (unsigned int) sl->reg_num.family, 459 (unsigned long long) sl->reg_num.id); 460 461 dev_dbg(&sl->dev, "%s: registering %s as %p.\n", __func__, 462 &sl->dev.bus_id[0], sl); 463 464 err = device_register(&sl->dev); 465 if (err < 0) { 466 dev_err(&sl->dev, 467 "Device registration [%s] failed. err=%d\n", 468 sl->dev.bus_id, err); 469 return err; 470 } 471 472 /* Create "name" entry */ 473 err = device_create_file(&sl->dev, &w1_slave_attr_name); 474 if (err < 0) { 475 dev_err(&sl->dev, 476 "sysfs file creation for [%s] failed. err=%d\n", 477 sl->dev.bus_id, err); 478 goto out_unreg; 479 } 480 481 /* Create "id" entry */ 482 err = sysfs_create_bin_file(&sl->dev.kobj, &w1_slave_attr_bin_id); 483 if (err < 0) { 484 dev_err(&sl->dev, 485 "sysfs file creation for [%s] failed. err=%d\n", 486 sl->dev.bus_id, err); 487 goto out_rem1; 488 } 489 490 /* if the family driver needs to initialize something... */ 491 if (sl->family->fops && sl->family->fops->add_slave && 492 ((err = sl->family->fops->add_slave(sl)) < 0)) { 493 dev_err(&sl->dev, 494 "sysfs file creation for [%s] failed. err=%d\n", 495 sl->dev.bus_id, err); 496 goto out_rem2; 497 } 498 499 list_add_tail(&sl->w1_slave_entry, &sl->master->slist); 500 501 return 0; 502 503 out_rem2: 504 sysfs_remove_bin_file(&sl->dev.kobj, &w1_slave_attr_bin_id); 505 out_rem1: 506 device_remove_file(&sl->dev, &w1_slave_attr_name); 507 out_unreg: 508 device_unregister(&sl->dev); 509 return err; 510 } 511 512 static int w1_attach_slave_device(struct w1_master *dev, struct w1_reg_num *rn) 513 { 514 struct w1_slave *sl; 515 struct w1_family *f; 516 int err; 517 struct w1_netlink_msg msg; 518 519 sl = kzalloc(sizeof(struct w1_slave), GFP_KERNEL); 520 if (!sl) { 521 dev_err(&dev->dev, 522 "%s: failed to allocate new slave device.\n", 523 __func__); 524 return -ENOMEM; 525 } 526 527 528 sl->owner = THIS_MODULE; 529 sl->master = dev; 530 set_bit(W1_SLAVE_ACTIVE, (long *)&sl->flags); 531 532 memset(&msg, 0, sizeof(msg)); 533 memcpy(&sl->reg_num, rn, sizeof(sl->reg_num)); 534 atomic_set(&sl->refcnt, 0); 535 init_completion(&sl->released); 536 537 spin_lock(&w1_flock); 538 f = w1_family_registered(rn->family); 539 if (!f) { 540 f= &w1_default_family; 541 dev_info(&dev->dev, "Family %x for %02x.%012llx.%02x is not registered.\n", 542 rn->family, rn->family, 543 (unsigned long long)rn->id, rn->crc); 544 } 545 __w1_family_get(f); 546 spin_unlock(&w1_flock); 547 548 sl->family = f; 549 550 551 err = __w1_attach_slave_device(sl); 552 if (err < 0) { 553 dev_err(&dev->dev, "%s: Attaching %s failed.\n", __func__, 554 sl->name); 555 w1_family_put(sl->family); 556 kfree(sl); 557 return err; 558 } 559 560 sl->ttl = dev->slave_ttl; 561 dev->slave_count++; 562 563 memcpy(msg.id.id, rn, sizeof(msg.id)); 564 msg.type = W1_SLAVE_ADD; 565 w1_netlink_send(dev, &msg); 566 567 return 0; 568 } 569 570 static void w1_slave_detach(struct w1_slave *sl) 571 { 572 struct w1_netlink_msg msg; 573 574 dev_dbg(&sl->dev, "%s: detaching %s [%p].\n", __func__, sl->name, sl); 575 576 list_del(&sl->w1_slave_entry); 577 578 if (sl->family->fops && sl->family->fops->remove_slave) 579 sl->family->fops->remove_slave(sl); 580 581 memset(&msg, 0, sizeof(msg)); 582 memcpy(msg.id.id, &sl->reg_num, sizeof(msg.id)); 583 msg.type = W1_SLAVE_REMOVE; 584 w1_netlink_send(sl->master, &msg); 585 586 sysfs_remove_bin_file(&sl->dev.kobj, &w1_slave_attr_bin_id); 587 device_remove_file(&sl->dev, &w1_slave_attr_name); 588 device_unregister(&sl->dev); 589 590 wait_for_completion(&sl->released); 591 kfree(sl); 592 } 593 594 static struct w1_master *w1_search_master(void *data) 595 { 596 struct w1_master *dev; 597 int found = 0; 598 599 mutex_lock(&w1_mlock); 600 list_for_each_entry(dev, &w1_masters, w1_master_entry) { 601 if (dev->bus_master->data == data) { 602 found = 1; 603 atomic_inc(&dev->refcnt); 604 break; 605 } 606 } 607 mutex_unlock(&w1_mlock); 608 609 return (found)?dev:NULL; 610 } 611 612 struct w1_master *w1_search_master_id(u32 id) 613 { 614 struct w1_master *dev; 615 int found = 0; 616 617 mutex_lock(&w1_mlock); 618 list_for_each_entry(dev, &w1_masters, w1_master_entry) { 619 if (dev->id == id) { 620 found = 1; 621 atomic_inc(&dev->refcnt); 622 break; 623 } 624 } 625 mutex_unlock(&w1_mlock); 626 627 return (found)?dev:NULL; 628 } 629 630 struct w1_slave *w1_search_slave(struct w1_reg_num *id) 631 { 632 struct w1_master *dev; 633 struct w1_slave *sl = NULL; 634 int found = 0; 635 636 mutex_lock(&w1_mlock); 637 list_for_each_entry(dev, &w1_masters, w1_master_entry) { 638 mutex_lock(&dev->mutex); 639 list_for_each_entry(sl, &dev->slist, w1_slave_entry) { 640 if (sl->reg_num.family == id->family && 641 sl->reg_num.id == id->id && 642 sl->reg_num.crc == id->crc) { 643 found = 1; 644 atomic_inc(&dev->refcnt); 645 atomic_inc(&sl->refcnt); 646 break; 647 } 648 } 649 mutex_unlock(&dev->mutex); 650 651 if (found) 652 break; 653 } 654 mutex_unlock(&w1_mlock); 655 656 return (found)?sl:NULL; 657 } 658 659 void w1_reconnect_slaves(struct w1_family *f) 660 { 661 struct w1_master *dev; 662 663 mutex_lock(&w1_mlock); 664 list_for_each_entry(dev, &w1_masters, w1_master_entry) { 665 dev_dbg(&dev->dev, "Reconnecting slaves in %s into new family %02x.\n", 666 dev->name, f->fid); 667 set_bit(W1_MASTER_NEED_RECONNECT, &dev->flags); 668 } 669 mutex_unlock(&w1_mlock); 670 } 671 672 static void w1_slave_found(void *data, u64 rn) 673 { 674 int slave_count; 675 struct w1_slave *sl; 676 struct list_head *ent; 677 struct w1_reg_num *tmp; 678 struct w1_master *dev; 679 u64 rn_le = cpu_to_le64(rn); 680 681 dev = w1_search_master(data); 682 if (!dev) { 683 printk(KERN_ERR "Failed to find w1 master device for data %p, " 684 "it is impossible.\n", data); 685 return; 686 } 687 688 tmp = (struct w1_reg_num *) &rn; 689 690 slave_count = 0; 691 list_for_each(ent, &dev->slist) { 692 693 sl = list_entry(ent, struct w1_slave, w1_slave_entry); 694 695 if (sl->reg_num.family == tmp->family && 696 sl->reg_num.id == tmp->id && 697 sl->reg_num.crc == tmp->crc) { 698 set_bit(W1_SLAVE_ACTIVE, (long *)&sl->flags); 699 break; 700 } 701 702 slave_count++; 703 } 704 705 if (slave_count == dev->slave_count && 706 rn && ((rn >> 56) & 0xff) == w1_calc_crc8((u8 *)&rn_le, 7)) { 707 w1_attach_slave_device(dev, tmp); 708 } 709 710 atomic_dec(&dev->refcnt); 711 } 712 713 /** 714 * Performs a ROM Search & registers any devices found. 715 * The 1-wire search is a simple binary tree search. 716 * For each bit of the address, we read two bits and write one bit. 717 * The bit written will put to sleep all devies that don't match that bit. 718 * When the two reads differ, the direction choice is obvious. 719 * When both bits are 0, we must choose a path to take. 720 * When we can scan all 64 bits without having to choose a path, we are done. 721 * 722 * See "Application note 187 1-wire search algorithm" at www.maxim-ic.com 723 * 724 * @dev The master device to search 725 * @cb Function to call when a device is found 726 */ 727 void w1_search(struct w1_master *dev, u8 search_type, w1_slave_found_callback cb) 728 { 729 u64 last_rn, rn, tmp64; 730 int i, slave_count = 0; 731 int last_zero, last_device; 732 int search_bit, desc_bit; 733 u8 triplet_ret = 0; 734 735 search_bit = 0; 736 rn = last_rn = 0; 737 last_device = 0; 738 last_zero = -1; 739 740 desc_bit = 64; 741 742 while ( !last_device && (slave_count++ < dev->max_slave_count) ) { 743 last_rn = rn; 744 rn = 0; 745 746 /* 747 * Reset bus and all 1-wire device state machines 748 * so they can respond to our requests. 749 * 750 * Return 0 - device(s) present, 1 - no devices present. 751 */ 752 if (w1_reset_bus(dev)) { 753 dev_dbg(&dev->dev, "No devices present on the wire.\n"); 754 break; 755 } 756 757 /* Start the search */ 758 w1_write_8(dev, search_type); 759 for (i = 0; i < 64; ++i) { 760 /* Determine the direction/search bit */ 761 if (i == desc_bit) 762 search_bit = 1; /* took the 0 path last time, so take the 1 path */ 763 else if (i > desc_bit) 764 search_bit = 0; /* take the 0 path on the next branch */ 765 else 766 search_bit = ((last_rn >> i) & 0x1); 767 768 /** Read two bits and write one bit */ 769 triplet_ret = w1_triplet(dev, search_bit); 770 771 /* quit if no device responded */ 772 if ( (triplet_ret & 0x03) == 0x03 ) 773 break; 774 775 /* If both directions were valid, and we took the 0 path... */ 776 if (triplet_ret == 0) 777 last_zero = i; 778 779 /* extract the direction taken & update the device number */ 780 tmp64 = (triplet_ret >> 2); 781 rn |= (tmp64 << i); 782 } 783 784 if ( (triplet_ret & 0x03) != 0x03 ) { 785 if ( (desc_bit == last_zero) || (last_zero < 0)) 786 last_device = 1; 787 desc_bit = last_zero; 788 cb(dev->bus_master->data, rn); 789 } 790 } 791 } 792 793 static int w1_control(void *data) 794 { 795 struct w1_slave *sl, *sln; 796 struct w1_master *dev, *n; 797 int have_to_wait = 0; 798 799 set_freezable(); 800 while (!kthread_should_stop() || have_to_wait) { 801 have_to_wait = 0; 802 803 try_to_freeze(); 804 msleep_interruptible(w1_control_timeout * 1000); 805 806 list_for_each_entry_safe(dev, n, &w1_masters, w1_master_entry) { 807 if (!kthread_should_stop() && !dev->flags) 808 continue; 809 /* 810 * Little race: we can create thread but not set the flag. 811 * Get a chance for external process to set flag up. 812 */ 813 if (!dev->initialized) { 814 have_to_wait = 1; 815 continue; 816 } 817 818 if (kthread_should_stop() || test_bit(W1_MASTER_NEED_EXIT, &dev->flags)) { 819 set_bit(W1_MASTER_NEED_EXIT, &dev->flags); 820 821 mutex_lock(&w1_mlock); 822 list_del(&dev->w1_master_entry); 823 mutex_unlock(&w1_mlock); 824 825 mutex_lock(&dev->mutex); 826 list_for_each_entry_safe(sl, sln, &dev->slist, w1_slave_entry) { 827 w1_slave_detach(sl); 828 } 829 w1_destroy_master_attributes(dev); 830 mutex_unlock(&dev->mutex); 831 atomic_dec(&dev->refcnt); 832 continue; 833 } 834 835 if (test_bit(W1_MASTER_NEED_RECONNECT, &dev->flags)) { 836 dev_dbg(&dev->dev, "Reconnecting slaves in device %s.\n", dev->name); 837 mutex_lock(&dev->mutex); 838 list_for_each_entry_safe(sl, sln, &dev->slist, w1_slave_entry) { 839 if (sl->family->fid == W1_FAMILY_DEFAULT) { 840 struct w1_reg_num rn; 841 842 memcpy(&rn, &sl->reg_num, sizeof(rn)); 843 w1_slave_detach(sl); 844 845 w1_attach_slave_device(dev, &rn); 846 } 847 } 848 dev_dbg(&dev->dev, "Reconnecting slaves in device %s has been finished.\n", dev->name); 849 clear_bit(W1_MASTER_NEED_RECONNECT, &dev->flags); 850 mutex_unlock(&dev->mutex); 851 } 852 } 853 } 854 855 return 0; 856 } 857 858 void w1_search_process(struct w1_master *dev, u8 search_type) 859 { 860 struct w1_slave *sl, *sln; 861 862 list_for_each_entry(sl, &dev->slist, w1_slave_entry) 863 clear_bit(W1_SLAVE_ACTIVE, (long *)&sl->flags); 864 865 w1_search_devices(dev, search_type, w1_slave_found); 866 867 list_for_each_entry_safe(sl, sln, &dev->slist, w1_slave_entry) { 868 if (!test_bit(W1_SLAVE_ACTIVE, (unsigned long *)&sl->flags) && !--sl->ttl) 869 w1_slave_detach(sl); 870 else if (test_bit(W1_SLAVE_ACTIVE, (unsigned long *)&sl->flags)) 871 sl->ttl = dev->slave_ttl; 872 } 873 874 if (dev->search_count > 0) 875 dev->search_count--; 876 } 877 878 int w1_process(void *data) 879 { 880 struct w1_master *dev = (struct w1_master *) data; 881 882 while (!kthread_should_stop() && !test_bit(W1_MASTER_NEED_EXIT, &dev->flags)) { 883 try_to_freeze(); 884 msleep_interruptible(w1_timeout * 1000); 885 886 if (kthread_should_stop() || test_bit(W1_MASTER_NEED_EXIT, &dev->flags)) 887 break; 888 889 if (!dev->initialized) 890 continue; 891 892 if (dev->search_count == 0) 893 continue; 894 895 mutex_lock(&dev->mutex); 896 w1_search_process(dev, W1_SEARCH); 897 mutex_unlock(&dev->mutex); 898 } 899 900 atomic_dec(&dev->refcnt); 901 902 return 0; 903 } 904 905 static int w1_init(void) 906 { 907 int retval; 908 909 printk(KERN_INFO "Driver for 1-wire Dallas network protocol.\n"); 910 911 w1_init_netlink(); 912 913 retval = bus_register(&w1_bus_type); 914 if (retval) { 915 printk(KERN_ERR "Failed to register bus. err=%d.\n", retval); 916 goto err_out_exit_init; 917 } 918 919 retval = driver_register(&w1_master_driver); 920 if (retval) { 921 printk(KERN_ERR 922 "Failed to register master driver. err=%d.\n", 923 retval); 924 goto err_out_bus_unregister; 925 } 926 927 retval = driver_register(&w1_slave_driver); 928 if (retval) { 929 printk(KERN_ERR 930 "Failed to register master driver. err=%d.\n", 931 retval); 932 goto err_out_master_unregister; 933 } 934 935 w1_control_thread = kthread_run(w1_control, NULL, "w1_control"); 936 if (IS_ERR(w1_control_thread)) { 937 retval = PTR_ERR(w1_control_thread); 938 printk(KERN_ERR "Failed to create control thread. err=%d\n", 939 retval); 940 goto err_out_slave_unregister; 941 } 942 943 return 0; 944 945 err_out_slave_unregister: 946 driver_unregister(&w1_slave_driver); 947 948 err_out_master_unregister: 949 driver_unregister(&w1_master_driver); 950 951 err_out_bus_unregister: 952 bus_unregister(&w1_bus_type); 953 954 err_out_exit_init: 955 return retval; 956 } 957 958 static void w1_fini(void) 959 { 960 struct w1_master *dev; 961 962 list_for_each_entry(dev, &w1_masters, w1_master_entry) 963 __w1_remove_master_device(dev); 964 965 w1_fini_netlink(); 966 967 kthread_stop(w1_control_thread); 968 969 driver_unregister(&w1_slave_driver); 970 driver_unregister(&w1_master_driver); 971 bus_unregister(&w1_bus_type); 972 } 973 974 module_init(w1_init); 975 module_exit(w1_fini); 976