View difference between Paste ID: iRsxt4cu and
SHOW: | | - or go back to the newest paste.
1-
1+
/*
2
The cache needs to be able to provide the following operating modes:
3
- read sector(s) to an already allocated buffer
4
  NOTE: we can provide an hint to cache whether the sectors should be cached or not if it's not already in the cache
5
- write sectors(s) from an already filled buffer
6
  NOTE: same remark
7
- read a sector and lock a buffer to it
8
- flag a locked sector as dirty
9
- clean a locked sector (write it back if needed)
10
- unlock a sector (maybe with a flag if it should be cleaned or not)
11
*/
12
13
struct sectorcache_entry
14
{
15
    bool valid;
16
    bool free;
17
    int locks;
18
    bool exclusive;
19
    bool dirty;
20
    unsigned long sector;
21
};
22
23
struct sectorcache_entry[SECTORCACHE_SIZE];
24
unsigned char sectorcache_buffer[SECTORCACHE_SIZE][SECTOR_SIZE];
25
26
void sectorcache_init(void);
27
int sectorcache_readthrough(IF_MD2(int drive,) unsigned long start, int count, void* buf, bool keepincache);
28
int sectorcache_writethrough(IF_MD2(int drive,) unsigned long start, int count, const void* buf, bool keepincache);
29
int sectorcache_lock(IF_MD2(int drive,) unsigned long sector, struct sectorcache_entry** handle, bool exclusive);
30
int sectorcache_unlock(struct sectorcache_entry** handle, bool clean, bool keepincache);
31
int sectorcache_markdirty(struct sectorcache_entry* handle);
32
int sectorcache_clean(struct sectorcache_entry* handle);
33
int sectorcache_clean_all(void);