Commit 60d32970 authored by Clemens Ladisch's avatar Clemens Ladisch
Browse files

firewire: add read_csr_reg driver callback



To prepare for the following additions of more OHCI-implemented CSR
registers, replace the get_cycle_time driver callback with a generic
CSR register callback.

Signed-off-by: default avatarClemens Ladisch <clemens@ladisch.de>
parent 3e07ec0e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1044,7 +1044,7 @@ static int ioctl_get_cycle_timer2(struct client *client, union ioctl_arg *arg)

	local_irq_disable();

	cycle_time = card->driver->get_cycle_time(card);
	cycle_time = card->driver->read_csr_reg(card, CSR_CYCLE_TIME);

	switch (a->clk_id) {
	case CLOCK_REALTIME:      getnstimeofday(&ts);                   break;
+2 −1
Original line number Diff line number Diff line
@@ -1025,7 +1025,8 @@ static void handle_registers(struct fw_card *card, struct fw_request *request,

	case CSR_CYCLE_TIME:
		if (TCODE_IS_READ_REQUEST(tcode) && length == 4)
			*data = cpu_to_be32(card->driver->get_cycle_time(card));
			*data = cpu_to_be32(card->driver->
					read_csr_reg(card, CSR_CYCLE_TIME));
		else
			rcode = RCODE_TYPE_ERROR;
		break;
+1 −1
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ struct fw_card_driver {
	int (*enable_phys_dma)(struct fw_card *card,
			       int node_id, int generation);

	u32 (*get_cycle_time)(struct fw_card *card);
	u32 (*read_csr_reg)(struct fw_card *card, int csr_offset);

	struct fw_iso_context *
	(*allocate_iso_context)(struct fw_card *card,
+16 −3
Original line number Diff line number Diff line
@@ -1939,9 +1939,8 @@ static u32 cycle_timer_ticks(u32 cycle_timer)
 * error.  (A PCI read should take at least 20 ticks of the 24.576 MHz timer to
 * execute, so we have enough precision to compute the ratio of the differences.)
 */
static u32 ohci_get_cycle_time(struct fw_card *card)
static u32 get_cycle_time(struct fw_ohci *ohci)
{
	struct fw_ohci *ohci = fw_ohci(card);
	u32 c0, c1, c2;
	u32 t0, t1, t2;
	s32 diff01, diff12;
@@ -1970,6 +1969,20 @@ static u32 ohci_get_cycle_time(struct fw_card *card)
	return c2;
}

static u32 ohci_read_csr_reg(struct fw_card *card, int csr_offset)
{
	struct fw_ohci *ohci = fw_ohci(card);

	switch (csr_offset) {
	case CSR_CYCLE_TIME:
		return get_cycle_time(ohci);

	default:
		WARN_ON(1);
		return 0;
	}
}

static void copy_iso_headers(struct iso_context *ctx, void *p)
{
	int i = ctx->header_length;
@@ -2407,7 +2420,7 @@ static const struct fw_card_driver ohci_driver = {
	.send_response		= ohci_send_response,
	.cancel_packet		= ohci_cancel_packet,
	.enable_phys_dma	= ohci_enable_phys_dma,
	.get_cycle_time		= ohci_get_cycle_time,
	.read_csr_reg		= ohci_read_csr_reg,

	.allocate_iso_context	= ohci_allocate_iso_context,
	.free_iso_context	= ohci_free_iso_context,