netfilter: xt_LOG: don't use xchg() for simple assignment
[pandora-kernel.git] / include / linux / superhyway.h
index c906c5a..17ea468 100644 (file)
@@ -19,7 +19,7 @@
  */
 #define SUPERHYWAY_DEVICE_ID_SH5_DMAC  0x0183
 
-struct vcr_info {
+struct superhyway_vcr_info {
        u8      perr_flags;     /* P-port Error flags */
        u8      merr_flags;     /* Module Error flags */
        u16     mod_vers;       /* Module Version */
@@ -28,6 +28,17 @@ struct vcr_info {
        u8      top_mb;         /* Top Memory block */
 };
 
+struct superhyway_ops {
+       int (*read_vcr)(unsigned long base, struct superhyway_vcr_info *vcr);
+       int (*write_vcr)(unsigned long base, struct superhyway_vcr_info vcr);
+};
+
+struct superhyway_bus {
+       struct superhyway_ops *ops;
+};
+
+extern struct superhyway_bus superhyway_channels[];
+
 struct superhyway_device_id {
        unsigned int id;
        unsigned long driver_data;
@@ -55,9 +66,11 @@ struct superhyway_device {
 
        struct superhyway_device_id id;
        struct superhyway_driver *drv;
+       struct superhyway_bus *bus;
 
-       struct resource resource;
-       struct vcr_info vcr;
+       int num_resources;
+       struct resource *resource;
+       struct superhyway_vcr_info vcr;
 };
 
 #define to_superhyway_device(d)        container_of((d), struct superhyway_device, dev)
@@ -65,12 +78,27 @@ struct superhyway_device {
 #define superhyway_get_drvdata(d)      dev_get_drvdata(&(d)->dev)
 #define superhyway_set_drvdata(d,p)    dev_set_drvdata(&(d)->dev, (p))
 
-extern int superhyway_scan_bus(void);
+static inline int
+superhyway_read_vcr(struct superhyway_device *dev, unsigned long base,
+                   struct superhyway_vcr_info *vcr)
+{
+       return dev->bus->ops->read_vcr(base, vcr);
+}
+
+static inline int
+superhyway_write_vcr(struct superhyway_device *dev, unsigned long base,
+                    struct superhyway_vcr_info vcr)
+{
+       return dev->bus->ops->write_vcr(base, vcr);
+}
+
+extern int superhyway_scan_bus(struct superhyway_bus *);
 
 /* drivers/sh/superhyway/superhyway.c */
 int superhyway_register_driver(struct superhyway_driver *);
 void superhyway_unregister_driver(struct superhyway_driver *);
-int superhyway_add_device(unsigned int, unsigned long, unsigned long long);
+int superhyway_add_device(unsigned long base, struct superhyway_device *, struct superhyway_bus *);
+int superhyway_add_devices(struct superhyway_bus *bus, struct superhyway_device **devices, int nr_devices);
 
 /* drivers/sh/superhyway/superhyway-sysfs.c */
 extern struct device_attribute superhyway_dev_attrs[];