New upstream version 18.08
[deb_dpdk.git] / drivers / net / sfc / base / ef10_mcdi.c
index 1f9e573..8a3fc3b 100644 (file)
@@ -8,7 +8,7 @@
 #include "efx_impl.h"
 
 
-#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD
+#if EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2
 
 #if EFSYS_OPT_MCDI
 
@@ -28,7 +28,8 @@ ef10_mcdi_init(
        efx_rc_t rc;
 
        EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON ||
-                   enp->en_family == EFX_FAMILY_MEDFORD);
+           enp->en_family == EFX_FAMILY_MEDFORD ||
+           enp->en_family == EFX_FAMILY_MEDFORD2);
        EFSYS_ASSERT(enp->en_features & EFX_FEATURE_MCDI_DMA);
 
        /*
@@ -135,7 +136,8 @@ ef10_mcdi_send_request(
        unsigned int pos;
 
        EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON ||
-                   enp->en_family == EFX_FAMILY_MEDFORD);
+           enp->en_family == EFX_FAMILY_MEDFORD ||
+           enp->en_family == EFX_FAMILY_MEDFORD2);
 
        /* Write the header */
        for (pos = 0; pos < hdr_len; pos += sizeof (efx_dword_t)) {
@@ -186,13 +188,17 @@ ef10_mcdi_read_response(
 {
        const efx_mcdi_transport_t *emtp = enp->en_mcdi.em_emtp;
        efsys_mem_t *esmp = emtp->emt_dma_mem;
-       unsigned int pos;
+       unsigned int pos = 0;
        efx_dword_t data;
+       size_t remaining = length;
+
+       while (remaining > 0) {
+               size_t chunk = MIN(remaining, sizeof (data));
 
-       for (pos = 0; pos < length; pos += sizeof (efx_dword_t)) {
                EFSYS_MEM_READD(esmp, offset + pos, &data);
-               memcpy((uint8_t *)bufferp + pos, &data,
-                   MIN(sizeof (data), length - pos));
+               memcpy((uint8_t *)bufferp + pos, &data, chunk);
+               pos += chunk;
+               remaining -= chunk;
        }
 }
 
@@ -254,7 +260,8 @@ ef10_mcdi_feature_supported(
        efx_rc_t rc;
 
        EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON ||
-                   enp->en_family == EFX_FAMILY_MEDFORD);
+           enp->en_family == EFX_FAMILY_MEDFORD ||
+           enp->en_family == EFX_FAMILY_MEDFORD2);
 
        /*
         * Use privilege mask state at MCDI attach.
@@ -315,4 +322,4 @@ fail1:
 
 #endif /* EFSYS_OPT_MCDI */
 
-#endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD */
+#endif /* EFSYS_OPT_HUNTINGTON || EFSYS_OPT_MEDFORD || EFSYS_OPT_MEDFORD2 */