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