// SPDX-License-Identifier:     GPL-2.0+
/*
 * This file's test data is derived from UEFI SCT.
 * The original copyright is attached below.
 */

/*
 * Copyright 2006 - 2016 Unified EFI, Inc.<BR>
 * Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
 *
 * This program and the accompanying materials
 * are licensed and made available under the terms and conditions of the BSD
 * License which accompanies this distribution.  The full text of the license
 * may be found at
 * http://opensource.org/licenses/bsd-license.php
 *
 * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 */

#include <efi.h>

#ifdef NOT_USED
/*
 * TODO: These macro's are not used as they appear only in
 * "#ifdef NOT_USED" clauses. In the future, define them elsewhere.
 */

/* HII form */
#define EFI_IFR_AND_OP			0x15
#define EFI_IFR_END_OP			0x29
#define EFI_IFR_BITWISE_AND_OP		0x35

/* HII image */
#define EFI_HII_IIBT_END		0x00
#define EFI_HII_IIBT_IMAGE_1BIT		0x10
#endif

/* HII keyboard layout */
#define EFI_NULL_MODIFIER		0x0000

u8 packagelist1[] = {
	// EFI_HII_PACKAGE_LIST_HEADER, length = 20
	// SimpleFont, Font, GUID, Form, String, Image, DevicePath,
	// (74)        (110) 20    (8)   78      (67)   (8)
	// KeyboardLayout, End
	// 192             4

	0x89, 0xcd, 0xab, 0x03, 0xf4, 0x03, 0x44, 0x70,
	0x81, 0xde, 0x99, 0xb1, 0x81, 0x20, 0xf7, 0x68,	//16: guid
	0x3a, 0x01, 0x00, 0x00,				// 4: total 314(0x13a)
#ifdef NOT_USED /* TODO: simple font package not implemented yet */
	//
	// Simple Font Package 1, length = 74
	//
	0x4A, 0x00, 0x00,
	EFI_HII_PACKAGE_SIMPLE_FONTS,
	1, 0,
	1, 0,
	0x55, 0x0, 0x1,
	1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
	0x77, 0x0, 0x2,
	2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
	3, 4, 5,
	6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 0, 0, 0,
	//
	// Font Package 1, length = 110
	//
	0x6e, 0x00, 0x00,				// 3
	EFI_HII_PACKAGE_FONTS,				// 1
	0x5c, 0x00, 0x00, 0x00,				// 4: size of header
	0x5c, 0x00, 0x00, 0x00,				// 4: offset
	0xf1, 0x00, 0xf2, 0x00, 0xf3, 0x00, 0xf4, 0x00,
	0xf5, 0x00, 0xec, 0xec,				//10+2(pads)
	0xff, 0x33, 0xff, 0x44,				// 4: font style
	0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66,	//64
	//
	// Glyph block  1, length = 18
	//
	EFI_HII_GIBT_GLYPH_DEFAULT,			// 1
	0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x99,
	0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,	//16: BitMapData
	EFI_HII_GIBT_END,				// 1
#endif
	//
	// Guid Package 1, length = 20
	//
	0x14, 0x00, 0x00,				// 3
	EFI_HII_PACKAGE_TYPE_GUID,			// 1
	0x5a, 0xc9, 0x87, 0x03, 0x3, 0xd7, 0x46, 0x23,
	0xb2, 0xab, 0xd0, 0xc7, 0xdd, 0x90, 0x44, 0xf8,	//16: guid
#ifdef NOT_USED /* TODO: form package not implemented yet */
	//
	// EFI_HII_PACKAGE_FORMS, length = 8
	//
	0x08, 0x00, 0x00,				// 3
	EFI_HII_PACKAGE_FORMS,				// 1
	//
	// Opcode 1, length = 4
	//
	EFI_IFR_AND_OP,
	0x82,
	EFI_IFR_END_OP,
	0x02,
	//
#endif
	// EFI_HII_PACKAGE_STRINGS, length = 78
	//
	0x4e, 0x00, 0x00,				// 3: length(header)
	EFI_HII_PACKAGE_STRINGS,			// 1: type(header)
	0x3c, 0x00, 0x00, 0x00,				// 4: header_size
	0x3c, 0x00, 0x00, 0x00,				// 4: string_offset
	0x00, 0x00, 0x11, 0x22, 0x44, 0x55, 0x77, 0x89,	//32: language_window
	0x11, 0x00, 0x11, 0x22, 0x44, 0x55, 0x87, 0x89,
	0x22, 0x00, 0x11, 0x22, 0x44, 0x55, 0x77, 0x89,
	0x33, 0x00, 0x11, 0x22, 0x44, 0x55, 0x77, 0x89,
	0x01, 0x00,					// 2: language name
	0x65, 0x6e, 0x2d, 0x55, 0x53, 0x3b, 0x7a, 0x68, //14: language
	0x2d, 0x48, 0x61, 0x6e, 0x74, 0x00,		//    "en-US;zh-Hant"
	EFI_HII_SIBT_STRING_UCS2,			// 1
	0x45,  0x00,  0x6E,  0x00,  0x67,  0x00,  0x6C, 0x00,
	0x69,  0x00,  0x73,  0x00,  0x68,  0x00,  0x00, 0x00,	//16: "English"
	EFI_HII_SIBT_END,				// 1
#ifdef NOT_USED /* TODO: image package not implemented yet */
	//
	// EFI_HII_PACKAGE_IMAGES, length = 67
	//
	0x43, 0x00, 0x00,			// 3
	EFI_HII_PACKAGE_IMAGES,			// 1
	0x0c, 0x00, 0x00, 0x00,			// 4: image info offset
	0x39, 0x00, 0x00, 0x00,			// 4: palette info offset
	EFI_HII_IIBT_IMAGE_1BIT,		// 1
	0x01,
	0x0b, 0x00,
	0x13, 0x00,
	0x80, 0x00,
	0xc0, 0x00,
	0xe0, 0x00,
	0xf0, 0x00,
	0xf8, 0x00,
	0xfc, 0x00,
	0xfe, 0x00,
	0xff, 0x00,
	0xff, 0x80,
	0xff, 0xc0,
	0xff, 0xe0,
	0xfe, 0x00,
	0xef, 0x00,
	0xcf, 0x00,
	0x87, 0x80,
	0x07, 0x80,
	0x03, 0xc0,
	0x03, 0xc0,
	0x01, 0x80,				//43
	EFI_HII_IIBT_END,			// 1
	0x01, 0x00,
	0x06, 0x00,
	0x00, 0x00, 0x00,
	0xFF, 0xFF, 0xFF,			//10
	//
	// EFI_HII_PACKAGE_DEVICE_PATH, length = 8
	//
	0x08, 0x00, 0x00,			// 3
	EFI_HII_PACKAGE_DEVICE_PATH,		// 1
	0x01, 0x23, 0x45, 0x66,			// 4: dummy device path protocol
						//    instance address
#endif
	//
	// Keyboard layout package 1, length = 192
	0xc0, 0x00, 0x00,			// 3: length(header)
	EFI_HII_PACKAGE_KEYBOARD_LAYOUT,	// 1: type(header)
	0x02, 0x00,				// 2: LayoutCount
	//
	// Layout 1, length = 93
	//
	0x5d, 0x00,				// 2: layout_length
	0x95, 0xe4, 0x40, 0x8d, 0xaa, 0xe2, 0x6f, 0x4c,
	0x89, 0x70, 0x68, 0x85, 0x09, 0xee, 0xc7, 0xd2, //16: guid
	0x37, 0x00, 0x00, 0x00,			// 4: layout_descriptor_
						//        string_offset
	0x02,					// 1: descriptor_count
	//
	// Descriptor 1, length = 16
	//
	49, 0x00, 0x00, 0x00,			// 4: key (EfiKeyD1)
	'q', 0x00,				// 2: unicode
	'Q', 0x00,				// 2: shifted_unicode
	0x00, 0x00,				// 2: alt_gr_unicode
	0x00, 0x00,				// 2: shifted_alt_gr_unicode
	EFI_NULL_MODIFIER, 0x00,		// 2: modifier
	0x03, 0x00,				// 2: affected_attribute
	//
	// Descriptor 2,  length = 16
	//
	50, 0x00, 0x00, 0x00,			// 4: key (EfiKeyD2)
	'w', 0x00,				// 2: unicode
	'W', 0x00,				// 2: shifted_unicode
	0x00, 0x00,				// 2: alt_gr_unicode
	0x00, 0x00,				// 2: shifted_alt_gr_unicode
	EFI_NULL_MODIFIER, 0x00,		// 2: modifier
	0x3, 0x0,				// 2: affected_attribute
	//
	// EFI_DESCRIPTOR_STRING_BUNDLE, length = 38
	//
	0x01, 0x00,				// 2: DescriptionCount
	'e', 0x0, 'n', 0x0, '-', 0x0, 'U', 0x0, 'S', 0x0,
						//10: RFC3066 language code
	' ', 0x0,				// 2: Space
	'S', 0x0, 'i', 0x0, 'm', 0x0, 'p', 0x0, 'l', 0x0, 'e', 0x0,
	'1', 0x0, 'o', 0x0, 'n', 0x0, 'l', 0x0, 'y', 0x0, '\0', 0x0,
						//24: DescriptionString
	//
	// Layout 2, length = 93
	//
	0x5d, 0x00,				// 2: layout_length
	0x3e, 0x0b, 0xe6, 0x2a, 0xd6, 0xb9, 0xd8, 0x49,
	0x9a, 0x16, 0xc2, 0x48, 0xf1, 0xeb, 0xa8, 0xdb,	//16: guid
	0x37, 0x00, 0x00, 0x00,			// 4: layout_descriptor_
						//    string_offset
	0x02,					// 1 Descriptor count
	//
	// Descriptor 1, length = 16
	//
	51, 0x0, 0x0, 0x0,			// 4: key (EfiKeyD3)
	'e', 0x00,				// 2: unicode
	'E', 0x00,				// 2: shifted_unicode
	0x00, 0x00,				// 2: alt_gr_unicode
	0x00, 0x00,				// 2: shifted_alt_gr_unicode
	EFI_NULL_MODIFIER, 0x0,			// 2: modifier
	0x3, 0x0,				// 2: affected_attribute
	//
	// Descriptor 2,  length = 16
	//
	52, 0x0, 0x0, 0x0,			// 4: key (EfiKeyD4)
	'r', 0x00,				// 2: unicode
	'R', 0x00,				// 2: shifted_unicode
	0x00, 0x00,				// 2: alt_gr_unicode
	0x00, 0x00,				// 2: shifted_alt_gr_unicode
	EFI_NULL_MODIFIER, 0x0,			// 2: modifier
	0x3, 0x0,				// 2: affected_attribute
	//
	// EFI_DESCRIPTOR_STRING_BUNDLE, length = 38
	//
	0x01, 0x00,				// 2: DescriptionCount
	'e', 0x0, 'n', 0x0, '-', 0x0, 'U', 0x0, 'S', 0x0,
						//10: RFC3066 language code
	' ', 0x0,				// 2: Space
	'S', 0x0, 'i', 0x0, 'm', 0x0, 'p', 0x0, 'l', 0x0, 'e', 0x0,
	'2', 0x0, 'o', 0x0, 'n', 0x0, 'l', 0x0, 'y', 0x0, '\0', 0x0,
						//24: DescriptionString
	//
	// End of package list, length = 4
	//
	0x4, 0x00, 0x00,
	EFI_HII_PACKAGE_END
};

