#include <linux/fs.h>
#include <linux/cdev.h>
+#include <asm/atomic.h>
enum fw_device_state {
FW_DEVICE_INITIALIZING,
FW_DEVICE_SHUTDOWN,
};
+struct fw_attribute_group {
+ struct attribute_group *groups[2];
+ struct attribute_group group;
+ struct attribute *attrs[11];
+};
+
struct fw_device {
- int state;
+ atomic_t state;
struct fw_node *node;
int node_id;
int generation;
struct fw_card *card;
struct device device;
- struct cdev cdev;
- __be32 *config_rom;
+ struct list_head link;
+ struct list_head client_list;
+ u32 *config_rom;
size_t config_rom_length;
int config_rom_retries;
struct delayed_work work;
+ struct fw_attribute_group attribute_group;
};
static inline struct fw_device *
return container_of(dev, struct fw_device, device);
}
+static inline int
+fw_device_is_shutdown(struct fw_device *device)
+{
+ return atomic_read(&device->state) == FW_DEVICE_SHUTDOWN;
+}
+
struct fw_device *fw_device_get(struct fw_device *device);
void fw_device_put(struct fw_device *device);
int fw_device_enable_phys_dma(struct fw_device *device);
+void fw_device_cdev_update(struct fw_device *device);
+void fw_device_cdev_remove(struct fw_device *device);
+
+struct fw_device *fw_device_from_devt(dev_t devt);
+extern int fw_cdev_major;
+
struct fw_unit {
struct device device;
u32 *directory;
+ struct fw_attribute_group attribute_group;
};
static inline struct fw_unit *