#ifndef _LINUX_FIREWIRE_H
#define _LINUX_FIREWIRE_H
#include <linux/completion.h>
#include <linux/device.h>
#include <linux/dma-mapping.h>
#include <linux/kernel.h>
#include <linux/kref.h>
#include <linux/list.h>
#include <linux/mutex.h>
#include <linux/spinlock.h>
#include <linux/sysfs.h>
#include <linux/timer.h>
#include <linux/types.h>
#include <linux/workqueue.h>
#include <linux/atomic.h>
#include <asm/byteorder.h>
#define CSR_REGISTER_BASE …
#define CSR_STATE_CLEAR …
#define CSR_STATE_SET …
#define CSR_NODE_IDS …
#define CSR_RESET_START …
#define CSR_SPLIT_TIMEOUT_HI …
#define CSR_SPLIT_TIMEOUT_LO …
#define CSR_CYCLE_TIME …
#define CSR_BUS_TIME …
#define CSR_BUSY_TIMEOUT …
#define CSR_PRIORITY_BUDGET …
#define CSR_BUS_MANAGER_ID …
#define CSR_BANDWIDTH_AVAILABLE …
#define CSR_CHANNELS_AVAILABLE …
#define CSR_CHANNELS_AVAILABLE_HI …
#define CSR_CHANNELS_AVAILABLE_LO …
#define CSR_MAINT_UTILITY …
#define CSR_BROADCAST_CHANNEL …
#define CSR_CONFIG_ROM …
#define CSR_CONFIG_ROM_END …
#define CSR_OMPR …
#define CSR_OPCR(i) …
#define CSR_IMPR …
#define CSR_IPCR(i) …
#define CSR_FCP_COMMAND …
#define CSR_FCP_RESPONSE …
#define CSR_FCP_END …
#define CSR_TOPOLOGY_MAP …
#define CSR_TOPOLOGY_MAP_END …
#define CSR_SPEED_MAP …
#define CSR_SPEED_MAP_END …
#define CSR_OFFSET …
#define CSR_LEAF …
#define CSR_DIRECTORY …
#define CSR_DESCRIPTOR …
#define CSR_VENDOR …
#define CSR_HARDWARE_VERSION …
#define CSR_UNIT …
#define CSR_SPECIFIER_ID …
#define CSR_VERSION …
#define CSR_DEPENDENT_INFO …
#define CSR_MODEL …
#define CSR_DIRECTORY_ID …
struct fw_csr_iterator { … };
void fw_csr_iterator_init(struct fw_csr_iterator *ci, const u32 *p);
int fw_csr_iterator_next(struct fw_csr_iterator *ci, int *key, int *value);
int fw_csr_string(const u32 *directory, int key, char *buf, size_t size);
extern const struct bus_type fw_bus_type;
struct fw_card_driver;
struct fw_node;
struct fw_card { … };
static inline struct fw_card *fw_card_get(struct fw_card *card)
{ … }
void fw_card_release(struct kref *kref);
static inline void fw_card_put(struct fw_card *card)
{ … }
int fw_card_read_cycle_time(struct fw_card *card, u32 *cycle_time);
struct fw_attribute_group { … };
enum fw_device_state { … };
struct fw_device { … };
#define fw_device(dev) …
static inline int fw_device_is_shutdown(struct fw_device *device)
{ … }
int fw_device_enable_phys_dma(struct fw_device *device);
struct fw_unit { … };
#define fw_unit(dev) …
static inline struct fw_unit *fw_unit_get(struct fw_unit *unit)
{ … }
static inline void fw_unit_put(struct fw_unit *unit)
{ … }
#define fw_parent_device(unit) …
struct ieee1394_device_id;
struct fw_driver { … };
struct fw_packet;
struct fw_request;
fw_packet_callback_t;
fw_transaction_callback_t;
fw_transaction_callback_with_tstamp_t;
fw_transaction_callback;
fw_address_callback_t;
struct fw_packet { … };
struct fw_transaction { … };
struct fw_address_handler { … };
struct fw_address_region { … };
extern const struct fw_address_region fw_high_memory_region;
int fw_core_add_address_handler(struct fw_address_handler *handler,
const struct fw_address_region *region);
void fw_core_remove_address_handler(struct fw_address_handler *handler);
void fw_send_response(struct fw_card *card,
struct fw_request *request, int rcode);
int fw_get_request_speed(struct fw_request *request);
u32 fw_request_get_timestamp(const struct fw_request *request);
void __fw_send_request(struct fw_card *card, struct fw_transaction *t, int tcode,
int destination_id, int generation, int speed, unsigned long long offset,
void *payload, size_t length, union fw_transaction_callback callback,
bool with_tstamp, void *callback_data);
static inline void fw_send_request(struct fw_card *card, struct fw_transaction *t, int tcode,
int destination_id, int generation, int speed,
unsigned long long offset, void *payload, size_t length,
fw_transaction_callback_t callback, void *callback_data)
{ … }
static inline void fw_send_request_with_tstamp(struct fw_card *card, struct fw_transaction *t,
int tcode, int destination_id, int generation, int speed, unsigned long long offset,
void *payload, size_t length, fw_transaction_callback_with_tstamp_t callback,
void *callback_data)
{ … }
int fw_cancel_transaction(struct fw_card *card,
struct fw_transaction *transaction);
int fw_run_transaction(struct fw_card *card, int tcode, int destination_id,
int generation, int speed, unsigned long long offset,
void *payload, size_t length);
const char *fw_rcode_string(int rcode);
static inline int fw_stream_packet_destination_id(int tag, int channel, int sy)
{ … }
void fw_schedule_bus_reset(struct fw_card *card, bool delayed,
bool short_reset);
struct fw_descriptor { … };
int fw_core_add_descriptor(struct fw_descriptor *desc);
void fw_core_remove_descriptor(struct fw_descriptor *desc);
struct fw_iso_packet { … };
#define FW_ISO_CONTEXT_TRANSMIT …
#define FW_ISO_CONTEXT_RECEIVE …
#define FW_ISO_CONTEXT_RECEIVE_MULTICHANNEL …
#define FW_ISO_CONTEXT_MATCH_TAG0 …
#define FW_ISO_CONTEXT_MATCH_TAG1 …
#define FW_ISO_CONTEXT_MATCH_TAG2 …
#define FW_ISO_CONTEXT_MATCH_TAG3 …
#define FW_ISO_CONTEXT_MATCH_ALL_TAGS …
struct fw_iso_buffer { … };
int fw_iso_buffer_init(struct fw_iso_buffer *buffer, struct fw_card *card,
int page_count, enum dma_data_direction direction);
void fw_iso_buffer_destroy(struct fw_iso_buffer *buffer, struct fw_card *card);
size_t fw_iso_buffer_lookup(struct fw_iso_buffer *buffer, dma_addr_t completed);
struct fw_iso_context;
fw_iso_callback_t;
fw_iso_mc_callback_t;
fw_iso_callback;
struct fw_iso_context { … };
struct fw_iso_context *fw_iso_context_create(struct fw_card *card,
int type, int channel, int speed, size_t header_size,
fw_iso_callback_t callback, void *callback_data);
int fw_iso_context_set_channels(struct fw_iso_context *ctx, u64 *channels);
int fw_iso_context_queue(struct fw_iso_context *ctx,
struct fw_iso_packet *packet,
struct fw_iso_buffer *buffer,
unsigned long payload);
void fw_iso_context_queue_flush(struct fw_iso_context *ctx);
int fw_iso_context_flush_completions(struct fw_iso_context *ctx);
static inline void fw_iso_context_schedule_flush_completions(struct fw_iso_context *ctx)
{ … }
int fw_iso_context_start(struct fw_iso_context *ctx,
int cycle, int sync, int tags);
int fw_iso_context_stop(struct fw_iso_context *ctx);
void fw_iso_context_destroy(struct fw_iso_context *ctx);
void fw_iso_resource_manage(struct fw_card *card, int generation,
u64 channels_mask, int *channel, int *bandwidth,
bool allocate);
extern struct workqueue_struct *fw_workqueue;
#endif