u8 packagelist2[] = {
	// EFI_HII_PACKAGE_LIST_HEADER, length = 20
	// SimpleFont, Font, GUID, KeyboardLayout, Form, End
	// (74)        (122) 20    192             (8)   4
	0xd3, 0xde, 0x85, 0x86, 0xce, 0x1b, 0xf3, 0x43,
	0xa2, 0x0c, 0xa3, 0x06, 0xec, 0x69, 0x72, 0xdd,	//16
	0xec, 0x00, 0x00, 0x00,				// 4: total 236(0xec)

#ifdef NOT_USED /* TODO: simple font package not implemented yet */
	//
	// Simple Font Package 2, length = 74
	//
	0x4A, 0x00, 0x00,				// 3
	EFI_HII_PACKAGE_SIMPLE_FONTS,			// 1
	1, 0,						// 2
	1, 0,						// 2
	0x33, 0x0, 0, 1, 2, 3, 4, 5, 0, 7, 8, 9,
	10, 11, 12, 13, 14, 15, 16, 17, 18, 19,		//22
	0x44, 0x0, 0x2, 2, 3, 4, 5, 6, 0, 8, 9,
	10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,	//22
	3, 4, 5, 6, 7, 8, 9, 10, 11, 9, 13,
	14, 15, 16, 17, 18, 19, 20, 21, 0, 0, 0,	//22
	//
	// Font Package 2, length = 122
	//
	0x7A, 0x00, 0x00,				// 3
	EFI_HII_PACKAGE_FONTS,				// 1
	0x5C, 0x00, 0x00, 0x00,				// 4: size of header
	0x5C, 0x00, 0x00, 0x00,				// 4: dummy offset
	0xf1, 0x00, 0xf2, 0x00, 0xf3, 0x00, 0xf4, 0x00,
	0xf5, 0x00, 0xec, 0xec,				//10+2(pads)
	0xff, 0x11, 0xff, 0x22,				// 4: font style
	0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88,	//64
	//
	// Glyph block  1, length = 30
	//
	EFI_HII_GIBT_GLYPH,				// 1
	0xf1, 0x00, 0xf2, 0x00, 0xf3, 0x00, 0xf4, 0x00,
	0xf5, 0x00,					//10
	0xff, 0x01,					// 2
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,	//16: BitMapData
	EFI_HII_GIBT_END,				// 1
#endif
	//
	// Guid Package 1, length = 20
	//
	0x14, 0x00, 0x00,				// 3
	EFI_HII_PACKAGE_TYPE_GUID,			// 1
	0x5a, 0xc9, 0x87, 0x03, 0x3, 0xd7, 0x46, 0x23,
	0xb2, 0xab, 0xd0, 0xc7, 0xdd, 0x90, 0x44, 0xf8,	//16: guid
	//
	// Keyboard layout package 2, length = 192
	0xc0, 0x00, 0x00,			// 3
	EFI_HII_PACKAGE_KEYBOARD_LAYOUT,	// 1
	0x02, 0x00, //0xec, 0xec,		// 2: LayoutCount
	//
	// Layout 1, length = 93
	//
	0x5d, 0x00,					// 2: layout_length
	0x1f, 0x6a, 0xf5, 0xe0, 0x6b, 0xdf, 0x7e, 0x4a,
	 0xa3, 0x9a, 0xe7, 0xa5, 0x19, 0x15, 0x45, 0xd6,//16: guid
	0x37, 0x00, 0x00, 0x00,				// 4: layout_descriptor
							//    string offset
	0x02,						// 1: descriptor_count
	//
	// Descriptor 1, length = 16
	//
	32, 0x00, 0x00, 0x00,			// 4: key (EfiKeyC1)
	'a', 0x00,				// 2: unicode
	'A', 0x00,				// 2: shifted_unicode
	0x00, 0x00,				// 2: alt_gr_unicode
	0x00, 0x00,				// 2: shifted_alt_gr_unic
	EFI_NULL_MODIFIER, 0x00,		// 2: modifier
	0x03, 0x00,				// 2: affected_attribute
	//
	// Descriptor 2,  length = 16
	//
	33 /*EfiKeyC2*/, 0x00, 0x00, 0x00,
	's', 0x00,
	'S', 0x00,
	0x00, 0x00,
	0x00, 0x00,
	EFI_NULL_MODIFIER, 0x00,
	0x3, 0x0,
	//
	// EFI_DESCRIPTOR_STRING_BUNDLE, length = 38
	//
	0x01, 0x00,				// 2: DescriptionCount
	'e', 0x0, 'n', 0x0, '-', 0x0, 'U', 0x0, 'S', 0x0,
						//10: RFC3066 language code
	' ', 0x0,				// 2: Space
	'S', 0x0, 'i', 0x0, 'm', 0x0, 'p', 0x0, 'l', 0x0, 'e', 0x0,
	'3', 0x0, 'o', 0x0, 'n', 0x0, 'l', 0x0, 'y', 0x0, '\0', 0x0,
						//24: DescriptionString
	//
	// Layout 2, length = 93
	//
	0x5d, 0x00,					// 2: layout_length
	0xc9, 0x6a, 0xbe, 0x47, 0xcc, 0x54, 0xf9, 0x46,
	0xa2, 0x62, 0xd5, 0x3b, 0x25, 0x6a, 0xc, 0x34,	//16: guid
	0x37, 0x00, 0x00, 0x00,				// 4: layout_descriptor
							//    string_offset
	0x02,						// 1: descriptor_count
	//
	// Descriptor 1, length = 16
	//
	34 /*EfiKeyC3*/, 0x0, 0x0, 0x0,
	'd', 0x00,
	'D', 0x00,
	0x00, 0x00,
	0x00, 0x00,
	EFI_NULL_MODIFIER, 0x0,
	0x3, 0x0,
	//
	// Descriptor 2,  length = 16
	//
	35 /*EfiKeyC4*/, 0x0, 0x0, 0x0,
	'e', 0x00,
	'E', 0x00,
	0x00, 0x00,
	0x00, 0x00,
	EFI_NULL_MODIFIER,  0x0,
	0x3, 0x0,
	//
	// EFI_DESCRIPTOR_STRING_BUNDLE, length = 38
	//
	0x01, 0x00,				// 2: DescriptionCount
	'e', 0x0, 'n', 0x0, '-', 0x0, 'U', 0x0, 'S', 0x0,
						//10: RFC3066 language code
	' ', 0x0,				// 2: Space
	'S', 0x0, 'i', 0x0, 'm', 0x0, 'p', 0x0, 'l', 0x0, 'e', 0x0,
	'4', 0x0, 'o', 0x0, 'n', 0x0, 'l', 0x0, 'y', 0x0, '\0', 0x0,
						//24: DescriptionString
#ifdef NOT_USED /* TODO: form package not implemented yet */
	//
	// EFI_HII_PACKAGE_FORMS, length = 8
	//
	0x08, 0x00, 0x00,			// 3
	EFI_HII_PACKAGE_FORMS,			// 1
	//
	// Opcode 1
	//
	EFI_IFR_BITWISE_AND_OP,			// 1
	0x02,					// 1
	EFI_IFR_END_OP,				// 1
	0x02,					// 1
#endif
	//
	// End of package list, length = 4
	//
	0x4, 0x00, 0x00,			// 3
	EFI_HII_PACKAGE_END			// 1
};

