linux/drivers/w1/w1_netlink.h
<<
>>
Prefs
   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 */
  21enum 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 */
  37enum 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 */
  64struct 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 */
  96enum 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 */
 120struct w1_netlink_cmd
 121{
 122        __u8                            cmd;
 123        __u8                            res;
 124        __u16                           len;
 125        __u8                            data[];
 126};
 127
 128#ifdef __KERNEL__
 129
 130void w1_netlink_send(struct w1_master *, struct w1_netlink_msg *);
 131int w1_init_netlink(void);
 132void w1_fini_netlink(void);
 133
 134#endif /* __KERNEL__ */
 135#endif /* __W1_NETLINK_H */
 136