14fe996c2SAndrew Jeffery // SPDX-License-Identifier: Apache-2.0 24fe996c2SAndrew Jeffery // Copyright (C) 2018 IBM Corp. 3c5da1489SAndrew Jeffery 4c5da1489SAndrew Jeffery #include <assert.h> 5c5da1489SAndrew Jeffery #include <sys/mman.h> 6c5da1489SAndrew Jeffery 726558dbbSAndrew Jeffery #include "mboxd.h" 8*f1e547c7SEvan Lojewski #include "mtd/backend.h" 9457a6e5fSAndrew Jeffery #include "transport_mbox.h" 10c5da1489SAndrew Jeffery 11c5da1489SAndrew Jeffery #include "test/mbox.h" 12c5da1489SAndrew Jeffery #include "test/system.h" 13c5da1489SAndrew Jeffery 14c5da1489SAndrew Jeffery static const uint8_t get_info[] = { 15c5da1489SAndrew Jeffery 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 16c5da1489SAndrew Jeffery 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 17c5da1489SAndrew Jeffery }; 18c5da1489SAndrew Jeffery 19c5da1489SAndrew Jeffery static const uint8_t create_write_window[] = { 20c5da1489SAndrew Jeffery 0x06, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 21c5da1489SAndrew Jeffery 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 22c5da1489SAndrew Jeffery }; 23c5da1489SAndrew Jeffery 24c5da1489SAndrew Jeffery static const uint8_t mark_write_erased[] = { 25c5da1489SAndrew Jeffery 0x0a, 0x02, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 26c5da1489SAndrew Jeffery 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 27c5da1489SAndrew Jeffery }; 28c5da1489SAndrew Jeffery 29c5da1489SAndrew Jeffery static const uint8_t response[] = { 30c5da1489SAndrew Jeffery 0x0a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 31c5da1489SAndrew Jeffery 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 32c5da1489SAndrew Jeffery }; 33c5da1489SAndrew Jeffery 34c5da1489SAndrew Jeffery static const uint8_t write_flush[] = { 35c5da1489SAndrew Jeffery 0x08, 0x03, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 36c5da1489SAndrew Jeffery 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 37c5da1489SAndrew Jeffery }; 38c5da1489SAndrew Jeffery 39c5da1489SAndrew Jeffery const uint8_t start_data[] = { 0xaa, 0x55, 0xaa }; 40c5da1489SAndrew Jeffery const uint8_t finish_data[] = { 0xaa, 0xff, 0xaa }; 41c5da1489SAndrew Jeffery 42c5da1489SAndrew Jeffery #define MEM_SIZE sizeof(start_data) 43c5da1489SAndrew Jeffery #define ERASE_SIZE 1 44c5da1489SAndrew Jeffery #define N_WINDOWS 1 45c5da1489SAndrew Jeffery #define WINDOW_SIZE sizeof(start_data) 46c5da1489SAndrew Jeffery 47c5da1489SAndrew Jeffery int main(void) 48c5da1489SAndrew Jeffery { 49c5da1489SAndrew Jeffery struct mbox_context *ctx; 50c5da1489SAndrew Jeffery uint8_t *map; 51c5da1489SAndrew Jeffery int rc; 52c5da1489SAndrew Jeffery 53c5da1489SAndrew Jeffery system_set_reserved_size(MEM_SIZE); 54c5da1489SAndrew Jeffery system_set_mtd_sizes(MEM_SIZE, ERASE_SIZE); 55c5da1489SAndrew Jeffery 56c5da1489SAndrew Jeffery ctx = mbox_create_test_context(N_WINDOWS, WINDOW_SIZE); 57c5da1489SAndrew Jeffery rc = mbox_set_mtd_data(ctx, start_data, sizeof(start_data)); 58c5da1489SAndrew Jeffery assert(rc == 0); 59c5da1489SAndrew Jeffery 60c5da1489SAndrew Jeffery rc = mbox_command_dispatch(ctx, get_info, sizeof(get_info)); 61c5da1489SAndrew Jeffery assert(rc == 1); 62c5da1489SAndrew Jeffery 63c5da1489SAndrew Jeffery rc = mbox_command_dispatch(ctx, create_write_window, 64c5da1489SAndrew Jeffery sizeof(create_write_window)); 65c5da1489SAndrew Jeffery assert(rc == 1); 66c5da1489SAndrew Jeffery 67c5da1489SAndrew Jeffery rc = mbox_command_dispatch(ctx, mark_write_erased, 68c5da1489SAndrew Jeffery sizeof(mark_write_erased)); 69c5da1489SAndrew Jeffery assert(rc == 1); 70c5da1489SAndrew Jeffery 71c5da1489SAndrew Jeffery rc = mbox_cmp(ctx, response, sizeof(response)); 72c5da1489SAndrew Jeffery assert(rc == 0); 73c5da1489SAndrew Jeffery 74c5da1489SAndrew Jeffery rc = memcmp(ctx->mem, finish_data, sizeof(finish_data)); 75c5da1489SAndrew Jeffery assert(rc == 0); 76c5da1489SAndrew Jeffery 77c5da1489SAndrew Jeffery map = mmap(NULL, MEM_SIZE, PROT_READ, MAP_PRIVATE, 78*f1e547c7SEvan Lojewski ((struct mtd_data *)ctx->backend.priv)->fd, 0); 79c5da1489SAndrew Jeffery assert(map != MAP_FAILED); 80c5da1489SAndrew Jeffery 81c5da1489SAndrew Jeffery rc = memcmp(start_data, map, sizeof(start_data)); 82c5da1489SAndrew Jeffery assert(rc == 0); 83c5da1489SAndrew Jeffery 84c5da1489SAndrew Jeffery rc = mbox_command_dispatch(ctx, write_flush, sizeof(write_flush)); 85c5da1489SAndrew Jeffery assert(rc == 1); 86c5da1489SAndrew Jeffery 87c5da1489SAndrew Jeffery rc = memcmp(finish_data, map, sizeof(finish_data)); 88c5da1489SAndrew Jeffery assert(rc == 0); 89c5da1489SAndrew Jeffery 90c5da1489SAndrew Jeffery return rc; 91c5da1489SAndrew Jeffery }; 92