summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2007-07-05 18:01:35 +0200
committerSascha Hauer <sha@octopus.labnet.pengutronix.de>2007-07-05 18:01:35 +0200
commit7880ba637265acceb863a749ac1937334768bf50 (patch)
tree187dd63688c160b166da16d3485ebb554eb88a47
parent0ed157cd19b5b9efe815219c9853300a314f3eed (diff)
downloadbarebox-7880ba637265acceb863a749ac1937334768bf50.tar.gz
barebox-7880ba637265acceb863a749ac1937334768bf50.tar.xz
svn_rev_235
beginning filesystem support
-rw-r--r--include/driver.h7
-rw-r--r--include/fs.h34
-rw-r--r--include/partition.h11
3 files changed, 51 insertions, 1 deletions
diff --git a/include/driver.h b/include/driver.h
index b773839cde..0936462c94 100644
--- a/include/driver.h
+++ b/include/driver.h
@@ -10,7 +10,8 @@
#define DEVICE_TYPE_ETHER 1
#define DEVICE_TYPE_STDIO 2
#define DEVICE_TYPE_DRAM 3
-#define MAX_DEVICE_TYPE 3
+#define DEVICE_TYPE_FS 3
+#define MAX_DEVICE_TYPE 4
#include <param.h>
@@ -54,6 +55,7 @@ struct driver_d {
int (*get) (struct device_d*, struct param_d *);
int (*set) (struct device_d*, struct param_d *, value_t val);
+ void *driver_data;
unsigned long type;
void *type_data;
};
@@ -68,6 +70,9 @@ void unregister_device(struct device_d *);
struct device_d *device_from_spec_str(const char *str, char **endp);
struct device_d *get_device_by_name(char *name);
struct device_d *get_device_by_type(ulong type, struct device_d *last);
+struct device_d *get_device_by_id(char *id);
+
+struct driver_d *get_driver_by_name(char *name);
ssize_t read(struct device_d *dev, void *buf, size_t count, ulong offset, ulong flags);
ssize_t write(struct device_d *dev, void *buf, size_t count, ulong offset, ulong flags);
diff --git a/include/fs.h b/include/fs.h
new file mode 100644
index 0000000000..bb5c301e18
--- /dev/null
+++ b/include/fs.h
@@ -0,0 +1,34 @@
+#ifndef __FS_H
+#define __FS_H
+
+#include <driver.h>
+
+#define FS_TYPE_CRAMFS 1
+
+struct partition;
+
+struct fs_driver_d {
+ ulong type;
+ char *name;
+ int (*ls) (struct device_d *dev, const char *filename);
+ int (*load) (char *dst, struct device_d *dev, const char *filename);
+ int (*probe) (struct device_d *dev);
+
+ struct driver_d drv;
+};
+
+struct fs_device_d {
+ ulong type;
+ char *name;
+ struct device_d *parent; /* the device we are associated with */
+ struct device_d dev; /* our own device */
+
+ struct fs_driver_d *driver;
+};
+
+int register_filesystem(struct device_d *dev, char *fsname);
+//int unregister_filesystem(struct device_d *dev);
+
+int register_fs_driver(struct fs_driver_d *new_fs_drv);
+
+#endif /* __FS_H */
diff --git a/include/partition.h b/include/partition.h
index 19116437ef..e76c6415c9 100644
--- a/include/partition.h
+++ b/include/partition.h
@@ -3,5 +3,16 @@
struct device_d;
+struct partition {
+ int num;
+
+ unsigned long offset;
+
+ struct device_d *parent;
+ struct device_d device;
+
+ char name[16];
+};
+
#endif /* __PARTITION_H */