1*b05fa564SZack Rusin /* SPDX-License-Identifier: GPL-2.0 OR MIT */
2*b05fa564SZack Rusin /*
3ebc9ac7cSZack Rusin  * Copyright 2007-2021 VMware, Inc.
48ce75f8aSSinclair Yeh  *
58ce75f8aSSinclair Yeh  * Permission is hereby granted, free of charge, to any person
68ce75f8aSSinclair Yeh  * obtaining a copy of this software and associated documentation
78ce75f8aSSinclair Yeh  * files (the "Software"), to deal in the Software without
88ce75f8aSSinclair Yeh  * restriction, including without limitation the rights to use, copy,
98ce75f8aSSinclair Yeh  * modify, merge, publish, distribute, sublicense, and/or sell copies
108ce75f8aSSinclair Yeh  * of the Software, and to permit persons to whom the Software is
118ce75f8aSSinclair Yeh  * furnished to do so, subject to the following conditions:
128ce75f8aSSinclair Yeh  *
138ce75f8aSSinclair Yeh  * The above copyright notice and this permission notice shall be
148ce75f8aSSinclair Yeh  * included in all copies or substantial portions of the Software.
158ce75f8aSSinclair Yeh  *
168ce75f8aSSinclair Yeh  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
178ce75f8aSSinclair Yeh  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
188ce75f8aSSinclair Yeh  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
198ce75f8aSSinclair Yeh  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
208ce75f8aSSinclair Yeh  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
218ce75f8aSSinclair Yeh  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
228ce75f8aSSinclair Yeh  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
238ce75f8aSSinclair Yeh  * SOFTWARE.
248ce75f8aSSinclair Yeh  *
25*b05fa564SZack Rusin  */
268ce75f8aSSinclair Yeh 
278ce75f8aSSinclair Yeh /*
288ce75f8aSSinclair Yeh  * svga_overlay.h --
298ce75f8aSSinclair Yeh  *
308ce75f8aSSinclair Yeh  *    Definitions for video-overlay support.
318ce75f8aSSinclair Yeh  */
328ce75f8aSSinclair Yeh 
33ebc9ac7cSZack Rusin 
34ebc9ac7cSZack Rusin 
358ce75f8aSSinclair Yeh #ifndef _SVGA_OVERLAY_H_
368ce75f8aSSinclair Yeh #define _SVGA_OVERLAY_H_
378ce75f8aSSinclair Yeh 
388ce75f8aSSinclair Yeh #include "svga_reg.h"
398ce75f8aSSinclair Yeh 
40ebc9ac7cSZack Rusin #if defined __cplusplus
41ebc9ac7cSZack Rusin extern "C" {
42ebc9ac7cSZack Rusin #endif
438ce75f8aSSinclair Yeh 
44ebc9ac7cSZack Rusin #define VMWARE_FOURCC_YV12 0x32315659
45ebc9ac7cSZack Rusin #define VMWARE_FOURCC_YUY2 0x32595559
46ebc9ac7cSZack Rusin #define VMWARE_FOURCC_UYVY 0x59565955
478ce75f8aSSinclair Yeh 
488ce75f8aSSinclair Yeh typedef enum {
498ce75f8aSSinclair Yeh 	SVGA_OVERLAY_FORMAT_INVALID = 0,
508ce75f8aSSinclair Yeh 	SVGA_OVERLAY_FORMAT_YV12 = VMWARE_FOURCC_YV12,
518ce75f8aSSinclair Yeh 	SVGA_OVERLAY_FORMAT_YUY2 = VMWARE_FOURCC_YUY2,
528ce75f8aSSinclair Yeh 	SVGA_OVERLAY_FORMAT_UYVY = VMWARE_FOURCC_UYVY,
538ce75f8aSSinclair Yeh } SVGAOverlayFormat;
548ce75f8aSSinclair Yeh 
558ce75f8aSSinclair Yeh #define SVGA_VIDEO_COLORKEY_MASK 0x00ffffff
568ce75f8aSSinclair Yeh 
578ce75f8aSSinclair Yeh #define SVGA_ESCAPE_VMWARE_VIDEO 0x00020000
588ce75f8aSSinclair Yeh 
598ce75f8aSSinclair Yeh #define SVGA_ESCAPE_VMWARE_VIDEO_SET_REGS 0x00020001
608ce75f8aSSinclair Yeh 
618ce75f8aSSinclair Yeh #define SVGA_ESCAPE_VMWARE_VIDEO_FLUSH 0x00020002
628ce75f8aSSinclair Yeh 
63ebc9ac7cSZack Rusin typedef struct SVGAEscapeVideoSetRegs {
648ce75f8aSSinclair Yeh 	struct {
658ce75f8aSSinclair Yeh 		uint32 cmdType;
668ce75f8aSSinclair Yeh 		uint32 streamId;
678ce75f8aSSinclair Yeh 	} header;
688ce75f8aSSinclair Yeh 
698ce75f8aSSinclair Yeh 	struct {
708ce75f8aSSinclair Yeh 		uint32 registerId;
718ce75f8aSSinclair Yeh 		uint32 value;
728ce75f8aSSinclair Yeh 	} items[1];
738ce75f8aSSinclair Yeh } SVGAEscapeVideoSetRegs;
748ce75f8aSSinclair Yeh 
75ebc9ac7cSZack Rusin typedef struct SVGAEscapeVideoFlush {
768ce75f8aSSinclair Yeh 	uint32 cmdType;
778ce75f8aSSinclair Yeh 	uint32 streamId;
788ce75f8aSSinclair Yeh } SVGAEscapeVideoFlush;
798ce75f8aSSinclair Yeh 
80ebc9ac7cSZack Rusin #pragma pack(push, 1)
81ebc9ac7cSZack Rusin typedef struct {
828ce75f8aSSinclair Yeh 	uint32 command;
838ce75f8aSSinclair Yeh 	uint32 overlay;
848ce75f8aSSinclair Yeh } SVGAFifoEscapeCmdVideoBase;
85ebc9ac7cSZack Rusin #pragma pack(pop)
868ce75f8aSSinclair Yeh 
87ebc9ac7cSZack Rusin #pragma pack(push, 1)
88ebc9ac7cSZack Rusin typedef struct {
898ce75f8aSSinclair Yeh 	SVGAFifoEscapeCmdVideoBase videoCmd;
908ce75f8aSSinclair Yeh } SVGAFifoEscapeCmdVideoFlush;
91ebc9ac7cSZack Rusin #pragma pack(pop)
928ce75f8aSSinclair Yeh 
93ebc9ac7cSZack Rusin #pragma pack(push, 1)
94ebc9ac7cSZack Rusin typedef struct {
958ce75f8aSSinclair Yeh 	SVGAFifoEscapeCmdVideoBase videoCmd;
968ce75f8aSSinclair Yeh 	struct {
978ce75f8aSSinclair Yeh 		uint32 regId;
988ce75f8aSSinclair Yeh 		uint32 value;
998ce75f8aSSinclair Yeh 	} items[1];
1008ce75f8aSSinclair Yeh } SVGAFifoEscapeCmdVideoSetRegs;
101ebc9ac7cSZack Rusin #pragma pack(pop)
1028ce75f8aSSinclair Yeh 
103ebc9ac7cSZack Rusin #pragma pack(push, 1)
104ebc9ac7cSZack Rusin typedef struct {
1058ce75f8aSSinclair Yeh 	SVGAFifoEscapeCmdVideoBase videoCmd;
1068ce75f8aSSinclair Yeh 	struct {
1078ce75f8aSSinclair Yeh 		uint32 regId;
1088ce75f8aSSinclair Yeh 		uint32 value;
1098ce75f8aSSinclair Yeh 	} items[SVGA_VIDEO_NUM_REGS];
1108ce75f8aSSinclair Yeh } SVGAFifoEscapeCmdVideoSetAllRegs;
111ebc9ac7cSZack Rusin #pragma pack(pop)
1128ce75f8aSSinclair Yeh 
113ebc9ac7cSZack Rusin #if defined __cplusplus
1148ce75f8aSSinclair Yeh }
115ebc9ac7cSZack Rusin #endif
1168ce75f8aSSinclair Yeh 
117ebc9ac7cSZack Rusin #endif
118