root/drivers/hid/intel-ish-hid/ishtp/hbm.h

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

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. ishtp_hbm_hdr

   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * ISHTP bus layer messages handling
   4  *
   5  * Copyright (c) 2003-2016, Intel Corporation.
   6  */
   7 
   8 #ifndef _ISHTP_HBM_H_
   9 #define _ISHTP_HBM_H_
  10 
  11 #include <linux/uuid.h>
  12 
  13 struct ishtp_device;
  14 struct ishtp_msg_hdr;
  15 struct ishtp_cl;
  16 
  17 /*
  18  * Timeouts in Seconds
  19  */
  20 #define ISHTP_INTEROP_TIMEOUT           7 /* Timeout on ready message */
  21 
  22 #define ISHTP_CL_CONNECT_TIMEOUT        15 /* HPS: Client Connect Timeout */
  23 
  24 /*
  25  * ISHTP Version
  26  */
  27 #define HBM_MINOR_VERSION               0
  28 #define HBM_MAJOR_VERSION               1
  29 
  30 /* Host bus message command opcode */
  31 #define ISHTP_HBM_CMD_OP_MSK            0x7f
  32 /* Host bus message command RESPONSE */
  33 #define ISHTP_HBM_CMD_RES_MSK           0x80
  34 
  35 /*
  36  * ISHTP Bus Message Command IDs
  37  */
  38 #define HOST_START_REQ_CMD              0x01
  39 #define HOST_START_RES_CMD              0x81
  40 
  41 #define HOST_STOP_REQ_CMD               0x02
  42 #define HOST_STOP_RES_CMD               0x82
  43 
  44 #define FW_STOP_REQ_CMD                 0x03
  45 
  46 #define HOST_ENUM_REQ_CMD               0x04
  47 #define HOST_ENUM_RES_CMD               0x84
  48 
  49 #define HOST_CLIENT_PROPERTIES_REQ_CMD  0x05
  50 #define HOST_CLIENT_PROPERTIES_RES_CMD  0x85
  51 
  52 #define CLIENT_CONNECT_REQ_CMD          0x06
  53 #define CLIENT_CONNECT_RES_CMD          0x86
  54 
  55 #define CLIENT_DISCONNECT_REQ_CMD       0x07
  56 #define CLIENT_DISCONNECT_RES_CMD       0x87
  57 
  58 #define ISHTP_FLOW_CONTROL_CMD          0x08
  59 
  60 #define DMA_BUFFER_ALLOC_NOTIFY         0x11
  61 #define DMA_BUFFER_ALLOC_RESPONSE       0x91
  62 
  63 #define DMA_XFER                        0x12
  64 #define DMA_XFER_ACK                    0x92
  65 
  66 /*
  67  * ISHTP Stop Reason
  68  * used by hbm_host_stop_request.reason
  69  */
  70 #define DRIVER_STOP_REQUEST             0x00
  71 
  72 /*
  73  * ISHTP BUS Interface Section
  74  */
  75 struct ishtp_msg_hdr {
  76         uint32_t fw_addr:8;
  77         uint32_t host_addr:8;
  78         uint32_t length:9;
  79         uint32_t reserved:6;
  80         uint32_t msg_complete:1;
  81 } __packed;
  82 
  83 struct ishtp_bus_message {
  84         uint8_t hbm_cmd;
  85         uint8_t data[0];
  86 } __packed;
  87 
  88 /**
  89  * struct hbm_cl_cmd - client specific host bus command
  90  *      CONNECT, DISCONNECT, and FlOW CONTROL
  91  *
  92  * @hbm_cmd - bus message command header
  93  * @fw_addr - address of the fw client
  94  * @host_addr - address of the client in the driver
  95  * @data
  96  */
  97 struct ishtp_hbm_cl_cmd {
  98         uint8_t hbm_cmd;
  99         uint8_t fw_addr;
 100         uint8_t host_addr;
 101         uint8_t data;
 102 };
 103 
 104 struct hbm_version {
 105         uint8_t minor_version;
 106         uint8_t major_version;
 107 } __packed;
 108 
 109 struct hbm_host_version_request {
 110         uint8_t hbm_cmd;
 111         uint8_t reserved;
 112         struct hbm_version host_version;
 113 } __packed;
 114 
 115 struct hbm_host_version_response {
 116         uint8_t hbm_cmd;
 117         uint8_t host_version_supported;
 118         struct hbm_version fw_max_version;
 119 } __packed;
 120 
 121 struct hbm_host_stop_request {
 122         uint8_t hbm_cmd;
 123         uint8_t reason;
 124         uint8_t reserved[2];
 125 } __packed;
 126 
 127 struct hbm_host_stop_response {
 128         uint8_t hbm_cmd;
 129         uint8_t reserved[3];
 130 } __packed;
 131 
 132 struct hbm_host_enum_request {
 133         uint8_t hbm_cmd;
 134         uint8_t reserved[3];
 135 } __packed;
 136 
 137 struct hbm_host_enum_response {
 138         uint8_t hbm_cmd;
 139         uint8_t reserved[3];
 140         uint8_t valid_addresses[32];
 141 } __packed;
 142 
 143 struct ishtp_client_properties {
 144         guid_t protocol_name;
 145         uint8_t protocol_version;
 146         uint8_t max_number_of_connections;
 147         uint8_t fixed_address;
 148         uint8_t single_recv_buf;
 149         uint32_t max_msg_length;
 150         uint8_t dma_hdr_len;
 151 #define ISHTP_CLIENT_DMA_ENABLED        0x80
 152         uint8_t reserved4;
 153         uint8_t reserved5;
 154         uint8_t reserved6;
 155 } __packed;
 156 
 157 struct hbm_props_request {
 158         uint8_t hbm_cmd;
 159         uint8_t address;
 160         uint8_t reserved[2];
 161 } __packed;
 162 
 163 struct hbm_props_response {
 164         uint8_t hbm_cmd;
 165         uint8_t address;
 166         uint8_t status;
 167         uint8_t reserved[1];
 168         struct ishtp_client_properties client_properties;
 169 } __packed;
 170 
 171 /**
 172  * struct hbm_client_connect_request - connect/disconnect request
 173  *
 174  * @hbm_cmd - bus message command header
 175  * @fw_addr - address of the fw client
 176  * @host_addr - address of the client in the driver
 177  * @reserved
 178  */
 179 struct hbm_client_connect_request {
 180         uint8_t hbm_cmd;
 181         uint8_t fw_addr;
 182         uint8_t host_addr;
 183         uint8_t reserved;
 184 } __packed;
 185 
 186 /**
 187  * struct hbm_client_connect_response - connect/disconnect response
 188  *
 189  * @hbm_cmd - bus message command header
 190  * @fw_addr - address of the fw client
 191  * @host_addr - address of the client in the driver
 192  * @status - status of the request
 193  */
 194 struct hbm_client_connect_response {
 195         uint8_t hbm_cmd;
 196         uint8_t fw_addr;
 197         uint8_t host_addr;
 198         uint8_t status;
 199 } __packed;
 200 
 201 
 202 #define ISHTP_FC_MESSAGE_RESERVED_LENGTH                5
 203 
 204 struct hbm_flow_control {
 205         uint8_t hbm_cmd;
 206         uint8_t fw_addr;
 207         uint8_t host_addr;
 208         uint8_t reserved[ISHTP_FC_MESSAGE_RESERVED_LENGTH];
 209 } __packed;
 210 
 211 struct dma_alloc_notify {
 212         uint8_t hbm;
 213         uint8_t status;
 214         uint8_t reserved[2];
 215         uint32_t buf_size;
 216         uint64_t buf_address;
 217         /* [...] May come more size/address pairs */
 218 } __packed;
 219 
 220 struct dma_xfer_hbm {
 221         uint8_t hbm;
 222         uint8_t fw_client_id;
 223         uint8_t host_client_id;
 224         uint8_t reserved;
 225         uint64_t msg_addr;
 226         uint32_t msg_length;
 227         uint32_t reserved2;
 228 } __packed;
 229 
 230 /* System state */
 231 #define ISHTP_SYSTEM_STATE_CLIENT_ADDR          13
 232 
 233 #define SYSTEM_STATE_SUBSCRIBE                  0x1
 234 #define SYSTEM_STATE_STATUS                     0x2
 235 #define SYSTEM_STATE_QUERY_SUBSCRIBERS          0x3
 236 #define SYSTEM_STATE_STATE_CHANGE_REQ           0x4
 237 /*indicates suspend and resume states*/
 238 #define SUSPEND_STATE_BIT                       (1<<1)
 239 
 240 struct ish_system_states_header {
 241         uint32_t cmd;
 242         uint32_t cmd_status;    /*responses will have this set*/
 243 } __packed;
 244 
 245 struct ish_system_states_subscribe {
 246         struct ish_system_states_header hdr;
 247         uint32_t states;
 248 } __packed;
 249 
 250 struct ish_system_states_status {
 251         struct ish_system_states_header hdr;
 252         uint32_t supported_states;
 253         uint32_t states_status;
 254 } __packed;
 255 
 256 struct ish_system_states_query_subscribers {
 257         struct ish_system_states_header hdr;
 258 } __packed;
 259 
 260 struct ish_system_states_state_change_req {
 261         struct ish_system_states_header hdr;
 262         uint32_t requested_states;
 263         uint32_t states_status;
 264 } __packed;
 265 
 266 /**
 267  * enum ishtp_hbm_state - host bus message protocol state
 268  *
 269  * @ISHTP_HBM_IDLE : protocol not started
 270  * @ISHTP_HBM_START : start request message was sent
 271  * @ISHTP_HBM_ENUM_CLIENTS : enumeration request was sent
 272  * @ISHTP_HBM_CLIENT_PROPERTIES : acquiring clients properties
 273  */
 274 enum ishtp_hbm_state {
 275         ISHTP_HBM_IDLE = 0,
 276         ISHTP_HBM_START,
 277         ISHTP_HBM_STARTED,
 278         ISHTP_HBM_ENUM_CLIENTS,
 279         ISHTP_HBM_CLIENT_PROPERTIES,
 280         ISHTP_HBM_WORKING,
 281         ISHTP_HBM_STOPPED,
 282 };
 283 
 284 static inline void ishtp_hbm_hdr(struct ishtp_msg_hdr *hdr, size_t length)
 285 {
 286         hdr->host_addr = 0;
 287         hdr->fw_addr = 0;
 288         hdr->length = length;
 289         hdr->msg_complete = 1;
 290         hdr->reserved = 0;
 291 }
 292 
 293 int ishtp_hbm_start_req(struct ishtp_device *dev);
 294 int ishtp_hbm_start_wait(struct ishtp_device *dev);
 295 int ishtp_hbm_cl_flow_control_req(struct ishtp_device *dev,
 296                                   struct ishtp_cl *cl);
 297 int ishtp_hbm_cl_disconnect_req(struct ishtp_device *dev, struct ishtp_cl *cl);
 298 int ishtp_hbm_cl_connect_req(struct ishtp_device *dev, struct ishtp_cl *cl);
 299 void ishtp_hbm_enum_clients_req(struct ishtp_device *dev);
 300 void bh_hbm_work_fn(struct work_struct *work);
 301 void recv_hbm(struct ishtp_device *dev, struct ishtp_msg_hdr *ishtp_hdr);
 302 void recv_fixed_cl_msg(struct ishtp_device *dev,
 303         struct ishtp_msg_hdr *ishtp_hdr);
 304 void ishtp_hbm_dispatch(struct ishtp_device *dev,
 305         struct ishtp_bus_message *hdr);
 306 
 307 void ishtp_query_subscribers(struct ishtp_device *dev);
 308 
 309 /* Exported I/F */
 310 void ishtp_send_suspend(struct ishtp_device *dev);
 311 void ishtp_send_resume(struct ishtp_device *dev);
 312 
 313 #endif /* _ISHTP_HBM_H_ */

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