Blame view

drivers/mtd/sm_ftl.h 2.49 KB
7d17c02a0   Maxim Levitsky   mtd: Add new Smar...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  /*
   * Copyright © 2009 - Maxim Levitsky
   * SmartMedia/xD translation layer
   *
   * Based loosly on ssfdc.c which is
   *  © 2005 Eptar srl
   *  Author: Claudio Lanconelli <lanconelli.claudio@eptar.com>
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
   */
  
  #include <linux/mtd/blktrans.h>
  #include <linux/kfifo.h>
  #include <linux/sched.h>
  #include <linux/completion.h>
  #include <linux/mtd/mtd.h>
  
  
  
  struct ftl_zone {
334e5f56f   Maxim Levitsky   mtd: sm_ftl: cosm...
23
  	bool initialized;
7d17c02a0   Maxim Levitsky   mtd: Add new Smar...
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
  	int16_t *lba_to_phys_table;		/* LBA to physical table */
  	struct kfifo free_sectors;	/* queue of free sectors */
  };
  
  struct sm_ftl {
  	struct mtd_blktrans_dev *trans;
  
  	struct mutex mutex;		/* protects the structure */
  	struct ftl_zone *zones;		/* FTL tables for each zone */
  
  	/* Media information */
  	int block_size;			/* block size in bytes */
  	int zone_size;			/* zone size in blocks */
  	int zone_count;			/* number of zones */
  	int max_lba;			/* maximum lba in a zone */
  	int smallpagenand;		/* 256 bytes/page nand */
334e5f56f   Maxim Levitsky   mtd: sm_ftl: cosm...
40
41
  	bool readonly;			/* is FS readonly */
  	bool unstable;
7d17c02a0   Maxim Levitsky   mtd: Add new Smar...
42
43
44
45
46
47
48
49
50
51
  	int cis_block;			/* CIS block location */
  	int cis_boffset;		/* CIS offset in the block */
  	int cis_page_offset;		/* CIS offset in the page */
  	void *cis_buffer;		/* tmp buffer for cis reads */
  
  	/* Cache */
  	int cache_block;		/* block number of cached block */
  	int cache_zone;			/* zone of cached block */
  	unsigned char *cache_data;	/* cached block data */
  	long unsigned int cache_data_invalid_bitmap;
334e5f56f   Maxim Levitsky   mtd: sm_ftl: cosm...
52
  	bool cache_clean;
7d17c02a0   Maxim Levitsky   mtd: Add new Smar...
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
  	struct work_struct flush_work;
  	struct timer_list timer;
  
  	/* Async erase stuff */
  	struct completion erase_completion;
  
  	/* Geometry stuff */
  	int heads;
  	int sectors;
  	int cylinders;
  
  	struct attribute_group *disk_attributes;
  };
  
  struct chs_entry {
  	unsigned long size;
  	unsigned short cyl;
  	unsigned char head;
  	unsigned char sec;
  };
  
  
  #define SM_FTL_PARTN_BITS	3
  
  #define sm_printk(format, ...) \
  	printk(KERN_WARNING "sm_ftl" ": " format "
  ", ## __VA_ARGS__)
  
  #define dbg(format, ...) \
  	if (debug) \
  		printk(KERN_DEBUG "sm_ftl" ": " format "
  ", ## __VA_ARGS__)
  
  #define dbg_verbose(format, ...) \
  	if (debug > 1) \
  		printk(KERN_DEBUG "sm_ftl" ": " format "
  ", ## __VA_ARGS__)
  
  
  static void sm_erase_callback(struct erase_info *self);
  static int sm_erase_block(struct sm_ftl *ftl, int zone_num, uint16_t block,
  								int put_free);
  static void sm_mark_block_bad(struct sm_ftl *ftl, int zone_num, int block);
  
  static int sm_recheck_media(struct sm_ftl *ftl);