notebook -> pc ;)
[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 #define PFFS_MAX_FILE_SIZE      0xffff
19
20 /* general pffs system */
21 #define PFFS_INDEX_FOUND        0x00
22 #define PFFS_NO_INDEX_FOUND     0x01
23
24 #define PFFS_DATA_TMP_FOUND     0x00
25 #define PFFS_NO_DATA_TMP        0x01
26
27 #define PFFS_SEC_NOT_EMPTY      0x00
28 #define PFFS_SEC_EMPTY          0x01
29
30 #define PFFS_REGISTERED         (1<<0)
31
32 /* pffs index format */
33 #define PFFS_INDEX_MAGIC_MASK   0xf000
34 #define PFFS_STATE_MASK         0x0f00
35 #define PFFS_FNLEN_MASK         0x00f0
36 #define PFFS_ADDR_MSB_MASK      0x000f
37
38 #define PFFS_INDEX_MAGIC        0x7000
39 #define PFFS_INDEX_REMOVED      0x0700
40
41 #define PFFS_ADDR_MSB           
42
43 /* file modes */
44 #define PFFS_READ               0x01
45 #define PFFS_WRITE              0x02
46 #define PFFS_RDWR               0x03
47
48 /* lseek offsets */
49 #define PFFS_SEEK_SET           0x01
50 #define PFFS_SEEK_CUR           0x02
51 #define PFFS_SEEK_END           0x03
52
53 /* pffs open / write / read return codes */
54 #define PFFS_FILE_FOUND                 0x01
55 #define PFFS_FILE_NOT_FOUND             0x02
56 #define PFFS_NO_SPACE_LEFT              0x04
57 #define PFFS_FILENAME_TOO_LONG          0x08
58 #define PFFS_MODE_UNSUPPORTED           0x10
59 #define PFFS_NO_INDEX_SPACE_LEFT        0x20
60 #define PFFS_INDEX_WROTE_INIT           0x40
61
62 #define PFFS_INVALID_LEN        0x01
63 #define PFFS_EINVAL             0x02
64
65 /* type definitions */
66
67 typedef struct s_pffs {
68         /* flash specs */
69         u32 base_addr;
70         u32 *sec_addr;
71         u8 sec_num_data[2];             // first/last sector used for data
72         u8 sec_num_index[2];            // 2 sectors used as an index
73
74         /* flash write, read and sector erase function pointers */
75         int (*fw)(u32 addr,u16 *buf,int len);
76         int (*fr)(u32 addr,u16 *buf,int len);
77         int (*fe)(u32 addr);
78
79         /* pffs internal variables */
80         u8 state;
81         u8 index_sec;                   // current index sector
82         u8 data_tmp_sec;                // current temp data sector
83 } t_pffs;
84
85 typedef struct s_pffs_fd {
86         u32 daddr;                      // data start address
87         u8 data_sec;                    // current data sector
88         u32 dptr;                       // data pointer
89         u32 iaddr;                      // index address
90         u16 len;                        // file size
91         char file[PFFS_MAX_FILENAME_SIZE+PFFS_MAX_FILENAME_SIZE]; // the file
92         u8 fn_size;                     // file name size
93         u8 mode;                        // mode, eg: write, read
94         t_pffs *pffs;                   // pointer to the pffs main struct
95 } t_pffs_fd;
96
97 typedef struct s_pffs_sector_header {
98         u32 wear_level;                 // program / erase cycles
99 }
100
101 typedef struct s_pffs_file_header {
102         u32 file_len;                   // length of files in ?
103         u32 file_cont;                  // continued file addr
104         u8 file_name_len;               // lenght of the filename in words
105 }
106
107 /* function prototypes (only the ones applications should use!) */
108 int pffs_flash_register(t_pffs *pffs,u32 base_addr,u32 *sec_addr,
109                         u8 sec_num_data_min,u8 sec_num_data_max,
110                         u8 sec_num_index0,u8 sec_num_index1,
111                         int (*fw)(u32 addr,u16 *buf,int len),
112                         int (*fr)(u32 addr,u16 *buf,int len),
113                         int (*fe)(u32 addr));
114 int pffs_init(t_pffs *pffs);
115 int pffs_open(t_pffs *pffs,t_pffs_fd *fd,char *file,u8 mode);
116 int pffs_write(t_pffs_fd *fd,u8 *buf,int len);
117 int pffs_read(t_pffs_fd *fd,u8 *buf,int len);
118 int pffs_lseek(t_pffs_fd *fd,u8 offset,int len);
119 int pffs_close(t_pffs_fd *fd);
120 int pffs_unlink(t_pffs_fd *fd,char *file);
121
122 #endif