intrep.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  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: intrep.h,v 1.14 2001/09/23 23:28:37 dwmw2 Exp $
  14.  *
  15.  */
  16. #ifndef __LINUX_JFFS_INTREP_H__
  17. #define __LINUX_JFFS_INTREP_H__
  18. #include "jffs_fm.h"
  19. struct jffs_node *jffs_alloc_node(void);
  20. void jffs_free_node(struct jffs_node *n);
  21. int jffs_get_node_inuse(void);
  22. long jffs_get_file_count(void);
  23. __u32 jffs_checksum(const void *data, int size);
  24. void jffs_cleanup_control(struct jffs_control *c);
  25. int jffs_build_fs(struct super_block *sb);
  26. int jffs_insert_node(struct jffs_control *c, struct jffs_file *f,
  27.      const struct jffs_raw_inode *raw_inode,
  28.      const char *name, struct jffs_node *node);
  29. struct jffs_file *jffs_find_file(struct jffs_control *c, __u32 ino);
  30. struct jffs_file *jffs_find_child(struct jffs_file *dir, const char *name, int len);
  31. void jffs_free_node(struct jffs_node *node);
  32. int jffs_foreach_file(struct jffs_control *c, int (*func)(struct jffs_file *));
  33. int jffs_free_node_list(struct jffs_file *f);
  34. int jffs_free_file(struct jffs_file *f);
  35. int jffs_possibly_delete_file(struct jffs_file *f);
  36. int jffs_build_file(struct jffs_file *f);
  37. int jffs_insert_file_into_hash(struct jffs_file *f);
  38. int jffs_insert_file_into_tree(struct jffs_file *f);
  39. int jffs_unlink_file_from_hash(struct jffs_file *f);
  40. int jffs_unlink_file_from_tree(struct jffs_file *f);
  41. int jffs_remove_redundant_nodes(struct jffs_file *f);
  42. int jffs_file_count(struct jffs_file *f);
  43. int jffs_write_node(struct jffs_control *c, struct jffs_node *node,
  44.     struct jffs_raw_inode *raw_inode,
  45.     const char *name, const unsigned char *buf,
  46.     int recoverable, struct jffs_file *f);
  47. int jffs_read_data(struct jffs_file *f, unsigned char *buf, __u32 read_offset, __u32 size);
  48. /* Garbage collection stuff.  */
  49. int jffs_garbage_collect_thread(void *c);
  50. void jffs_garbage_collect_trigger(struct jffs_control *c);
  51. int jffs_garbage_collect_now(struct jffs_control *c);
  52. /* Is there enough space on the flash?  */
  53. static inline int JFFS_ENOUGH_SPACE(struct jffs_control *c, __u32 space)
  54. {
  55. struct jffs_fmcontrol *fmc = c->fmc;
  56. while (1) {
  57. if ((fmc->flash_size - (fmc->used_size + fmc->dirty_size)) 
  58. >= fmc->min_free_size + space) {
  59. return 1;
  60. }
  61. if (fmc->dirty_size < fmc->sector_size)
  62. return 0;
  63. if (jffs_garbage_collect_now(c)) {
  64.   D1(printk("JFFS_ENOUGH_SPACE: jffs_garbage_collect_now() failed.n"));
  65.   return 0;
  66. }
  67. }
  68. }
  69. /* For debugging purposes.  */
  70. void jffs_print_node(struct jffs_node *n);
  71. void jffs_print_raw_inode(struct jffs_raw_inode *raw_inode);
  72. int jffs_print_file(struct jffs_file *f);
  73. void jffs_print_hash_table(struct jffs_control *c);
  74. void jffs_print_tree(struct jffs_file *first_file, int indent);
  75. struct buffer_head *jffs_get_write_buffer(kdev_t dev, int block);
  76. void jffs_put_write_buffer(struct buffer_head *bh);
  77. #endif /* __LINUX_JFFS_INTREP_H__  */