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