Linux-libre 5.4-rc7-gnu
[librecmc/linux-libre.git] / drivers / gpu / drm / vboxvideo / hgsmi_defs.h
1 /* SPDX-License-Identifier: MIT */
2 /* Copyright (C) 2006-2017 Oracle Corporation */
3
4 #ifndef __HGSMI_DEFS_H__
5 #define __HGSMI_DEFS_H__
6
7 /* Buffer sequence type mask. */
8 #define HGSMI_BUFFER_HEADER_F_SEQ_MASK     0x03
9 /* Single buffer, not a part of a sequence. */
10 #define HGSMI_BUFFER_HEADER_F_SEQ_SINGLE   0x00
11 /* The first buffer in a sequence. */
12 #define HGSMI_BUFFER_HEADER_F_SEQ_START    0x01
13 /* A middle buffer in a sequence. */
14 #define HGSMI_BUFFER_HEADER_F_SEQ_CONTINUE 0x02
15 /* The last buffer in a sequence. */
16 #define HGSMI_BUFFER_HEADER_F_SEQ_END      0x03
17
18 /* 16 bytes buffer header. */
19 struct hgsmi_buffer_header {
20         u32 data_size;          /* Size of data that follows the header. */
21         u8 flags;               /* HGSMI_BUFFER_HEADER_F_* */
22         u8 channel;             /* The channel the data must be routed to. */
23         u16 channel_info;       /* Opaque to the HGSMI, used by the channel. */
24
25         union {
26                 /* Opaque placeholder to make the union 8 bytes. */
27                 u8 header_data[8];
28
29                 /* HGSMI_BUFFER_HEADER_F_SEQ_SINGLE */
30                 struct {
31                         u32 reserved1;  /* A reserved field, initialize to 0. */
32                         u32 reserved2;  /* A reserved field, initialize to 0. */
33                 } buffer;
34
35                 /* HGSMI_BUFFER_HEADER_F_SEQ_START */
36                 struct {
37                         /* Must be the same for all buffers in the sequence. */
38                         u32 sequence_number;
39                         /* The total size of the sequence. */
40                         u32 sequence_size;
41                 } sequence_start;
42
43                 /*
44                  * HGSMI_BUFFER_HEADER_F_SEQ_CONTINUE and
45                  * HGSMI_BUFFER_HEADER_F_SEQ_END
46                  */
47                 struct {
48                         /* Must be the same for all buffers in the sequence. */
49                         u32 sequence_number;
50                         /* Data offset in the entire sequence. */
51                         u32 sequence_offset;
52                 } sequence_continue;
53         } u;
54 } __packed;
55
56 /* 8 bytes buffer tail. */
57 struct hgsmi_buffer_tail {
58         /* Reserved, must be initialized to 0. */
59         u32 reserved;
60         /*
61          * One-at-a-Time Hash: http://www.burtleburtle.net/bob/hash/doobs.html
62          * Over the header, offset and for first 4 bytes of the tail.
63          */
64         u32 checksum;
65 } __packed;
66
67 /*
68  * The size of the array of channels. Array indexes are u8.
69  * Note: the value must not be changed.
70  */
71 #define HGSMI_NUMBER_OF_CHANNELS 0x100
72
73 #endif