#include <linux/list.h>
#include <linux/fs.h>
#include <linux/dma-mapping.h>
-
-#define TCODE_WRITE_QUADLET_REQUEST 0
-#define TCODE_WRITE_BLOCK_REQUEST 1
-#define TCODE_WRITE_RESPONSE 2
-#define TCODE_READ_QUADLET_REQUEST 4
-#define TCODE_READ_BLOCK_REQUEST 5
-#define TCODE_READ_QUADLET_RESPONSE 6
-#define TCODE_READ_BLOCK_RESPONSE 7
-#define TCODE_CYCLE_START 8
-#define TCODE_LOCK_REQUEST 9
-#define TCODE_STREAM_DATA 10
-#define TCODE_LOCK_RESPONSE 11
+#include <linux/firewire-constants.h>
#define TCODE_IS_READ_REQUEST(tcode) (((tcode) & ~1) == 4)
#define TCODE_IS_BLOCK_PACKET(tcode) (((tcode) & 1) != 0)
#define TCODE_HAS_REQUEST_DATA(tcode) (((tcode) & 12) != 4)
#define TCODE_HAS_RESPONSE_DATA(tcode) (((tcode) & 12) != 0)
-/* Juju specific tcodes */
-#define TCODE_DEALLOCATE 0x10
-#define TCODE_LOCK_MASK_SWAP 0x11
-#define TCODE_LOCK_COMPARE_SWAP 0x12
-#define TCODE_LOCK_FETCH_ADD 0x13
-#define TCODE_LOCK_LITTLE_ADD 0x14
-#define TCODE_LOCK_BOUNDED_ADD 0x15
-#define TCODE_LOCK_WRAP_ADD 0x16
-#define TCODE_LOCK_VENDOR_SPECIFIC 0x17
-
-#define SCODE_100 0x0
-#define SCODE_200 0x1
-#define SCODE_400 0x2
-#define SCODE_BETA 0x3
-
-#define EXTCODE_MASK_SWAP 0x1
-#define EXTCODE_COMPARE_SWAP 0x2
-#define EXTCODE_FETCH_ADD 0x3
-#define EXTCODE_LITTLE_ADD 0x4
-#define EXTCODE_BOUNDED_ADD 0x5
-#define EXTCODE_WRAP_ADD 0x6
-
-#define ACK_COMPLETE 0x1
-#define ACK_PENDING 0x2
-#define ACK_BUSY_X 0x4
-#define ACK_BUSY_A 0x5
-#define ACK_BUSY_B 0x6
-#define ACK_DATA_ERROR 0xd
-#define ACK_TYPE_ERROR 0xe
-
-#define RCODE_COMPLETE 0x0
-#define RCODE_CONFLICT_ERROR 0x4
-#define RCODE_DATA_ERROR 0x5
-#define RCODE_TYPE_ERROR 0x6
-#define RCODE_ADDRESS_ERROR 0x7
-
-/* Juju specific rcodes */
-#define RCODE_SEND_ERROR 0x10
-#define RCODE_CANCELLED 0x11
-#define RCODE_BUSY 0x12
-#define RCODE_GENERATION 0x13
-#define RCODE_NO_ACK 0x14
-
-#define RETRY_1 0x00
-#define RETRY_X 0x01
-#define RETRY_A 0x02
-#define RETRY_B 0x03
-
#define LOCAL_BUS 0xffc0
#define SELFID_PORT_CHILD 0x3
#define fw_notify(s, args...) printk(KERN_NOTICE KBUILD_MODNAME ": " s, ## args)
#define fw_error(s, args...) printk(KERN_ERR KBUILD_MODNAME ": " s, ## args)
-#define fw_debug(s, args...) printk(KERN_DEBUG KBUILD_MODNAME ": " s, ## args)
static inline void
fw_memcpy_from_be32(void *_dst, void *_src, size_t size)
const u32 *data;
};
-int fw_core_add_descriptor (struct fw_descriptor *desc);
-void fw_core_remove_descriptor (struct fw_descriptor *desc);
+int fw_core_add_descriptor(struct fw_descriptor *desc);
+void fw_core_remove_descriptor(struct fw_descriptor *desc);
-typedef void (*fw_packet_callback_t) (struct fw_packet *packet,
- struct fw_card *card, int status);
+typedef void (*fw_packet_callback_t)(struct fw_packet *packet,
+ struct fw_card *card, int status);
typedef void (*fw_transaction_callback_t)(struct fw_card *card, int rcode,
void *data,
size_t length,
void *callback_data);
+/*
+ * Important note: The callback must guarantee that either fw_send_response()
+ * or kfree() is called on the @request.
+ */
typedef void (*fw_address_callback_t)(struct fw_card *card,
struct fw_request *request,
int tcode, int destination, int source,
static inline struct fw_packet *
fw_packet(struct list_head *l)
{
- return list_entry (l, struct fw_packet, link);
+ return list_entry(l, struct fw_packet, link);
}
struct fw_address_handler {
struct fw_node *irm_node;
int color;
int gap_count;
- int topology_type;
+ bool beta_repeaters_present;
int index;
struct fw_iso_context;
-typedef void (*fw_iso_callback_t) (struct fw_iso_context *context,
- u32 cycle,
- size_t header_length,
- void *header,
- void *data);
+typedef void (*fw_iso_callback_t)(struct fw_iso_context *context,
+ u32 cycle,
+ size_t header_length,
+ void *header,
+ void *data);
/*
* An iso buffer is just a set of pages mapped for DMA in the
* enable the PHY or set the link_on bit and initiate a bus
* reset.
*/
- int (*enable) (struct fw_card *card, u32 *config_rom, size_t length);
+ int (*enable)(struct fw_card *card, u32 *config_rom, size_t length);
- int (*update_phy_reg) (struct fw_card *card, int address,
- int clear_bits, int set_bits);
+ int (*update_phy_reg)(struct fw_card *card, int address,
+ int clear_bits, int set_bits);
/*
* Update the config rom for an enabled card. This function
* should change the config rom that is presented on the bus
* an initiate a bus reset.
*/
- int (*set_config_rom) (struct fw_card *card,
- u32 *config_rom, size_t length);
+ int (*set_config_rom)(struct fw_card *card,
+ u32 *config_rom, size_t length);
- void (*send_request) (struct fw_card *card, struct fw_packet *packet);
- void (*send_response) (struct fw_card *card, struct fw_packet *packet);
+ void (*send_request)(struct fw_card *card, struct fw_packet *packet);
+ void (*send_response)(struct fw_card *card, struct fw_packet *packet);
/* Calling cancel is valid once a packet has been submitted. */
- int (*cancel_packet) (struct fw_card *card, struct fw_packet *packet);
+ int (*cancel_packet)(struct fw_card *card, struct fw_packet *packet);
/*
* Allow the specified node ID to do direct DMA out and in of
* doesn't support this, -ESTALE if the generation doesn't
* match.
*/
- int (*enable_phys_dma) (struct fw_card *card,
- int node_id, int generation);
+ int (*enable_phys_dma)(struct fw_card *card,
+ int node_id, int generation);
- u64 (*get_bus_time) (struct fw_card *card);
+ u64 (*get_bus_time)(struct fw_card *card);
struct fw_iso_context *
(*allocate_iso_context)(struct fw_card *card,