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_cn_msg_flags - bitfield flags for struct cn_msg.flags 32 * 33 * @W1_CN_BUNDLE: Request bundling replies into fewer messagse. Be prepared 34 * to handle multiple struct cn_msg, struct w1_netlink_msg, and 35 * struct w1_netlink_cmd in one packet. 36 */ 37 enum w1_cn_msg_flags { 38 W1_CN_BUNDLE = 1, 39 }; 40 41 /** 42 * enum w1_netlink_message_types - message type 43 * 44 * @W1_SLAVE_ADD: notification that a slave device was added 45 * @W1_SLAVE_REMOVE: notification that a slave device was removed 46 * @W1_MASTER_ADD: notification that a new bus master was added 47 * @W1_MASTER_REMOVE: notification that a bus masterwas removed 48 * @W1_MASTER_CMD: initiate operations on a specific master 49 * @W1_SLAVE_CMD: sends reset, selects the slave, then does a read/write/touch 50 * operation 51 * @W1_LIST_MASTERS: used to determine the bus master identifiers 52 */ 53 enum w1_netlink_message_types { 54 W1_SLAVE_ADD = 0, 55 W1_SLAVE_REMOVE, 56 W1_MASTER_ADD, 57 W1_MASTER_REMOVE, 58 W1_MASTER_CMD, 59 W1_SLAVE_CMD, 60 W1_LIST_MASTERS, 61 }; 62 63 /** 64 * struct w1_netlink_msg - holds w1 message type, id, and result 65 * 66 * @type: one of enum w1_netlink_message_types 67 * @status: kernel feedback for success 0 or errno failure value 68 * @len: length of data following w1_netlink_msg 69 * @id: union holding master bus id (msg.id) and slave device id (id[8]). 70 * @data: start address of any following data 71 * 72 * The base message structure for w1 messages over netlink. 73 * The netlink connector data sequence is, struct nlmsghdr, struct cn_msg, 74 * then one or more struct w1_netlink_msg (each with optional data). 75 */ 76 struct w1_netlink_msg 77 { 78 __u8 type; 79 __u8 status; 80 __u16 len; 81 union { 82 __u8 id[8]; 83 struct w1_mst { 84 __u32 id; 85 __u32 res; 86 } mst; 87 } id; 88 __u8 data[0]; 89 }; 90 91 /** 92 * enum w1_commands - commands available for master or slave operations 93 * 94 * @W1_CMD_READ: read len bytes 95 * @W1_CMD_WRITE: write len bytes 96 * @W1_CMD_SEARCH: initiate a standard search, returns only the slave 97 * devices found during that search 98 * @W1_CMD_ALARM_SEARCH: search for devices that are currently alarming 99 * @W1_CMD_TOUCH: Touches a series of bytes. 100 * @W1_CMD_RESET: sends a bus reset on the given master 101 * @W1_CMD_SLAVE_ADD: adds a slave to the given master, 102 * 8 byte slave id at data[0] 103 * @W1_CMD_SLAVE_REMOVE: removes a slave to the given master, 104 * 8 byte slave id at data[0] 105 * @W1_CMD_LIST_SLAVES: list of slaves registered on this master 106 * @W1_CMD_MAX: number of available commands 107 */ 108 enum w1_commands { 109 W1_CMD_READ = 0, 110 W1_CMD_WRITE, 111 W1_CMD_SEARCH, 112 W1_CMD_ALARM_SEARCH, 113 W1_CMD_TOUCH, 114 W1_CMD_RESET, 115 W1_CMD_SLAVE_ADD, 116 W1_CMD_SLAVE_REMOVE, 117 W1_CMD_LIST_SLAVES, 118 W1_CMD_MAX 119 }; 120 121 /** 122 * struct w1_netlink_cmd - holds the command and data 123 * 124 * @cmd: one of enum w1_commands 125 * @res: reserved 126 * @len: length of data following w1_netlink_cmd 127 * @data: start address of any following data 128 * 129 * One or more struct w1_netlink_cmd is placed starting at w1_netlink_msg.data 130 * each with optional data. 131 */ 132 struct w1_netlink_cmd 133 { 134 __u8 cmd; 135 __u8 res; 136 __u16 len; 137 __u8 data[0]; 138 }; 139 140 #ifdef __KERNEL__ 141 142 void w1_netlink_send(struct w1_master *, struct w1_netlink_msg *); 143 int w1_init_netlink(void); 144 void w1_fini_netlink(void); 145 146 #endif /* __KERNEL__ */ 147 #endif /* __W1_NETLINK_H */ 148