129 lines · c
1/* SPDX-License-Identifier: MIT */2/*3 * Copyright © 2014-2021 Intel Corporation4 */5 6#ifndef _ABI_GUC_COMMUNICATION_CTB_ABI_H7#define _ABI_GUC_COMMUNICATION_CTB_ABI_H8 9#include <linux/types.h>10#include <linux/build_bug.h>11 12#include "guc_messages_abi.h"13 14/**15 * DOC: CT Buffer16 *17 * Circular buffer used to send `CTB Message`_18 */19 20/**21 * DOC: CTB Descriptor22 *23 * +---+-------+--------------------------------------------------------------+24 * | | Bits | Description |25 * +===+=======+==============================================================+26 * | 0 | 31:0 | **HEAD** - offset (in dwords) to the last dword that was |27 * | | | read from the `CT Buffer`_. |28 * | | | It can only be updated by the receiver. |29 * +---+-------+--------------------------------------------------------------+30 * | 1 | 31:0 | **TAIL** - offset (in dwords) to the last dword that was |31 * | | | written to the `CT Buffer`_. |32 * | | | It can only be updated by the sender. |33 * +---+-------+--------------------------------------------------------------+34 * | 2 | 31:0 | **STATUS** - status of the CTB |35 * | | | |36 * | | | - _`GUC_CTB_STATUS_NO_ERROR` = 0 (normal operation) |37 * | | | - _`GUC_CTB_STATUS_OVERFLOW` = 1 (head/tail too large) |38 * | | | - _`GUC_CTB_STATUS_UNDERFLOW` = 2 (truncated message) |39 * | | | - _`GUC_CTB_STATUS_MISMATCH` = 4 (head/tail modified) |40 * +---+-------+--------------------------------------------------------------+41 * |...| | RESERVED = MBZ |42 * +---+-------+--------------------------------------------------------------+43 * | 15| 31:0 | RESERVED = MBZ |44 * +---+-------+--------------------------------------------------------------+45 */46 47struct guc_ct_buffer_desc {48 u32 head;49 u32 tail;50 u32 status;51#define GUC_CTB_STATUS_NO_ERROR 052#define GUC_CTB_STATUS_OVERFLOW (1 << 0)53#define GUC_CTB_STATUS_UNDERFLOW (1 << 1)54#define GUC_CTB_STATUS_MISMATCH (1 << 2)55 u32 reserved[13];56} __packed;57static_assert(sizeof(struct guc_ct_buffer_desc) == 64);58 59/**60 * DOC: CTB Message61 *62 * +---+-------+--------------------------------------------------------------+63 * | | Bits | Description |64 * +===+=======+==============================================================+65 * | 0 | 31:16 | **FENCE** - message identifier |66 * | +-------+--------------------------------------------------------------+67 * | | 15:12 | **FORMAT** - format of the CTB message |68 * | | | - _`GUC_CTB_FORMAT_HXG` = 0 - see `CTB HXG Message`_ |69 * | +-------+--------------------------------------------------------------+70 * | | 11:8 | **RESERVED** |71 * | +-------+--------------------------------------------------------------+72 * | | 7:0 | **NUM_DWORDS** - length of the CTB message (w/o header) |73 * +---+-------+--------------------------------------------------------------+74 * | 1 | 31:0 | optional (depends on FORMAT) |75 * +---+-------+ |76 * |...| | |77 * +---+-------+ |78 * | n | 31:0 | |79 * +---+-------+--------------------------------------------------------------+80 */81 82#define GUC_CTB_HDR_LEN 1u83#define GUC_CTB_MSG_MIN_LEN GUC_CTB_HDR_LEN84#define GUC_CTB_MSG_MAX_LEN (GUC_CTB_MSG_MIN_LEN + GUC_CTB_MAX_DWORDS)85#define GUC_CTB_MSG_0_FENCE (0xffffu << 16)86#define GUC_CTB_MSG_0_FORMAT (0xfu << 12)87#define GUC_CTB_FORMAT_HXG 0u88#define GUC_CTB_MSG_0_RESERVED (0xfu << 8)89#define GUC_CTB_MSG_0_NUM_DWORDS (0xffu << 0)90#define GUC_CTB_MAX_DWORDS 25591 92/**93 * DOC: CTB HXG Message94 *95 * +---+-------+--------------------------------------------------------------+96 * | | Bits | Description |97 * +===+=======+==============================================================+98 * | 0 | 31:16 | FENCE |99 * | +-------+--------------------------------------------------------------+100 * | | 15:12 | FORMAT = GUC_CTB_FORMAT_HXG_ |101 * | +-------+--------------------------------------------------------------+102 * | | 11:8 | RESERVED = MBZ |103 * | +-------+--------------------------------------------------------------+104 * | | 7:0 | NUM_DWORDS = length (in dwords) of the embedded HXG message |105 * +---+-------+--------------------------------------------------------------+106 * | 1 | 31:0 | |107 * +---+-------+ |108 * |...| | [Embedded `HXG Message`_] |109 * +---+-------+ |110 * | n | 31:0 | |111 * +---+-------+--------------------------------------------------------------+112 */113 114#define GUC_CTB_HXG_MSG_MIN_LEN (GUC_CTB_MSG_MIN_LEN + GUC_HXG_MSG_MIN_LEN)115#define GUC_CTB_HXG_MSG_MAX_LEN GUC_CTB_MSG_MAX_LEN116 117/**118 * DOC: CTB based communication119 *120 * The CTB (command transport buffer) communication between Host and GuC121 * is based on u32 data stream written to the shared buffer. One buffer can122 * be used to transmit data only in one direction (one-directional channel).123 *124 * Current status of the each buffer is maintained in the `CTB Descriptor`_.125 * Each message in data stream is encoded as `CTB HXG Message`_.126 */127 128#endif129