Commit 90893000 authored by Ben Hutchings's avatar Ben Hutchings

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: default avatarBen Hutchings <bhutchings@solarflare.com>
parent 9d9a6973
...@@ -754,7 +754,8 @@ void efx_nic_eventq_read_ack(struct efx_channel *channel) ...@@ -754,7 +754,8 @@ void efx_nic_eventq_read_ack(struct efx_channel *channel)
} }
/* Use HW to insert a SW defined event */ /* 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; efx_oword_t drv_ev_reg;
...@@ -764,8 +765,8 @@ static void efx_generate_event(struct efx_channel *channel, efx_qword_t *event) ...@@ -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[1] = event->u32[1];
drv_ev_reg.u32[2] = 0; drv_ev_reg.u32[2] = 0;
drv_ev_reg.u32[3] = 0; drv_ev_reg.u32[3] = 0;
EFX_SET_OWORD_FIELD(drv_ev_reg, FRF_AZ_DRV_EV_QID, channel->channel); EFX_SET_OWORD_FIELD(drv_ev_reg, FRF_AZ_DRV_EV_QID, evq);
efx_writeo(channel->efx, &drv_ev_reg, FR_AZ_DRV_EV); efx_writeo(efx, &drv_ev_reg, FR_AZ_DRV_EV);
} }
static void efx_magic_event(struct efx_channel *channel, u32 magic) 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) ...@@ -775,7 +776,7 @@ static void efx_magic_event(struct efx_channel *channel, u32 magic)
EFX_POPULATE_QWORD_2(event, FSF_AZ_EV_CODE, EFX_POPULATE_QWORD_2(event, FSF_AZ_EV_CODE,
FSE_AZ_EV_CODE_DRV_GEN_EV, FSE_AZ_EV_CODE_DRV_GEN_EV,
FSF_AZ_DRV_GEN_EV_MAGIC, magic); 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 /* Handle a transmit completion event
......
...@@ -283,8 +283,8 @@ extern void efx_nic_get_regs(struct efx_nic *efx, void *buf); ...@@ -283,8 +283,8 @@ extern void efx_nic_get_regs(struct efx_nic *efx, void *buf);
#define MAC_DATA_LBN 0 #define MAC_DATA_LBN 0
#define MAC_DATA_WIDTH 32 #define MAC_DATA_WIDTH 32
extern void efx_nic_generate_event(struct efx_channel *channel, extern void efx_generate_event(struct efx_nic *efx, unsigned int evq,
efx_qword_t *event); efx_qword_t *event);
extern void falcon_poll_xmac(struct efx_nic *efx); extern void falcon_poll_xmac(struct efx_nic *efx);
......
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