1 /* 2 * w1_netlink.h 3 * 4 * Copyright (c) 2003 Evgeniy Polyakov <zbr@ioremap.net> 5 * 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 */ 21 22 #ifndef __W1_NETLINK_H 23 #define __W1_NETLINK_H 24 25 #include <asm/types.h> 26 #include <linux/connector.h> 27 28 #include "w1.h" 29 30 /** 31 * enum w1_netlink_message_types - message type 32 * 33 * @W1_SLAVE_ADD: notification that a slave device was added 34 * @W1_SLAVE_REMOVE: notification that a slave device was removed 35 * @W1_MASTER_ADD: notification that a new bus master was added 36 * @W1_MASTER_REMOVE: notification that a bus masterwas removed 37 * @W1_MASTER_CMD: initiate operations on a specific master 38 * @W1_SLAVE_CMD: sends reset, selects the slave, then does a read/write/touch 39 * operation 40 * @W1_LIST_MASTERS: used to determine the bus master identifiers 41 */ 42 enum w1_netlink_message_types { 43 W1_SLAVE_ADD = 0, 44 W1_SLAVE_REMOVE, 45 W1_MASTER_ADD, 46 W1_MASTER_REMOVE, 47 W1_MASTER_CMD, 48 W1_SLAVE_CMD, 49 W1_LIST_MASTERS, 50 }; 51 52 struct w1_netlink_msg 53 { 54 __u8 type; 55 __u8 status; 56 __u16 len; 57 union { 58 __u8 id[8]; 59 struct w1_mst { 60 __u32 id; 61 __u32 res; 62 } mst; 63 } id; 64 __u8 data[0]; 65 }; 66 67 /** 68 * enum w1_commands - commands available for master or slave operations 69 * @W1_CMD_READ: read len bytes 70 * @W1_CMD_WRITE: write len bytes 71 * @W1_CMD_SEARCH: initiate a standard search, returns only the slave 72 * devices found during that search 73 * @W1_CMD_ALARM_SEARCH: search for devices that are currently alarming 74 * @W1_CMD_TOUCH: Touches a series of bytes. 75 * @W1_CMD_RESET: sends a bus reset on the given master 76 * @W1_CMD_SLAVE_ADD: adds a slave to the given master, 77 * 8 byte slave id at data[0] 78 * @W1_CMD_SLAVE_REMOVE: removes a slave to the given master, 79 * 8 byte slave id at data[0] 80 * @W1_CMD_LIST_SLAVES: list of slaves registered on this master 81 * @W1_CMD_MAX: number of available commands 82 */ 83 enum w1_commands { 84 W1_CMD_READ = 0, 85 W1_CMD_WRITE, 86 W1_CMD_SEARCH, 87 W1_CMD_ALARM_SEARCH, 88 W1_CMD_TOUCH, 89 W1_CMD_RESET, 90 W1_CMD_SLAVE_ADD, 91 W1_CMD_SLAVE_REMOVE, 92 W1_CMD_LIST_SLAVES, 93 W1_CMD_MAX 94 }; 95 96 struct w1_netlink_cmd 97 { 98 __u8 cmd; 99 __u8 res; 100 __u16 len; 101 __u8 data[0]; 102 }; 103 104 #ifdef __KERNEL__ 105 106 void w1_netlink_send(struct w1_master *, struct w1_netlink_msg *); 107 int w1_init_netlink(void); 108 void w1_fini_netlink(void); 109 110 #endif /* __KERNEL__ */ 111 #endif /* __W1_NETLINK_H */ 112