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