sfc: Generalise event generation to cover VF-owned event queues
authorBen Hutchings <bhutchings@solarflare.com>
Fri, 10 Feb 2012 22:23:41 +0000 (22:23 +0000)
committerBen Hutchings <bhutchings@solarflare.com>
Thu, 16 Feb 2012 00:25:06 +0000 (00:25 +0000)
For SR-IOV we will need to send events to event queues that belong to
VFs serviced by other drivers.  Change the parameters of
efx_generate_event() to allow this and declare it extern.

While we're at it, remove the existing declaration under the wrong
name efx_nic_generate_event().

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
drivers/net/ethernet/sfc/nic.c
drivers/net/ethernet/sfc/nic.h

index 03e4125..539b574 100644 (file)
@@ -754,7 +754,8 @@ void efx_nic_eventq_read_ack(struct efx_channel *channel)
 }
 
 /* Use HW to insert a SW defined event */
-static void efx_generate_event(struct efx_channel *channel, efx_qword_t *event)
+void efx_generate_event(struct efx_nic *efx, unsigned int evq,
+                       efx_qword_t *event)
 {
        efx_oword_t drv_ev_reg;
 
@@ -764,8 +765,8 @@ static void efx_generate_event(struct efx_channel *channel, efx_qword_t *event)
        drv_ev_reg.u32[1] = event->u32[1];
        drv_ev_reg.u32[2] = 0;
        drv_ev_reg.u32[3] = 0;
-       EFX_SET_OWORD_FIELD(drv_ev_reg, FRF_AZ_DRV_EV_QID, channel->channel);
-       efx_writeo(channel->efx, &drv_ev_reg, FR_AZ_DRV_EV);
+       EFX_SET_OWORD_FIELD(drv_ev_reg, FRF_AZ_DRV_EV_QID, evq);
+       efx_writeo(efx, &drv_ev_reg, FR_AZ_DRV_EV);
 }
 
 static void efx_magic_event(struct efx_channel *channel, u32 magic)
@@ -775,7 +776,7 @@ static void efx_magic_event(struct efx_channel *channel, u32 magic)
        EFX_POPULATE_QWORD_2(event, FSF_AZ_EV_CODE,
                             FSE_AZ_EV_CODE_DRV_GEN_EV,
                             FSF_AZ_DRV_GEN_EV_MAGIC, magic);
-       efx_generate_event(channel, &event);
+       efx_generate_event(channel->efx, channel->channel, &event);
 }
 
 /* Handle a transmit completion event
index aeca4e8..1f53e2c 100644 (file)
@@ -283,8 +283,8 @@ extern void efx_nic_get_regs(struct efx_nic *efx, void *buf);
 #define MAC_DATA_LBN 0
 #define MAC_DATA_WIDTH 32
 
-extern void efx_nic_generate_event(struct efx_channel *channel,
-                                  efx_qword_t *event);
+extern void efx_generate_event(struct efx_nic *efx, unsigned int evq,
+                              efx_qword_t *event);
 
 extern void falcon_poll_xmac(struct efx_nic *efx);