835 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * Copyright (c) 2003-2022, Intel Corporation. All rights reserved4 * Intel Management Engine Interface (Intel MEI) Linux driver5 */6 7#ifndef _MEI_HW_TYPES_H_8#define _MEI_HW_TYPES_H_9 10#include <linux/mei.h>11 12/*13 * Timeouts in Seconds14 */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_CL_CONNECT_TIMEOUT_SLOW 30 /* HPS: Client Connect Timeout, slow FW */20#define MEI_CLIENTS_INIT_TIMEOUT 15 /* HPS: Clients Enumeration Timeout */21 22#define MEI_PGI_TIMEOUT 1 /* PG Isolation time response 1 sec */23#define MEI_D0I3_TIMEOUT 5 /* D0i3 set/unset max response time */24#define MEI_HBM_TIMEOUT 1 /* 1 second */25#define MEI_HBM_TIMEOUT_SLOW 5 /* 5 second, slow FW */26 27#define MKHI_RCV_TIMEOUT 500 /* receive timeout in msec */28#define MKHI_RCV_TIMEOUT_SLOW 10000 /* receive timeout in msec, slow FW */29 30/*31 * FW page size for DMA allocations32 */33#define MEI_FW_PAGE_SIZE 4096UL34 35/*36 * MEI Version37 */38#define HBM_MINOR_VERSION 239#define HBM_MAJOR_VERSION 240 41/*42 * MEI version with PGI support43 */44#define HBM_MINOR_VERSION_PGI 145#define HBM_MAJOR_VERSION_PGI 146 47/*48 * MEI version with Dynamic clients support49 */50#define HBM_MINOR_VERSION_DC 051#define HBM_MAJOR_VERSION_DC 252 53/*54 * MEI version with immediate reply to enum request support55 */56#define HBM_MINOR_VERSION_IE 057#define HBM_MAJOR_VERSION_IE 258 59/*60 * MEI version with disconnect on connection timeout support61 */62#define HBM_MINOR_VERSION_DOT 063#define HBM_MAJOR_VERSION_DOT 264 65/*66 * MEI version with notification support67 */68#define HBM_MINOR_VERSION_EV 069#define HBM_MAJOR_VERSION_EV 270 71/*72 * MEI version with fixed address client support73 */74#define HBM_MINOR_VERSION_FA 075#define HBM_MAJOR_VERSION_FA 276 77/*78 * MEI version with OS ver message support79 */80#define HBM_MINOR_VERSION_OS 081#define HBM_MAJOR_VERSION_OS 282 83/*84 * MEI version with dma ring support85 */86#define HBM_MINOR_VERSION_DR 187#define HBM_MAJOR_VERSION_DR 288 89/*90 * MEI version with vm tag support91 */92#define HBM_MINOR_VERSION_VT 293#define HBM_MAJOR_VERSION_VT 294 95/*96 * MEI version with GSC support97 */98#define HBM_MINOR_VERSION_GSC 299#define HBM_MAJOR_VERSION_GSC 2100 101/*102 * MEI version with capabilities message support103 */104#define HBM_MINOR_VERSION_CAP 2105#define HBM_MAJOR_VERSION_CAP 2106 107/*108 * MEI version with client DMA support109 */110#define HBM_MINOR_VERSION_CD 2111#define HBM_MAJOR_VERSION_CD 2112 113/* Host bus message command opcode */114#define MEI_HBM_CMD_OP_MSK 0x7f115/* Host bus message command RESPONSE */116#define MEI_HBM_CMD_RES_MSK 0x80117 118/*119 * MEI Bus Message Command IDs120 */121#define HOST_START_REQ_CMD 0x01122#define HOST_START_RES_CMD 0x81123 124#define HOST_STOP_REQ_CMD 0x02125#define HOST_STOP_RES_CMD 0x82126 127#define ME_STOP_REQ_CMD 0x03128 129#define HOST_ENUM_REQ_CMD 0x04130#define HOST_ENUM_RES_CMD 0x84131 132#define HOST_CLIENT_PROPERTIES_REQ_CMD 0x05133#define HOST_CLIENT_PROPERTIES_RES_CMD 0x85134 135#define CLIENT_CONNECT_REQ_CMD 0x06136#define CLIENT_CONNECT_RES_CMD 0x86137 138#define CLIENT_DISCONNECT_REQ_CMD 0x07139#define CLIENT_DISCONNECT_RES_CMD 0x87140 141#define MEI_FLOW_CONTROL_CMD 0x08142 143#define MEI_PG_ISOLATION_ENTRY_REQ_CMD 0x0a144#define MEI_PG_ISOLATION_ENTRY_RES_CMD 0x8a145#define MEI_PG_ISOLATION_EXIT_REQ_CMD 0x0b146#define MEI_PG_ISOLATION_EXIT_RES_CMD 0x8b147 148#define MEI_HBM_ADD_CLIENT_REQ_CMD 0x0f149#define MEI_HBM_ADD_CLIENT_RES_CMD 0x8f150 151#define MEI_HBM_NOTIFY_REQ_CMD 0x10152#define MEI_HBM_NOTIFY_RES_CMD 0x90153#define MEI_HBM_NOTIFICATION_CMD 0x11154 155#define MEI_HBM_DMA_SETUP_REQ_CMD 0x12156#define MEI_HBM_DMA_SETUP_RES_CMD 0x92157 158#define MEI_HBM_CAPABILITIES_REQ_CMD 0x13159#define MEI_HBM_CAPABILITIES_RES_CMD 0x93160 161#define MEI_HBM_CLIENT_DMA_MAP_REQ_CMD 0x14162#define MEI_HBM_CLIENT_DMA_MAP_RES_CMD 0x94163 164#define MEI_HBM_CLIENT_DMA_UNMAP_REQ_CMD 0x15165#define MEI_HBM_CLIENT_DMA_UNMAP_RES_CMD 0x95166 167/*168 * MEI Stop Reason169 * used by hbm_host_stop_request.reason170 */171enum mei_stop_reason_types {172 DRIVER_STOP_REQUEST = 0x00,173 DEVICE_D1_ENTRY = 0x01,174 DEVICE_D2_ENTRY = 0x02,175 DEVICE_D3_ENTRY = 0x03,176 SYSTEM_S1_ENTRY = 0x04,177 SYSTEM_S2_ENTRY = 0x05,178 SYSTEM_S3_ENTRY = 0x06,179 SYSTEM_S4_ENTRY = 0x07,180 SYSTEM_S5_ENTRY = 0x08181};182 183 184/**185 * enum mei_hbm_status - mei host bus messages return values186 *187 * @MEI_HBMS_SUCCESS : status success188 * @MEI_HBMS_CLIENT_NOT_FOUND : client not found189 * @MEI_HBMS_ALREADY_EXISTS : connection already established190 * @MEI_HBMS_REJECTED : connection is rejected191 * @MEI_HBMS_INVALID_PARAMETER : invalid parameter192 * @MEI_HBMS_NOT_ALLOWED : operation not allowed193 * @MEI_HBMS_ALREADY_STARTED : system is already started194 * @MEI_HBMS_NOT_STARTED : system not started195 *196 * @MEI_HBMS_MAX : sentinel197 */198enum mei_hbm_status {199 MEI_HBMS_SUCCESS = 0,200 MEI_HBMS_CLIENT_NOT_FOUND = 1,201 MEI_HBMS_ALREADY_EXISTS = 2,202 MEI_HBMS_REJECTED = 3,203 MEI_HBMS_INVALID_PARAMETER = 4,204 MEI_HBMS_NOT_ALLOWED = 5,205 MEI_HBMS_ALREADY_STARTED = 6,206 MEI_HBMS_NOT_STARTED = 7,207 208 MEI_HBMS_MAX209};210 211 212/*213 * Client Connect Status214 * used by hbm_client_connect_response.status215 */216enum mei_cl_connect_status {217 MEI_CL_CONN_SUCCESS = MEI_HBMS_SUCCESS,218 MEI_CL_CONN_NOT_FOUND = MEI_HBMS_CLIENT_NOT_FOUND,219 MEI_CL_CONN_ALREADY_STARTED = MEI_HBMS_ALREADY_EXISTS,220 MEI_CL_CONN_OUT_OF_RESOURCES = MEI_HBMS_REJECTED,221 MEI_CL_CONN_MESSAGE_SMALL = MEI_HBMS_INVALID_PARAMETER,222 MEI_CL_CONN_NOT_ALLOWED = MEI_HBMS_NOT_ALLOWED,223};224 225/*226 * Client Disconnect Status227 */228enum mei_cl_disconnect_status {229 MEI_CL_DISCONN_SUCCESS = MEI_HBMS_SUCCESS230};231 232/**233 * enum mei_ext_hdr_type - extended header type used in234 * extended header TLV235 *236 * @MEI_EXT_HDR_NONE: sentinel237 * @MEI_EXT_HDR_VTAG: vtag header238 * @MEI_EXT_HDR_GSC: gsc header239 */240enum mei_ext_hdr_type {241 MEI_EXT_HDR_NONE = 0,242 MEI_EXT_HDR_VTAG = 1,243 MEI_EXT_HDR_GSC = 2,244};245 246/**247 * struct mei_ext_hdr - extend header descriptor (TLV)248 * @type: enum mei_ext_hdr_type249 * @length: length excluding descriptor250 */251struct mei_ext_hdr {252 u8 type;253 u8 length;254} __packed;255 256/**257 * struct mei_ext_meta_hdr - extend header meta data258 * @count: number of headers259 * @size: total size of the extended header list excluding meta header260 * @reserved: reserved261 * @hdrs: extended headers TLV list262 */263struct mei_ext_meta_hdr {264 u8 count;265 u8 size;266 u8 reserved[2];267 u8 hdrs[];268} __packed;269 270/**271 * struct mei_ext_hdr_vtag - extend header for vtag272 *273 * @hdr: standard extend header274 * @vtag: virtual tag275 * @reserved: reserved276 */277struct mei_ext_hdr_vtag {278 struct mei_ext_hdr hdr;279 u8 vtag;280 u8 reserved;281} __packed;282 283/*284 * Extended header iterator functions285 */286/**287 * mei_ext_begin - extended header iterator begin288 *289 * @meta: meta header of the extended header list290 *291 * Return: The first extended header292 */293static inline struct mei_ext_hdr *mei_ext_begin(struct mei_ext_meta_hdr *meta)294{295 return (struct mei_ext_hdr *)meta->hdrs;296}297 298/**299 * mei_ext_last - check if the ext is the last one in the TLV list300 *301 * @meta: meta header of the extended header list302 * @ext: a meta header on the list303 *304 * Return: true if ext is the last header on the list305 */306static inline bool mei_ext_last(struct mei_ext_meta_hdr *meta,307 struct mei_ext_hdr *ext)308{309 return (u8 *)ext >= (u8 *)meta + sizeof(*meta) + (meta->size * 4);310}311 312struct mei_gsc_sgl {313 u32 low;314 u32 high;315 u32 length;316} __packed;317 318#define GSC_HECI_MSG_KERNEL 0319#define GSC_HECI_MSG_USER 1320 321#define GSC_ADDRESS_TYPE_GTT 0322#define GSC_ADDRESS_TYPE_PPGTT 1323#define GSC_ADDRESS_TYPE_PHYSICAL_CONTINUOUS 2 /* max of 64K */324#define GSC_ADDRESS_TYPE_PHYSICAL_SGL 3325 326/**327 * struct mei_ext_hdr_gsc_h2f - extended header: gsc host to firmware interface328 *329 * @hdr: extended header330 * @client_id: GSC_HECI_MSG_KERNEL or GSC_HECI_MSG_USER331 * @addr_type: GSC_ADDRESS_TYPE_{GTT, PPGTT, PHYSICAL_CONTINUOUS, PHYSICAL_SGL}332 * @fence_id: synchronization marker333 * @input_address_count: number of input sgl buffers334 * @output_address_count: number of output sgl buffers335 * @reserved: reserved336 * @sgl: sg list337 */338struct mei_ext_hdr_gsc_h2f {339 struct mei_ext_hdr hdr;340 u8 client_id;341 u8 addr_type;342 u32 fence_id;343 u8 input_address_count;344 u8 output_address_count;345 u8 reserved[2];346 struct mei_gsc_sgl sgl[];347} __packed;348 349/**350 * struct mei_ext_hdr_gsc_f2h - gsc firmware to host interface351 *352 * @hdr: extended header353 * @client_id: GSC_HECI_MSG_KERNEL or GSC_HECI_MSG_USER354 * @reserved: reserved355 * @fence_id: synchronization marker356 * @written: number of bytes written to firmware357 */358struct mei_ext_hdr_gsc_f2h {359 struct mei_ext_hdr hdr;360 u8 client_id;361 u8 reserved;362 u32 fence_id;363 u32 written;364} __packed;365 366/**367 * mei_ext_next - following extended header on the TLV list368 *369 * @ext: current extend header370 *371 * Context: The function does not check for the overflows,372 * one should call mei_ext_last before.373 *374 * Return: The following extend header after @ext375 */376static inline struct mei_ext_hdr *mei_ext_next(struct mei_ext_hdr *ext)377{378 return (struct mei_ext_hdr *)((u8 *)ext + (ext->length * 4));379}380 381/**382 * mei_ext_hdr_len - get ext header length in bytes383 *384 * @ext: extend header385 *386 * Return: extend header length in bytes387 */388static inline u32 mei_ext_hdr_len(const struct mei_ext_hdr *ext)389{390 if (!ext)391 return 0;392 393 return ext->length * sizeof(u32);394}395 396/**397 * struct mei_msg_hdr - MEI BUS Interface Section398 *399 * @me_addr: device address400 * @host_addr: host address401 * @length: message length402 * @reserved: reserved403 * @extended: message has extended header404 * @dma_ring: message is on dma ring405 * @internal: message is internal406 * @msg_complete: last packet of the message407 * @extension: extension of the header408 */409struct mei_msg_hdr {410 u32 me_addr:8;411 u32 host_addr:8;412 u32 length:9;413 u32 reserved:3;414 u32 extended:1;415 u32 dma_ring:1;416 u32 internal:1;417 u32 msg_complete:1;418 u32 extension[];419} __packed;420 421/* The length is up to 9 bits */422#define MEI_MSG_MAX_LEN_MASK GENMASK(9, 0)423 424struct mei_bus_message {425 u8 hbm_cmd;426 u8 data[];427} __packed;428 429/**430 * struct mei_hbm_cl_cmd - client specific host bus command431 * CONNECT, DISCONNECT, and FlOW CONTROL432 *433 * @hbm_cmd: bus message command header434 * @me_addr: address of the client in ME435 * @host_addr: address of the client in the driver436 * @data: generic data437 */438struct mei_hbm_cl_cmd {439 u8 hbm_cmd;440 u8 me_addr;441 u8 host_addr;442 u8 data;443};444 445struct hbm_version {446 u8 minor_version;447 u8 major_version;448} __packed;449 450struct hbm_host_version_request {451 u8 hbm_cmd;452 u8 reserved;453 struct hbm_version host_version;454} __packed;455 456struct hbm_host_version_response {457 u8 hbm_cmd;458 u8 host_version_supported;459 struct hbm_version me_max_version;460} __packed;461 462struct hbm_host_stop_request {463 u8 hbm_cmd;464 u8 reason;465 u8 reserved[2];466} __packed;467 468struct hbm_host_stop_response {469 u8 hbm_cmd;470 u8 reserved[3];471} __packed;472 473struct hbm_me_stop_request {474 u8 hbm_cmd;475 u8 reason;476 u8 reserved[2];477} __packed;478 479/**480 * enum hbm_host_enum_flags - enumeration request flags (HBM version >= 2.0)481 *482 * @MEI_HBM_ENUM_F_ALLOW_ADD: allow dynamic clients add483 * @MEI_HBM_ENUM_F_IMMEDIATE_ENUM: allow FW to send answer immediately484 */485enum hbm_host_enum_flags {486 MEI_HBM_ENUM_F_ALLOW_ADD = BIT(0),487 MEI_HBM_ENUM_F_IMMEDIATE_ENUM = BIT(1),488};489 490/**491 * struct hbm_host_enum_request - enumeration request from host to fw492 *493 * @hbm_cmd : bus message command header494 * @flags : request flags495 * @reserved: reserved496 */497struct hbm_host_enum_request {498 u8 hbm_cmd;499 u8 flags;500 u8 reserved[2];501} __packed;502 503struct hbm_host_enum_response {504 u8 hbm_cmd;505 u8 reserved[3];506 u8 valid_addresses[32];507} __packed;508 509/**510 * struct mei_client_properties - mei client properties511 *512 * @protocol_name: guid of the client513 * @protocol_version: client protocol version514 * @max_number_of_connections: number of possible connections.515 * @fixed_address: fixed me address (0 if the client is dynamic)516 * @single_recv_buf: 1 if all connections share a single receive buffer.517 * @vt_supported: the client support vtag518 * @reserved: reserved519 * @max_msg_length: MTU of the client520 */521struct mei_client_properties {522 uuid_le protocol_name;523 u8 protocol_version;524 u8 max_number_of_connections;525 u8 fixed_address;526 u8 single_recv_buf:1;527 u8 vt_supported:1;528 u8 reserved:6;529 u32 max_msg_length;530} __packed;531 532struct hbm_props_request {533 u8 hbm_cmd;534 u8 me_addr;535 u8 reserved[2];536} __packed;537 538struct hbm_props_response {539 u8 hbm_cmd;540 u8 me_addr;541 u8 status;542 u8 reserved;543 struct mei_client_properties client_properties;544} __packed;545 546/**547 * struct hbm_add_client_request - request to add a client548 * might be sent by fw after enumeration has already completed549 *550 * @hbm_cmd: bus message command header551 * @me_addr: address of the client in ME552 * @reserved: reserved553 * @client_properties: client properties554 */555struct hbm_add_client_request {556 u8 hbm_cmd;557 u8 me_addr;558 u8 reserved[2];559 struct mei_client_properties client_properties;560} __packed;561 562/**563 * struct hbm_add_client_response - response to add a client564 * sent by the host to report client addition status to fw565 *566 * @hbm_cmd: bus message command header567 * @me_addr: address of the client in ME568 * @status: if HBMS_SUCCESS then the client can now accept connections.569 * @reserved: reserved570 */571struct hbm_add_client_response {572 u8 hbm_cmd;573 u8 me_addr;574 u8 status;575 u8 reserved;576} __packed;577 578/**579 * struct hbm_power_gate - power gate request/response580 *581 * @hbm_cmd: bus message command header582 * @reserved: reserved583 */584struct hbm_power_gate {585 u8 hbm_cmd;586 u8 reserved[3];587} __packed;588 589/**590 * struct hbm_client_connect_request - connect/disconnect request591 *592 * @hbm_cmd: bus message command header593 * @me_addr: address of the client in ME594 * @host_addr: address of the client in the driver595 * @reserved: reserved596 */597struct hbm_client_connect_request {598 u8 hbm_cmd;599 u8 me_addr;600 u8 host_addr;601 u8 reserved;602} __packed;603 604/**605 * struct hbm_client_connect_response - connect/disconnect response606 *607 * @hbm_cmd: bus message command header608 * @me_addr: address of the client in ME609 * @host_addr: address of the client in the driver610 * @status: status of the request611 */612struct hbm_client_connect_response {613 u8 hbm_cmd;614 u8 me_addr;615 u8 host_addr;616 u8 status;617} __packed;618 619 620#define MEI_FC_MESSAGE_RESERVED_LENGTH 5621 622struct hbm_flow_control {623 u8 hbm_cmd;624 u8 me_addr;625 u8 host_addr;626 u8 reserved[MEI_FC_MESSAGE_RESERVED_LENGTH];627} __packed;628 629#define MEI_HBM_NOTIFICATION_START 1630#define MEI_HBM_NOTIFICATION_STOP 0631/**632 * struct hbm_notification_request - start/stop notification request633 *634 * @hbm_cmd: bus message command header635 * @me_addr: address of the client in ME636 * @host_addr: address of the client in the driver637 * @start: start = 1 or stop = 0 asynchronous notifications638 */639struct hbm_notification_request {640 u8 hbm_cmd;641 u8 me_addr;642 u8 host_addr;643 u8 start;644} __packed;645 646/**647 * struct hbm_notification_response - start/stop notification response648 *649 * @hbm_cmd: bus message command header650 * @me_addr: address of the client in ME651 * @host_addr: - address of the client in the driver652 * @status: (mei_hbm_status) response status for the request653 * - MEI_HBMS_SUCCESS: successful stop/start654 * - MEI_HBMS_CLIENT_NOT_FOUND: if the connection could not be found.655 * - MEI_HBMS_ALREADY_STARTED: for start requests for a previously656 * started notification.657 * - MEI_HBMS_NOT_STARTED: for stop request for a connected client for whom658 * asynchronous notifications are currently disabled.659 *660 * @start: start = 1 or stop = 0 asynchronous notifications661 * @reserved: reserved662 */663struct hbm_notification_response {664 u8 hbm_cmd;665 u8 me_addr;666 u8 host_addr;667 u8 status;668 u8 start;669 u8 reserved[3];670} __packed;671 672/**673 * struct hbm_notification - notification event674 *675 * @hbm_cmd: bus message command header676 * @me_addr: address of the client in ME677 * @host_addr: address of the client in the driver678 * @reserved: reserved for alignment679 */680struct hbm_notification {681 u8 hbm_cmd;682 u8 me_addr;683 u8 host_addr;684 u8 reserved;685} __packed;686 687/**688 * struct hbm_dma_mem_dscr - dma ring689 *690 * @addr_hi: the high 32bits of 64 bit address691 * @addr_lo: the low 32bits of 64 bit address692 * @size : size in bytes (must be power of 2)693 */694struct hbm_dma_mem_dscr {695 u32 addr_hi;696 u32 addr_lo;697 u32 size;698} __packed;699 700enum {701 DMA_DSCR_HOST = 0,702 DMA_DSCR_DEVICE = 1,703 DMA_DSCR_CTRL = 2,704 DMA_DSCR_NUM,705};706 707/**708 * struct hbm_dma_setup_request - dma setup request709 *710 * @hbm_cmd: bus message command header711 * @reserved: reserved for alignment712 * @dma_dscr: dma descriptor for HOST, DEVICE, and CTRL713 */714struct hbm_dma_setup_request {715 u8 hbm_cmd;716 u8 reserved[3];717 struct hbm_dma_mem_dscr dma_dscr[DMA_DSCR_NUM];718} __packed;719 720/**721 * struct hbm_dma_setup_response - dma setup response722 *723 * @hbm_cmd: bus message command header724 * @status: 0 on success; otherwise DMA setup failed.725 * @reserved: reserved for alignment726 */727struct hbm_dma_setup_response {728 u8 hbm_cmd;729 u8 status;730 u8 reserved[2];731} __packed;732 733/**734 * struct hbm_dma_ring_ctrl - dma ring control block735 *736 * @hbuf_wr_idx: host circular buffer write index in slots737 * @reserved1: reserved for alignment738 * @hbuf_rd_idx: host circular buffer read index in slots739 * @reserved2: reserved for alignment740 * @dbuf_wr_idx: device circular buffer write index in slots741 * @reserved3: reserved for alignment742 * @dbuf_rd_idx: device circular buffer read index in slots743 * @reserved4: reserved for alignment744 */745struct hbm_dma_ring_ctrl {746 u32 hbuf_wr_idx;747 u32 reserved1;748 u32 hbuf_rd_idx;749 u32 reserved2;750 u32 dbuf_wr_idx;751 u32 reserved3;752 u32 dbuf_rd_idx;753 u32 reserved4;754} __packed;755 756/* virtual tag supported */757#define HBM_CAP_VT BIT(0)758 759/* gsc extended header support */760#define HBM_CAP_GSC BIT(1)761 762/* client dma supported */763#define HBM_CAP_CD BIT(2)764 765/**766 * struct hbm_capability_request - capability request from host to fw767 *768 * @hbm_cmd : bus message command header769 * @capability_requested: bitmask of capabilities requested by host770 */771struct hbm_capability_request {772 u8 hbm_cmd;773 u8 capability_requested[3];774} __packed;775 776/**777 * struct hbm_capability_response - capability response from fw to host778 *779 * @hbm_cmd : bus message command header780 * @capability_granted: bitmask of capabilities granted by FW781 */782struct hbm_capability_response {783 u8 hbm_cmd;784 u8 capability_granted[3];785} __packed;786 787/**788 * struct hbm_client_dma_map_request - client dma map request from host to fw789 *790 * @hbm_cmd: bus message command header791 * @client_buffer_id: client buffer id792 * @reserved: reserved793 * @address_lsb: DMA address LSB794 * @address_msb: DMA address MSB795 * @size: DMA size796 */797struct hbm_client_dma_map_request {798 u8 hbm_cmd;799 u8 client_buffer_id;800 u8 reserved[2];801 u32 address_lsb;802 u32 address_msb;803 u32 size;804} __packed;805 806/**807 * struct hbm_client_dma_unmap_request - client dma unmap request808 * from the host to the firmware809 *810 * @hbm_cmd: bus message command header811 * @status: unmap status812 * @client_buffer_id: client buffer id813 * @reserved: reserved814 */815struct hbm_client_dma_unmap_request {816 u8 hbm_cmd;817 u8 status;818 u8 client_buffer_id;819 u8 reserved;820} __packed;821 822/**823 * struct hbm_client_dma_response - client dma unmap response824 * from the firmware to the host825 *826 * @hbm_cmd: bus message command header827 * @status: command status828 */829struct hbm_client_dma_response {830 u8 hbm_cmd;831 u8 status;832} __packed;833 834#endif835