/* Add an element to a list */
-static Y_INLINE void list_add(struct list_head *new_entry,
+static inline void list_add(struct list_head *new_entry,
struct list_head *list)
{
struct list_head *list_next = list->next;
}
-static Y_INLINE void list_add_tail(struct list_head *new_entry,
+static inline void list_add_tail(struct list_head *new_entry,
struct list_head *list)
{
struct list_head *list_prev = list->prev;
/* Take an element out of its current list, with or without
* reinitialising the links.of the entry*/
-static Y_INLINE void list_del(struct list_head *entry)
+static inline void list_del(struct list_head *entry)
{
struct list_head *list_next = entry->next;
struct list_head *list_prev = entry->prev;
}
-static Y_INLINE void list_del_init(struct list_head *entry)
+static inline void list_del_init(struct list_head *entry)
{
list_del(entry);
entry->next = entry->prev = entry;
/* Test if the list is empty */
-static Y_INLINE int list_empty(struct list_head *entry)
+static inline int list_empty(struct list_head *entry)
{
return (entry->next == entry);
}
unsigned spareSize = 0;
ynandif_Geometry *geometry = (ynandif_Geometry *)(dev->driver_context);
- T(YAFFS_TRACE_MTD,
- (TSTR
- ("nandmtd2_WriteChunkWithTagsToNAND chunk %d data %p tags %p"
- TENDSTR), nand_chunk, data, tags));
+ yaffs_trace(YAFFS_TRACE_MTD,
+ "nandmtd2_WriteChunkWithTagsToNAND chunk %d data %p tags %p",
+ nand_chunk, data, tags);
/* For yaffs2 writing there must be both data and tags.
if(dev->param.inband_tags){
struct yaffs_packed_tags2_tags_only *pt2tp;
- pt2tp = (struct yaffs_packed_tags2_tags_only *)(data + dev->data_bytes_per_chunk);
+ pt2tp = (struct yaffs_packed_tags2_tags_only *)
+ (data + dev->data_bytes_per_chunk);
yaffs_pack_tags2_tags_only(pt2tp,tags);
spare = NULL;
spareSize = 0;
}
retval = geometry->writeChunk(dev,nand_chunk,
- data, dev->param.total_bytes_per_chunk, spare, spareSize);
+ data, dev->param.total_bytes_per_chunk,
+ spare, spareSize);
return retval;
}
int eccStatus; //0 = ok, 1 = fixed, -1 = unfixed
ynandif_Geometry *geometry = (ynandif_Geometry *)(dev->driver_context);
- T(YAFFS_TRACE_MTD,
- (TSTR
- ("nandmtd2_ReadChunkWithTagsFromNAND chunk %d data %p tags %p"
- TENDSTR), nand_chunk, data, tags));
+ yaffs_trace(YAFFS_TRACE_MTD,
+ "nandmtd2_ReadChunkWithTagsFromNAND chunk %d data %p tags %p",
+ nand_chunk, data, tags);
if(!tags){
spare = NULL;
return geometry->checkBlockOk(dev,blockId);
}
-int ynandif_QueryNANDBlock(struct yaffs_dev *dev, int blockId, enum yaffs_block_state *state, u32 *seq_number)
+int ynandif_QueryNANDBlock(struct yaffs_dev *dev, int blockId,
+ enum yaffs_block_state *state, u32 *seq_number)
{
unsigned chunkNo;
struct yaffs_ext_tags tags;
strcpy(clonedName,name);
dev->param.name = clonedName;
- dev->param.write_chunk_tags_fn = ynandif_WriteChunkWithTagsToNAND;
+ dev->param.write_chunk_tags_fn = ynandif_WriteChunkWithTagsToNAND;
dev->param.read_chunk_tags_fn = ynandif_ReadChunkWithTagsFromNAND;
- dev->param.erase_fn = ynandif_EraseBlockInNAND;
- dev->param.initialise_flash_fn = ynandif_InitialiseNAND;
- dev->param.query_block_fn = ynandif_QueryNANDBlock;
- dev->param.bad_block_fn = ynandif_MarkNANDBlockBad;
- dev->param.n_caches = 20;
- dev->param.start_block = geometry->start_block;
- dev->param.end_block = geometry->end_block;
- dev->param.total_bytes_per_chunk = geometry->dataSize;
- dev->param.spare_bytes_per_chunk = geometry->spareSize;
- dev->param.inband_tags = geometry->inband_tags;
- dev->param.chunks_per_block = geometry->pagesPerBlock;
- dev->param.use_nand_ecc = geometry->hasECC;
- dev->param.is_yaffs2 = geometry->useYaffs2;
- dev->param.n_reserved_blocks = 5;
- dev->driver_context = (void *)geometry;
+ dev->param.erase_fn = ynandif_EraseBlockInNAND;
+ dev->param.initialise_flash_fn = ynandif_InitialiseNAND;
+ dev->param.query_block_fn = ynandif_QueryNANDBlock;
+ dev->param.bad_block_fn = ynandif_MarkNANDBlockBad;
+ dev->param.n_caches = 20;
+ dev->param.start_block = geometry->start_block;
+ dev->param.end_block = geometry->end_block;
+ dev->param.total_bytes_per_chunk = geometry->dataSize;
+ dev->param.spare_bytes_per_chunk = geometry->spareSize;
+ dev->param.inband_tags = geometry->inband_tags;
+ dev->param.chunks_per_block = geometry->pagesPerBlock;
+ dev->param.use_nand_ecc = geometry->hasECC;
+ dev->param.is_yaffs2 = geometry->useYaffs2;
+ dev->param.n_reserved_blocks = 5;
+ dev->driver_context = (void *)geometry;
yaffs_add_device(dev);
return NULL;
}
+
#define YAFFS_PATH_DIVIDERS "/"
-#ifdef NO_Y_INLINE
-#define Y_INLINE
+#ifdef NO_inline
+#define inline
#else
-#define Y_INLINE __inline__
+#define inline __inline__
#endif
#define kmalloc(x,flags) yaffs_malloc(x)
#ifndef __YPORTENV_H__
#define __YPORTENV_H__
-/*
- * Define the MTD version in terms of Linux Kernel versions
- * This allows yaffs to be used independantly of the kernel
- * as well as with it.
- */
+/* Definition of types */
+typedef unsigned char u8;
+typedef unsigned short u16;
+typedef unsigned u32;
-#if defined CONFIG_YAFFS_WINCE
-#include "ywinceenv.h"
+#ifndef WIN32
+#include <sys/stat.h>
+#endif
-#elif defined CONFIG_YAFFS_DIRECT
+#ifdef CONFIG_YAFFS_PROVIDE_DEFS
+/* File types */
-/* Direct interface */
-#include "ydirectenv.h"
-#elif defined CONFIG_YAFFS_UTIL
+#define DT_UNKNOWN 0
+#define DT_FIFO 1
+#define DT_CHR 2
+#define DT_DIR 4
+#define DT_BLK 6
+#define DT_REG 8
+#define DT_LNK 10
+#define DT_SOCK 12
+#define DT_WHT 14
-/* Stuff for YAFFS utilities */
-#include "stdlib.h"
-#include "stdio.h"
-#include "string.h"
+#ifndef WIN32
+#include <sys/stat.h>
+#endif
+/*
+ * Attribute flags.
+ * These are or-ed together to select what has been changed.
+ */
+#define ATTR_MODE 1
+#define ATTR_UID 2
+#define ATTR_GID 4
+#define ATTR_SIZE 8
+#define ATTR_ATIME 16
+#define ATTR_MTIME 32
+#define ATTR_CTIME 64
+
+struct iattr {
+ unsigned int ia_valid;
+ unsigned ia_mode;
+ unsigned ia_uid;
+ unsigned ia_gid;
+ unsigned ia_size;
+ unsigned ia_atime;
+ unsigned ia_mtime;
+ unsigned ia_ctime;
+ unsigned int ia_attr_flags;
+};
-#define kmalloc(x) malloc(x)
-#define kfree(x) free(x)
-#define vmalloc(x) malloc(x)
-#define vfree(x) free(x)
+#endif
-#define YCHAR char
-#define YUCHAR unsigned char
-#define _Y(x) x
-#define Y_INLINE inline
-#define YAFFS_LOSTNFOUND_NAME "lost+found"
-#define YAFFS_LOSTNFOUND_PREFIX "obj"
-/* #define YPRINTF(x) printf x */
+#if defined CONFIG_YAFFS_WINCE
-#define YAFFS_ROOT_MODE 0755
-#define YAFFS_LOSTNFOUND_MODE 0700
+#include "ywinceenv.h"
+#elif defined CONFIG_YAFFS_DIRECT
+
+/* Direct interface */
+#include "ydirectenv.h"
+
+#elif defined CONFIG_YAFFS_UTIL
+
+#include "yutilsenv.h"
+
#else
/* Should have specified a configuration type */
#error Unknown configuration
#ifndef YBUG
#define YBUG() do {\
- T(YAFFS_TRACE_BUG,\
- (TSTR("==>> yaffs bug: " __FILE__ " %d" TENDSTR),\
- __LINE__));\
+ yaffs_trace(YAFFS_TRACE_BUG,\
+ "==>> yaffs bug: " __FILE__ " %d",\
+ __LINE__);\
Y_DUMP_STACK();\
} while (0)
#endif
-
-#endif
-
-/*
- * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2010 Aleph One Ltd.
- * for Toby Churchill Ltd and Brightstar Engineering
- *
- * Created by Charles Manning <charles@aleph1.co.uk>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 2.1 as
- * published by the Free Software Foundation.
- *
- * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
- */
-
-/*
- * This file is just holds extra declarations of macros that would normally
- * be provided in the Linux kernel. These macros have been written from
- * scratch but are functionally equivalent to the Linux ones.
- *
- */
-
-#ifndef __EXTRAS_H__
-#define __EXTRAS_H__
-
-
-/* Definition of types */
-typedef unsigned char u8;
-typedef unsigned short u16;
-typedef unsigned u32;
-
-
-#ifndef WIN32
-#include <sys/stat.h>
-#endif
-
-
-#ifdef CONFIG_YAFFS_PROVIDE_DEFS
-/* File types */
-
-
-#define DT_UNKNOWN 0
-#define DT_FIFO 1
-#define DT_CHR 2
-#define DT_DIR 4
-#define DT_BLK 6
-#define DT_REG 8
-#define DT_LNK 10
-#define DT_SOCK 12
-#define DT_WHT 14
-
-
-#ifndef WIN32
-#include <sys/stat.h>
-#endif
-
-/*
- * Attribute flags. These should be or-ed together to figure out what
- * has been changed!
- */
-#define ATTR_MODE 1
-#define ATTR_UID 2
-#define ATTR_GID 4
-#define ATTR_SIZE 8
-#define ATTR_ATIME 16
-#define ATTR_MTIME 32
-#define ATTR_CTIME 64
-
-struct iattr {
- unsigned int ia_valid;
- unsigned ia_mode;
- unsigned ia_uid;
- unsigned ia_gid;
- unsigned ia_size;
- unsigned ia_atime;
- unsigned ia_mtime;
- unsigned ia_ctime;
- unsigned int ia_attr_flags;
-};
-
-#endif
-
-
-
#endif
* Chunk bitmap manipulations
*/
-static Y_INLINE u8 *yaffs_block_bits(struct yaffs_dev *dev, int blk)
+static inline u8 *yaffs_block_bits(struct yaffs_dev *dev, int blk)
{
if (blk < dev->internal_start_block || blk > dev->internal_end_block) {
yaffs_trace(YAFFS_TRACE_ERROR,
#include "yaffs_trace.h"
/* Function to manipulate block info */
-static Y_INLINE struct yaffs_block_info *yaffs_get_block_info(struct yaffs_dev
+static inline struct yaffs_block_info *yaffs_get_block_info(struct yaffs_dev
*dev, int blk)
{
if (blk < dev->internal_start_block || blk > dev->internal_end_block) {
* Simple hash function. Needs to have a reasonable spread
*/
-static Y_INLINE int yaffs_hash_fn(int n)
+static inline int yaffs_hash_fn(int n)
{
n = abs(n);
return n % YAFFS_NOBJECT_BUCKETS;
if (tn) {
u32 the_chunk = yaffs_get_group_base(dev, tn, i);
if (the_chunk > 0) {
- /* T(~0,(TSTR("verifying (%d:%d) %d"TENDSTR),obj_id,i,the_chunk)); */
yaffs_rd_chunk_tags_nand(dev, the_chunk, NULL,
&tags);
if (tags.obj_id != obj_id || tags.chunk_id != i)
#define YUCHAR unsigned char
#define _Y(x) x
-#define Y_INLINE __inline__
-
-#define yaffs_trace(msk, fmt, ...) do { \
- if(yaffs_trace_mask & ((msk) | YAFFS_TRACE_ALWAYS)) \
- printk(KERN_DEBUG "yaffs: " fmt "\n", ##__VA_ARGS__); \
-} while(0)
-
#define YAFFS_LOSTNFOUND_NAME "lost+found"
#define YAFFS_LOSTNFOUND_PREFIX "obj"
#define Y_DUMP_STACK() dump_stack()
#endif
+#define yaffs_trace(msk, fmt, ...) do { \
+ if(yaffs_trace_mask & ((msk) | YAFFS_TRACE_ALWAYS)) \
+ printk(KERN_DEBUG "yaffs: " fmt "\n", ##__VA_ARGS__); \
+} while(0)
+
#ifndef YBUG
#define YBUG() do {\
yaffs_trace(YAFFS_TRACE_BUG,\
#define YUCHAR unsigned char
#define _Y(x) x
-#define Y_INLINE __inline__
-
#define YAFFS_LOSTNFOUND_NAME "lost+found"
#define YAFFS_LOSTNFOUND_PREFIX "obj"
#ifndef Y_DUMP_STACK
#define Y_DUMP_STACK() dump_stack()
-
#endif
+
#define yaffs_trace(msk, fmt, ...) do { \
if(yaffs_trace_mask & ((msk) | YAFFS_TRACE_ALWAYS)) \
printk(KERN_DEBUG "yaffs: " fmt "\n", ##__VA_ARGS__); \
} while (0)
#endif
-
#endif