diff options
author | Ben Hutchings <bhutchings@solarflare.com> | 2012-02-10 22:23:41 +0000 |
---|---|---|
committer | Ben Hutchings <bhutchings@solarflare.com> | 2012-02-16 00:25:06 +0000 |
commit | 90893000e21e2d52a0a9d5aa0c4234c90bcd9470 (patch) | |
tree | d79095dec77ae137c2fe4c7a8e9e9d606846b321 | |
parent | 9d9a6973a890c5b2258e717e4aae716720e60fcb (diff) |
sfc: Generalise event generation to cover VF-owned event queues
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>
-rw-r--r-- | drivers/net/ethernet/sfc/nic.c | 9 | ||||
-rw-r--r-- | drivers/net/ethernet/sfc/nic.h | 4 |
2 files changed, 7 insertions, 6 deletions
diff --git a/drivers/net/ethernet/sfc/nic.c b/drivers/net/ethernet/sfc/nic.c index 03e4125d6b96..539b57441e80 100644 --- a/drivers/net/ethernet/sfc/nic.c +++ b/drivers/net/ethernet/sfc/nic.c @@ -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 diff --git a/drivers/net/ethernet/sfc/nic.h b/drivers/net/ethernet/sfc/nic.h index aeca4e8bb4c2..1f53e2c7cfd7 100644 --- a/drivers/net/ethernet/sfc/nic.h +++ b/drivers/net/ethernet/sfc/nic.h @@ -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); |