~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/fs/jffs/jffs_fm.h

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * JFFS -- Journaling Flash File System, Linux implementation.
  3  *
  4  * Copyright (C) 1999, 2000  Axis Communications AB.
  5  *
  6  * Created by Finn Hakansson <finn@axis.com>.
  7  *
  8  * This is free software; you can redistribute it and/or modify it
  9  * under the terms of the GNU General Public License as published by
 10  * the Free Software Foundation; either version 2 of the License, or
 11  * (at your option) any later version.
 12  *
 13  * $Id: jffs_fm.h,v 1.10 2000/08/17 15:42:44 dwmw2 Exp $
 14  *
 15  * Ported to Linux 2.3.x and MTD:
 16  * Copyright (C) 2000  Alexander Larsson (alex@cendio.se), Cendio Systems AB
 17  *
 18  */
 19 
 20 #ifndef __LINUX_JFFS_FM_H__
 21 #define __LINUX_JFFS_FM_H__
 22 
 23 #include <linux/types.h>
 24 #include <linux/jffs.h>
 25 #include <linux/mtd/mtd.h>
 26 #include <linux/config.h>
 27 
 28 /* The alignment between two nodes in the flash memory.  */
 29 #define JFFS_ALIGN_SIZE 4
 30 
 31 /* Mark the on-flash space as obsolete when appropriate.  */
 32 #define JFFS_MARK_OBSOLETE 0
 33 
 34 #ifndef CONFIG_JFFS_FS_VERBOSE
 35 #define CONFIG_JFFS_FS_VERBOSE 1
 36 #endif
 37 
 38 #if CONFIG_JFFS_FS_VERBOSE > 0
 39 #define D(x) x
 40 #define D1(x) D(x)
 41 #else
 42 #define D(x)
 43 #define D1(x)
 44 #endif
 45 
 46 #if CONFIG_JFFS_FS_VERBOSE > 1
 47 #define D2(x) D(x)
 48 #else
 49 #define D2(x)
 50 #endif
 51 
 52 #if CONFIG_JFFS_FS_VERBOSE > 2
 53 #define D3(x) D(x)
 54 #else
 55 #define D3(x)
 56 #endif
 57 
 58 #define ASSERT(x) x
 59 
 60 /* How many padding bytes should be inserted between two chunks of data
 61    on the flash?  */
 62 #define JFFS_GET_PAD_BYTES(size) ((JFFS_ALIGN_SIZE                     \
 63                                   - ((__u32)(size) % JFFS_ALIGN_SIZE)) \
 64                                   % JFFS_ALIGN_SIZE)
 65 #define JFFS_PAD(size) ( (size + (JFFS_ALIGN_SIZE-1)) & ~(JFFS_ALIGN_SIZE-1) )
 66 struct jffs_node_ref
 67 {
 68         struct jffs_node *node;
 69         struct jffs_node_ref *next;
 70 };
 71 
 72 
 73 /* The struct jffs_fm represents a chunk of data in the flash memory.  */
 74 struct jffs_fm
 75 {
 76         __u32 offset;
 77         __u32 size;
 78         struct jffs_fm *prev;
 79         struct jffs_fm *next;
 80         struct jffs_node_ref *nodes; /* USED if != 0.  */
 81 };
 82 
 83 struct jffs_fmcontrol
 84 {
 85         __u32 flash_start;
 86         __u32 flash_size;
 87         __u32 used_size;
 88         __u32 dirty_size;
 89         __u32 free_size;
 90         __u32 sector_size;
 91         __u32 min_free_size;  /* The minimum free space needed to be able
 92                                  to perform garbage collections.  */
 93         __u32 max_chunk_size; /* The maximum size of a chunk of data.  */
 94         struct mtd_info *mtd;
 95         struct jffs_control *c;
 96         struct jffs_fm *head;
 97         struct jffs_fm *tail;
 98         struct jffs_fm *head_extra;
 99         struct jffs_fm *tail_extra;
100         struct semaphore biglock;
101 };
102 
103 /* Notice the two members head_extra and tail_extra in the jffs_control
104    structure above. Those are only used during the scanning of the flash
105    memory; while the file system is being built. If the data in the flash
106    memory is organized like
107 
108       +----------------+------------------+----------------+
109       |  USED / DIRTY  |       FREE       |  USED / DIRTY  |
110       +----------------+------------------+----------------+
111 
112    then the scan is split in two parts. The first scanned part of the
113    flash memory is organized through the members head and tail. The
114    second scanned part is organized with head_extra and tail_extra. When
115    the scan is completed, the two lists are merged together. The jffs_fm
116    struct that head_extra references is the logical beginning of the
117    flash memory so it will be referenced by the head member.  */
118 
119 
120 struct jffs_fmcontrol *jffs_build_begin(struct jffs_control *c, kdev_t dev);
121 void jffs_build_end(struct jffs_fmcontrol *fmc);
122 void jffs_cleanup_fmcontrol(struct jffs_fmcontrol *fmc);
123 
124 int jffs_fmalloc(struct jffs_fmcontrol *fmc, __u32 size,
125                  struct jffs_node *node, struct jffs_fm **result);
126 int jffs_fmfree(struct jffs_fmcontrol *fmc, struct jffs_fm *fm,
127                 struct jffs_node *node);
128 
129 __u32 jffs_free_size1(struct jffs_fmcontrol *fmc);
130 __u32 jffs_free_size2(struct jffs_fmcontrol *fmc);
131 void jffs_sync_erase(struct jffs_fmcontrol *fmc, int erased_size);
132 struct jffs_fm *jffs_cut_node(struct jffs_fmcontrol *fmc, __u32 size);
133 struct jffs_node *jffs_get_oldest_node(struct jffs_fmcontrol *fmc);
134 long jffs_erasable_size(struct jffs_fmcontrol *fmc);
135 struct jffs_fm *jffs_fmalloced(struct jffs_fmcontrol *fmc, __u32 offset,
136                                __u32 size, struct jffs_node *node);
137 int jffs_add_node(struct jffs_node *node);
138 void jffs_fmfree_partly(struct jffs_fmcontrol *fmc, struct jffs_fm *fm,
139                         __u32 size);
140 
141 void jffs_print_fmcontrol(struct jffs_fmcontrol *fmc);
142 void jffs_print_fm(struct jffs_fm *fm);
143 void jffs_print_node_ref(struct jffs_node_ref *ref);
144 
145 #endif /* __LINUX_JFFS_FM_H__  */
146 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.