efi_guid_t packagelist_guid1 =
	EFI_GUID(0x03abcd89, 0x03f4, 0x7044,
		 0x81, 0xde, 0x99, 0xb1, 0x81, 0x20, 0xf7, 0x68);

efi_guid_t packagelist_guid2 =
	EFI_GUID(0x8685ded3, 0x1bce, 0x43f3,
		 0xa2, 0x0c, 0xa3, 0x06, 0xec, 0x69, 0x72, 0xdd);

efi_guid_t kb_layout_guid11 =
	EFI_GUID(0x8d40e495, 0xe2aa, 0x4c6f,
		 0x89, 0x70, 0x68, 0x85, 0x09, 0xee, 0xc7, 0xd2);

efi_guid_t kb_layout_guid12 =
	EFI_GUID(0x2ae60b3e, 0xb9d6, 0x49d8,
		 0x9a, 0x16, 0xc2, 0x48, 0xf1, 0xeb, 0xa8, 0xdb);

efi_guid_t kb_layout_guid21 =
	EFI_GUID(0xe0f56a1f, 0xdf6b, 0x4a7e,
		 0xa3, 0x9a, 0xe7, 0xa5, 0x19, 0x15, 0x45, 0xd6);

efi_guid_t kb_layout_guid22 =
	EFI_GUID(0x47be6ac9, 0x54cc, 0x46f9,
		 0xa2, 0x62, 0xd5, 0x3b, 0x25, 0x6a, 0x0c, 0x34);

efi_guid_t package_guid =
	EFI_GUID(0x0387c95a, 0xd703, 0x2346,
		 0xb2, 0xab, 0xd0, 0xc7, 0xdd, 0x90, 0x44, 0xf8);
