1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright (c) 2003-2020, 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 * FW page size for DMA allocations 27 */ 28 #define MEI_FW_PAGE_SIZE 4096UL 29 30 /* 31 * MEI Version 32 */ 33 #define HBM_MINOR_VERSION 2 34 #define HBM_MAJOR_VERSION 2 35 36 /* 37 * MEI version with PGI support 38 */ 39 #define HBM_MINOR_VERSION_PGI 1 40 #define HBM_MAJOR_VERSION_PGI 1 41 42 /* 43 * MEI version with Dynamic clients support 44 */ 45 #define HBM_MINOR_VERSION_DC 0 46 #define HBM_MAJOR_VERSION_DC 2 47 48 /* 49 * MEI version with immediate reply to enum request support 50 */ 51 #define HBM_MINOR_VERSION_IE 0 52 #define HBM_MAJOR_VERSION_IE 2 53 54 /* 55 * MEI version with disconnect on connection timeout support 56 */ 57 #define HBM_MINOR_VERSION_DOT 0 58 #define HBM_MAJOR_VERSION_DOT 2 59 60 /* 61 * MEI version with notification support 62 */ 63 #define HBM_MINOR_VERSION_EV 0 64 #define HBM_MAJOR_VERSION_EV 2 65 66 /* 67 * MEI version with fixed address client support 68 */ 69 #define HBM_MINOR_VERSION_FA 0 70 #define HBM_MAJOR_VERSION_FA 2 71 72 /* 73 * MEI version with OS ver message support 74 */ 75 #define HBM_MINOR_VERSION_OS 0 76 #define HBM_MAJOR_VERSION_OS 2 77 78 /* 79 * MEI version with dma ring support 80 */ 81 #define HBM_MINOR_VERSION_DR 1 82 #define HBM_MAJOR_VERSION_DR 2 83 84 /* 85 * MEI version with vm tag support 86 */ 87 #define HBM_MINOR_VERSION_VT 2 88 #define HBM_MAJOR_VERSION_VT 2 89 90 /* 91 * MEI version with capabilities message support 92 */ 93 #define HBM_MINOR_VERSION_CAP 2 94 #define HBM_MAJOR_VERSION_CAP 2 95 96 /* 97 * MEI version with client DMA support 98 */ 99 #define HBM_MINOR_VERSION_CD 2 100 #define HBM_MAJOR_VERSION_CD 2 101 102 /* Host bus message command opcode */ 103 #define MEI_HBM_CMD_OP_MSK 0x7f 104 /* Host bus message command RESPONSE */ 105 #define MEI_HBM_CMD_RES_MSK 0x80 106 107 /* 108 * MEI Bus Message Command IDs 109 */ 110 #define HOST_START_REQ_CMD 0x01 111 #define HOST_START_RES_CMD 0x81 112 113 #define HOST_STOP_REQ_CMD 0x02 114 #define HOST_STOP_RES_CMD 0x82 115 116 #define ME_STOP_REQ_CMD 0x03 117 118 #define HOST_ENUM_REQ_CMD 0x04 119 #define HOST_ENUM_RES_CMD 0x84 120 121 #define HOST_CLIENT_PROPERTIES_REQ_CMD 0x05 122 #define HOST_CLIENT_PROPERTIES_RES_CMD 0x85 123 124 #define CLIENT_CONNECT_REQ_CMD 0x06 125 #define CLIENT_CONNECT_RES_CMD 0x86 126 127 #define CLIENT_DISCONNECT_REQ_CMD 0x07 128 #define CLIENT_DISCONNECT_RES_CMD 0x87 129 130 #define MEI_FLOW_CONTROL_CMD 0x08 131 132 #define MEI_PG_ISOLATION_ENTRY_REQ_CMD 0x0a 133 #define MEI_PG_ISOLATION_ENTRY_RES_CMD 0x8a 134 #define MEI_PG_ISOLATION_EXIT_REQ_CMD 0x0b 135 #define MEI_PG_ISOLATION_EXIT_RES_CMD 0x8b 136 137 #define MEI_HBM_ADD_CLIENT_REQ_CMD 0x0f 138 #define MEI_HBM_ADD_CLIENT_RES_CMD 0x8f 139 140 #define MEI_HBM_NOTIFY_REQ_CMD 0x10 141 #define MEI_HBM_NOTIFY_RES_CMD 0x90 142 #define MEI_HBM_NOTIFICATION_CMD 0x11 143 144 #define MEI_HBM_DMA_SETUP_REQ_CMD 0x12 145 #define MEI_HBM_DMA_SETUP_RES_CMD 0x92 146 147 #define MEI_HBM_CAPABILITIES_REQ_CMD 0x13 148 #define MEI_HBM_CAPABILITIES_RES_CMD 0x93 149 150 #define MEI_HBM_CLIENT_DMA_MAP_REQ_CMD 0x14 151 #define MEI_HBM_CLIENT_DMA_MAP_RES_CMD 0x94 152 153 #define MEI_HBM_CLIENT_DMA_UNMAP_REQ_CMD 0x15 154 #define MEI_HBM_CLIENT_DMA_UNMAP_RES_CMD 0x95 155 156 /* 157 * MEI Stop Reason 158 * used by hbm_host_stop_request.reason 159 */ 160 enum mei_stop_reason_types { 161 DRIVER_STOP_REQUEST = 0x00, 162 DEVICE_D1_ENTRY = 0x01, 163 DEVICE_D2_ENTRY = 0x02, 164 DEVICE_D3_ENTRY = 0x03, 165 SYSTEM_S1_ENTRY = 0x04, 166 SYSTEM_S2_ENTRY = 0x05, 167 SYSTEM_S3_ENTRY = 0x06, 168 SYSTEM_S4_ENTRY = 0x07, 169 SYSTEM_S5_ENTRY = 0x08 170 }; 171 172 173 /** 174 * enum mei_hbm_status - mei host bus messages return values 175 * 176 * @MEI_HBMS_SUCCESS : status success 177 * @MEI_HBMS_CLIENT_NOT_FOUND : client not found 178 * @MEI_HBMS_ALREADY_EXISTS : connection already established 179 * @MEI_HBMS_REJECTED : connection is rejected 180 * @MEI_HBMS_INVALID_PARAMETER : invalid parameter 181 * @MEI_HBMS_NOT_ALLOWED : operation not allowed 182 * @MEI_HBMS_ALREADY_STARTED : system is already started 183 * @MEI_HBMS_NOT_STARTED : system not started 184 * 185 * @MEI_HBMS_MAX : sentinel 186 */ 187 enum mei_hbm_status { 188 MEI_HBMS_SUCCESS = 0, 189 MEI_HBMS_CLIENT_NOT_FOUND = 1, 190 MEI_HBMS_ALREADY_EXISTS = 2, 191 MEI_HBMS_REJECTED = 3, 192 MEI_HBMS_INVALID_PARAMETER = 4, 193 MEI_HBMS_NOT_ALLOWED = 5, 194 MEI_HBMS_ALREADY_STARTED = 6, 195 MEI_HBMS_NOT_STARTED = 7, 196 197 MEI_HBMS_MAX 198 }; 199 200 201 /* 202 * Client Connect Status 203 * used by hbm_client_connect_response.status 204 */ 205 enum mei_cl_connect_status { 206 MEI_CL_CONN_SUCCESS = MEI_HBMS_SUCCESS, 207 MEI_CL_CONN_NOT_FOUND = MEI_HBMS_CLIENT_NOT_FOUND, 208 MEI_CL_CONN_ALREADY_STARTED = MEI_HBMS_ALREADY_EXISTS, 209 MEI_CL_CONN_OUT_OF_RESOURCES = MEI_HBMS_REJECTED, 210 MEI_CL_CONN_MESSAGE_SMALL = MEI_HBMS_INVALID_PARAMETER, 211 MEI_CL_CONN_NOT_ALLOWED = MEI_HBMS_NOT_ALLOWED, 212 }; 213 214 /* 215 * Client Disconnect Status 216 */ 217 enum mei_cl_disconnect_status { 218 MEI_CL_DISCONN_SUCCESS = MEI_HBMS_SUCCESS 219 }; 220 221 /** 222 * enum mei_ext_hdr_type - extended header type used in 223 * extended header TLV 224 * 225 * @MEI_EXT_HDR_NONE: sentinel 226 * @MEI_EXT_HDR_VTAG: vtag header 227 */ 228 enum mei_ext_hdr_type { 229 MEI_EXT_HDR_NONE = 0, 230 MEI_EXT_HDR_VTAG = 1, 231 }; 232 233 /** 234 * struct mei_ext_hdr - extend header descriptor (TLV) 235 * @type: enum mei_ext_hdr_type 236 * @length: length excluding descriptor 237 * @ext_payload: payload of the specific extended header 238 * @hdr: place holder for actual header 239 */ 240 struct mei_ext_hdr { 241 u8 type; 242 u8 length; 243 u8 data[]; 244 } __packed; 245 246 /** 247 * struct mei_ext_meta_hdr - extend header meta data 248 * @count: number of headers 249 * @size: total size of the extended header list excluding meta header 250 * @reserved: reserved 251 * @hdrs: extended headers TLV list 252 */ 253 struct mei_ext_meta_hdr { 254 u8 count; 255 u8 size; 256 u8 reserved[2]; 257 u8 hdrs[]; 258 } __packed; 259 260 /** 261 * struct mei_ext_hdr_vtag - extend header for vtag 262 * 263 * @hdr: standard extend header 264 * @vtag: virtual tag 265 * @reserved: reserved 266 */ 267 struct mei_ext_hdr_vtag { 268 struct mei_ext_hdr hdr; 269 u8 vtag; 270 u8 reserved; 271 } __packed; 272 273 /* 274 * Extended header iterator functions 275 */ 276 /** 277 * mei_ext_hdr - extended header iterator begin 278 * 279 * @meta: meta header of the extended header list 280 * 281 * Return: 282 * The first extended header 283 */ 284 static inline struct mei_ext_hdr *mei_ext_begin(struct mei_ext_meta_hdr *meta) 285 { 286 return (struct mei_ext_hdr *)meta->hdrs; 287 } 288 289 /** 290 * mei_ext_last - check if the ext is the last one in the TLV list 291 * 292 * @meta: meta header of the extended header list 293 * @ext: a meta header on the list 294 * 295 * Return: true if ext is the last header on the list 296 */ 297 static inline bool mei_ext_last(struct mei_ext_meta_hdr *meta, 298 struct mei_ext_hdr *ext) 299 { 300 return (u8 *)ext >= (u8 *)meta + sizeof(*meta) + (meta->size * 4); 301 } 302 303 /** 304 * mei_ext_next - following extended header on the TLV list 305 * 306 * @ext: current extend header 307 * 308 * Context: The function does not check for the overflows, 309 * one should call mei_ext_last before. 310 * 311 * Return: The following extend header after @ext 312 */ 313 static inline struct mei_ext_hdr *mei_ext_next(struct mei_ext_hdr *ext) 314 { 315 return (struct mei_ext_hdr *)((u8 *)ext + (ext->length * 4)); 316 } 317 318 /** 319 * struct mei_msg_hdr - MEI BUS Interface Section 320 * 321 * @me_addr: device address 322 * @host_addr: host address 323 * @length: message length 324 * @reserved: reserved 325 * @extended: message has extended header 326 * @dma_ring: message is on dma ring 327 * @internal: message is internal 328 * @msg_complete: last packet of the message 329 * @extension: extension of the header 330 */ 331 struct mei_msg_hdr { 332 u32 me_addr:8; 333 u32 host_addr:8; 334 u32 length:9; 335 u32 reserved:3; 336 u32 extended:1; 337 u32 dma_ring:1; 338 u32 internal:1; 339 u32 msg_complete:1; 340 u32 extension[]; 341 } __packed; 342 343 /* The length is up to 9 bits */ 344 #define MEI_MSG_MAX_LEN_MASK GENMASK(9, 0) 345 346 struct mei_bus_message { 347 u8 hbm_cmd; 348 u8 data[]; 349 } __packed; 350 351 /** 352 * struct hbm_cl_cmd - client specific host bus command 353 * CONNECT, DISCONNECT, and FlOW CONTROL 354 * 355 * @hbm_cmd: bus message command header 356 * @me_addr: address of the client in ME 357 * @host_addr: address of the client in the driver 358 * @data: generic data 359 */ 360 struct mei_hbm_cl_cmd { 361 u8 hbm_cmd; 362 u8 me_addr; 363 u8 host_addr; 364 u8 data; 365 }; 366 367 struct hbm_version { 368 u8 minor_version; 369 u8 major_version; 370 } __packed; 371 372 struct hbm_host_version_request { 373 u8 hbm_cmd; 374 u8 reserved; 375 struct hbm_version host_version; 376 } __packed; 377 378 struct hbm_host_version_response { 379 u8 hbm_cmd; 380 u8 host_version_supported; 381 struct hbm_version me_max_version; 382 } __packed; 383 384 struct hbm_host_stop_request { 385 u8 hbm_cmd; 386 u8 reason; 387 u8 reserved[2]; 388 } __packed; 389 390 struct hbm_host_stop_response { 391 u8 hbm_cmd; 392 u8 reserved[3]; 393 } __packed; 394 395 struct hbm_me_stop_request { 396 u8 hbm_cmd; 397 u8 reason; 398 u8 reserved[2]; 399 } __packed; 400 401 /** 402 * enum hbm_host_enum_flags - enumeration request flags (HBM version >= 2.0) 403 * 404 * @MEI_HBM_ENUM_F_ALLOW_ADD: allow dynamic clients add 405 * @MEI_HBM_ENUM_F_IMMEDIATE_ENUM: allow FW to send answer immediately 406 */ 407 enum hbm_host_enum_flags { 408 MEI_HBM_ENUM_F_ALLOW_ADD = BIT(0), 409 MEI_HBM_ENUM_F_IMMEDIATE_ENUM = BIT(1), 410 }; 411 412 /** 413 * struct hbm_host_enum_request - enumeration request from host to fw 414 * 415 * @hbm_cmd : bus message command header 416 * @flags : request flags 417 * @reserved: reserved 418 */ 419 struct hbm_host_enum_request { 420 u8 hbm_cmd; 421 u8 flags; 422 u8 reserved[2]; 423 } __packed; 424 425 struct hbm_host_enum_response { 426 u8 hbm_cmd; 427 u8 reserved[3]; 428 u8 valid_addresses[32]; 429 } __packed; 430 431 /** 432 * struct mei_client_properties - mei client properties 433 * 434 * @protocol_name: guid of the client 435 * @protocol_version: client protocol version 436 * @max_number_of_connections: number of possible connections. 437 * @fixed_address: fixed me address (0 if the client is dynamic) 438 * @single_recv_buf: 1 if all connections share a single receive buffer. 439 * @vt_supported: the client support vtag 440 * @reserved: reserved 441 * @max_msg_length: MTU of the client 442 */ 443 struct mei_client_properties { 444 uuid_le protocol_name; 445 u8 protocol_version; 446 u8 max_number_of_connections; 447 u8 fixed_address; 448 u8 single_recv_buf:1; 449 u8 vt_supported:1; 450 u8 reserved:6; 451 u32 max_msg_length; 452 } __packed; 453 454 struct hbm_props_request { 455 u8 hbm_cmd; 456 u8 me_addr; 457 u8 reserved[2]; 458 } __packed; 459 460 struct hbm_props_response { 461 u8 hbm_cmd; 462 u8 me_addr; 463 u8 status; 464 u8 reserved; 465 struct mei_client_properties client_properties; 466 } __packed; 467 468 /** 469 * struct hbm_add_client_request - request to add a client 470 * might be sent by fw after enumeration has already completed 471 * 472 * @hbm_cmd: bus message command header 473 * @me_addr: address of the client in ME 474 * @reserved: reserved 475 * @client_properties: client properties 476 */ 477 struct hbm_add_client_request { 478 u8 hbm_cmd; 479 u8 me_addr; 480 u8 reserved[2]; 481 struct mei_client_properties client_properties; 482 } __packed; 483 484 /** 485 * struct hbm_add_client_response - response to add a client 486 * sent by the host to report client addition status to fw 487 * 488 * @hbm_cmd: bus message command header 489 * @me_addr: address of the client in ME 490 * @status: if HBMS_SUCCESS then the client can now accept connections. 491 * @reserved: reserved 492 */ 493 struct hbm_add_client_response { 494 u8 hbm_cmd; 495 u8 me_addr; 496 u8 status; 497 u8 reserved; 498 } __packed; 499 500 /** 501 * struct hbm_power_gate - power gate request/response 502 * 503 * @hbm_cmd: bus message command header 504 * @reserved: reserved 505 */ 506 struct hbm_power_gate { 507 u8 hbm_cmd; 508 u8 reserved[3]; 509 } __packed; 510 511 /** 512 * struct hbm_client_connect_request - connect/disconnect request 513 * 514 * @hbm_cmd: bus message command header 515 * @me_addr: address of the client in ME 516 * @host_addr: address of the client in the driver 517 * @reserved: reserved 518 */ 519 struct hbm_client_connect_request { 520 u8 hbm_cmd; 521 u8 me_addr; 522 u8 host_addr; 523 u8 reserved; 524 } __packed; 525 526 /** 527 * struct hbm_client_connect_response - connect/disconnect response 528 * 529 * @hbm_cmd: bus message command header 530 * @me_addr: address of the client in ME 531 * @host_addr: address of the client in the driver 532 * @status: status of the request 533 */ 534 struct hbm_client_connect_response { 535 u8 hbm_cmd; 536 u8 me_addr; 537 u8 host_addr; 538 u8 status; 539 } __packed; 540 541 542 #define MEI_FC_MESSAGE_RESERVED_LENGTH 5 543 544 struct hbm_flow_control { 545 u8 hbm_cmd; 546 u8 me_addr; 547 u8 host_addr; 548 u8 reserved[MEI_FC_MESSAGE_RESERVED_LENGTH]; 549 } __packed; 550 551 #define MEI_HBM_NOTIFICATION_START 1 552 #define MEI_HBM_NOTIFICATION_STOP 0 553 /** 554 * struct hbm_notification_request - start/stop notification request 555 * 556 * @hbm_cmd: bus message command header 557 * @me_addr: address of the client in ME 558 * @host_addr: address of the client in the driver 559 * @start: start = 1 or stop = 0 asynchronous notifications 560 */ 561 struct hbm_notification_request { 562 u8 hbm_cmd; 563 u8 me_addr; 564 u8 host_addr; 565 u8 start; 566 } __packed; 567 568 /** 569 * struct hbm_notification_response - start/stop notification response 570 * 571 * @hbm_cmd: bus message command header 572 * @me_addr: address of the client in ME 573 * @host_addr: - address of the client in the driver 574 * @status: (mei_hbm_status) response status for the request 575 * - MEI_HBMS_SUCCESS: successful stop/start 576 * - MEI_HBMS_CLIENT_NOT_FOUND: if the connection could not be found. 577 * - MEI_HBMS_ALREADY_STARTED: for start requests for a previously 578 * started notification. 579 * - MEI_HBMS_NOT_STARTED: for stop request for a connected client for whom 580 * asynchronous notifications are currently disabled. 581 * 582 * @start: start = 1 or stop = 0 asynchronous notifications 583 * @reserved: reserved 584 */ 585 struct hbm_notification_response { 586 u8 hbm_cmd; 587 u8 me_addr; 588 u8 host_addr; 589 u8 status; 590 u8 start; 591 u8 reserved[3]; 592 } __packed; 593 594 /** 595 * struct hbm_notification - notification event 596 * 597 * @hbm_cmd: bus message command header 598 * @me_addr: address of the client in ME 599 * @host_addr: address of the client in the driver 600 * @reserved: reserved for alignment 601 */ 602 struct hbm_notification { 603 u8 hbm_cmd; 604 u8 me_addr; 605 u8 host_addr; 606 u8 reserved; 607 } __packed; 608 609 /** 610 * struct hbm_dma_mem_dscr - dma ring 611 * 612 * @addr_hi: the high 32bits of 64 bit address 613 * @addr_lo: the low 32bits of 64 bit address 614 * @size : size in bytes (must be power of 2) 615 */ 616 struct hbm_dma_mem_dscr { 617 u32 addr_hi; 618 u32 addr_lo; 619 u32 size; 620 } __packed; 621 622 enum { 623 DMA_DSCR_HOST = 0, 624 DMA_DSCR_DEVICE = 1, 625 DMA_DSCR_CTRL = 2, 626 DMA_DSCR_NUM, 627 }; 628 629 /** 630 * struct hbm_dma_setup_request - dma setup request 631 * 632 * @hbm_cmd: bus message command header 633 * @reserved: reserved for alignment 634 * @dma_dscr: dma descriptor for HOST, DEVICE, and CTRL 635 */ 636 struct hbm_dma_setup_request { 637 u8 hbm_cmd; 638 u8 reserved[3]; 639 struct hbm_dma_mem_dscr dma_dscr[DMA_DSCR_NUM]; 640 } __packed; 641 642 /** 643 * struct hbm_dma_setup_response - dma setup response 644 * 645 * @hbm_cmd: bus message command header 646 * @status: 0 on success; otherwise DMA setup failed. 647 * @reserved: reserved for alignment 648 */ 649 struct hbm_dma_setup_response { 650 u8 hbm_cmd; 651 u8 status; 652 u8 reserved[2]; 653 } __packed; 654 655 /** 656 * struct mei_dma_ring_ctrl - dma ring control block 657 * 658 * @hbuf_wr_idx: host circular buffer write index in slots 659 * @reserved1: reserved for alignment 660 * @hbuf_rd_idx: host circular buffer read index in slots 661 * @reserved2: reserved for alignment 662 * @dbuf_wr_idx: device circular buffer write index in slots 663 * @reserved3: reserved for alignment 664 * @dbuf_rd_idx: device circular buffer read index in slots 665 * @reserved4: reserved for alignment 666 */ 667 struct hbm_dma_ring_ctrl { 668 u32 hbuf_wr_idx; 669 u32 reserved1; 670 u32 hbuf_rd_idx; 671 u32 reserved2; 672 u32 dbuf_wr_idx; 673 u32 reserved3; 674 u32 dbuf_rd_idx; 675 u32 reserved4; 676 } __packed; 677 678 /* virtual tag supported */ 679 #define HBM_CAP_VT BIT(0) 680 /* client dma supported */ 681 #define HBM_CAP_CD BIT(2) 682 683 /** 684 * struct hbm_capability_request - capability request from host to fw 685 * 686 * @hbm_cmd : bus message command header 687 * @capability_requested: bitmask of capabilities requested by host 688 */ 689 struct hbm_capability_request { 690 u8 hbm_cmd; 691 u8 capability_requested[3]; 692 } __packed; 693 694 /** 695 * struct hbm_capability_response - capability response from fw to host 696 * 697 * @hbm_cmd : bus message command header 698 * @capability_granted: bitmask of capabilities granted by FW 699 */ 700 struct hbm_capability_response { 701 u8 hbm_cmd; 702 u8 capability_granted[3]; 703 } __packed; 704 705 /** 706 * struct hbm_client_dma_map_request - client dma map request from host to fw 707 * 708 * @hbm_cmd: bus message command header 709 * @client_buffer_id: client buffer id 710 * @reserved: reserved 711 * @address_lsb: DMA address LSB 712 * @address_msb: DMA address MSB 713 * @size: DMA size 714 */ 715 struct hbm_client_dma_map_request { 716 u8 hbm_cmd; 717 u8 client_buffer_id; 718 u8 reserved[2]; 719 u32 address_lsb; 720 u32 address_msb; 721 u32 size; 722 } __packed; 723 724 /** 725 * struct hbm_client_dma_unmap_request 726 * client dma unmap request from the host to the firmware 727 * 728 * @hbm_cmd: bus message command header 729 * @status: unmap status 730 * @client_buffer_id: client buffer id 731 * @reserved: reserved 732 */ 733 struct hbm_client_dma_unmap_request { 734 u8 hbm_cmd; 735 u8 status; 736 u8 client_buffer_id; 737 u8 reserved; 738 } __packed; 739 740 /** 741 * struct hbm_client_dma_response 742 * client dma unmap response from the firmware to the host 743 * 744 * @hbm_cmd: bus message command header 745 * @status: command status 746 */ 747 struct hbm_client_dma_response { 748 u8 hbm_cmd; 749 u8 status; 750 } __packed; 751 752 #endif 753