-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdftl.h
66 lines (49 loc) · 2.58 KB
/
dftl.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#ifndef __DFTL_H
#define __DFTL_H
#include "jasmine.h"
#include "mem.h"
#include "cache.h"
#define COUNT_BUCKETS(TOTAL, BUCKET_SIZE) \
( ((TOTAL) + (BUCKET_SIZE) - 1) / (BUCKET_SIZE) )
/* ========================================================================= *
* DRAM Segmentation
* ========================================================================= */
#define NUM_COPY_BUFFERS NUM_BANKS_MAX
#define NUM_FTL_BUFFERS NUM_BANKS
#define NUM_HIL_BUFFERS 1
#define NUM_TEMP_BUFFERS 1
#define DRAM_BYTES_OTHER ((NUM_COPY_BUFFERS + NUM_FTL_BUFFERS + NUM_HIL_BUFFERS + NUM_TEMP_BUFFERS) * BYTES_PER_PAGE \
+ CACHE_BYTES + BAD_BLK_BMP_BYTES + VCOUNT_BYTES)
#define NUM_RW_BUFFERS ((DRAM_SIZE - DRAM_BYTES_OTHER) / BYTES_PER_PAGE - 1)
#define NUM_RD_BUFFERS (((NUM_RW_BUFFERS / 8) + NUM_BANKS - 1) / NUM_BANKS * NUM_BANKS)
#define NUM_WR_BUFFERS (NUM_RW_BUFFERS - NUM_RD_BUFFERS)
#define RD_BUF_ADDR (CACHE_ADDR + CACHE_BYTES)
#define RD_BUF_BYTES (NUM_RD_BUFFERS * BYTES_PER_PAGE)
#define WR_BUF_ADDR (RD_BUF_ADDR + RD_BUF_BYTES)
#define WR_BUF_BYTES (NUM_WR_BUFFERS * BYTES_PER_PAGE)
#define COPY_BUF_ADDR (WR_BUF_ADDR + WR_BUF_BYTES)
#define COPY_BUF_BYTES (NUM_COPY_BUFFERS * BYTES_PER_PAGE)
#define FTL_BUF_ADDR (COPY_BUF_ADDR + COPY_BUF_BYTES)
#define FTL_BUF_BYTES (NUM_FTL_BUFFERS * BYTES_PER_PAGE)
#define HIL_BUF_ADDR (FTL_BUF_ADDR + FTL_BUF_BYTES)
#define HIL_BUF_BYTES (NUM_HIL_BUFFERS * BYTES_PER_PAGE)
#define TEMP_BUF_ADDR (HIL_BUF_ADDR + HIL_BUF_BYTES)
#define TEMP_BUF_BYTES (NUM_TEMP_BUFFERS * BYTES_PER_PAGE)
// bitmap of initial bad blocks
#define BAD_BLK_BMP_ADDR (TEMP_BUF_ADDR + TEMP_BUF_BYTES)
#define BAD_BLK_BMP_BYTES (COUNT_BUCKETS(NUM_VBLKS / 8, DRAM_ECC_UNIT) * DRAM_ECC_UNIT)
#define VCOUNT_ADDR (BAD_BLK_BMP_ADDR + BAD_BLK_BMP_BYTES)
#define VCOUNT_BYTES (COUNT_BUCKETS(NUM_VBLKS, BYTES_PER_SECTOR) * BYTES_PER_SECTOR)
#define _COPY_BUF(RBANK) (COPY_BUF_ADDR + (RBANK) * BYTES_PER_PAGE)
#define COPY_BUF(BANK) _COPY_BUF(REAL_BANK(BANK))
#define FTL_BUF(BANK) (FTL_BUF_ADDR + ((BANK) * BYTES_PER_PAGE))
/* ========================================================================= *
* Public API
* ========================================================================= */
void ftl_open(void);
void ftl_read(UINT32 const lba, UINT32 const num_sectors);
void ftl_write(UINT32 const lba, UINT32 const num_sectors);
void ftl_test_write(UINT32 const lba, UINT32 const num_sectors);
void ftl_flush(void);
void ftl_isr(void);
#endif