brintos

brintos / linux-shallow public Read only

0
0
Text · 6.2 KiB · 8f86a16 Raw
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