xref: /openbmc/linux/drivers/w1/w1_netlink.h (revision 70b34d2ed807b722413894975a8c60617defb887)
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*70b34d2eSDavid Fries /** enum w1_netlink_message_types - message type
31*70b34d2eSDavid Fries  *
32*70b34d2eSDavid Fries  * @W1_SLAVE_ADD: notification that a slave device was added
33*70b34d2eSDavid Fries  * @W1_SLAVE_REMOVE: notification that a slave device was removed
34*70b34d2eSDavid Fries  * @W1_MASTER_ADD: notification that a new bus master was added
35*70b34d2eSDavid Fries  * @W1_MASTER_REMOVE: notification that a bus masterwas removed
36*70b34d2eSDavid Fries  * @W1_MASTER_CMD: initiate operations on a specific master
37*70b34d2eSDavid Fries  * @W1_SLAVE_CMD: sends reset, selects the slave, then does a read/write/touch
38*70b34d2eSDavid Fries  * operation
39*70b34d2eSDavid Fries  * @W1_LIST_MASTERS: used to determine the bus master identifiers
40*70b34d2eSDavid Fries  */
411da177e4SLinus Torvalds enum w1_netlink_message_types {
421da177e4SLinus Torvalds 	W1_SLAVE_ADD = 0,
431da177e4SLinus Torvalds 	W1_SLAVE_REMOVE,
441da177e4SLinus Torvalds 	W1_MASTER_ADD,
451da177e4SLinus Torvalds 	W1_MASTER_REMOVE,
4612003375SEvgeniy Polyakov 	W1_MASTER_CMD,
4712003375SEvgeniy Polyakov 	W1_SLAVE_CMD,
48610705e7SEvgeniy Polyakov 	W1_LIST_MASTERS,
491da177e4SLinus Torvalds };
501da177e4SLinus Torvalds 
511da177e4SLinus Torvalds struct w1_netlink_msg
521da177e4SLinus Torvalds {
531da177e4SLinus Torvalds 	__u8				type;
544037014eSEvgeniy Polyakov 	__u8				status;
5512003375SEvgeniy Polyakov 	__u16				len;
5612003375SEvgeniy Polyakov 	union {
5712003375SEvgeniy Polyakov 		__u8			id[8];
5812003375SEvgeniy Polyakov 		struct w1_mst {
591da177e4SLinus Torvalds 			__u32		id;
6012003375SEvgeniy Polyakov 			__u32		res;
611da177e4SLinus Torvalds 		} mst;
621da177e4SLinus Torvalds 	} id;
6312003375SEvgeniy Polyakov 	__u8				data[0];
6412003375SEvgeniy Polyakov };
6512003375SEvgeniy Polyakov 
66*70b34d2eSDavid Fries /** enum w1_commands - commands available for master or slave operations
67*70b34d2eSDavid Fries  * @W1_CMD_READ: read len bytes
68*70b34d2eSDavid Fries  * @W1_CMD_WRITE: write len bytes
69*70b34d2eSDavid Fries  * @W1_CMD_SEARCH: initiate a standard search, returns only the slave
70*70b34d2eSDavid Fries  * devices found during that search
71*70b34d2eSDavid Fries  * @W1_CMD_ALARM_SEARCH: search for devices that are currently alarming
72*70b34d2eSDavid Fries  * @W1_CMD_TOUCH: Touches a series of bytes.
73*70b34d2eSDavid Fries  * @W1_CMD_RESET: sends a bus reset on the given master
74*70b34d2eSDavid Fries  * @W1_CMD_SLAVE_ADD: adds a slave to the given master,
75*70b34d2eSDavid Fries  * 8 byte slave id at data[0]
76*70b34d2eSDavid Fries  * @W1_CMD_SLAVE_REMOVE: removes a slave to the given master,
77*70b34d2eSDavid Fries  * 8 byte slave id at data[0]
78*70b34d2eSDavid Fries  * @W1_CMD_LIST_SLAVES: list of slaves registered on this master
79*70b34d2eSDavid Fries  * @W1_CMD_MAX: number of available commands
80*70b34d2eSDavid Fries  */
81325a06fbSEvgeniy Polyakov enum w1_commands {
82325a06fbSEvgeniy Polyakov 	W1_CMD_READ = 0,
83325a06fbSEvgeniy Polyakov 	W1_CMD_WRITE,
84325a06fbSEvgeniy Polyakov 	W1_CMD_SEARCH,
85325a06fbSEvgeniy Polyakov 	W1_CMD_ALARM_SEARCH,
86325a06fbSEvgeniy Polyakov 	W1_CMD_TOUCH,
87f89735c4SEvgeniy Polyakov 	W1_CMD_RESET,
88*70b34d2eSDavid Fries 	W1_CMD_SLAVE_ADD,
89*70b34d2eSDavid Fries 	W1_CMD_SLAVE_REMOVE,
90*70b34d2eSDavid Fries 	W1_CMD_LIST_SLAVES,
91*70b34d2eSDavid Fries 	W1_CMD_MAX
92325a06fbSEvgeniy Polyakov };
9312003375SEvgeniy Polyakov 
9412003375SEvgeniy Polyakov struct w1_netlink_cmd
9512003375SEvgeniy Polyakov {
9612003375SEvgeniy Polyakov 	__u8				cmd;
9712003375SEvgeniy Polyakov 	__u8				res;
9812003375SEvgeniy Polyakov 	__u16				len;
9912003375SEvgeniy Polyakov 	__u8				data[0];
1001da177e4SLinus Torvalds };
1011da177e4SLinus Torvalds 
1021da177e4SLinus Torvalds #ifdef __KERNEL__
1031da177e4SLinus Torvalds 
1041da177e4SLinus Torvalds void w1_netlink_send(struct w1_master *, struct w1_netlink_msg *);
10512003375SEvgeniy Polyakov int w1_init_netlink(void);
10612003375SEvgeniy Polyakov void w1_fini_netlink(void);
1071da177e4SLinus Torvalds 
1081da177e4SLinus Torvalds #endif /* __KERNEL__ */
1091da177e4SLinus Torvalds #endif /* __W1_NETLINK_H */
110