2005-04-17 02:20:36 +04:00
/*
2011-08-26 02:59:06 +04:00
* Copyright ( c ) 2003 Evgeniy Polyakov < zbr @ ioremap . net >
2005-04-17 02:20:36 +04:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*/
# ifndef __W1_NETLINK_H
# define __W1_NETLINK_H
# include <asm/types.h>
2006-03-23 19:11:58 +03:00
# include <linux/connector.h>
2005-04-17 02:20:36 +04:00
2017-06-05 16:52:08 +03:00
# include "w1_internal.h"
2005-04-17 02:20:36 +04:00
2014-04-09 07:37:09 +04:00
/**
* enum w1_cn_msg_flags - bitfield flags for struct cn_msg . flags
*
* @ W1_CN_BUNDLE : Request bundling replies into fewer messagse . Be prepared
* to handle multiple struct cn_msg , struct w1_netlink_msg , and
* struct w1_netlink_cmd in one packet .
*/
enum w1_cn_msg_flags {
W1_CN_BUNDLE = 1 ,
} ;
2014-01-16 08:29:25 +04:00
/**
* enum w1_netlink_message_types - message type
2014-01-16 08:29:17 +04:00
*
* @ W1_SLAVE_ADD : notification that a slave device was added
* @ W1_SLAVE_REMOVE : notification that a slave device was removed
* @ W1_MASTER_ADD : notification that a new bus master was added
* @ W1_MASTER_REMOVE : notification that a bus masterwas removed
* @ W1_MASTER_CMD : initiate operations on a specific master
* @ W1_SLAVE_CMD : sends reset , selects the slave , then does a read / write / touch
* operation
* @ W1_LIST_MASTERS : used to determine the bus master identifiers
*/
2005-04-17 02:20:36 +04:00
enum w1_netlink_message_types {
W1_SLAVE_ADD = 0 ,
W1_SLAVE_REMOVE ,
W1_MASTER_ADD ,
W1_MASTER_REMOVE ,
2006-03-23 19:11:58 +03:00
W1_MASTER_CMD ,
W1_SLAVE_CMD ,
2009-01-08 05:08:59 +03:00
W1_LIST_MASTERS ,
2005-04-17 02:20:36 +04:00
} ;
2014-04-09 07:37:09 +04:00
/**
* struct w1_netlink_msg - holds w1 message type , id , and result
*
* @ type : one of enum w1_netlink_message_types
* @ status : kernel feedback for success 0 or errno failure value
* @ len : length of data following w1_netlink_msg
2017-12-18 15:30:19 +03:00
* @ id : union holding bus master id ( msg . id ) and slave device id ( id [ 8 ] ) .
* @ id . id : Slave ID ( 8 bytes )
* @ id . mst : bus master identification
* @ id . mst . id : bus master ID
* @ id . mst . res : bus master reserved
2014-04-09 07:37:09 +04:00
* @ data : start address of any following data
*
* The base message structure for w1 messages over netlink .
* The netlink connector data sequence is , struct nlmsghdr , struct cn_msg ,
* then one or more struct w1_netlink_msg ( each with optional data ) .
*/
2005-05-20 22:33:25 +04:00
struct w1_netlink_msg
2005-04-17 02:20:36 +04:00
{
__u8 type ;
2009-01-08 05:09:05 +03:00
__u8 status ;
2006-03-23 19:11:58 +03:00
__u16 len ;
union {
__u8 id [ 8 ] ;
struct w1_mst {
2005-04-17 02:20:36 +04:00
__u32 id ;
2006-03-23 19:11:58 +03:00
__u32 res ;
2005-04-17 02:20:36 +04:00
} mst ;
} id ;
2006-03-23 19:11:58 +03:00
__u8 data [ 0 ] ;
} ;
2014-01-16 08:29:25 +04:00
/**
* enum w1_commands - commands available for master or slave operations
2014-04-09 07:37:09 +04:00
*
2014-01-16 08:29:17 +04:00
* @ W1_CMD_READ : read len bytes
* @ W1_CMD_WRITE : write len bytes
* @ W1_CMD_SEARCH : initiate a standard search , returns only the slave
* devices found during that search
* @ W1_CMD_ALARM_SEARCH : search for devices that are currently alarming
* @ W1_CMD_TOUCH : Touches a series of bytes .
* @ W1_CMD_RESET : sends a bus reset on the given master
* @ W1_CMD_SLAVE_ADD : adds a slave to the given master ,
* 8 byte slave id at data [ 0 ]
* @ W1_CMD_SLAVE_REMOVE : removes a slave to the given master ,
* 8 byte slave id at data [ 0 ]
* @ W1_CMD_LIST_SLAVES : list of slaves registered on this master
* @ W1_CMD_MAX : number of available commands
*/
2009-01-08 05:09:03 +03:00
enum w1_commands {
W1_CMD_READ = 0 ,
W1_CMD_WRITE ,
W1_CMD_SEARCH ,
W1_CMD_ALARM_SEARCH ,
W1_CMD_TOUCH ,
2009-01-08 05:09:04 +03:00
W1_CMD_RESET ,
2014-01-16 08:29:17 +04:00
W1_CMD_SLAVE_ADD ,
W1_CMD_SLAVE_REMOVE ,
W1_CMD_LIST_SLAVES ,
W1_CMD_MAX
2009-01-08 05:09:03 +03:00
} ;
2006-03-23 19:11:58 +03:00
2014-04-09 07:37:09 +04:00
/**
* struct w1_netlink_cmd - holds the command and data
*
* @ cmd : one of enum w1_commands
* @ res : reserved
* @ len : length of data following w1_netlink_cmd
* @ data : start address of any following data
*
* One or more struct w1_netlink_cmd is placed starting at w1_netlink_msg . data
* each with optional data .
*/
2006-03-23 19:11:58 +03:00
struct w1_netlink_cmd
{
__u8 cmd ;
__u8 res ;
__u16 len ;
__u8 data [ 0 ] ;
2005-04-17 02:20:36 +04:00
} ;
# ifdef __KERNEL__
void w1_netlink_send ( struct w1_master * , struct w1_netlink_msg * ) ;
2006-03-23 19:11:58 +03:00
int w1_init_netlink ( void ) ;
void w1_fini_netlink ( void ) ;
2005-04-17 02:20:36 +04:00
# endif /* __KERNEL__ */
# endif /* __W1_NETLINK_H */