4 * Copyright (c) 2004 Evgeniy Polyakov <johnpol@2ka.mipt.ru>
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.
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.
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
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>
34 #include <asm/atomic.h>
40 #include "w1_family.h"
41 #include "w1_netlink.h"
43 MODULE_LICENSE("GPL");
44 MODULE_AUTHOR("Evgeniy Polyakov <johnpol@2ka.mipt.ru>");
45 MODULE_DESCRIPTION("Driver for 1-wire Dallas network protocol.");
47 static int w1_timeout
= 10;
48 int w1_max_slave_count
= 10;
49 int w1_max_slave_ttl
= 10;
51 module_param_named(timeout
, w1_timeout
, int, 0);
52 module_param_named(max_slave_count
, w1_max_slave_count
, int, 0);
53 module_param_named(slave_ttl
, w1_max_slave_ttl
, int, 0);
55 DEFINE_SPINLOCK(w1_mlock
);
56 LIST_HEAD(w1_masters
);
58 static pid_t control_thread
;
59 static int control_needs_exit
;
60 static DECLARE_COMPLETION(w1_control_complete
);
62 static int w1_master_match(struct device
*dev
, struct device_driver
*drv
)
67 static int w1_master_probe(struct device
*dev
)
72 static int w1_master_remove(struct device
*dev
)
77 static void w1_master_release(struct device
*dev
)
79 struct w1_master
*md
= container_of(dev
, struct w1_master
, dev
);
81 complete(&md
->dev_released
);
84 static void w1_slave_release(struct device
*dev
)
86 struct w1_slave
*sl
= container_of(dev
, struct w1_slave
, dev
);
88 complete(&sl
->dev_released
);
91 static ssize_t
w1_default_read_name(struct device
*dev
, char *buf
)
93 return sprintf(buf
, "No family registered.\n");
96 static ssize_t
w1_default_read_bin(struct kobject
*kobj
, char *buf
, loff_t off
,
99 return sprintf(buf
, "No family registered.\n");
102 static struct bus_type w1_bus_type
= {
104 .match
= w1_master_match
,
107 struct device_driver w1_driver
= {
110 .probe
= w1_master_probe
,
111 .remove
= w1_master_remove
,
114 struct device w1_device
= {
117 .bus_id
= "w1 bus master",
118 .driver
= &w1_driver
,
119 .release
= &w1_master_release
122 static struct device_attribute w1_slave_attribute
= {
128 .show
= &w1_default_read_name
,
131 static struct device_attribute w1_slave_attribute_val
= {
137 .show
= &w1_default_read_name
,
140 static ssize_t
w1_master_attribute_show_name(struct device
*dev
, char *buf
)
142 struct w1_master
*md
= container_of (dev
, struct w1_master
, dev
);
145 if (down_interruptible (&md
->mutex
))
148 count
= sprintf(buf
, "%s\n", md
->name
);
155 static ssize_t
w1_master_attribute_show_pointer(struct device
*dev
, char *buf
)
157 struct w1_master
*md
= container_of(dev
, struct w1_master
, dev
);
160 if (down_interruptible(&md
->mutex
))
163 count
= sprintf(buf
, "0x%p\n", md
->bus_master
);
169 static ssize_t
w1_master_attribute_show_timeout(struct device
*dev
, char *buf
)
172 count
= sprintf(buf
, "%d\n", w1_timeout
);
176 static ssize_t
w1_master_attribute_show_max_slave_count(struct device
*dev
, char *buf
)
178 struct w1_master
*md
= container_of(dev
, struct w1_master
, dev
);
181 if (down_interruptible(&md
->mutex
))
184 count
= sprintf(buf
, "%d\n", md
->max_slave_count
);
190 static ssize_t
w1_master_attribute_show_attempts(struct device
*dev
, char *buf
)
192 struct w1_master
*md
= container_of(dev
, struct w1_master
, dev
);
195 if (down_interruptible(&md
->mutex
))
198 count
= sprintf(buf
, "%lu\n", md
->attempts
);
204 static ssize_t
w1_master_attribute_show_slave_count(struct device
*dev
, char *buf
)
206 struct w1_master
*md
= container_of(dev
, struct w1_master
, dev
);
209 if (down_interruptible(&md
->mutex
))
212 count
= sprintf(buf
, "%d\n", md
->slave_count
);
218 static ssize_t
w1_master_attribute_show_slaves(struct device
*dev
, char *buf
)
221 struct w1_master
*md
= container_of(dev
, struct w1_master
, dev
);
224 if (down_interruptible(&md
->mutex
))
227 if (md
->slave_count
== 0)
228 c
-= snprintf(buf
+ PAGE_SIZE
- c
, c
, "not found.\n");
230 struct list_head
*ent
, *n
;
233 list_for_each_safe(ent
, n
, &md
->slist
) {
234 sl
= list_entry(ent
, struct w1_slave
, w1_slave_entry
);
236 c
-= snprintf(buf
+ PAGE_SIZE
- c
, c
, "%s\n", sl
->name
);
242 return PAGE_SIZE
- c
;
245 static struct device_attribute w1_master_attribute_slaves
= {
247 .name
= "w1_master_slaves",
249 .owner
= THIS_MODULE
,
251 .show
= &w1_master_attribute_show_slaves
,
253 static struct device_attribute w1_master_attribute_slave_count
= {
255 .name
= "w1_master_slave_count",
259 .show
= &w1_master_attribute_show_slave_count
,
261 static struct device_attribute w1_master_attribute_attempts
= {
263 .name
= "w1_master_attempts",
267 .show
= &w1_master_attribute_show_attempts
,
269 static struct device_attribute w1_master_attribute_max_slave_count
= {
271 .name
= "w1_master_max_slave_count",
275 .show
= &w1_master_attribute_show_max_slave_count
,
277 static struct device_attribute w1_master_attribute_timeout
= {
279 .name
= "w1_master_timeout",
283 .show
= &w1_master_attribute_show_timeout
,
285 static struct device_attribute w1_master_attribute_pointer
= {
287 .name
= "w1_master_pointer",
291 .show
= &w1_master_attribute_show_pointer
,
293 static struct device_attribute w1_master_attribute_name
= {
295 .name
= "w1_master_name",
299 .show
= &w1_master_attribute_show_name
,
302 static struct bin_attribute w1_slave_bin_attribute
= {
306 .owner
= THIS_MODULE
,
308 .size
= W1_SLAVE_DATA_SIZE
,
309 .read
= &w1_default_read_bin
,
312 static int __w1_attach_slave_device(struct w1_slave
*sl
)
316 sl
->dev
.parent
= &sl
->master
->dev
;
317 sl
->dev
.driver
= sl
->master
->driver
;
318 sl
->dev
.bus
= &w1_bus_type
;
319 sl
->dev
.release
= &w1_slave_release
;
321 snprintf(&sl
->dev
.bus_id
[0], sizeof(sl
->dev
.bus_id
),
323 (unsigned int) sl
->reg_num
.family
,
324 (unsigned long long) sl
->reg_num
.id
);
325 snprintf (&sl
->name
[0], sizeof(sl
->name
),
327 (unsigned int) sl
->reg_num
.family
,
328 (unsigned long long) sl
->reg_num
.id
);
330 dev_dbg(&sl
->dev
, "%s: registering %s.\n", __func__
,
333 err
= device_register(&sl
->dev
);
336 "Device registration [%s] failed. err=%d\n",
337 sl
->dev
.bus_id
, err
);
341 memcpy(&sl
->attr_bin
, &w1_slave_bin_attribute
, sizeof(sl
->attr_bin
));
342 memcpy(&sl
->attr_name
, &w1_slave_attribute
, sizeof(sl
->attr_name
));
343 memcpy(&sl
->attr_val
, &w1_slave_attribute_val
, sizeof(sl
->attr_val
));
345 sl
->attr_bin
.read
= sl
->family
->fops
->rbin
;
346 sl
->attr_name
.show
= sl
->family
->fops
->rname
;
347 sl
->attr_val
.show
= sl
->family
->fops
->rval
;
348 sl
->attr_val
.attr
.name
= sl
->family
->fops
->rvalname
;
350 err
= device_create_file(&sl
->dev
, &sl
->attr_name
);
353 "sysfs file creation for [%s] failed. err=%d\n",
354 sl
->dev
.bus_id
, err
);
355 device_unregister(&sl
->dev
);
359 err
= device_create_file(&sl
->dev
, &sl
->attr_val
);
362 "sysfs file creation for [%s] failed. err=%d\n",
363 sl
->dev
.bus_id
, err
);
364 device_remove_file(&sl
->dev
, &sl
->attr_name
);
365 device_unregister(&sl
->dev
);
369 err
= sysfs_create_bin_file(&sl
->dev
.kobj
, &sl
->attr_bin
);
372 "sysfs file creation for [%s] failed. err=%d\n",
373 sl
->dev
.bus_id
, err
);
374 device_remove_file(&sl
->dev
, &sl
->attr_name
);
375 device_remove_file(&sl
->dev
, &sl
->attr_val
);
376 device_unregister(&sl
->dev
);
380 list_add_tail(&sl
->w1_slave_entry
, &sl
->master
->slist
);
385 static int w1_attach_slave_device(struct w1_master
*dev
, struct w1_reg_num
*rn
)
390 struct w1_netlink_msg msg
;
392 sl
= kmalloc(sizeof(struct w1_slave
), GFP_KERNEL
);
395 "%s: failed to allocate new slave device.\n",
400 memset(sl
, 0, sizeof(*sl
));
402 sl
->owner
= THIS_MODULE
;
404 set_bit(W1_SLAVE_ACTIVE
, (long *)&sl
->flags
);
406 memcpy(&sl
->reg_num
, rn
, sizeof(sl
->reg_num
));
407 atomic_set(&sl
->refcnt
, 0);
408 init_completion(&sl
->dev_released
);
410 spin_lock(&w1_flock
);
411 f
= w1_family_registered(rn
->family
);
413 spin_unlock(&w1_flock
);
414 dev_info(&dev
->dev
, "Family %x for %02x.%012llx.%02x is not registered.\n",
415 rn
->family
, rn
->family
,
416 (unsigned long long)rn
->id
, rn
->crc
);
421 spin_unlock(&w1_flock
);
426 err
= __w1_attach_slave_device(sl
);
428 dev_err(&dev
->dev
, "%s: Attaching %s failed.\n", __func__
,
430 w1_family_put(sl
->family
);
435 sl
->ttl
= dev
->slave_ttl
;
438 memcpy(&msg
.id
.id
, rn
, sizeof(msg
.id
.id
));
439 msg
.type
= W1_SLAVE_ADD
;
440 w1_netlink_send(dev
, &msg
);
445 static void w1_slave_detach(struct w1_slave
*sl
)
447 struct w1_netlink_msg msg
;
449 dev_info(&sl
->dev
, "%s: detaching %s.\n", __func__
, sl
->name
);
451 while (atomic_read(&sl
->refcnt
)) {
452 printk(KERN_INFO
"Waiting for %s to become free: refcnt=%d.\n",
453 sl
->name
, atomic_read(&sl
->refcnt
));
455 if (msleep_interruptible(1000))
456 flush_signals(current
);
459 sysfs_remove_bin_file (&sl
->dev
.kobj
, &sl
->attr_bin
);
460 device_remove_file(&sl
->dev
, &sl
->attr_name
);
461 device_remove_file(&sl
->dev
, &sl
->attr_val
);
462 device_unregister(&sl
->dev
);
463 w1_family_put(sl
->family
);
465 memcpy(&msg
.id
.id
, &sl
->reg_num
, sizeof(msg
.id
.id
));
466 msg
.type
= W1_SLAVE_REMOVE
;
467 w1_netlink_send(sl
->master
, &msg
);
470 static struct w1_master
*w1_search_master(unsigned long data
)
472 struct w1_master
*dev
;
475 spin_lock_irq(&w1_mlock
);
476 list_for_each_entry(dev
, &w1_masters
, w1_master_entry
) {
477 if (dev
->bus_master
->data
== data
) {
479 atomic_inc(&dev
->refcnt
);
483 spin_unlock_irq(&w1_mlock
);
485 return (found
)?dev
:NULL
;
488 void w1_slave_found(unsigned long data
, u64 rn
)
492 struct list_head
*ent
;
493 struct w1_reg_num
*tmp
;
494 int family_found
= 0;
495 struct w1_master
*dev
;
497 dev
= w1_search_master(data
);
499 printk(KERN_ERR
"Failed to find w1 master device for data %08lx, it is impossible.\n",
504 tmp
= (struct w1_reg_num
*) &rn
;
507 list_for_each(ent
, &dev
->slist
) {
509 sl
= list_entry(ent
, struct w1_slave
, w1_slave_entry
);
511 if (sl
->reg_num
.family
== tmp
->family
&&
512 sl
->reg_num
.id
== tmp
->id
&&
513 sl
->reg_num
.crc
== tmp
->crc
) {
514 set_bit(W1_SLAVE_ACTIVE
, (long *)&sl
->flags
);
517 else if (sl
->reg_num
.family
== tmp
->family
) {
525 rn
= cpu_to_le64(rn
);
527 if (slave_count
== dev
->slave_count
&&
528 rn
&& ((le64_to_cpu(rn
) >> 56) & 0xff) == w1_calc_crc8((u8
*)&rn
, 7)) {
529 w1_attach_slave_device(dev
, tmp
);
532 atomic_dec(&dev
->refcnt
);
535 void w1_search(struct w1_master
*dev
)
539 int last_family_desc
, last_zero
, last_device
;
540 int search_bit
, id_bit
, comp_bit
, desc_bit
;
542 search_bit
= id_bit
= comp_bit
= 0;
544 last_device
= last_zero
= last_family_desc
= 0;
548 while (!(id_bit
&& comp_bit
) && !last_device
549 && count
++ < dev
->max_slave_count
) {
553 last_family_desc
= 0;
556 * Reset bus and all 1-wire device state machines
557 * so they can respond to our requests.
559 * Return 0 - device(s) present, 1 - no devices present.
561 if (w1_reset_bus(dev
)) {
562 dev_info(&dev
->dev
, "No devices present on the wire.\n");
567 w1_write_8(dev
, W1_SEARCH
);
568 for (i
= 0; i
< 64; ++i
) {
570 * Read 2 bits from bus.
571 * All who don't sleep must send ID bit and COMPLEMENT ID bit.
572 * They actually are ANDed between all senders.
574 id_bit
= w1_touch_bit(dev
, 1);
575 comp_bit
= w1_touch_bit(dev
, 1);
577 if (id_bit
&& comp_bit
)
580 if (id_bit
== 0 && comp_bit
== 0) {
583 else if (i
> desc_bit
)
586 search_bit
= ((last
>> i
) & 0x1);
588 if (search_bit
== 0) {
591 last_family_desc
= last_zero
;
603 * and make all who don't have "search_bit" in "i"'th position
604 * in it's registration number sleep.
606 if (dev
->bus_master
->touch_bit
)
607 w1_touch_bit(dev
, search_bit
);
609 w1_write_bit(dev
, search_bit
);
614 if (desc_bit
== last_zero
)
617 desc_bit
= last_zero
;
619 w1_slave_found(dev
->bus_master
->data
, rn
);
623 int w1_create_master_attributes(struct w1_master
*dev
)
625 if ( device_create_file(&dev
->dev
, &w1_master_attribute_slaves
) < 0 ||
626 device_create_file(&dev
->dev
, &w1_master_attribute_slave_count
) < 0 ||
627 device_create_file(&dev
->dev
, &w1_master_attribute_attempts
) < 0 ||
628 device_create_file(&dev
->dev
, &w1_master_attribute_max_slave_count
) < 0 ||
629 device_create_file(&dev
->dev
, &w1_master_attribute_timeout
) < 0||
630 device_create_file(&dev
->dev
, &w1_master_attribute_pointer
) < 0||
631 device_create_file(&dev
->dev
, &w1_master_attribute_name
) < 0)
637 void w1_destroy_master_attributes(struct w1_master
*dev
)
639 device_remove_file(&dev
->dev
, &w1_master_attribute_slaves
);
640 device_remove_file(&dev
->dev
, &w1_master_attribute_slave_count
);
641 device_remove_file(&dev
->dev
, &w1_master_attribute_attempts
);
642 device_remove_file(&dev
->dev
, &w1_master_attribute_max_slave_count
);
643 device_remove_file(&dev
->dev
, &w1_master_attribute_timeout
);
644 device_remove_file(&dev
->dev
, &w1_master_attribute_pointer
);
645 device_remove_file(&dev
->dev
, &w1_master_attribute_name
);
649 int w1_control(void *data
)
652 struct w1_master
*dev
;
653 struct list_head
*ent
, *ment
, *n
, *mn
;
654 int err
, have_to_wait
= 0;
656 daemonize("w1_control");
657 allow_signal(SIGTERM
);
659 while (!control_needs_exit
|| have_to_wait
) {
662 try_to_freeze(PF_FREEZE
);
663 msleep_interruptible(w1_timeout
* 1000);
665 if (signal_pending(current
))
666 flush_signals(current
);
668 list_for_each_safe(ment
, mn
, &w1_masters
) {
669 dev
= list_entry(ment
, struct w1_master
, w1_master_entry
);
671 if (!control_needs_exit
&& !dev
->need_exit
)
674 * Little race: we can create thread but not set the flag.
675 * Get a chance for external process to set flag up.
677 if (!dev
->initialized
) {
682 spin_lock(&w1_mlock
);
683 list_del(&dev
->w1_master_entry
);
684 spin_unlock(&w1_mlock
);
686 if (control_needs_exit
) {
689 err
= kill_proc(dev
->kpid
, SIGTERM
, 1);
692 "Failed to send signal to w1 kernel thread %d.\n",
696 wait_for_completion(&dev
->dev_exited
);
698 list_for_each_safe(ent
, n
, &dev
->slist
) {
699 sl
= list_entry(ent
, struct w1_slave
, w1_slave_entry
);
703 "%s: slave entry is NULL.\n",
706 list_del(&sl
->w1_slave_entry
);
712 w1_destroy_master_attributes(dev
);
713 atomic_dec(&dev
->refcnt
);
717 complete_and_exit(&w1_control_complete
, 0);
720 int w1_process(void *data
)
722 struct w1_master
*dev
= (struct w1_master
*) data
;
723 struct list_head
*ent
, *n
;
726 daemonize("%s", dev
->name
);
727 allow_signal(SIGTERM
);
729 while (!dev
->need_exit
) {
730 try_to_freeze(PF_FREEZE
);
731 msleep_interruptible(w1_timeout
* 1000);
733 if (signal_pending(current
))
734 flush_signals(current
);
739 if (!dev
->initialized
)
742 if (down_interruptible(&dev
->mutex
))
745 list_for_each_safe(ent
, n
, &dev
->slist
) {
746 sl
= list_entry(ent
, struct w1_slave
, w1_slave_entry
);
749 clear_bit(W1_SLAVE_ACTIVE
, (long *)&sl
->flags
);
752 w1_search_devices(dev
, w1_slave_found
);
754 list_for_each_safe(ent
, n
, &dev
->slist
) {
755 sl
= list_entry(ent
, struct w1_slave
, w1_slave_entry
);
757 if (sl
&& !test_bit(W1_SLAVE_ACTIVE
, (unsigned long *)&sl
->flags
) && !--sl
->ttl
) {
758 list_del (&sl
->w1_slave_entry
);
760 w1_slave_detach (sl
);
765 else if (test_bit(W1_SLAVE_ACTIVE
, (unsigned long *)&sl
->flags
))
766 sl
->ttl
= dev
->slave_ttl
;
771 atomic_dec(&dev
->refcnt
);
772 complete_and_exit(&dev
->dev_exited
, 0);
781 printk(KERN_INFO
"Driver for 1-wire Dallas network protocol.\n");
783 retval
= bus_register(&w1_bus_type
);
785 printk(KERN_ERR
"Failed to register bus. err=%d.\n", retval
);
786 goto err_out_exit_init
;
789 retval
= driver_register(&w1_driver
);
792 "Failed to register master driver. err=%d.\n",
794 goto err_out_bus_unregister
;
797 control_thread
= kernel_thread(&w1_control
, NULL
, 0);
798 if (control_thread
< 0) {
799 printk(KERN_ERR
"Failed to create control thread. err=%d\n",
801 retval
= control_thread
;
802 goto err_out_driver_unregister
;
807 err_out_driver_unregister
:
808 driver_unregister(&w1_driver
);
810 err_out_bus_unregister
:
811 bus_unregister(&w1_bus_type
);
819 struct w1_master
*dev
;
820 struct list_head
*ent
, *n
;
822 list_for_each_safe(ent
, n
, &w1_masters
) {
823 dev
= list_entry(ent
, struct w1_master
, w1_master_entry
);
824 __w1_remove_master_device(dev
);
827 control_needs_exit
= 1;
829 wait_for_completion(&w1_control_complete
);
831 driver_unregister(&w1_driver
);
832 bus_unregister(&w1_bus_type
);
835 module_init(w1_init
);
836 module_exit(w1_fini
);