-/* -*- c-basic-offset: 8 -*-
- *
- * fw-device.h - Device probing and sysfs code.
- *
+/*
* Copyright (C) 2005-2006 Kristian Hoegsberg <krh@bitplanet.net>
*
* This program is free software; you can redistribute it and/or modify
#include <linux/fs.h>
#include <linux/cdev.h>
+#include <asm/atomic.h>
enum fw_device_state {
FW_DEVICE_INITIALIZING,
FW_DEVICE_RUNNING,
- FW_DEVICE_SHUTDOWN
+ 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 *
#define CSR_DEPENDENT_INFO 0x14
#define CSR_MODEL 0x17
#define CSR_INSTANCE 0x18
+#define CSR_DIRECTORY_ID 0x20
#define SBP2_COMMAND_SET_SPECIFIER 0x38
#define SBP2_COMMAND_SET 0x39