bullshit commit, sync for travel (to zn00H!) :)
[my-code/arm.git] / betty / pffs.h
index a37876e..5849fa7 100644 (file)
@@ -15,6 +15,7 @@
 /* defines */
 #define PFFS_MAX_FILENAME_SIZE 15              // in words
 #define PFFS_HEADER_SIZE       3               // in words
 /* defines */
 #define PFFS_MAX_FILENAME_SIZE 15              // in words
 #define PFFS_HEADER_SIZE       3               // in words
+#define PFFS_MAX_FILE_SIZE     0xffff
 
 /* general pffs system */
 #define PFFS_INDEX_FOUND       0x00
 
 /* general pffs system */
 #define PFFS_INDEX_FOUND       0x00
 #define PFFS_INDEX_MAGIC_MASK  0xf000
 #define PFFS_STATE_MASK                0x0f00
 #define PFFS_FNLEN_MASK                0x00f0
 #define PFFS_INDEX_MAGIC_MASK  0xf000
 #define PFFS_STATE_MASK                0x0f00
 #define PFFS_FNLEN_MASK                0x00f0
-#define PFFS_LEN_MSB_MASK      0x000f
+#define PFFS_ADDR_MSB_MASK     0x000f
 
 #define PFFS_INDEX_MAGIC       0x7000
 #define PFFS_INDEX_REMOVED     0x0700
 
 
 #define PFFS_INDEX_MAGIC       0x7000
 #define PFFS_INDEX_REMOVED     0x0700
 
+#define PFFS_ADDR_MSB          
+
 /* file modes */
 #define PFFS_READ              0x01
 #define PFFS_WRITE             0x02
 /* file modes */
 #define PFFS_READ              0x01
 #define PFFS_WRITE             0x02
 #define PFFS_SEEK_END          0x03
 
 /* pffs open / write / read return codes */
 #define PFFS_SEEK_END          0x03
 
 /* pffs open / write / read return codes */
-#define PFFS_FILE_FOUND                0x01
-#define PFFS_FILE_NOT_FOUND    0x02
-#define PFFS_NO_SPACE_LEFT     0x04
-#define PFFS_FILENAME_TOO_LONG 0x08
-#define PFFS_MODE_UNSUPPORTED  0x10
+#define PFFS_FILE_FOUND                        0x01
+#define PFFS_FILE_NOT_FOUND            0x02
+#define PFFS_NO_SPACE_LEFT             0x04
+#define PFFS_FILENAME_TOO_LONG         0x08
+#define PFFS_MODE_UNSUPPORTED          0x10
+#define PFFS_NO_INDEX_SPACE_LEFT       0x20
+#define PFFS_INDEX_WROTE_INIT          0x40
 
 #define PFFS_INVALID_LEN       0x01
 #define PFFS_EINVAL            0x02
 
 #define PFFS_INVALID_LEN       0x01
 #define PFFS_EINVAL            0x02
 
 typedef struct s_pffs {
        /* flash specs */
 
 typedef struct s_pffs {
        /* flash specs */
-       u32 base_addr;
-       u32 *sec_addr;
-       u8 sec_num_data[2];             // first/last sector used for data
-       u8 sec_num_index[2];            // 2 sectors used as an index
+       u32 base_addr;                  // base flash access address
+       u32 *sec_addr;                  // pointer to sector addresses
+       u8 sec_num;                     // number of sectors
 
        /* flash write, read and sector erase function pointers */
        int (*fw)(u32 addr,u16 *buf,int len);
 
        /* flash write, read and sector erase function pointers */
        int (*fw)(u32 addr,u16 *buf,int len);
@@ -73,22 +77,37 @@ typedef struct s_pffs {
 
        /* pffs internal variables */
        u8 state;
 
        /* pffs internal variables */
        u8 state;
-       u8 index_sec;                   // current index sector
        u8 data_tmp_sec;                // current temp data sector
 } t_pffs;
 
 typedef struct s_pffs_fd {
        u8 data_tmp_sec;                // current temp data sector
 } t_pffs;
 
 typedef struct s_pffs_fd {
-       u32 daddr;
-       u32 dptr;
-       u32 iaddr;
-       u16 len;
-       char file[PFFS_MAX_FILENAME_SIZE+PFFS_MAX_FILENAME_SIZE];
-       u8 fn_size;
-       u8 mode;
-       t_pffs *pffs;
+       u32 daddr;                      // data start address
+       u8 data_sec;                    // current data sector
+       u32 dptr;                       // data pointer
+       u32 iaddr;                      // index address
+       u16 len;                        // file size
+       char file[PFFS_MAX_FILENAME_SIZE+PFFS_MAX_FILENAME_SIZE]; // the file
+       u8 fn_size;                     // file name size
+       u8 mode;                        // mode, eg: write, read
+       t_pffs *pffs;                   // pointer to the pffs main struct
 } t_pffs_fd;
 
 } t_pffs_fd;
 
-/* function prototypes */
+typedef struct s_pffs_sector_header {
+       u32 wear_level;                 // program / erase cycles
+}
+
+typedef struct s_pffs_file_header {
+       u32 file_len;                   // length of files in ?
+       u32 file_cont;                  // continued file addr
+       u8 file_name_len;               // lenght of the filename in words
+}
+
+/* function prototypes (only the ones applications should use!) */
+int pffs_flash_register(t_pffs *pffs,u32 base_addr,u32 *sec_addr,u8 sec_num,
+                        int (*fw)(u32 addr,u16 *buf,int len),
+                        int (*fr)(u32 addr,u16 *buf,int len),
+                        int (*fe)(u32 addr));
+int pffs_init(t_pffs *pffs);
 int pffs_open(t_pffs *pffs,t_pffs_fd *fd,char *file,u8 mode);
 int pffs_write(t_pffs_fd *fd,u8 *buf,int len);
 int pffs_read(t_pffs_fd *fd,u8 *buf,int len);
 int pffs_open(t_pffs *pffs,t_pffs_fd *fd,char *file,u8 mode);
 int pffs_write(t_pffs_fd *fd,u8 *buf,int len);
 int pffs_read(t_pffs_fd *fd,u8 *buf,int len);