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