root/drivers/w1/w1_netlink.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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[0];
  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[0];
 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 */

/* [<][>][^][v][top][bottom][index][help] */