* test_hii_database_get_keyboard_layout() - test retrieval of keyboard layout
*
* This test adds two package lists, each of which has two keyboard layouts
- * and then tries to get a handle to keyboard layout with a specific guid
- * and the current one.
+ * and then tries to get a handle to every keyboard layout and the current one.
*
* @Return: status code
*/
struct efi_hii_keyboard_layout *kb_layout;
u16 kb_layout_size;
efi_status_t ret;
- int result = EFI_ST_FAILURE;
+ int result = EFI_ST_FAILURE, i;
+ static efi_guid_t *const kb_layout_guids[] = {
+ &kb_layout_guid11, &kb_layout_guid12,
+ &kb_layout_guid21, &kb_layout_guid22
+ };
PRINT_TESTNAME;
ret = hii_database_protocol->new_package_list(hii_database_protocol,
goto out;
}
- /* specific keyboard_layout(guid11) */
- kb_layout = NULL;
- kb_layout_size = 0;
- ret = hii_database_protocol->get_keyboard_layout(hii_database_protocol,
- &kb_layout_guid11, &kb_layout_size, kb_layout);
- if (ret != EFI_BUFFER_TOO_SMALL) {
- efi_st_error("get_keyboard_layout returned %u\n",
- (unsigned int)ret);
- goto out;
- }
- ret = boottime->allocate_pool(EFI_LOADER_DATA, kb_layout_size,
- (void **)&kb_layout);
- if (ret != EFI_SUCCESS) {
- efi_st_error("AllocatePool failed\n");
- goto out;
- }
- ret = hii_database_protocol->get_keyboard_layout(hii_database_protocol,
- &kb_layout_guid11, &kb_layout_size, kb_layout);
- if (ret != EFI_SUCCESS) {
- efi_st_error("get_keyboard_layout returned %u\n",
- (unsigned int)ret);
- goto out;
- }
- ret = boottime->free_pool(kb_layout);
- if (ret != EFI_SUCCESS) {
- efi_st_error("FreePool failed\n");
- goto out;
+ /* Verify all keyboard layouts */
+ for (i = 0; i < ARRAY_SIZE(kb_layout_guids); i++) {
+ efi_guid_t *kb_layout_guid = kb_layout_guids[i];
+
+ kb_layout = NULL;
+ kb_layout_size = 0;
+ ret = hii_database_protocol->get_keyboard_layout(hii_database_protocol,
+ kb_layout_guid, &kb_layout_size, kb_layout);
+ if (ret != EFI_BUFFER_TOO_SMALL) {
+ efi_st_error("get_keyboard_layout returned %u\n",
+ (unsigned int)ret);
+ goto out;
+ }
+ ret = boottime->allocate_pool(EFI_LOADER_DATA, kb_layout_size,
+ (void **)&kb_layout);
+ if (ret != EFI_SUCCESS) {
+ efi_st_error("AllocatePool failed\n");
+ goto out;
+ }
+ ret = hii_database_protocol->get_keyboard_layout(hii_database_protocol,
+ kb_layout_guid, &kb_layout_size, kb_layout);
+ if (ret != EFI_SUCCESS) {
+ efi_st_error("get_keyboard_layout returned %u\n",
+ (unsigned int)ret);
+ goto out;
+ }
+ ret = boottime->free_pool(kb_layout);
+ if (ret != EFI_SUCCESS) {
+ efi_st_error("FreePool failed\n");
+ goto out;
+ }
}
/* current */
EFI_GUID(0x8d40e495, 0xe2aa, 0x4c6f,
0x89, 0x70, 0x68, 0x85, 0x09, 0xee, 0xc7, 0xd2);
+static efi_guid_t kb_layout_guid12 =
+ EFI_GUID(0x2ae60b3e, 0xb9d6, 0x49d8,
+ 0x9a, 0x16, 0xc2, 0x48, 0xf1, 0xeb, 0xa8, 0xdb);
+
+static efi_guid_t kb_layout_guid21 =
+ EFI_GUID(0xe0f56a1f, 0xdf6b, 0x4a7e,
+ 0xa3, 0x9a, 0xe7, 0xa5, 0x19, 0x15, 0x45, 0xd6);
+
+static efi_guid_t kb_layout_guid22 =
+ EFI_GUID(0x47be6ac9, 0x54cc, 0x46f9,
+ 0xa2, 0x62, 0xd5, 0x3b, 0x25, 0x6a, 0x0c, 0x34);
+
static efi_guid_t package_guid =
EFI_GUID(0x0387c95a, 0xd703, 0x2346,
0xb2, 0xab, 0xd0, 0xc7, 0xdd, 0x90, 0x44, 0xf8);