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

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
...@@ -1044,7 +1044,7 @@ static int ioctl_get_cycle_timer2(struct client *client, union ioctl_arg *arg) ...@@ -1044,7 +1044,7 @@ static int ioctl_get_cycle_timer2(struct client *client, union ioctl_arg *arg)
local_irq_disable(); 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) { switch (a->clk_id) {
case CLOCK_REALTIME: getnstimeofday(&ts); break; case CLOCK_REALTIME: getnstimeofday(&ts); break;
......
...@@ -1025,7 +1025,8 @@ static void handle_registers(struct fw_card *card, struct fw_request *request, ...@@ -1025,7 +1025,8 @@ static void handle_registers(struct fw_card *card, struct fw_request *request,
case CSR_CYCLE_TIME: case CSR_CYCLE_TIME:
if (TCODE_IS_READ_REQUEST(tcode) && length == 4) 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 else
rcode = RCODE_TYPE_ERROR; rcode = RCODE_TYPE_ERROR;
break; break;
......
...@@ -75,7 +75,7 @@ struct fw_card_driver { ...@@ -75,7 +75,7 @@ struct fw_card_driver {
int (*enable_phys_dma)(struct fw_card *card, int (*enable_phys_dma)(struct fw_card *card,
int node_id, int generation); 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 * struct fw_iso_context *
(*allocate_iso_context)(struct fw_card *card, (*allocate_iso_context)(struct fw_card *card,
......
...@@ -1939,9 +1939,8 @@ static u32 cycle_timer_ticks(u32 cycle_timer) ...@@ -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 * 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.) * 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 c0, c1, c2;
u32 t0, t1, t2; u32 t0, t1, t2;
s32 diff01, diff12; s32 diff01, diff12;
...@@ -1970,6 +1969,20 @@ static u32 ohci_get_cycle_time(struct fw_card *card) ...@@ -1970,6 +1969,20 @@ static u32 ohci_get_cycle_time(struct fw_card *card)
return c2; 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) static void copy_iso_headers(struct iso_context *ctx, void *p)
{ {
int i = ctx->header_length; int i = ctx->header_length;
...@@ -2407,7 +2420,7 @@ static const struct fw_card_driver ohci_driver = { ...@@ -2407,7 +2420,7 @@ static const struct fw_card_driver ohci_driver = {
.send_response = ohci_send_response, .send_response = ohci_send_response,
.cancel_packet = ohci_cancel_packet, .cancel_packet = ohci_cancel_packet,
.enable_phys_dma = ohci_enable_phys_dma, .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, .allocate_iso_context = ohci_allocate_iso_context,
.free_iso_context = ohci_free_iso_context, .free_iso_context = ohci_free_iso_context,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment