summaryrefslogtreecommitdiff
path: root/meta-xilinx/meta-xilinx-bsp/recipes-devtools/qemu/files/flash_stripe.c
diff options
context:
space:
mode:
Diffstat (limited to 'meta-xilinx/meta-xilinx-bsp/recipes-devtools/qemu/files/flash_stripe.c')
-rw-r--r--meta-xilinx/meta-xilinx-bsp/recipes-devtools/qemu/files/flash_stripe.c176
1 files changed, 0 insertions, 176 deletions
diff --git a/meta-xilinx/meta-xilinx-bsp/recipes-devtools/qemu/files/flash_stripe.c b/meta-xilinx/meta-xilinx-bsp/recipes-devtools/qemu/files/flash_stripe.c
deleted file mode 100644
index a9a6e76a5..000000000
--- a/meta-xilinx/meta-xilinx-bsp/recipes-devtools/qemu/files/flash_stripe.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Stripe a flash image across multiple files.
- *
- * Copyright (C) 2019 Xilinx, Inc. All rights reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <stdbool.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <string.h>
-
-/* N way (num) in place bit striper. Lay out row wise bits column wise
- * (from element 0 to N-1). num is the length of x, and dir reverses the
- * direction of the transform. be determines the bit endianess scheme.
- * false to lay out bits LSB to MSB (little endian) and true for big endian.
- *
- * Best illustrated by examples:
- * Each digit in the below array is a single bit (num == 3, be == false):
- *
- * {{ 76543210, } ----- stripe (dir == false) -----> {{ FCheb630, }
- * { hgfedcba, } { GDAfc741, }
- * { HGFEDCBA, }} <---- upstripe (dir == true) ----- { HEBgda52, }}
- *
- * Same but with be == true:
- *
- * {{ 76543210, } ----- stripe (dir == false) -----> {{ 741gdaFC, }
- * { hgfedcba, } { 630fcHEB, }
- * { HGFEDCBA, }} <---- upstripe (dir == true) ----- { 52hebGDA, }}
- */
-
-static inline void stripe8(uint8_t *x, int num, bool dir, bool be)
-{
- uint8_t r[num];
- memset(r, 0, sizeof(uint8_t) * num);
- int idx[2] = {0, 0};
- int bit[2] = {0, be ? 7 : 0};
- int d = dir;
-
- for (idx[0] = 0; idx[0] < num; ++idx[0]) {
- for (bit[0] = be ? 7 : 0; bit[0] != (be ? -1 : 8); bit[0] += be ? -1 : 1) {
- r[idx[!d]] |= x[idx[d]] & 1 << bit[d] ? 1 << bit[!d] : 0;
- idx[1] = (idx[1] + 1) % num;
- if (!idx[1]) {
- bit[1] += be ? -1 : 1;
- }
- }
- }
- memcpy(x, r, sizeof(uint8_t) * num);
-}
-
-int main (int argc, char *argv []) {
-#ifdef UNSTRIPE
- bool unstripe = true;
-#else
- bool unstripe = false;
-#endif
-
-#ifdef FLASH_STRIPE_BE
- bool be = true;
-#else
- bool be = false;
-#endif
-
- int i;
-
- const char *exe_name = argv[0];
- argc--;
- argv++;
-
- if (argc < 2) {
- fprintf(stderr, "ERROR: %s requires at least two args\n", exe_name);
- return 1;
- }
-
- const char *single_f = argv[0];
- int single;
-
- if (unstripe) {
- single = creat(single_f, 0644);
- } else {
- single = open(single_f, 0);
- }
- if (single == -1) {
- perror(argv[0]);
- return 1;
- }
-
- argv++;
- argc--;
-
- int multiple[argc];
-
- for (i = 0; i < argc; ++i) {
- if (unstripe) {
- multiple[i] = open(argv[i], 0);
- } else {
- multiple[i] = creat(argv[i], 0644);
- }
- if (multiple[i] == -1) {
- perror(argv[i]);
- return 1;
- }
- }
-
- while (true) {
- uint8_t buf[argc];
- for (i = 0; i < argc; ++i) {
- switch (read(!unstripe ? single : multiple[
-#if defined(FLASH_STRIPE_BW) && defined (FLASH_STRIPE_BE)
- argc - 1 -
-#endif
- i], &buf[i], 1)) {
- case 0:
- if (i == 0) {
- goto done;
- } else if (!unstripe) {
- fprintf(stderr, "WARNING:input file %s is not multiple of "
- "%d bytes, padding with garbage byte\n", single_f,
- argc);
- }
- break;
- case -1:
- perror(unstripe ? argv[i] : single_f);
- return 1;
- }
- }
-
-#ifndef FLASH_STRIPE_BW
- stripe8(buf, argc, unstripe, be);
-#endif
-
- for (i = 0; i < argc; ++i) {
- switch (write(unstripe ? single : multiple[
-#if defined(FLASH_STRIPE_BW) && defined (FLASH_STRIPE_BE)
- argc - 1 -
-#endif
- i], &buf[i], 1)) {
- case -1:
- perror(unstripe ? single_f : argv[i]);
- return 1;
- case 0:
- i--; /* try again */
- }
- }
- }
-
-done:
- close(single);
- for (i = 0; i < argc; ++i) {
- close(multiple[argc]);
- }
- return 0;
-}