mirror of
https://github.com/openwrt/openwrt.git
synced 2024-11-26 19:35:13 +08:00
yafut: fix build on non-linux systems
Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
fb3d681783
commit
f4c453fbf2
289
tools/yafut/patches/100-portability.patch
Normal file
289
tools/yafut/patches/100-portability.patch
Normal file
@ -0,0 +1,289 @@
|
||||
--- a/lib/yaffs2/direct/yportenv.h
|
||||
+++ b/lib/yaffs2/direct/yportenv.h
|
||||
@@ -32,10 +32,13 @@
|
||||
#define CONFIG_YAFFS_DEFINES_TYPES 1
|
||||
#define CONFIG_YAFFS_USE_32_BIT_TIME_T 1
|
||||
#define NO_Y_INLINE 1
|
||||
-#define loff_t off_t
|
||||
|
||||
#endif /* __rtems__ */
|
||||
|
||||
+#ifndef linux
|
||||
+#define loff_t off_t
|
||||
+#endif
|
||||
+
|
||||
/* Definition of types */
|
||||
#ifdef CONFIG_YAFFS_DEFINES_TYPES
|
||||
typedef unsigned char u8;
|
||||
--- a/src/ioctl.c
|
||||
+++ b/src/ioctl.c
|
||||
@@ -21,5 +21,9 @@
|
||||
* integer overflow when building against e.g. musl.
|
||||
*/
|
||||
int linux_ioctl(int fd, unsigned long request, void *ptr) {
|
||||
+#ifdef linux
|
||||
return syscall(SYS_ioctl, fd, request, ptr);
|
||||
+#else
|
||||
+ return -1;
|
||||
+#endif
|
||||
}
|
||||
--- a/src/ioctl.h
|
||||
+++ b/src/ioctl.h
|
||||
@@ -12,7 +12,9 @@ int linux_ioctl(int fd, unsigned long re
|
||||
* time, as the definition of the MEMREAD ioctl trickles down into kernel
|
||||
* headers distributed out there.
|
||||
*/
|
||||
+#ifdef linux
|
||||
#include <mtd/mtd-user.h>
|
||||
+
|
||||
#ifndef MEMREAD
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
@@ -35,3 +37,4 @@ struct mtd_read_req {
|
||||
|
||||
#define MEMREAD _IOWR('M', 26, struct mtd_read_req)
|
||||
#endif /* MEMREAD */
|
||||
+#endif
|
||||
--- a/src/mtd.c
|
||||
+++ b/src/mtd.c
|
||||
@@ -4,7 +4,9 @@
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
+#ifdef linux
|
||||
#include <mtd/mtd-user.h>
|
||||
+#endif
|
||||
#include <stdarg.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
@@ -82,6 +84,7 @@ static void mtd_debug_location(const cha
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
+#ifdef linux
|
||||
/*
|
||||
* Read the raw contents of the sysfs attribute at the provided 'sysfs_path'
|
||||
* into 'buf', which is 'buf_len' bytes large. The given sysfs attribute is
|
||||
@@ -179,6 +182,7 @@ static int discover_mtd_parameters(const
|
||||
|
||||
return 0;
|
||||
}
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* Initialize 'geometry' with 'chunk_size' and 'block_size' set to the default
|
||||
@@ -203,6 +207,7 @@ static void init_yaffs_geometry_default(
|
||||
* Initialize 'geometry' with 'chunk_size' and 'block_size' set to the relevant
|
||||
* MTD parameters provided in 'mtd' and 'mtd_type' set to the provided value.
|
||||
*/
|
||||
+#ifdef linux
|
||||
static void init_yaffs_geometry_autodetected(const struct mtd_ctx *ctx,
|
||||
const struct mtd_info_user *mtd,
|
||||
struct mtd_geometry *geometry,
|
||||
@@ -217,6 +222,7 @@ static void init_yaffs_geometry_autodete
|
||||
.block_size = mtd->erasesize,
|
||||
};
|
||||
}
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* Update 'chunk_size' and 'block_size' in 'geometry' to the values provided in
|
||||
@@ -280,6 +286,7 @@ static int init_yaffs_geometry_file(cons
|
||||
* 2. If -C and/or -B were used, override any default values with those
|
||||
* provided on the command line.
|
||||
*/
|
||||
+#ifdef linux
|
||||
static void init_yaffs_geometry_nand_or_nor(const struct mtd_ctx *ctx,
|
||||
const struct mtd_info_user *mtd,
|
||||
const struct opts *opts,
|
||||
@@ -297,6 +304,7 @@ static void init_yaffs_geometry_nand_or_
|
||||
|
||||
geometry->block_count = mtd->size / geometry->block_size;
|
||||
}
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* Determine the type of the provided MTD (which can be either NAND/NOR flash
|
||||
@@ -317,6 +325,7 @@ static int init_yaffs_geometry(const str
|
||||
geometry->oob_size = 0;
|
||||
geometry->oobavail = 0;
|
||||
} else {
|
||||
+#ifdef linux
|
||||
struct mtd_info_user mtd;
|
||||
unsigned int oobavail;
|
||||
|
||||
@@ -329,6 +338,9 @@ static int init_yaffs_geometry(const str
|
||||
|
||||
geometry->oob_size = mtd.oobsize;
|
||||
geometry->oobavail = oobavail;
|
||||
+#else
|
||||
+ return -1;
|
||||
+#endif
|
||||
}
|
||||
|
||||
return 0;
|
||||
--- a/src/ydrv.c
|
||||
+++ b/src/ydrv.c
|
||||
@@ -3,7 +3,9 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
#include <errno.h>
|
||||
+#ifdef linux
|
||||
#include <mtd/mtd-user.h>
|
||||
+#endif
|
||||
#include <stdarg.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
@@ -122,6 +124,7 @@ static long long ydrv_get_data_offset_fo
|
||||
/*
|
||||
* Check whether the given MTD block is a bad one on NAND or NOR flash.
|
||||
*/
|
||||
+#ifdef linux
|
||||
static int ydrv_check_bad_nand_or_nor(const struct ydrv_ctx *ctx,
|
||||
int block_no) {
|
||||
long long offset = block_no * ctx->block_size;
|
||||
@@ -139,6 +142,7 @@ static int ydrv_check_bad_nand_or_nor(co
|
||||
|
||||
return (ret == 0 ? YAFFS_OK : YAFFS_FAIL);
|
||||
}
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* Check whether the given MTD block is a bad one.
|
||||
@@ -154,9 +158,11 @@ static int ydrv_check_bad(struct yaffs_d
|
||||
}
|
||||
|
||||
switch (ctx->mtd_type) {
|
||||
+#ifdef linux
|
||||
case MTD_TYPE_NAND:
|
||||
case MTD_TYPE_NOR:
|
||||
return ydrv_check_bad_nand_or_nor(ctx, block_no);
|
||||
+#endif
|
||||
case MTD_TYPE_FILE:
|
||||
ydrv_debug("file is assumed to only contain good blocks");
|
||||
return YAFFS_OK;
|
||||
@@ -169,6 +175,7 @@ static int ydrv_check_bad(struct yaffs_d
|
||||
/*
|
||||
* Erase the given MTD block on NAND or NOR flash.
|
||||
*/
|
||||
+#ifdef linux
|
||||
static int ydrv_erase_block_nand_or_nor(const struct ydrv_ctx *ctx,
|
||||
int block_no) {
|
||||
long long offset = block_no * ctx->block_size;
|
||||
@@ -196,6 +203,7 @@ static int ydrv_erase_block_nand_or_nor(
|
||||
|
||||
return YAFFS_OK;
|
||||
}
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* Erase the given MTD block in a file.
|
||||
@@ -247,9 +255,11 @@ static int ydrv_erase_block(struct yaffs
|
||||
}
|
||||
|
||||
switch (ctx->mtd_type) {
|
||||
+#ifdef linux
|
||||
case MTD_TYPE_NAND:
|
||||
case MTD_TYPE_NOR:
|
||||
return ydrv_erase_block_nand_or_nor(ctx, block_no);
|
||||
+#endif
|
||||
case MTD_TYPE_FILE:
|
||||
return ydrv_erase_block_file(ctx, block_no);
|
||||
default:
|
||||
@@ -261,6 +271,7 @@ static int ydrv_erase_block(struct yaffs
|
||||
/*
|
||||
* Mark the given MTD block as bad on NAND or NOR flash.
|
||||
*/
|
||||
+#ifdef linux
|
||||
static int ydrv_mark_bad_nand_or_nor(const struct ydrv_ctx *ctx, int block_no) {
|
||||
long long offset = block_no * ctx->block_size;
|
||||
int err = 0;
|
||||
@@ -281,6 +292,7 @@ static int ydrv_mark_bad_nand_or_nor(con
|
||||
|
||||
return YAFFS_OK;
|
||||
}
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* Mark the given MTD block as bad.
|
||||
@@ -296,9 +308,11 @@ static int ydrv_mark_bad(struct yaffs_de
|
||||
}
|
||||
|
||||
switch (ctx->mtd_type) {
|
||||
+#ifdef linux
|
||||
case MTD_TYPE_NAND:
|
||||
case MTD_TYPE_NOR:
|
||||
return ydrv_mark_bad_nand_or_nor(ctx, block_no);
|
||||
+#endif
|
||||
case MTD_TYPE_FILE:
|
||||
ydrv_debug("file is assumed to only contain good blocks");
|
||||
return YAFFS_FAIL;
|
||||
@@ -315,9 +329,11 @@ static int ydrv_mark_bad(struct yaffs_de
|
||||
*/
|
||||
static int ydrv_ecc_result(int read_result, enum yaffs_ecc_result *ecc_result) {
|
||||
switch (read_result) {
|
||||
+#ifdef linux
|
||||
case -EUCLEAN:
|
||||
*ecc_result = YAFFS_ECC_RESULT_FIXED;
|
||||
return YAFFS_OK;
|
||||
+#endif
|
||||
case -EBADMSG:
|
||||
*ecc_result = YAFFS_ECC_RESULT_UNFIXED;
|
||||
return YAFFS_FAIL;
|
||||
@@ -333,6 +349,7 @@ static int ydrv_ecc_result(int read_resu
|
||||
/*
|
||||
* Read a data+OOB chunk from NAND flash.
|
||||
*/
|
||||
+#ifdef linux
|
||||
static int ydrv_read_chunk_nand(const struct ydrv_ctx *ctx, int chunk, u8 *data,
|
||||
int data_len, u8 *oob, int oob_len,
|
||||
enum yaffs_ecc_result *ecc_result_out,
|
||||
@@ -371,6 +388,7 @@ static int ydrv_read_chunk_nand(const st
|
||||
|
||||
return ret;
|
||||
}
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* Read a data chunk from NOR flash.
|
||||
@@ -420,10 +438,12 @@ static int ydrv_read_chunk(struct yaffs_
|
||||
}
|
||||
|
||||
switch (ctx->mtd_type) {
|
||||
+#ifdef linux
|
||||
case MTD_TYPE_NAND:
|
||||
return ydrv_read_chunk_nand(ctx, chunk, data, data_len, oob,
|
||||
oob_len, ecc_result_out,
|
||||
dev->param.is_yaffs2);
|
||||
+#endif
|
||||
case MTD_TYPE_NOR:
|
||||
case MTD_TYPE_FILE:
|
||||
return ydrv_read_chunk_nor_or_file(ctx, chunk, data, data_len,
|
||||
@@ -438,6 +458,7 @@ static int ydrv_read_chunk(struct yaffs_
|
||||
/*
|
||||
* Write a data+OOB chunk to NAND flash.
|
||||
*/
|
||||
+#ifdef linux
|
||||
static int ydrv_write_chunk_nand(const struct ydrv_ctx *ctx, int chunk,
|
||||
const u8 *data, int data_len, const u8 *oob,
|
||||
int oob_len, bool is_yaffs2) {
|
||||
@@ -472,6 +493,7 @@ static int ydrv_write_chunk_nand(const s
|
||||
|
||||
return YAFFS_OK;
|
||||
}
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* Write a data chunk to NOR flash.
|
||||
@@ -516,9 +538,11 @@ static int ydrv_write_chunk(struct yaffs
|
||||
}
|
||||
|
||||
switch (ctx->mtd_type) {
|
||||
+#ifdef linux
|
||||
case MTD_TYPE_NAND:
|
||||
return ydrv_write_chunk_nand(ctx, chunk, data, data_len, oob,
|
||||
oob_len, dev->param.is_yaffs2);
|
||||
+#endif
|
||||
case MTD_TYPE_NOR:
|
||||
case MTD_TYPE_FILE:
|
||||
return ydrv_write_chunk_nor_or_file(ctx, chunk, data, data_len);
|
Loading…
Reference in New Issue
Block a user