xref: /openbmc/linux/drivers/w1/w1_netlink.h (revision b3be177a19f0f9e4f0deb473cef0e95e1254f2e9)
11da177e4SLinus Torvalds /*
21da177e4SLinus Torvalds  * w1_netlink.h
31da177e4SLinus Torvalds  *
4a8018766SEvgeniy Polyakov  * Copyright (c) 2003 Evgeniy Polyakov <zbr@ioremap.net>
51da177e4SLinus Torvalds  *
61da177e4SLinus Torvalds  *
71da177e4SLinus Torvalds  * This program is free software; you can redistribute it and/or modify
81da177e4SLinus Torvalds  * it under the terms of the GNU General Public License as published by
91da177e4SLinus Torvalds  * the Free Software Foundation; either version 2 of the License, or
101da177e4SLinus Torvalds  * (at your option) any later version.
111da177e4SLinus Torvalds  *
121da177e4SLinus Torvalds  * This program is distributed in the hope that it will be useful,
131da177e4SLinus Torvalds  * but WITHOUT ANY WARRANTY; without even the implied warranty of
141da177e4SLinus Torvalds  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
151da177e4SLinus Torvalds  * GNU General Public License for more details.
161da177e4SLinus Torvalds  *
171da177e4SLinus Torvalds  * You should have received a copy of the GNU General Public License
181da177e4SLinus Torvalds  * along with this program; if not, write to the Free Software
191da177e4SLinus Torvalds  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
201da177e4SLinus Torvalds  */
211da177e4SLinus Torvalds 
221da177e4SLinus Torvalds #ifndef __W1_NETLINK_H
231da177e4SLinus Torvalds #define __W1_NETLINK_H
241da177e4SLinus Torvalds 
251da177e4SLinus Torvalds #include <asm/types.h>
2612003375SEvgeniy Polyakov #include <linux/connector.h>
271da177e4SLinus Torvalds 
281da177e4SLinus Torvalds #include "w1.h"
291da177e4SLinus Torvalds 
30*b3be177aSDavid Fries /**
31*b3be177aSDavid Fries  * enum w1_netlink_message_types - message type
3270b34d2eSDavid Fries  *
3370b34d2eSDavid Fries  * @W1_SLAVE_ADD: notification that a slave device was added
3470b34d2eSDavid Fries  * @W1_SLAVE_REMOVE: notification that a slave device was removed
3570b34d2eSDavid Fries  * @W1_MASTER_ADD: notification that a new bus master was added
3670b34d2eSDavid Fries  * @W1_MASTER_REMOVE: notification that a bus masterwas removed
3770b34d2eSDavid Fries  * @W1_MASTER_CMD: initiate operations on a specific master
3870b34d2eSDavid Fries  * @W1_SLAVE_CMD: sends reset, selects the slave, then does a read/write/touch
3970b34d2eSDavid Fries  * operation
4070b34d2eSDavid Fries  * @W1_LIST_MASTERS: used to determine the bus master identifiers
4170b34d2eSDavid Fries  */
421da177e4SLinus Torvalds enum w1_netlink_message_types {
431da177e4SLinus Torvalds 	W1_SLAVE_ADD = 0,
441da177e4SLinus Torvalds 	W1_SLAVE_REMOVE,
451da177e4SLinus Torvalds 	W1_MASTER_ADD,
461da177e4SLinus Torvalds 	W1_MASTER_REMOVE,
4712003375SEvgeniy Polyakov 	W1_MASTER_CMD,
4812003375SEvgeniy Polyakov 	W1_SLAVE_CMD,
49610705e7SEvgeniy Polyakov 	W1_LIST_MASTERS,
501da177e4SLinus Torvalds };
511da177e4SLinus Torvalds 
521da177e4SLinus Torvalds struct w1_netlink_msg
531da177e4SLinus Torvalds {
541da177e4SLinus Torvalds 	__u8				type;
554037014eSEvgeniy Polyakov 	__u8				status;
5612003375SEvgeniy Polyakov 	__u16				len;
5712003375SEvgeniy Polyakov 	union {
5812003375SEvgeniy Polyakov 		__u8			id[8];
5912003375SEvgeniy Polyakov 		struct w1_mst {
601da177e4SLinus Torvalds 			__u32		id;
6112003375SEvgeniy Polyakov 			__u32		res;
621da177e4SLinus Torvalds 		} mst;
631da177e4SLinus Torvalds 	} id;
6412003375SEvgeniy Polyakov 	__u8				data[0];
6512003375SEvgeniy Polyakov };
6612003375SEvgeniy Polyakov 
67*b3be177aSDavid Fries /**
68*b3be177aSDavid Fries  * enum w1_commands - commands available for master or slave operations
6970b34d2eSDavid Fries  * @W1_CMD_READ: read len bytes
7070b34d2eSDavid Fries  * @W1_CMD_WRITE: write len bytes
7170b34d2eSDavid Fries  * @W1_CMD_SEARCH: initiate a standard search, returns only the slave
7270b34d2eSDavid Fries  * devices found during that search
7370b34d2eSDavid Fries  * @W1_CMD_ALARM_SEARCH: search for devices that are currently alarming
7470b34d2eSDavid Fries  * @W1_CMD_TOUCH: Touches a series of bytes.
7570b34d2eSDavid Fries  * @W1_CMD_RESET: sends a bus reset on the given master
7670b34d2eSDavid Fries  * @W1_CMD_SLAVE_ADD: adds a slave to the given master,
7770b34d2eSDavid Fries  * 8 byte slave id at data[0]
7870b34d2eSDavid Fries  * @W1_CMD_SLAVE_REMOVE: removes a slave to the given master,
7970b34d2eSDavid Fries  * 8 byte slave id at data[0]
8070b34d2eSDavid Fries  * @W1_CMD_LIST_SLAVES: list of slaves registered on this master
8170b34d2eSDavid Fries  * @W1_CMD_MAX: number of available commands
8270b34d2eSDavid Fries  */
83325a06fbSEvgeniy Polyakov enum w1_commands {
84325a06fbSEvgeniy Polyakov 	W1_CMD_READ = 0,
85325a06fbSEvgeniy Polyakov 	W1_CMD_WRITE,
86325a06fbSEvgeniy Polyakov 	W1_CMD_SEARCH,
87325a06fbSEvgeniy Polyakov 	W1_CMD_ALARM_SEARCH,
88325a06fbSEvgeniy Polyakov 	W1_CMD_TOUCH,
89f89735c4SEvgeniy Polyakov 	W1_CMD_RESET,
9070b34d2eSDavid Fries 	W1_CMD_SLAVE_ADD,
9170b34d2eSDavid Fries 	W1_CMD_SLAVE_REMOVE,
9270b34d2eSDavid Fries 	W1_CMD_LIST_SLAVES,
9370b34d2eSDavid Fries 	W1_CMD_MAX
94325a06fbSEvgeniy Polyakov };
9512003375SEvgeniy Polyakov 
9612003375SEvgeniy Polyakov struct w1_netlink_cmd
9712003375SEvgeniy Polyakov {
9812003375SEvgeniy Polyakov 	__u8				cmd;
9912003375SEvgeniy Polyakov 	__u8				res;
10012003375SEvgeniy Polyakov 	__u16				len;
10112003375SEvgeniy Polyakov 	__u8				data[0];
1021da177e4SLinus Torvalds };
1031da177e4SLinus Torvalds 
1041da177e4SLinus Torvalds #ifdef __KERNEL__
1051da177e4SLinus Torvalds 
1061da177e4SLinus Torvalds void w1_netlink_send(struct w1_master *, struct w1_netlink_msg *);
10712003375SEvgeniy Polyakov int w1_init_netlink(void);
10812003375SEvgeniy Polyakov void w1_fini_netlink(void);
1091da177e4SLinus Torvalds 
1101da177e4SLinus Torvalds #endif /* __KERNEL__ */
1111da177e4SLinus Torvalds #endif /* __W1_NETLINK_H */
112