1/* SPDX-License-Identifier: MIT */
2/*
3 * Copyright © 2025 Intel Corporation
4 */
5
6#ifndef _XE_SRIOV_PACKET_TYPES_H_
7#define _XE_SRIOV_PACKET_TYPES_H_
8
9#include <linux/types.h>
10
11/**
12 * enum xe_sriov_packet_type - Xe SR-IOV VF migration data packet type
13 * @XE_SRIOV_PACKET_TYPE_DESCRIPTOR: Descriptor with VF device metadata
14 * @XE_SRIOV_PACKET_TYPE_TRAILER: Trailer indicating end-of-stream
15 * @XE_SRIOV_PACKET_TYPE_GGTT: Global GTT migration data
16 * @XE_SRIOV_PACKET_TYPE_MMIO: MMIO registers migration data
17 * @XE_SRIOV_PACKET_TYPE_GUC: GuC firmware migration data
18 * @XE_SRIOV_PACKET_TYPE_VRAM: VRAM migration data
19 */
20enum xe_sriov_packet_type {
21 /* Skipping 0 to catch uninitialized data */
22 XE_SRIOV_PACKET_TYPE_DESCRIPTOR = 1,
23 XE_SRIOV_PACKET_TYPE_TRAILER,
24 XE_SRIOV_PACKET_TYPE_GGTT,
25 XE_SRIOV_PACKET_TYPE_MMIO,
26 XE_SRIOV_PACKET_TYPE_GUC,
27 XE_SRIOV_PACKET_TYPE_VRAM,
28};
29
30/**
31 * struct xe_sriov_packet_hdr - Xe SR-IOV VF migration data packet header
32 */
33struct xe_sriov_packet_hdr {
34 /** @version: migration data protocol version */
35 u8 version;
36 /** @type: migration data type */
37 u8 type;
38 /** @tile_id: migration data tile id */
39 u8 tile_id;
40 /** @gt_id: migration data gt id */
41 u8 gt_id;
42 /** @flags: migration data flags */
43 u32 flags;
44 /**
45 * @offset: offset into the resource;
46 * used when multiple packets of given type are used for migration
47 */
48 u64 offset;
49 /** @size: migration data size */
50 u64 size;
51} __packed;
52
53/**
54 * struct xe_sriov_packet - Xe SR-IOV VF migration data packet
55 */
56struct xe_sriov_packet {
57 /** @xe: the PF &xe_device this data packet belongs to */
58 struct xe_device *xe;
59 /** @vaddr: CPU pointer to payload data */
60 void *vaddr;
61 /** @remaining: payload data remaining */
62 size_t remaining;
63 /** @hdr_remaining: header data remaining */
64 size_t hdr_remaining;
65 union {
66 /** @bo: Buffer object with migration data */
67 struct xe_bo *bo;
68 /** @buff: Buffer with migration data */
69 void *buff;
70 };
71 /** @hdr: data packet header */
72 struct xe_sriov_packet_hdr hdr;
73};
74
75#endif
76

source code of linux/drivers/gpu/drm/xe/xe_sriov_packet_types.h