sfc: move MCDI receive queue management code
authorAlex Maftei (amaftei) <amaftei@solarflare.com>
Thu, 9 Jan 2020 15:45:15 +0000 (15:45 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 9 Jan 2020 18:58:35 +0000 (10:58 -0800)
One function's prototype was changed in the header.

Signed-off-by: Alexandru-Mihai Maftei <amaftei@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/sfc/ef10.c
drivers/net/ethernet/sfc/mcdi_functions.c
drivers/net/ethernet/sfc/mcdi_functions.h

index aeb6c2059eb110cf4a03581968b1659b9cc04850..dc037dd927f80ca00e54101286360857be028e77 100644 (file)
@@ -2967,91 +2967,6 @@ static int efx_ef10_vf_rx_push_rss_config(struct efx_nic *efx, bool user,
        return efx_ef10_rx_push_shared_rss_config(efx, NULL);
 }
 
-static int efx_ef10_rx_probe(struct efx_rx_queue *rx_queue)
-{
-       return efx_nic_alloc_buffer(rx_queue->efx, &rx_queue->rxd.buf,
-                                   (rx_queue->ptr_mask + 1) *
-                                   sizeof(efx_qword_t),
-                                   GFP_KERNEL);
-}
-
-static void efx_ef10_rx_init(struct efx_rx_queue *rx_queue)
-{
-       MCDI_DECLARE_BUF(inbuf,
-                        MC_CMD_INIT_RXQ_IN_LEN(EFX_MAX_DMAQ_SIZE * 8 /
-                                               EFX_BUF_SIZE));
-       struct efx_channel *channel = efx_rx_queue_channel(rx_queue);
-       size_t entries = rx_queue->rxd.buf.len / EFX_BUF_SIZE;
-       struct efx_nic *efx = rx_queue->efx;
-       struct efx_ef10_nic_data *nic_data = efx->nic_data;
-       size_t inlen;
-       dma_addr_t dma_addr;
-       int rc;
-       int i;
-       BUILD_BUG_ON(MC_CMD_INIT_RXQ_OUT_LEN != 0);
-
-       rx_queue->scatter_n = 0;
-       rx_queue->scatter_len = 0;
-
-       MCDI_SET_DWORD(inbuf, INIT_RXQ_IN_SIZE, rx_queue->ptr_mask + 1);
-       MCDI_SET_DWORD(inbuf, INIT_RXQ_IN_TARGET_EVQ, channel->channel);
-       MCDI_SET_DWORD(inbuf, INIT_RXQ_IN_LABEL, efx_rx_queue_index(rx_queue));
-       MCDI_SET_DWORD(inbuf, INIT_RXQ_IN_INSTANCE,
-                      efx_rx_queue_index(rx_queue));
-       MCDI_POPULATE_DWORD_2(inbuf, INIT_RXQ_IN_FLAGS,
-                             INIT_RXQ_IN_FLAG_PREFIX, 1,
-                             INIT_RXQ_IN_FLAG_TIMESTAMP, 1);
-       MCDI_SET_DWORD(inbuf, INIT_RXQ_IN_OWNER_ID, 0);
-       MCDI_SET_DWORD(inbuf, INIT_RXQ_IN_PORT_ID, nic_data->vport_id);
-
-       dma_addr = rx_queue->rxd.buf.dma_addr;
-
-       netif_dbg(efx, hw, efx->net_dev, "pushing RXQ %d. %zu entries (%llx)\n",
-                 efx_rx_queue_index(rx_queue), entries, (u64)dma_addr);
-
-       for (i = 0; i < entries; ++i) {
-               MCDI_SET_ARRAY_QWORD(inbuf, INIT_RXQ_IN_DMA_ADDR, i, dma_addr);
-               dma_addr += EFX_BUF_SIZE;
-       }
-
-       inlen = MC_CMD_INIT_RXQ_IN_LEN(entries);
-
-       rc = efx_mcdi_rpc(efx, MC_CMD_INIT_RXQ, inbuf, inlen,
-                         NULL, 0, NULL);
-       if (rc)
-               netdev_WARN(efx->net_dev, "failed to initialise RXQ %d\n",
-                           efx_rx_queue_index(rx_queue));
-}
-
-static void efx_ef10_rx_fini(struct efx_rx_queue *rx_queue)
-{
-       MCDI_DECLARE_BUF(inbuf, MC_CMD_FINI_RXQ_IN_LEN);
-       MCDI_DECLARE_BUF_ERR(outbuf);
-       struct efx_nic *efx = rx_queue->efx;
-       size_t outlen;
-       int rc;
-
-       MCDI_SET_DWORD(inbuf, FINI_RXQ_IN_INSTANCE,
-                      efx_rx_queue_index(rx_queue));
-
-       rc = efx_mcdi_rpc_quiet(efx, MC_CMD_FINI_RXQ, inbuf, sizeof(inbuf),
-                         outbuf, sizeof(outbuf), &outlen);
-
-       if (rc && rc != -EALREADY)
-               goto fail;
-
-       return;
-
-fail:
-       efx_mcdi_display_error(efx, MC_CMD_FINI_RXQ, MC_CMD_FINI_RXQ_IN_LEN,
-                              outbuf, outlen, rc);
-}
-
-static void efx_ef10_rx_remove(struct efx_rx_queue *rx_queue)
-{
-       efx_nic_free_buffer(rx_queue->efx, &rx_queue->rxd.buf);
-}
-
 /* This creates an entry in the RX descriptor queue */
 static inline void
 efx_ef10_build_rx_desc(struct efx_rx_queue *rx_queue, unsigned int index)
@@ -3779,7 +3694,7 @@ static int efx_ef10_fini_dmaq(struct efx_nic *efx)
        if (efx->state != STATE_RECOVERY) {
                efx_for_each_channel(channel, efx) {
                        efx_for_each_channel_rx_queue(rx_queue, channel)
-                               efx_ef10_rx_fini(rx_queue);
+                               efx_mcdi_rx_fini(rx_queue);
                        efx_for_each_channel_tx_queue(tx_queue, channel)
                                efx_mcdi_tx_fini(tx_queue);
                }
@@ -6458,9 +6373,9 @@ const struct efx_nic_type efx_hunt_a0_vf_nic_type = {
        .tx_limit_len = efx_ef10_tx_limit_len,
        .rx_push_rss_config = efx_ef10_vf_rx_push_rss_config,
        .rx_pull_rss_config = efx_ef10_rx_pull_rss_config,
-       .rx_probe = efx_ef10_rx_probe,
-       .rx_init = efx_ef10_rx_init,
-       .rx_remove = efx_ef10_rx_remove,
+       .rx_probe = efx_mcdi_rx_probe,
+       .rx_init = efx_mcdi_rx_init,
+       .rx_remove = efx_mcdi_rx_remove,
        .rx_write = efx_ef10_rx_write,
        .rx_defer_refill = efx_ef10_rx_defer_refill,
        .ev_probe = efx_mcdi_ev_probe,
@@ -6570,9 +6485,9 @@ const struct efx_nic_type efx_hunt_a0_nic_type = {
        .rx_push_rss_context_config = efx_ef10_rx_push_rss_context_config,
        .rx_pull_rss_context_config = efx_ef10_rx_pull_rss_context_config,
        .rx_restore_rss_contexts = efx_ef10_rx_restore_rss_contexts,
-       .rx_probe = efx_ef10_rx_probe,
-       .rx_init = efx_ef10_rx_init,
-       .rx_remove = efx_ef10_rx_remove,
+       .rx_probe = efx_mcdi_rx_probe,
+       .rx_init = efx_mcdi_rx_init,
+       .rx_remove = efx_mcdi_rx_remove,
        .rx_write = efx_ef10_rx_write,
        .rx_defer_refill = efx_ef10_rx_defer_refill,
        .ev_probe = efx_mcdi_ev_probe,
index 9dc1395e5f68c53ee6adde13cc6059ff6f717906..f022e2b9e97561eeb3f0d04f4333b701478da744 100644 (file)
@@ -262,3 +262,88 @@ fail:
        efx_mcdi_display_error(efx, MC_CMD_FINI_TXQ, MC_CMD_FINI_TXQ_IN_LEN,
                               outbuf, outlen, rc);
 }
+
+int efx_mcdi_rx_probe(struct efx_rx_queue *rx_queue)
+{
+       return efx_nic_alloc_buffer(rx_queue->efx, &rx_queue->rxd.buf,
+                                   (rx_queue->ptr_mask + 1) *
+                                   sizeof(efx_qword_t),
+                                   GFP_KERNEL);
+}
+
+void efx_mcdi_rx_init(struct efx_rx_queue *rx_queue)
+{
+       MCDI_DECLARE_BUF(inbuf,
+                        MC_CMD_INIT_RXQ_IN_LEN(EFX_MAX_DMAQ_SIZE * 8 /
+                                               EFX_BUF_SIZE));
+       struct efx_channel *channel = efx_rx_queue_channel(rx_queue);
+       size_t entries = rx_queue->rxd.buf.len / EFX_BUF_SIZE;
+       struct efx_nic *efx = rx_queue->efx;
+       struct efx_ef10_nic_data *nic_data = efx->nic_data;
+       dma_addr_t dma_addr;
+       size_t inlen;
+       int rc;
+       int i;
+       BUILD_BUG_ON(MC_CMD_INIT_RXQ_OUT_LEN != 0);
+
+       rx_queue->scatter_n = 0;
+       rx_queue->scatter_len = 0;
+
+       MCDI_SET_DWORD(inbuf, INIT_RXQ_IN_SIZE, rx_queue->ptr_mask + 1);
+       MCDI_SET_DWORD(inbuf, INIT_RXQ_IN_TARGET_EVQ, channel->channel);
+       MCDI_SET_DWORD(inbuf, INIT_RXQ_IN_LABEL, efx_rx_queue_index(rx_queue));
+       MCDI_SET_DWORD(inbuf, INIT_RXQ_IN_INSTANCE,
+                      efx_rx_queue_index(rx_queue));
+       MCDI_POPULATE_DWORD_2(inbuf, INIT_RXQ_IN_FLAGS,
+                             INIT_RXQ_IN_FLAG_PREFIX, 1,
+                             INIT_RXQ_IN_FLAG_TIMESTAMP, 1);
+       MCDI_SET_DWORD(inbuf, INIT_RXQ_IN_OWNER_ID, 0);
+       MCDI_SET_DWORD(inbuf, INIT_RXQ_IN_PORT_ID, nic_data->vport_id);
+
+       dma_addr = rx_queue->rxd.buf.dma_addr;
+
+       netif_dbg(efx, hw, efx->net_dev, "pushing RXQ %d. %zu entries (%llx)\n",
+                 efx_rx_queue_index(rx_queue), entries, (u64)dma_addr);
+
+       for (i = 0; i < entries; ++i) {
+               MCDI_SET_ARRAY_QWORD(inbuf, INIT_RXQ_IN_DMA_ADDR, i, dma_addr);
+               dma_addr += EFX_BUF_SIZE;
+       }
+
+       inlen = MC_CMD_INIT_RXQ_IN_LEN(entries);
+
+       rc = efx_mcdi_rpc(efx, MC_CMD_INIT_RXQ, inbuf, inlen,
+                         NULL, 0, NULL);
+       if (rc)
+               netdev_WARN(efx->net_dev, "failed to initialise RXQ %d\n",
+                           efx_rx_queue_index(rx_queue));
+}
+
+void efx_mcdi_rx_remove(struct efx_rx_queue *rx_queue)
+{
+       efx_nic_free_buffer(rx_queue->efx, &rx_queue->rxd.buf);
+}
+
+void efx_mcdi_rx_fini(struct efx_rx_queue *rx_queue)
+{
+       MCDI_DECLARE_BUF(inbuf, MC_CMD_FINI_RXQ_IN_LEN);
+       MCDI_DECLARE_BUF_ERR(outbuf);
+       struct efx_nic *efx = rx_queue->efx;
+       size_t outlen;
+       int rc;
+
+       MCDI_SET_DWORD(inbuf, FINI_RXQ_IN_INSTANCE,
+                      efx_rx_queue_index(rx_queue));
+
+       rc = efx_mcdi_rpc_quiet(efx, MC_CMD_FINI_RXQ, inbuf, sizeof(inbuf),
+                               outbuf, sizeof(outbuf), &outlen);
+
+       if (rc && rc != -EALREADY)
+               goto fail;
+
+       return;
+
+fail:
+       efx_mcdi_display_error(efx, MC_CMD_FINI_RXQ, MC_CMD_FINI_RXQ_IN_LEN,
+                              outbuf, outlen, rc);
+}
index f0726c71698bff3e64c521161a8e539013971754..3c9e760238e7097519e7c80fca8b51ef1c3c4f5e 100644 (file)
@@ -23,7 +23,7 @@ int efx_mcdi_tx_init(struct efx_tx_queue *tx_queue, bool tso_v2);
 void efx_mcdi_tx_remove(struct efx_tx_queue *tx_queue);
 void efx_mcdi_tx_fini(struct efx_tx_queue *tx_queue);
 int efx_mcdi_rx_probe(struct efx_rx_queue *rx_queue);
-int efx_mcdi_rx_init(struct efx_rx_queue *rx_queue, bool want_outer_classes);
+void efx_mcdi_rx_init(struct efx_rx_queue *rx_queue);
 void efx_mcdi_rx_remove(struct efx_rx_queue *rx_queue);
 void efx_mcdi_rx_fini(struct efx_rx_queue *rx_queue);