|  | // SPDX-License-Identifier: Apache-2.0 | 
|  | // Copyright (C) 2018 IBM Corp. | 
|  |  | 
|  | #include <assert.h> | 
|  |  | 
|  | #include "mbox.h" | 
|  | #include "mboxd_msg.h" | 
|  |  | 
|  | #include "test/mbox.h" | 
|  | #include "test/system.h" | 
|  |  | 
|  | static const uint8_t get_mbox_info[] = { | 
|  | 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, | 
|  | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 | 
|  | }; | 
|  |  | 
|  | static const uint8_t get_mbox_info_response[] = { | 
|  | 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, | 
|  | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, | 
|  | }; | 
|  |  | 
|  | static const uint8_t get_flash_info0[] = { | 
|  | 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 
|  | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 | 
|  | }; | 
|  |  | 
|  | static const uint8_t get_flash_info_response0[] = { | 
|  | 0x03, 0x01, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, | 
|  | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 | 
|  | }; | 
|  |  | 
|  | static const uint8_t get_flash_info1[] = { | 
|  | 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 
|  | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 | 
|  | }; | 
|  |  | 
|  | static const uint8_t get_flash_info_response1[] = { | 
|  | 0x03, 0x02, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, | 
|  | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 | 
|  | }; | 
|  |  | 
|  | #define MEM_SIZE	3 | 
|  | #define ERASE_SIZE	1 | 
|  | #define N_WINDOWS	1 | 
|  | #define WINDOW_SIZE	1 | 
|  |  | 
|  | int main(void) | 
|  | { | 
|  | struct mbox_context *ctx; | 
|  | int rc; | 
|  |  | 
|  | system_set_reserved_size(MEM_SIZE); | 
|  | system_set_mtd_sizes(MEM_SIZE, ERASE_SIZE); | 
|  |  | 
|  | ctx = mbox_create_test_context(N_WINDOWS, WINDOW_SIZE); | 
|  |  | 
|  | /* Consecutive GET_MBOX_INFOs can use "invalid" sequence numbers */ | 
|  | rc = mbox_command_dispatch(ctx, get_mbox_info, sizeof(get_mbox_info)); | 
|  | assert(rc == 1); | 
|  |  | 
|  | rc = mbox_cmp(ctx, get_mbox_info_response, | 
|  | sizeof(get_mbox_info_response)); | 
|  | assert(rc == 0); | 
|  |  | 
|  | rc = mbox_command_dispatch(ctx, get_mbox_info, sizeof(get_mbox_info)); | 
|  | assert(rc == 1); | 
|  |  | 
|  | /* Other commands must use valid sequence numbers */ | 
|  | rc = mbox_command_dispatch(ctx, get_flash_info0, | 
|  | sizeof(get_flash_info0)); | 
|  | assert(rc == 1); | 
|  |  | 
|  | rc = mbox_cmp(ctx, get_flash_info_response0, | 
|  | sizeof(get_flash_info_response0)); | 
|  | assert(rc == 0); | 
|  |  | 
|  | rc = mbox_command_dispatch(ctx, get_flash_info0, | 
|  | sizeof(get_flash_info0)); | 
|  | assert(rc == 8); | 
|  |  | 
|  | /* Retry with a "valid" sequence number */ | 
|  | rc = mbox_command_dispatch(ctx, get_flash_info1, | 
|  | sizeof(get_flash_info1)); | 
|  | assert(rc == 1); | 
|  |  | 
|  | rc = mbox_cmp(ctx, get_flash_info_response1, | 
|  | sizeof(get_flash_info_response1)); | 
|  | assert(rc == 0); | 
|  |  | 
|  | return rc; | 
|  | } |