Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v5.5-rc6 533 lines 13 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * Copyright (c) 2003-2018, Intel Corporation. All rights reserved 4 * Intel Management Engine Interface (Intel MEI) Linux driver 5 */ 6 7#ifndef _MEI_HW_TYPES_H_ 8#define _MEI_HW_TYPES_H_ 9 10#include <linux/uuid.h> 11 12/* 13 * Timeouts in Seconds 14 */ 15#define MEI_HW_READY_TIMEOUT 2 /* Timeout on ready message */ 16#define MEI_CONNECT_TIMEOUT 3 /* HPS: at least 2 seconds */ 17 18#define MEI_CL_CONNECT_TIMEOUT 15 /* HPS: Client Connect Timeout */ 19#define MEI_CLIENTS_INIT_TIMEOUT 15 /* HPS: Clients Enumeration Timeout */ 20 21#define MEI_PGI_TIMEOUT 1 /* PG Isolation time response 1 sec */ 22#define MEI_D0I3_TIMEOUT 5 /* D0i3 set/unset max response time */ 23#define MEI_HBM_TIMEOUT 1 /* 1 second */ 24 25/* 26 * MEI Version 27 */ 28#define HBM_MINOR_VERSION 1 29#define HBM_MAJOR_VERSION 2 30 31/* 32 * MEI version with PGI support 33 */ 34#define HBM_MINOR_VERSION_PGI 1 35#define HBM_MAJOR_VERSION_PGI 1 36 37/* 38 * MEI version with Dynamic clients support 39 */ 40#define HBM_MINOR_VERSION_DC 0 41#define HBM_MAJOR_VERSION_DC 2 42 43/* 44 * MEI version with immediate reply to enum request support 45 */ 46#define HBM_MINOR_VERSION_IE 0 47#define HBM_MAJOR_VERSION_IE 2 48 49/* 50 * MEI version with disconnect on connection timeout support 51 */ 52#define HBM_MINOR_VERSION_DOT 0 53#define HBM_MAJOR_VERSION_DOT 2 54 55/* 56 * MEI version with notification support 57 */ 58#define HBM_MINOR_VERSION_EV 0 59#define HBM_MAJOR_VERSION_EV 2 60 61/* 62 * MEI version with fixed address client support 63 */ 64#define HBM_MINOR_VERSION_FA 0 65#define HBM_MAJOR_VERSION_FA 2 66 67/* 68 * MEI version with OS ver message support 69 */ 70#define HBM_MINOR_VERSION_OS 0 71#define HBM_MAJOR_VERSION_OS 2 72 73/* 74 * MEI version with dma ring support 75 */ 76#define HBM_MINOR_VERSION_DR 1 77#define HBM_MAJOR_VERSION_DR 2 78 79/* Host bus message command opcode */ 80#define MEI_HBM_CMD_OP_MSK 0x7f 81/* Host bus message command RESPONSE */ 82#define MEI_HBM_CMD_RES_MSK 0x80 83 84/* 85 * MEI Bus Message Command IDs 86 */ 87#define HOST_START_REQ_CMD 0x01 88#define HOST_START_RES_CMD 0x81 89 90#define HOST_STOP_REQ_CMD 0x02 91#define HOST_STOP_RES_CMD 0x82 92 93#define ME_STOP_REQ_CMD 0x03 94 95#define HOST_ENUM_REQ_CMD 0x04 96#define HOST_ENUM_RES_CMD 0x84 97 98#define HOST_CLIENT_PROPERTIES_REQ_CMD 0x05 99#define HOST_CLIENT_PROPERTIES_RES_CMD 0x85 100 101#define CLIENT_CONNECT_REQ_CMD 0x06 102#define CLIENT_CONNECT_RES_CMD 0x86 103 104#define CLIENT_DISCONNECT_REQ_CMD 0x07 105#define CLIENT_DISCONNECT_RES_CMD 0x87 106 107#define MEI_FLOW_CONTROL_CMD 0x08 108 109#define MEI_PG_ISOLATION_ENTRY_REQ_CMD 0x0a 110#define MEI_PG_ISOLATION_ENTRY_RES_CMD 0x8a 111#define MEI_PG_ISOLATION_EXIT_REQ_CMD 0x0b 112#define MEI_PG_ISOLATION_EXIT_RES_CMD 0x8b 113 114#define MEI_HBM_ADD_CLIENT_REQ_CMD 0x0f 115#define MEI_HBM_ADD_CLIENT_RES_CMD 0x8f 116 117#define MEI_HBM_NOTIFY_REQ_CMD 0x10 118#define MEI_HBM_NOTIFY_RES_CMD 0x90 119#define MEI_HBM_NOTIFICATION_CMD 0x11 120 121#define MEI_HBM_DMA_SETUP_REQ_CMD 0x12 122#define MEI_HBM_DMA_SETUP_RES_CMD 0x92 123 124/* 125 * MEI Stop Reason 126 * used by hbm_host_stop_request.reason 127 */ 128enum mei_stop_reason_types { 129 DRIVER_STOP_REQUEST = 0x00, 130 DEVICE_D1_ENTRY = 0x01, 131 DEVICE_D2_ENTRY = 0x02, 132 DEVICE_D3_ENTRY = 0x03, 133 SYSTEM_S1_ENTRY = 0x04, 134 SYSTEM_S2_ENTRY = 0x05, 135 SYSTEM_S3_ENTRY = 0x06, 136 SYSTEM_S4_ENTRY = 0x07, 137 SYSTEM_S5_ENTRY = 0x08 138}; 139 140 141/** 142 * enum mei_hbm_status - mei host bus messages return values 143 * 144 * @MEI_HBMS_SUCCESS : status success 145 * @MEI_HBMS_CLIENT_NOT_FOUND : client not found 146 * @MEI_HBMS_ALREADY_EXISTS : connection already established 147 * @MEI_HBMS_REJECTED : connection is rejected 148 * @MEI_HBMS_INVALID_PARAMETER : invalid parameter 149 * @MEI_HBMS_NOT_ALLOWED : operation not allowed 150 * @MEI_HBMS_ALREADY_STARTED : system is already started 151 * @MEI_HBMS_NOT_STARTED : system not started 152 * 153 * @MEI_HBMS_MAX : sentinel 154 */ 155enum mei_hbm_status { 156 MEI_HBMS_SUCCESS = 0, 157 MEI_HBMS_CLIENT_NOT_FOUND = 1, 158 MEI_HBMS_ALREADY_EXISTS = 2, 159 MEI_HBMS_REJECTED = 3, 160 MEI_HBMS_INVALID_PARAMETER = 4, 161 MEI_HBMS_NOT_ALLOWED = 5, 162 MEI_HBMS_ALREADY_STARTED = 6, 163 MEI_HBMS_NOT_STARTED = 7, 164 165 MEI_HBMS_MAX 166}; 167 168 169/* 170 * Client Connect Status 171 * used by hbm_client_connect_response.status 172 */ 173enum mei_cl_connect_status { 174 MEI_CL_CONN_SUCCESS = MEI_HBMS_SUCCESS, 175 MEI_CL_CONN_NOT_FOUND = MEI_HBMS_CLIENT_NOT_FOUND, 176 MEI_CL_CONN_ALREADY_STARTED = MEI_HBMS_ALREADY_EXISTS, 177 MEI_CL_CONN_OUT_OF_RESOURCES = MEI_HBMS_REJECTED, 178 MEI_CL_CONN_MESSAGE_SMALL = MEI_HBMS_INVALID_PARAMETER, 179 MEI_CL_CONN_NOT_ALLOWED = MEI_HBMS_NOT_ALLOWED, 180}; 181 182/* 183 * Client Disconnect Status 184 */ 185enum mei_cl_disconnect_status { 186 MEI_CL_DISCONN_SUCCESS = MEI_HBMS_SUCCESS 187}; 188 189/** 190 * struct mei_msg_hdr - MEI BUS Interface Section 191 * 192 * @me_addr: device address 193 * @host_addr: host address 194 * @length: message length 195 * @reserved: reserved 196 * @dma_ring: message is on dma ring 197 * @internal: message is internal 198 * @msg_complete: last packet of the message 199 * @extension: extension of the header 200 */ 201struct mei_msg_hdr { 202 u32 me_addr:8; 203 u32 host_addr:8; 204 u32 length:9; 205 u32 reserved:4; 206 u32 dma_ring:1; 207 u32 internal:1; 208 u32 msg_complete:1; 209 u32 extension[0]; 210} __packed; 211 212#define MEI_MSG_HDR_MAX 2 213 214struct mei_bus_message { 215 u8 hbm_cmd; 216 u8 data[0]; 217} __packed; 218 219/** 220 * struct hbm_cl_cmd - client specific host bus command 221 * CONNECT, DISCONNECT, and FlOW CONTROL 222 * 223 * @hbm_cmd: bus message command header 224 * @me_addr: address of the client in ME 225 * @host_addr: address of the client in the driver 226 * @data: generic data 227 */ 228struct mei_hbm_cl_cmd { 229 u8 hbm_cmd; 230 u8 me_addr; 231 u8 host_addr; 232 u8 data; 233}; 234 235struct hbm_version { 236 u8 minor_version; 237 u8 major_version; 238} __packed; 239 240struct hbm_host_version_request { 241 u8 hbm_cmd; 242 u8 reserved; 243 struct hbm_version host_version; 244} __packed; 245 246struct hbm_host_version_response { 247 u8 hbm_cmd; 248 u8 host_version_supported; 249 struct hbm_version me_max_version; 250} __packed; 251 252struct hbm_host_stop_request { 253 u8 hbm_cmd; 254 u8 reason; 255 u8 reserved[2]; 256} __packed; 257 258struct hbm_host_stop_response { 259 u8 hbm_cmd; 260 u8 reserved[3]; 261} __packed; 262 263struct hbm_me_stop_request { 264 u8 hbm_cmd; 265 u8 reason; 266 u8 reserved[2]; 267} __packed; 268 269/** 270 * enum hbm_host_enum_flags - enumeration request flags (HBM version >= 2.0) 271 * 272 * @MEI_HBM_ENUM_F_ALLOW_ADD: allow dynamic clients add 273 * @MEI_HBM_ENUM_F_IMMEDIATE_ENUM: allow FW to send answer immediately 274 */ 275enum hbm_host_enum_flags { 276 MEI_HBM_ENUM_F_ALLOW_ADD = BIT(0), 277 MEI_HBM_ENUM_F_IMMEDIATE_ENUM = BIT(1), 278}; 279 280/** 281 * struct hbm_host_enum_request - enumeration request from host to fw 282 * 283 * @hbm_cmd : bus message command header 284 * @flags : request flags 285 * @reserved: reserved 286 */ 287struct hbm_host_enum_request { 288 u8 hbm_cmd; 289 u8 flags; 290 u8 reserved[2]; 291} __packed; 292 293struct hbm_host_enum_response { 294 u8 hbm_cmd; 295 u8 reserved[3]; 296 u8 valid_addresses[32]; 297} __packed; 298 299struct mei_client_properties { 300 uuid_le protocol_name; 301 u8 protocol_version; 302 u8 max_number_of_connections; 303 u8 fixed_address; 304 u8 single_recv_buf:1; 305 u8 reserved:7; 306 u32 max_msg_length; 307} __packed; 308 309struct hbm_props_request { 310 u8 hbm_cmd; 311 u8 me_addr; 312 u8 reserved[2]; 313} __packed; 314 315struct hbm_props_response { 316 u8 hbm_cmd; 317 u8 me_addr; 318 u8 status; 319 u8 reserved[1]; 320 struct mei_client_properties client_properties; 321} __packed; 322 323/** 324 * struct hbm_add_client_request - request to add a client 325 * might be sent by fw after enumeration has already completed 326 * 327 * @hbm_cmd: bus message command header 328 * @me_addr: address of the client in ME 329 * @reserved: reserved 330 * @client_properties: client properties 331 */ 332struct hbm_add_client_request { 333 u8 hbm_cmd; 334 u8 me_addr; 335 u8 reserved[2]; 336 struct mei_client_properties client_properties; 337} __packed; 338 339/** 340 * struct hbm_add_client_response - response to add a client 341 * sent by the host to report client addition status to fw 342 * 343 * @hbm_cmd: bus message command header 344 * @me_addr: address of the client in ME 345 * @status: if HBMS_SUCCESS then the client can now accept connections. 346 * @reserved: reserved 347 */ 348struct hbm_add_client_response { 349 u8 hbm_cmd; 350 u8 me_addr; 351 u8 status; 352 u8 reserved[1]; 353} __packed; 354 355/** 356 * struct hbm_power_gate - power gate request/response 357 * 358 * @hbm_cmd: bus message command header 359 * @reserved: reserved 360 */ 361struct hbm_power_gate { 362 u8 hbm_cmd; 363 u8 reserved[3]; 364} __packed; 365 366/** 367 * struct hbm_client_connect_request - connect/disconnect request 368 * 369 * @hbm_cmd: bus message command header 370 * @me_addr: address of the client in ME 371 * @host_addr: address of the client in the driver 372 * @reserved: reserved 373 */ 374struct hbm_client_connect_request { 375 u8 hbm_cmd; 376 u8 me_addr; 377 u8 host_addr; 378 u8 reserved; 379} __packed; 380 381/** 382 * struct hbm_client_connect_response - connect/disconnect response 383 * 384 * @hbm_cmd: bus message command header 385 * @me_addr: address of the client in ME 386 * @host_addr: address of the client in the driver 387 * @status: status of the request 388 */ 389struct hbm_client_connect_response { 390 u8 hbm_cmd; 391 u8 me_addr; 392 u8 host_addr; 393 u8 status; 394} __packed; 395 396 397#define MEI_FC_MESSAGE_RESERVED_LENGTH 5 398 399struct hbm_flow_control { 400 u8 hbm_cmd; 401 u8 me_addr; 402 u8 host_addr; 403 u8 reserved[MEI_FC_MESSAGE_RESERVED_LENGTH]; 404} __packed; 405 406#define MEI_HBM_NOTIFICATION_START 1 407#define MEI_HBM_NOTIFICATION_STOP 0 408/** 409 * struct hbm_notification_request - start/stop notification request 410 * 411 * @hbm_cmd: bus message command header 412 * @me_addr: address of the client in ME 413 * @host_addr: address of the client in the driver 414 * @start: start = 1 or stop = 0 asynchronous notifications 415 */ 416struct hbm_notification_request { 417 u8 hbm_cmd; 418 u8 me_addr; 419 u8 host_addr; 420 u8 start; 421} __packed; 422 423/** 424 * struct hbm_notification_response - start/stop notification response 425 * 426 * @hbm_cmd: bus message command header 427 * @me_addr: address of the client in ME 428 * @host_addr: - address of the client in the driver 429 * @status: (mei_hbm_status) response status for the request 430 * - MEI_HBMS_SUCCESS: successful stop/start 431 * - MEI_HBMS_CLIENT_NOT_FOUND: if the connection could not be found. 432 * - MEI_HBMS_ALREADY_STARTED: for start requests for a previously 433 * started notification. 434 * - MEI_HBMS_NOT_STARTED: for stop request for a connected client for whom 435 * asynchronous notifications are currently disabled. 436 * 437 * @start: start = 1 or stop = 0 asynchronous notifications 438 * @reserved: reserved 439 */ 440struct hbm_notification_response { 441 u8 hbm_cmd; 442 u8 me_addr; 443 u8 host_addr; 444 u8 status; 445 u8 start; 446 u8 reserved[3]; 447} __packed; 448 449/** 450 * struct hbm_notification - notification event 451 * 452 * @hbm_cmd: bus message command header 453 * @me_addr: address of the client in ME 454 * @host_addr: address of the client in the driver 455 * @reserved: reserved for alignment 456 */ 457struct hbm_notification { 458 u8 hbm_cmd; 459 u8 me_addr; 460 u8 host_addr; 461 u8 reserved[1]; 462} __packed; 463 464/** 465 * struct hbm_dma_mem_dscr - dma ring 466 * 467 * @addr_hi: the high 32bits of 64 bit address 468 * @addr_lo: the low 32bits of 64 bit address 469 * @size : size in bytes (must be power of 2) 470 */ 471struct hbm_dma_mem_dscr { 472 u32 addr_hi; 473 u32 addr_lo; 474 u32 size; 475} __packed; 476 477enum { 478 DMA_DSCR_HOST = 0, 479 DMA_DSCR_DEVICE = 1, 480 DMA_DSCR_CTRL = 2, 481 DMA_DSCR_NUM, 482}; 483 484/** 485 * struct hbm_dma_setup_request - dma setup request 486 * 487 * @hbm_cmd: bus message command header 488 * @reserved: reserved for alignment 489 * @dma_dscr: dma descriptor for HOST, DEVICE, and CTRL 490 */ 491struct hbm_dma_setup_request { 492 u8 hbm_cmd; 493 u8 reserved[3]; 494 struct hbm_dma_mem_dscr dma_dscr[DMA_DSCR_NUM]; 495} __packed; 496 497/** 498 * struct hbm_dma_setup_response - dma setup response 499 * 500 * @hbm_cmd: bus message command header 501 * @status: 0 on success; otherwise DMA setup failed. 502 * @reserved: reserved for alignment 503 */ 504struct hbm_dma_setup_response { 505 u8 hbm_cmd; 506 u8 status; 507 u8 reserved[2]; 508} __packed; 509 510/** 511 * struct mei_dma_ring_ctrl - dma ring control block 512 * 513 * @hbuf_wr_idx: host circular buffer write index in slots 514 * @reserved1: reserved for alignment 515 * @hbuf_rd_idx: host circular buffer read index in slots 516 * @reserved2: reserved for alignment 517 * @dbuf_wr_idx: device circular buffer write index in slots 518 * @reserved3: reserved for alignment 519 * @dbuf_rd_idx: device circular buffer read index in slots 520 * @reserved4: reserved for alignment 521 */ 522struct hbm_dma_ring_ctrl { 523 u32 hbuf_wr_idx; 524 u32 reserved1; 525 u32 hbuf_rd_idx; 526 u32 reserved2; 527 u32 dbuf_wr_idx; 528 u32 reserved3; 529 u32 dbuf_rd_idx; 530 u32 reserved4; 531} __packed; 532 533#endif