diff options
author | Andrew Jeffery <andrew@aj.id.au> | 2017-04-12 14:22:25 +0930 |
---|---|---|
committer | Andrew Jeffery <andrew@aj.id.au> | 2017-04-26 17:16:13 +0930 |
commit | 26b3567ebe0bce7619d0b537cda0c47ebad4e1f0 (patch) | |
tree | 4ba565108ab4c9b099836d27ff6e2a2d8f80d9b7 /test/write_flash.c | |
parent | f37ae026f57bec7dfba11b134643a27b00741b4a (diff) | |
download | phosphor-mboxd-26b3567ebe0bce7619d0b537cda0c47ebad4e1f0.tar.gz phosphor-mboxd-26b3567ebe0bce7619d0b537cda0c47ebad4e1f0.zip |
test: Add write_flash
Change-Id: I887d79db9f1fd5e63c16a717a88cd76a1f800986
Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
Diffstat (limited to 'test/write_flash.c')
-rw-r--r-- | test/write_flash.c | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/test/write_flash.c b/test/write_flash.c new file mode 100644 index 0000000..382a4a2 --- /dev/null +++ b/test/write_flash.c @@ -0,0 +1,119 @@ +/* + * MBox Daemon Test File + * + * Copyright 2017 IBM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> +#include <sys/ioctl.h> +#include <sys/mman.h> +#include <unistd.h> + +#include "mbox.h" +#include "mboxd_flash.h" + +#include "test/tmpf.h" + +struct tmpf _tmp, *tmp = &_tmp; + +void cleanup(void) +{ + tmpf_destroy(tmp); +} + +char *get_dev_mtd(void) +{ + int rc; + + rc = tmpf_init(tmp, "flashXXXXXX"); + if (rc < 0) + return NULL; + + return strdup(tmp->path); +} + +#define MEM_SIZE 3 +#define ERASE_SIZE 1 + +int ioctl(int fd, unsigned long request, ...) +{ + va_list ap; + + if (request != MEMGETINFO) + return -1; + + struct mtd_info_user *info; + + va_start(ap, request); + info = va_arg(ap, struct mtd_info_user *); + info->size = MEM_SIZE; + info->erasesize = ERASE_SIZE; + va_end(ap); + + return 0; +} + +int main(void) +{ + struct mbox_context _context, *context = &_context; + char src[MEM_SIZE]; + uint8_t *map; + int rc; + + atexit(cleanup); + + rc = init_flash_dev(context); + assert(rc == 0); + + map = mmap(NULL, MEM_SIZE, PROT_READ, MAP_PRIVATE, tmp->fd, 0); + assert(map != MAP_FAILED); + + memset(src, 0xaa, sizeof(src)); + rc = write_flash(context, 0, src, sizeof(src)); + assert(rc == 0); + rc = memcmp(src, map, sizeof(src)); + assert(rc == 0); + + memset(src, 0x55, sizeof(src)); + rc = write_flash(context, 0, src, sizeof(src)); + assert(rc == 0); + rc = memcmp(src, map, sizeof(src)); + assert(rc == 0); + + src[0] = 0xff; + rc = write_flash(context, 0, src, 1); + assert(rc == 0); + rc = memcmp(src, map, sizeof(src)); + assert(rc == 0); + + src[1] = 0xff; + rc = write_flash(context, 1, &src[1], 1); + assert(rc == 0); + rc = memcmp(src, map, sizeof(src)); + assert(rc == 0); + + src[2] = 0xff; + rc = write_flash(context, 2, &src[2], 1); + assert(rc == 0); + rc = memcmp(src, map, sizeof(src)); + assert(rc == 0); + + free_flash_dev(context); + + return rc; +} |