linux/drivers/w1/w1.c
<<
>>
Prefs
   1/*
   2 *      w1.c
   3 *
   4 * Copyright (c) 2004 Evgeniy Polyakov <zbr@ioremap.net>
   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 <linux/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
  44MODULE_LICENSE("GPL");
  45MODULE_AUTHOR("Evgeniy Polyakov <zbr@ioremap.net>");
  46MODULE_DESCRIPTION("Driver for 1-wire Dallas network protocol.");
  47
  48static int w1_timeout = 10;
  49static int w1_timeout_us = 0;
  50int w1_max_slave_count = 64;
  51int w1_max_slave_ttl = 10;
  52
  53module_param_named(timeout, w1_timeout, int, 0);
  54MODULE_PARM_DESC(timeout, "time in seconds between automatic slave searches");
  55module_param_named(timeout_us, w1_timeout_us, int, 0);
  56MODULE_PARM_DESC(timeout, "time in microseconds between automatic slave"
  57                          " searches");
  58/* A search stops when w1_max_slave_count devices have been found in that
  59 * search.  The next search will start over and detect the same set of devices
  60 * on a static 1-wire bus.  Memory is not allocated based on this number, just
  61 * on the number of devices known to the kernel.  Having a high number does not
  62 * consume additional resources.  As a special case, if there is only one
  63 * device on the network and w1_max_slave_count is set to 1, the device id can
  64 * be read directly skipping the normal slower search process.
  65 */
  66module_param_named(max_slave_count, w1_max_slave_count, int, 0);
  67MODULE_PARM_DESC(max_slave_count,
  68        "maximum number of slaves detected in a search");
  69module_param_named(slave_ttl, w1_max_slave_ttl, int, 0);
  70MODULE_PARM_DESC(slave_ttl,
  71        "Number of searches not seeing a slave before it will be removed");
  72
  73DEFINE_MUTEX(w1_mlock);
  74LIST_HEAD(w1_masters);
  75
  76static int w1_master_match(struct device *dev, struct device_driver *drv)
  77{
  78        return 1;
  79}
  80
  81static int w1_master_probe(struct device *dev)
  82{
  83        return -ENODEV;
  84}
  85
  86static void w1_master_release(struct device *dev)
  87{
  88        struct w1_master *md = dev_to_w1_master(dev);
  89
  90        dev_dbg(dev, "%s: Releasing %s.\n", __func__, md->name);
  91        memset(md, 0, sizeof(struct w1_master) + sizeof(struct w1_bus_master));
  92        kfree(md);
  93}
  94
  95static void w1_slave_release(struct device *dev)
  96{
  97        struct w1_slave *sl = dev_to_w1_slave(dev);
  98
  99        dev_dbg(dev, "%s: Releasing %s [%p]\n", __func__, sl->name, sl);
 100
 101        w1_family_put(sl->family);
 102        sl->master->slave_count--;
 103}
 104
 105static ssize_t name_show(struct device *dev, struct device_attribute *attr, char *buf)
 106{
 107        struct w1_slave *sl = dev_to_w1_slave(dev);
 108
 109        return sprintf(buf, "%s\n", sl->name);
 110}
 111static DEVICE_ATTR_RO(name);
 112
 113static ssize_t id_show(struct device *dev,
 114        struct device_attribute *attr, char *buf)
 115{
 116        struct w1_slave *sl = dev_to_w1_slave(dev);
 117        ssize_t count = sizeof(sl->reg_num);
 118
 119        memcpy(buf, (u8 *)&sl->reg_num, count);
 120        return count;
 121}
 122static DEVICE_ATTR_RO(id);
 123
 124static struct attribute *w1_slave_attrs[] = {
 125        &dev_attr_name.attr,
 126        &dev_attr_id.attr,
 127        NULL,
 128};
 129ATTRIBUTE_GROUPS(w1_slave);
 130
 131/* Default family */
 132
 133static ssize_t rw_write(struct file *filp, struct kobject *kobj,
 134                        struct bin_attribute *bin_attr, char *buf, loff_t off,
 135                        size_t count)
 136{
 137        struct w1_slave *sl = kobj_to_w1_slave(kobj);
 138
 139        mutex_lock(&sl->master->mutex);
 140        if (w1_reset_select_slave(sl)) {
 141                count = 0;
 142                goto out_up;
 143        }
 144
 145        w1_write_block(sl->master, buf, count);
 146
 147out_up:
 148        mutex_unlock(&sl->master->mutex);
 149        return count;
 150}
 151
 152static ssize_t rw_read(struct file *filp, struct kobject *kobj,
 153                       struct bin_attribute *bin_attr, char *buf, loff_t off,
 154                       size_t count)
 155{
 156        struct w1_slave *sl = kobj_to_w1_slave(kobj);
 157
 158        mutex_lock(&sl->master->mutex);
 159        w1_read_block(sl->master, buf, count);
 160        mutex_unlock(&sl->master->mutex);
 161        return count;
 162}
 163
 164static BIN_ATTR_RW(rw, PAGE_SIZE);
 165
 166static struct bin_attribute *w1_slave_bin_attrs[] = {
 167        &bin_attr_rw,
 168        NULL,
 169};
 170
 171static const struct attribute_group w1_slave_default_group = {
 172        .bin_attrs = w1_slave_bin_attrs,
 173};
 174
 175static const struct attribute_group *w1_slave_default_groups[] = {
 176        &w1_slave_default_group,
 177        NULL,
 178};
 179
 180static struct w1_family_ops w1_default_fops = {
 181        .groups         = w1_slave_default_groups,
 182};
 183
 184static struct w1_family w1_default_family = {
 185        .fops = &w1_default_fops,
 186};
 187
 188static int w1_uevent(struct device *dev, struct kobj_uevent_env *env);
 189
 190static struct bus_type w1_bus_type = {
 191        .name = "w1",
 192        .match = w1_master_match,
 193        .uevent = w1_uevent,
 194};
 195
 196struct device_driver w1_master_driver = {
 197        .name = "w1_master_driver",
 198        .bus = &w1_bus_type,
 199        .probe = w1_master_probe,
 200};
 201
 202struct device w1_master_device = {
 203        .parent = NULL,
 204        .bus = &w1_bus_type,
 205        .init_name = "w1 bus master",
 206        .driver = &w1_master_driver,
 207        .release = &w1_master_release
 208};
 209
 210static struct device_driver w1_slave_driver = {
 211        .name = "w1_slave_driver",
 212        .bus = &w1_bus_type,
 213};
 214
 215#if 0
 216struct device w1_slave_device = {
 217        .parent = NULL,
 218        .bus = &w1_bus_type,
 219        .init_name = "w1 bus slave",
 220        .driver = &w1_slave_driver,
 221        .release = &w1_slave_release
 222};
 223#endif  /*  0  */
 224
 225static ssize_t w1_master_attribute_show_name(struct device *dev, struct device_attribute *attr, char *buf)
 226{
 227        struct w1_master *md = dev_to_w1_master(dev);
 228        ssize_t count;
 229
 230        mutex_lock(&md->mutex);
 231        count = sprintf(buf, "%s\n", md->name);
 232        mutex_unlock(&md->mutex);
 233
 234        return count;
 235}
 236
 237static ssize_t w1_master_attribute_store_search(struct device * dev,
 238                                                struct device_attribute *attr,
 239                                                const char * buf, size_t count)
 240{
 241        long tmp;
 242        struct w1_master *md = dev_to_w1_master(dev);
 243        int ret;
 244
 245        ret = kstrtol(buf, 0, &tmp);
 246        if (ret)
 247                return ret;
 248
 249        mutex_lock(&md->mutex);
 250        md->search_count = tmp;
 251        mutex_unlock(&md->mutex);
 252        /* Only wake if it is going to be searching. */
 253        if (tmp)
 254                wake_up_process(md->thread);
 255
 256        return count;
 257}
 258
 259static ssize_t w1_master_attribute_show_search(struct device *dev,
 260                                               struct device_attribute *attr,
 261                                               char *buf)
 262{
 263        struct w1_master *md = dev_to_w1_master(dev);
 264        ssize_t count;
 265
 266        mutex_lock(&md->mutex);
 267        count = sprintf(buf, "%d\n", md->search_count);
 268        mutex_unlock(&md->mutex);
 269
 270        return count;
 271}
 272
 273static ssize_t w1_master_attribute_store_pullup(struct device *dev,
 274                                                struct device_attribute *attr,
 275                                                const char *buf, size_t count)
 276{
 277        long tmp;
 278        struct w1_master *md = dev_to_w1_master(dev);
 279        int ret;
 280
 281        ret = kstrtol(buf, 0, &tmp);
 282        if (ret)
 283                return ret;
 284
 285        mutex_lock(&md->mutex);
 286        md->enable_pullup = tmp;
 287        mutex_unlock(&md->mutex);
 288
 289        return count;
 290}
 291
 292static ssize_t w1_master_attribute_show_pullup(struct device *dev,
 293                                               struct device_attribute *attr,
 294                                               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->enable_pullup);
 301        mutex_unlock(&md->mutex);
 302
 303        return count;
 304}
 305
 306static ssize_t w1_master_attribute_show_pointer(struct device *dev, struct device_attribute *attr, char *buf)
 307{
 308        struct w1_master *md = dev_to_w1_master(dev);
 309        ssize_t count;
 310
 311        mutex_lock(&md->mutex);
 312        count = sprintf(buf, "0x%p\n", md->bus_master);
 313        mutex_unlock(&md->mutex);
 314        return count;
 315}
 316
 317static ssize_t w1_master_attribute_show_timeout(struct device *dev, struct device_attribute *attr, char *buf)
 318{
 319        ssize_t count;
 320        count = sprintf(buf, "%d\n", w1_timeout);
 321        return count;
 322}
 323
 324static ssize_t w1_master_attribute_show_timeout_us(struct device *dev,
 325        struct device_attribute *attr, char *buf)
 326{
 327        ssize_t count;
 328        count = sprintf(buf, "%d\n", w1_timeout_us);
 329        return count;
 330}
 331
 332static ssize_t w1_master_attribute_store_max_slave_count(struct device *dev,
 333        struct device_attribute *attr, const char *buf, size_t count)
 334{
 335        int tmp;
 336        struct w1_master *md = dev_to_w1_master(dev);
 337
 338        if (kstrtoint(buf, 0, &tmp) == -EINVAL || tmp < 1)
 339                return -EINVAL;
 340
 341        mutex_lock(&md->mutex);
 342        md->max_slave_count = tmp;
 343        /* allow each time the max_slave_count is updated */
 344        clear_bit(W1_WARN_MAX_COUNT, &md->flags);
 345        mutex_unlock(&md->mutex);
 346
 347        return count;
 348}
 349
 350static ssize_t w1_master_attribute_show_max_slave_count(struct device *dev, struct device_attribute *attr, char *buf)
 351{
 352        struct w1_master *md = dev_to_w1_master(dev);
 353        ssize_t count;
 354
 355        mutex_lock(&md->mutex);
 356        count = sprintf(buf, "%d\n", md->max_slave_count);
 357        mutex_unlock(&md->mutex);
 358        return count;
 359}
 360
 361static ssize_t w1_master_attribute_show_attempts(struct device *dev, struct device_attribute *attr, char *buf)
 362{
 363        struct w1_master *md = dev_to_w1_master(dev);
 364        ssize_t count;
 365
 366        mutex_lock(&md->mutex);
 367        count = sprintf(buf, "%lu\n", md->attempts);
 368        mutex_unlock(&md->mutex);
 369        return count;
 370}
 371
 372static ssize_t w1_master_attribute_show_slave_count(struct device *dev, struct device_attribute *attr, char *buf)
 373{
 374        struct w1_master *md = dev_to_w1_master(dev);
 375        ssize_t count;
 376
 377        mutex_lock(&md->mutex);
 378        count = sprintf(buf, "%d\n", md->slave_count);
 379        mutex_unlock(&md->mutex);
 380        return count;
 381}
 382
 383static ssize_t w1_master_attribute_show_slaves(struct device *dev,
 384        struct device_attribute *attr, char *buf)
 385{
 386        struct w1_master *md = dev_to_w1_master(dev);
 387        int c = PAGE_SIZE;
 388        struct list_head *ent, *n;
 389        struct w1_slave *sl = NULL;
 390
 391        mutex_lock(&md->list_mutex);
 392
 393        list_for_each_safe(ent, n, &md->slist) {
 394                sl = list_entry(ent, struct w1_slave, w1_slave_entry);
 395
 396                c -= snprintf(buf + PAGE_SIZE - c, c, "%s\n", sl->name);
 397        }
 398        if (!sl)
 399                c -= snprintf(buf + PAGE_SIZE - c, c, "not found.\n");
 400
 401        mutex_unlock(&md->list_mutex);
 402
 403        return PAGE_SIZE - c;
 404}
 405
 406static ssize_t w1_master_attribute_show_add(struct device *dev,
 407        struct device_attribute *attr, char *buf)
 408{
 409        int c = PAGE_SIZE;
 410        c -= snprintf(buf+PAGE_SIZE - c, c,
 411                "write device id xx-xxxxxxxxxxxx to add slave\n");
 412        return PAGE_SIZE - c;
 413}
 414
 415static int w1_atoreg_num(struct device *dev, const char *buf, size_t count,
 416        struct w1_reg_num *rn)
 417{
 418        unsigned int family;
 419        unsigned long long id;
 420        int i;
 421        u64 rn64_le;
 422
 423        /* The CRC value isn't read from the user because the sysfs directory
 424         * doesn't include it and most messages from the bus search don't
 425         * print it either.  It would be unreasonable for the user to then
 426         * provide it.
 427         */
 428        const char *error_msg = "bad slave string format, expecting "
 429                "ff-dddddddddddd\n";
 430
 431        if (buf[2] != '-') {
 432                dev_err(dev, "%s", error_msg);
 433                return -EINVAL;
 434        }
 435        i = sscanf(buf, "%02x-%012llx", &family, &id);
 436        if (i != 2) {
 437                dev_err(dev, "%s", error_msg);
 438                return -EINVAL;
 439        }
 440        rn->family = family;
 441        rn->id = id;
 442
 443        rn64_le = cpu_to_le64(*(u64 *)rn);
 444        rn->crc = w1_calc_crc8((u8 *)&rn64_le, 7);
 445
 446#if 0
 447        dev_info(dev, "With CRC device is %02x.%012llx.%02x.\n",
 448                  rn->family, (unsigned long long)rn->id, rn->crc);
 449#endif
 450
 451        return 0;
 452}
 453
 454/* Searches the slaves in the w1_master and returns a pointer or NULL.
 455 * Note: must not hold list_mutex
 456 */
 457struct w1_slave *w1_slave_search_device(struct w1_master *dev,
 458        struct w1_reg_num *rn)
 459{
 460        struct w1_slave *sl;
 461        mutex_lock(&dev->list_mutex);
 462        list_for_each_entry(sl, &dev->slist, w1_slave_entry) {
 463                if (sl->reg_num.family == rn->family &&
 464                                sl->reg_num.id == rn->id &&
 465                                sl->reg_num.crc == rn->crc) {
 466                        mutex_unlock(&dev->list_mutex);
 467                        return sl;
 468                }
 469        }
 470        mutex_unlock(&dev->list_mutex);
 471        return NULL;
 472}
 473
 474static ssize_t w1_master_attribute_store_add(struct device *dev,
 475                                                struct device_attribute *attr,
 476                                                const char *buf, size_t count)
 477{
 478        struct w1_master *md = dev_to_w1_master(dev);
 479        struct w1_reg_num rn;
 480        struct w1_slave *sl;
 481        ssize_t result = count;
 482
 483        if (w1_atoreg_num(dev, buf, count, &rn))
 484                return -EINVAL;
 485
 486        mutex_lock(&md->mutex);
 487        sl = w1_slave_search_device(md, &rn);
 488        /* It would be nice to do a targeted search one the one-wire bus
 489         * for the new device to see if it is out there or not.  But the
 490         * current search doesn't support that.
 491         */
 492        if (sl) {
 493                dev_info(dev, "Device %s already exists\n", sl->name);
 494                result = -EINVAL;
 495        } else {
 496                w1_attach_slave_device(md, &rn);
 497        }
 498        mutex_unlock(&md->mutex);
 499
 500        return result;
 501}
 502
 503static ssize_t w1_master_attribute_show_remove(struct device *dev,
 504        struct device_attribute *attr, char *buf)
 505{
 506        int c = PAGE_SIZE;
 507        c -= snprintf(buf+PAGE_SIZE - c, c,
 508                "write device id xx-xxxxxxxxxxxx to remove slave\n");
 509        return PAGE_SIZE - c;
 510}
 511
 512static ssize_t w1_master_attribute_store_remove(struct device *dev,
 513                                                struct device_attribute *attr,
 514                                                const char *buf, size_t count)
 515{
 516        struct w1_master *md = dev_to_w1_master(dev);
 517        struct w1_reg_num rn;
 518        struct w1_slave *sl;
 519        ssize_t result = count;
 520
 521        if (w1_atoreg_num(dev, buf, count, &rn))
 522                return -EINVAL;
 523
 524        mutex_lock(&md->mutex);
 525        sl = w1_slave_search_device(md, &rn);
 526        if (sl) {
 527                result = w1_slave_detach(sl);
 528                /* refcnt 0 means it was detached in the call */
 529                if (result == 0)
 530                        result = count;
 531        } else {
 532                dev_info(dev, "Device %02x-%012llx doesn't exists\n", rn.family,
 533                        (unsigned long long)rn.id);
 534                result = -EINVAL;
 535        }
 536        mutex_unlock(&md->mutex);
 537
 538        return result;
 539}
 540
 541#define W1_MASTER_ATTR_RO(_name, _mode)                         \
 542        struct device_attribute w1_master_attribute_##_name =   \
 543                __ATTR(w1_master_##_name, _mode,                \
 544                       w1_master_attribute_show_##_name, NULL)
 545
 546#define W1_MASTER_ATTR_RW(_name, _mode)                         \
 547        struct device_attribute w1_master_attribute_##_name =   \
 548                __ATTR(w1_master_##_name, _mode,                \
 549                       w1_master_attribute_show_##_name,        \
 550                       w1_master_attribute_store_##_name)
 551
 552static W1_MASTER_ATTR_RO(name, S_IRUGO);
 553static W1_MASTER_ATTR_RO(slaves, S_IRUGO);
 554static W1_MASTER_ATTR_RO(slave_count, S_IRUGO);
 555static W1_MASTER_ATTR_RW(max_slave_count, S_IRUGO | S_IWUSR | S_IWGRP);
 556static W1_MASTER_ATTR_RO(attempts, S_IRUGO);
 557static W1_MASTER_ATTR_RO(timeout, S_IRUGO);
 558static W1_MASTER_ATTR_RO(timeout_us, S_IRUGO);
 559static W1_MASTER_ATTR_RO(pointer, S_IRUGO);
 560static W1_MASTER_ATTR_RW(search, S_IRUGO | S_IWUSR | S_IWGRP);
 561static W1_MASTER_ATTR_RW(pullup, S_IRUGO | S_IWUSR | S_IWGRP);
 562static W1_MASTER_ATTR_RW(add, S_IRUGO | S_IWUSR | S_IWGRP);
 563static W1_MASTER_ATTR_RW(remove, S_IRUGO | S_IWUSR | S_IWGRP);
 564
 565static struct attribute *w1_master_default_attrs[] = {
 566        &w1_master_attribute_name.attr,
 567        &w1_master_attribute_slaves.attr,
 568        &w1_master_attribute_slave_count.attr,
 569        &w1_master_attribute_max_slave_count.attr,
 570        &w1_master_attribute_attempts.attr,
 571        &w1_master_attribute_timeout.attr,
 572        &w1_master_attribute_timeout_us.attr,
 573        &w1_master_attribute_pointer.attr,
 574        &w1_master_attribute_search.attr,
 575        &w1_master_attribute_pullup.attr,
 576        &w1_master_attribute_add.attr,
 577        &w1_master_attribute_remove.attr,
 578        NULL
 579};
 580
 581static struct attribute_group w1_master_defattr_group = {
 582        .attrs = w1_master_default_attrs,
 583};
 584
 585int w1_create_master_attributes(struct w1_master *master)
 586{
 587        return sysfs_create_group(&master->dev.kobj, &w1_master_defattr_group);
 588}
 589
 590void w1_destroy_master_attributes(struct w1_master *master)
 591{
 592        sysfs_remove_group(&master->dev.kobj, &w1_master_defattr_group);
 593}
 594
 595static int w1_uevent(struct device *dev, struct kobj_uevent_env *env)
 596{
 597        struct w1_master *md = NULL;
 598        struct w1_slave *sl = NULL;
 599        char *event_owner, *name;
 600        int err = 0;
 601
 602        if (dev->driver == &w1_master_driver) {
 603                md = container_of(dev, struct w1_master, dev);
 604                event_owner = "master";
 605                name = md->name;
 606        } else if (dev->driver == &w1_slave_driver) {
 607                sl = container_of(dev, struct w1_slave, dev);
 608                event_owner = "slave";
 609                name = sl->name;
 610        } else {
 611                dev_dbg(dev, "Unknown event.\n");
 612                return -EINVAL;
 613        }
 614
 615        dev_dbg(dev, "Hotplug event for %s %s, bus_id=%s.\n",
 616                        event_owner, name, dev_name(dev));
 617
 618        if (dev->driver != &w1_slave_driver || !sl)
 619                goto end;
 620
 621        err = add_uevent_var(env, "W1_FID=%02X", sl->reg_num.family);
 622        if (err)
 623                goto end;
 624
 625        err = add_uevent_var(env, "W1_SLAVE_ID=%024LX",
 626                             (unsigned long long)sl->reg_num.id);
 627end:
 628        return err;
 629}
 630
 631static int w1_family_notify(unsigned long action, struct w1_slave *sl)
 632{
 633        struct w1_family_ops *fops;
 634        int err;
 635
 636        fops = sl->family->fops;
 637
 638        if (!fops)
 639                return 0;
 640
 641        switch (action) {
 642        case BUS_NOTIFY_ADD_DEVICE:
 643                /* if the family driver needs to initialize something... */
 644                if (fops->add_slave) {
 645                        err = fops->add_slave(sl);
 646                        if (err < 0) {
 647                                dev_err(&sl->dev,
 648                                        "add_slave() call failed. err=%d\n",
 649                                        err);
 650                                return err;
 651                        }
 652                }
 653                if (fops->groups) {
 654                        err = sysfs_create_groups(&sl->dev.kobj, fops->groups);
 655                        if (err) {
 656                                dev_err(&sl->dev,
 657                                        "sysfs group creation failed. err=%d\n",
 658                                        err);
 659                                return err;
 660                        }
 661                }
 662
 663                break;
 664        case BUS_NOTIFY_DEL_DEVICE:
 665                if (fops->remove_slave)
 666                        sl->family->fops->remove_slave(sl);
 667                if (fops->groups)
 668                        sysfs_remove_groups(&sl->dev.kobj, fops->groups);
 669                break;
 670        }
 671        return 0;
 672}
 673
 674static int __w1_attach_slave_device(struct w1_slave *sl)
 675{
 676        int err;
 677
 678        sl->dev.parent = &sl->master->dev;
 679        sl->dev.driver = &w1_slave_driver;
 680        sl->dev.bus = &w1_bus_type;
 681        sl->dev.release = &w1_slave_release;
 682        sl->dev.groups = w1_slave_groups;
 683
 684        dev_set_name(&sl->dev, "%02x-%012llx",
 685                 (unsigned int) sl->reg_num.family,
 686                 (unsigned long long) sl->reg_num.id);
 687        snprintf(&sl->name[0], sizeof(sl->name),
 688                 "%02x-%012llx",
 689                 (unsigned int) sl->reg_num.family,
 690                 (unsigned long long) sl->reg_num.id);
 691
 692        dev_dbg(&sl->dev, "%s: registering %s as %p.\n", __func__,
 693                dev_name(&sl->dev), sl);
 694
 695        /* suppress for w1_family_notify before sending KOBJ_ADD */
 696        dev_set_uevent_suppress(&sl->dev, true);
 697
 698        err = device_register(&sl->dev);
 699        if (err < 0) {
 700                dev_err(&sl->dev,
 701                        "Device registration [%s] failed. err=%d\n",
 702                        dev_name(&sl->dev), err);
 703                return err;
 704        }
 705        w1_family_notify(BUS_NOTIFY_ADD_DEVICE, sl);
 706
 707        dev_set_uevent_suppress(&sl->dev, false);
 708        kobject_uevent(&sl->dev.kobj, KOBJ_ADD);
 709
 710        mutex_lock(&sl->master->list_mutex);
 711        list_add_tail(&sl->w1_slave_entry, &sl->master->slist);
 712        mutex_unlock(&sl->master->list_mutex);
 713
 714        return 0;
 715}
 716
 717int w1_attach_slave_device(struct w1_master *dev, struct w1_reg_num *rn)
 718{
 719        struct w1_slave *sl;
 720        struct w1_family *f;
 721        int err;
 722        struct w1_netlink_msg msg;
 723
 724        sl = kzalloc(sizeof(struct w1_slave), GFP_KERNEL);
 725        if (!sl) {
 726                dev_err(&dev->dev,
 727                         "%s: failed to allocate new slave device.\n",
 728                         __func__);
 729                return -ENOMEM;
 730        }
 731
 732
 733        sl->owner = THIS_MODULE;
 734        sl->master = dev;
 735        set_bit(W1_SLAVE_ACTIVE, &sl->flags);
 736
 737        memset(&msg, 0, sizeof(msg));
 738        memcpy(&sl->reg_num, rn, sizeof(sl->reg_num));
 739        atomic_set(&sl->refcnt, 1);
 740        atomic_inc(&sl->master->refcnt);
 741
 742        /* slave modules need to be loaded in a context with unlocked mutex */
 743        mutex_unlock(&dev->mutex);
 744        request_module("w1-family-0x%02x", rn->family);
 745        mutex_lock(&dev->mutex);
 746
 747        spin_lock(&w1_flock);
 748        f = w1_family_registered(rn->family);
 749        if (!f) {
 750                f= &w1_default_family;
 751                dev_info(&dev->dev, "Family %x for %02x.%012llx.%02x is not registered.\n",
 752                          rn->family, rn->family,
 753                          (unsigned long long)rn->id, rn->crc);
 754        }
 755        __w1_family_get(f);
 756        spin_unlock(&w1_flock);
 757
 758        sl->family = f;
 759
 760
 761        err = __w1_attach_slave_device(sl);
 762        if (err < 0) {
 763                dev_err(&dev->dev, "%s: Attaching %s failed.\n", __func__,
 764                         sl->name);
 765                w1_family_put(sl->family);
 766                kfree(sl);
 767                return err;
 768        }
 769
 770        sl->ttl = dev->slave_ttl;
 771        dev->slave_count++;
 772
 773        memcpy(msg.id.id, rn, sizeof(msg.id));
 774        msg.type = W1_SLAVE_ADD;
 775        w1_netlink_send(dev, &msg);
 776
 777        return 0;
 778}
 779
 780int w1_unref_slave(struct w1_slave *sl)
 781{
 782        struct w1_master *dev = sl->master;
 783        int refcnt;
 784        mutex_lock(&dev->list_mutex);
 785        refcnt = atomic_sub_return(1, &sl->refcnt);
 786        if (refcnt == 0) {
 787                struct w1_netlink_msg msg;
 788
 789                dev_dbg(&sl->dev, "%s: detaching %s [%p].\n", __func__,
 790                        sl->name, sl);
 791
 792                list_del(&sl->w1_slave_entry);
 793
 794                memset(&msg, 0, sizeof(msg));
 795                memcpy(msg.id.id, &sl->reg_num, sizeof(msg.id));
 796                msg.type = W1_SLAVE_REMOVE;
 797                w1_netlink_send(sl->master, &msg);
 798
 799                w1_family_notify(BUS_NOTIFY_DEL_DEVICE, sl);
 800                device_unregister(&sl->dev);
 801                #ifdef DEBUG
 802                memset(sl, 0, sizeof(*sl));
 803                #endif
 804                kfree(sl);
 805        }
 806        atomic_dec(&dev->refcnt);
 807        mutex_unlock(&dev->list_mutex);
 808        return refcnt;
 809}
 810
 811int w1_slave_detach(struct w1_slave *sl)
 812{
 813        /* Only detach a slave once as it decreases the refcnt each time. */
 814        int destroy_now;
 815        mutex_lock(&sl->master->list_mutex);
 816        destroy_now = !test_bit(W1_SLAVE_DETACH, &sl->flags);
 817        set_bit(W1_SLAVE_DETACH, &sl->flags);
 818        mutex_unlock(&sl->master->list_mutex);
 819
 820        if (destroy_now)
 821                destroy_now = !w1_unref_slave(sl);
 822        return destroy_now ? 0 : -EBUSY;
 823}
 824
 825struct w1_master *w1_search_master_id(u32 id)
 826{
 827        struct w1_master *dev;
 828        int found = 0;
 829
 830        mutex_lock(&w1_mlock);
 831        list_for_each_entry(dev, &w1_masters, w1_master_entry) {
 832                if (dev->id == id) {
 833                        found = 1;
 834                        atomic_inc(&dev->refcnt);
 835                        break;
 836                }
 837        }
 838        mutex_unlock(&w1_mlock);
 839
 840        return (found)?dev:NULL;
 841}
 842
 843struct w1_slave *w1_search_slave(struct w1_reg_num *id)
 844{
 845        struct w1_master *dev;
 846        struct w1_slave *sl = NULL;
 847        int found = 0;
 848
 849        mutex_lock(&w1_mlock);
 850        list_for_each_entry(dev, &w1_masters, w1_master_entry) {
 851                mutex_lock(&dev->list_mutex);
 852                list_for_each_entry(sl, &dev->slist, w1_slave_entry) {
 853                        if (sl->reg_num.family == id->family &&
 854                                        sl->reg_num.id == id->id &&
 855                                        sl->reg_num.crc == id->crc) {
 856                                found = 1;
 857                                atomic_inc(&dev->refcnt);
 858                                atomic_inc(&sl->refcnt);
 859                                break;
 860                        }
 861                }
 862                mutex_unlock(&dev->list_mutex);
 863
 864                if (found)
 865                        break;
 866        }
 867        mutex_unlock(&w1_mlock);
 868
 869        return (found)?sl:NULL;
 870}
 871
 872void w1_reconnect_slaves(struct w1_family *f, int attach)
 873{
 874        struct w1_slave *sl, *sln;
 875        struct w1_master *dev;
 876
 877        mutex_lock(&w1_mlock);
 878        list_for_each_entry(dev, &w1_masters, w1_master_entry) {
 879                dev_dbg(&dev->dev, "Reconnecting slaves in device %s "
 880                        "for family %02x.\n", dev->name, f->fid);
 881                mutex_lock(&dev->mutex);
 882                mutex_lock(&dev->list_mutex);
 883                list_for_each_entry_safe(sl, sln, &dev->slist, w1_slave_entry) {
 884                        /* If it is a new family, slaves with the default
 885                         * family driver and are that family will be
 886                         * connected.  If the family is going away, devices
 887                         * matching that family are reconneced.
 888                         */
 889                        if ((attach && sl->family->fid == W1_FAMILY_DEFAULT
 890                                && sl->reg_num.family == f->fid) ||
 891                                (!attach && sl->family->fid == f->fid)) {
 892                                struct w1_reg_num rn;
 893
 894                                mutex_unlock(&dev->list_mutex);
 895                                memcpy(&rn, &sl->reg_num, sizeof(rn));
 896                                /* If it was already in use let the automatic
 897                                 * scan pick it up again later.
 898                                 */
 899                                if (!w1_slave_detach(sl))
 900                                        w1_attach_slave_device(dev, &rn);
 901                                mutex_lock(&dev->list_mutex);
 902                        }
 903                }
 904                dev_dbg(&dev->dev, "Reconnecting slaves in device %s "
 905                        "has been finished.\n", dev->name);
 906                mutex_unlock(&dev->list_mutex);
 907                mutex_unlock(&dev->mutex);
 908        }
 909        mutex_unlock(&w1_mlock);
 910}
 911
 912void w1_slave_found(struct w1_master *dev, u64 rn)
 913{
 914        struct w1_slave *sl;
 915        struct w1_reg_num *tmp;
 916        u64 rn_le = cpu_to_le64(rn);
 917
 918        atomic_inc(&dev->refcnt);
 919
 920        tmp = (struct w1_reg_num *) &rn;
 921
 922        sl = w1_slave_search_device(dev, tmp);
 923        if (sl) {
 924                set_bit(W1_SLAVE_ACTIVE, &sl->flags);
 925        } else {
 926                if (rn && tmp->crc == w1_calc_crc8((u8 *)&rn_le, 7))
 927                        w1_attach_slave_device(dev, tmp);
 928        }
 929
 930        atomic_dec(&dev->refcnt);
 931}
 932
 933/**
 934 * w1_search() - Performs a ROM Search & registers any devices found.
 935 * @dev: The master device to search
 936 * @search_type: W1_SEARCH to search all devices, or W1_ALARM_SEARCH
 937 * to return only devices in the alarmed state
 938 * @cb: Function to call when a device is found
 939 *
 940 * The 1-wire search is a simple binary tree search.
 941 * For each bit of the address, we read two bits and write one bit.
 942 * The bit written will put to sleep all devies that don't match that bit.
 943 * When the two reads differ, the direction choice is obvious.
 944 * When both bits are 0, we must choose a path to take.
 945 * When we can scan all 64 bits without having to choose a path, we are done.
 946 *
 947 * See "Application note 187 1-wire search algorithm" at www.maxim-ic.com
 948 *
 949 */
 950void w1_search(struct w1_master *dev, u8 search_type, w1_slave_found_callback cb)
 951{
 952        u64 last_rn, rn, tmp64;
 953        int i, slave_count = 0;
 954        int last_zero, last_device;
 955        int search_bit, desc_bit;
 956        u8  triplet_ret = 0;
 957
 958        search_bit = 0;
 959        rn = dev->search_id;
 960        last_rn = 0;
 961        last_device = 0;
 962        last_zero = -1;
 963
 964        desc_bit = 64;
 965
 966        while ( !last_device && (slave_count++ < dev->max_slave_count) ) {
 967                last_rn = rn;
 968                rn = 0;
 969
 970                /*
 971                 * Reset bus and all 1-wire device state machines
 972                 * so they can respond to our requests.
 973                 *
 974                 * Return 0 - device(s) present, 1 - no devices present.
 975                 */
 976                mutex_lock(&dev->bus_mutex);
 977                if (w1_reset_bus(dev)) {
 978                        mutex_unlock(&dev->bus_mutex);
 979                        dev_dbg(&dev->dev, "No devices present on the wire.\n");
 980                        break;
 981                }
 982
 983                /* Do fast search on single slave bus */
 984                if (dev->max_slave_count == 1) {
 985                        int rv;
 986                        w1_write_8(dev, W1_READ_ROM);
 987                        rv = w1_read_block(dev, (u8 *)&rn, 8);
 988                        mutex_unlock(&dev->bus_mutex);
 989
 990                        if (rv == 8 && rn)
 991                                cb(dev, rn);
 992
 993                        break;
 994                }
 995
 996                /* Start the search */
 997                w1_write_8(dev, search_type);
 998                for (i = 0; i < 64; ++i) {
 999                        /* Determine the direction/search bit */
1000                        if (i == desc_bit)
1001                                search_bit = 1;   /* took the 0 path last time, so take the 1 path */
1002                        else if (i > desc_bit)
1003                                search_bit = 0;   /* take the 0 path on the next branch */
1004                        else
1005                                search_bit = ((last_rn >> i) & 0x1);
1006
1007                        /* Read two bits and write one bit */
1008                        triplet_ret = w1_triplet(dev, search_bit);
1009
1010                        /* quit if no device responded */
1011                        if ( (triplet_ret & 0x03) == 0x03 )
1012                                break;
1013
1014                        /* If both directions were valid, and we took the 0 path... */
1015                        if (triplet_ret == 0)
1016                                last_zero = i;
1017
1018                        /* extract the direction taken & update the device number */
1019                        tmp64 = (triplet_ret >> 2);
1020                        rn |= (tmp64 << i);
1021
1022                        if (test_bit(W1_ABORT_SEARCH, &dev->flags)) {
1023                                mutex_unlock(&dev->bus_mutex);
1024                                dev_dbg(&dev->dev, "Abort w1_search\n");
1025                                return;
1026                        }
1027                }
1028                mutex_unlock(&dev->bus_mutex);
1029
1030                if ( (triplet_ret & 0x03) != 0x03 ) {
1031                        if ((desc_bit == last_zero) || (last_zero < 0)) {
1032                                last_device = 1;
1033                                dev->search_id = 0;
1034                        } else {
1035                                dev->search_id = rn;
1036                        }
1037                        desc_bit = last_zero;
1038                        cb(dev, rn);
1039                }
1040
1041                if (!last_device && slave_count == dev->max_slave_count &&
1042                        !test_bit(W1_WARN_MAX_COUNT, &dev->flags)) {
1043                        /* Only max_slave_count will be scanned in a search,
1044                         * but it will start where it left off next search
1045                         * until all ids are identified and then it will start
1046                         * over.  A continued search will report the previous
1047                         * last id as the first id (provided it is still on the
1048                         * bus).
1049                         */
1050                        dev_info(&dev->dev, "%s: max_slave_count %d reached, "
1051                                "will continue next search.\n", __func__,
1052                                dev->max_slave_count);
1053                        set_bit(W1_WARN_MAX_COUNT, &dev->flags);
1054                }
1055        }
1056}
1057
1058void w1_search_process_cb(struct w1_master *dev, u8 search_type,
1059        w1_slave_found_callback cb)
1060{
1061        struct w1_slave *sl, *sln;
1062
1063        mutex_lock(&dev->list_mutex);
1064        list_for_each_entry(sl, &dev->slist, w1_slave_entry)
1065                clear_bit(W1_SLAVE_ACTIVE, &sl->flags);
1066        mutex_unlock(&dev->list_mutex);
1067
1068        w1_search_devices(dev, search_type, cb);
1069
1070        mutex_lock(&dev->list_mutex);
1071        list_for_each_entry_safe(sl, sln, &dev->slist, w1_slave_entry) {
1072                if (!test_bit(W1_SLAVE_ACTIVE, &sl->flags) && !--sl->ttl) {
1073                        mutex_unlock(&dev->list_mutex);
1074                        w1_slave_detach(sl);
1075                        mutex_lock(&dev->list_mutex);
1076                }
1077                else if (test_bit(W1_SLAVE_ACTIVE, &sl->flags))
1078                        sl->ttl = dev->slave_ttl;
1079        }
1080        mutex_unlock(&dev->list_mutex);
1081
1082        if (dev->search_count > 0)
1083                dev->search_count--;
1084}
1085
1086static void w1_search_process(struct w1_master *dev, u8 search_type)
1087{
1088        w1_search_process_cb(dev, search_type, w1_slave_found);
1089}
1090
1091/**
1092 * w1_process_callbacks() - execute each dev->async_list callback entry
1093 * @dev: w1_master device
1094 *
1095 * The w1 master list_mutex must be held.
1096 *
1097 * Return: 1 if there were commands to executed 0 otherwise
1098 */
1099int w1_process_callbacks(struct w1_master *dev)
1100{
1101        int ret = 0;
1102        struct w1_async_cmd *async_cmd, *async_n;
1103
1104        /* The list can be added to in another thread, loop until it is empty */
1105        while (!list_empty(&dev->async_list)) {
1106                list_for_each_entry_safe(async_cmd, async_n, &dev->async_list,
1107                        async_entry) {
1108                        /* drop the lock, if it is a search it can take a long
1109                         * time */
1110                        mutex_unlock(&dev->list_mutex);
1111                        async_cmd->cb(dev, async_cmd);
1112                        ret = 1;
1113                        mutex_lock(&dev->list_mutex);
1114                }
1115        }
1116        return ret;
1117}
1118
1119int w1_process(void *data)
1120{
1121        struct w1_master *dev = (struct w1_master *) data;
1122        /* As long as w1_timeout is only set by a module parameter the sleep
1123         * time can be calculated in jiffies once.
1124         */
1125        const unsigned long jtime =
1126          usecs_to_jiffies(w1_timeout * 1000000 + w1_timeout_us);
1127        /* remainder if it woke up early */
1128        unsigned long jremain = 0;
1129
1130        for (;;) {
1131
1132                if (!jremain && dev->search_count) {
1133                        mutex_lock(&dev->mutex);
1134                        w1_search_process(dev, W1_SEARCH);
1135                        mutex_unlock(&dev->mutex);
1136                }
1137
1138                mutex_lock(&dev->list_mutex);
1139                /* Note, w1_process_callback drops the lock while processing,
1140                 * but locks it again before returning.
1141                 */
1142                if (!w1_process_callbacks(dev) && jremain) {
1143                        /* a wake up is either to stop the thread, process
1144                         * callbacks, or search, it isn't process callbacks, so
1145                         * schedule a search.
1146                         */
1147                        jremain = 1;
1148                }
1149
1150                __set_current_state(TASK_INTERRUPTIBLE);
1151
1152                /* hold list_mutex until after interruptible to prevent loosing
1153                 * the wakeup signal when async_cmd is added.
1154                 */
1155                mutex_unlock(&dev->list_mutex);
1156
1157                if (kthread_should_stop())
1158                        break;
1159
1160                /* Only sleep when the search is active. */
1161                if (dev->search_count) {
1162                        if (!jremain)
1163                                jremain = jtime;
1164                        jremain = schedule_timeout(jremain);
1165                }
1166                else
1167                        schedule();
1168        }
1169
1170        atomic_dec(&dev->refcnt);
1171
1172        return 0;
1173}
1174
1175static int __init w1_init(void)
1176{
1177        int retval;
1178
1179        pr_info("Driver for 1-wire Dallas network protocol.\n");
1180
1181        w1_init_netlink();
1182
1183        retval = bus_register(&w1_bus_type);
1184        if (retval) {
1185                pr_err("Failed to register bus. err=%d.\n", retval);
1186                goto err_out_exit_init;
1187        }
1188
1189        retval = driver_register(&w1_master_driver);
1190        if (retval) {
1191                pr_err("Failed to register master driver. err=%d.\n",
1192                        retval);
1193                goto err_out_bus_unregister;
1194        }
1195
1196        retval = driver_register(&w1_slave_driver);
1197        if (retval) {
1198                pr_err("Failed to register slave driver. err=%d.\n",
1199                        retval);
1200                goto err_out_master_unregister;
1201        }
1202
1203        return 0;
1204
1205#if 0
1206/* For undoing the slave register if there was a step after it. */
1207err_out_slave_unregister:
1208        driver_unregister(&w1_slave_driver);
1209#endif
1210
1211err_out_master_unregister:
1212        driver_unregister(&w1_master_driver);
1213
1214err_out_bus_unregister:
1215        bus_unregister(&w1_bus_type);
1216
1217err_out_exit_init:
1218        return retval;
1219}
1220
1221static void __exit w1_fini(void)
1222{
1223        struct w1_master *dev;
1224
1225        /* Set netlink removal messages and some cleanup */
1226        list_for_each_entry(dev, &w1_masters, w1_master_entry)
1227                __w1_remove_master_device(dev);
1228
1229        w1_fini_netlink();
1230
1231        driver_unregister(&w1_slave_driver);
1232        driver_unregister(&w1_master_driver);
1233        bus_unregister(&w1_bus_type);
1234}
1235
1236module_init(w1_init);
1237module_exit(w1_fini);
1238