some more pffs code (structures become identifiable ;)
[my-code/arm.git] / betty / pffs.h
1 /*
2  * pfs.h - pseudo flash filesystem header file
3  *
4  * author: hackbard@hackdaworld.org
5  *
6  */
7
8 #ifndef PFFS_H
9 #define PFFS_H
10
11 #include "lpc2xxx.h"
12 #include "types.h"
13 #include "functions.h"
14
15 /* defines */
16 #define PFFS_MAX_FILENAME_SIZE  15              // in words
17 #define PFFS_HEADER_SIZE        3               // in words
18
19 /* general pffs system */
20 #define PFFS_INDEX_FOUND        0x00
21 #define PFFS_NO_INDEX_FOUND     0x01
22
23 #define PFFS_DATA_TMP_FOUND     0x00
24 #define PFFS_NO_DATA_TMP        0x01
25
26 #define PFFS_SEC_NOT_EMPTY      0x00
27 #define PFFS_SEC_EMPTY          0x01
28
29 #define PFFS_REGISTERED         (1<<0)
30
31 /* pffs index format */
32 #define PFFS_INDEX_MAGIC_MASK   0xf000
33 #define PFFS_STATE_MASK         0x0f00
34 #define PFFS_FNLEN_MASK         0x00f0
35 #define PFFS_LEN_MSB_MASK       0x000f
36
37 #define PFFS_INDEX_MAGIC        0x7000
38 #define PFFS_INDEX_REMOVED      0x0700
39
40 /* file modes */
41 #define PFFS_READ               0x01
42 #define PFFS_WRITE              0x02
43 #define PFFS_RDWR               0x03
44
45 /* lseek offsets */
46 #define PFFS_SEEK_SET           0x01
47 #define PFFS_SEEK_CUR           0x02
48 #define PFFS_SEEK_END           0x03
49
50 /* pffs open / write / read return codes */
51 #define PFFS_FILE_FOUND         0x01
52 #define PFFS_FILE_NOT_FOUND     0x02
53 #define PFFS_NO_SPACE_LEFT      0x04
54 #define PFFS_FILENAME_TOO_LONG  0x08
55 #define PFFS_MODE_UNSUPPORTED   0x10
56
57 #define PFFS_INVALID_LEN        0x01
58 #define PFFS_EINVAL             0x02
59
60 /* type definitions */
61
62 typedef struct s_pffs {
63         /* flash specs */
64         u32 base_addr;
65         u32 *sec_addr;
66         u8 sec_num_data[2];             // first/last sector used for data
67         u8 sec_num_index[2];            // 2 sectors used as an index
68
69         /* flash write, read and sector erase function pointers */
70         int (*fw)(u32 addr,u16 *buf,int len);
71         int (*fr)(u32 addr,u16 *buf,int len);
72         int (*fe)(u32 addr);
73
74         /* pffs internal variables */
75         u8 state;
76         u8 index_sec;                   // current index sector
77         u8 data_tmp_sec;                // current temp data sector
78 } t_pffs;
79
80 typedef struct s_pffs_fd {
81         u32 daddr;
82         u32 dptr;
83         u32 iaddr;
84         u16 len;
85         char file[PFFS_MAX_FILENAME_SIZE+PFFS_MAX_FILENAME_SIZE];
86         u8 fn_size;
87         u8 mode;
88         t_pffs *pffs;
89 } t_pffs_fd;
90
91 /* function prototypes */
92 int pffs_open(t_pffs *pffs,t_pffs_fd *fd,char *file,u8 mode);
93 int pffs_write(t_pffs_fd *fd,u8 *buf,int len);
94 int pffs_read(t_pffs_fd *fd,u8 *buf,int len);
95 int pffs_lseek(t_pffs_fd *fd,u8 offset,int len);
96 int pffs_close(t_pffs_fd *fd);
97 int pffs_unlink(t_pffs_fd *fd,char *file);
98
99 #endif