Blame view
drivers/mtd/sm_ftl.h
2.49 KB
7d17c02a0 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 mtd: sm_ftl: cosm... |
23 |
bool initialized; |
7d17c02a0 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 mtd: sm_ftl: cosm... |
40 41 |
bool readonly; /* is FS readonly */ bool unstable; |
7d17c02a0 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 mtd: sm_ftl: cosm... |
52 |
bool cache_clean; |
7d17c02a0 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); |