-#define SFC_MCDI_LOG_BUF_SIZE 128
-
-static size_t
-sfc_efx_mcdi_do_log(const struct sfc_adapter *sa,
- char *buffer, void *data, size_t data_size,
- size_t pfxsize, size_t position)
-{
- uint32_t *words = data;
- /* Space separator plus 2 characters per byte */
- const size_t word_str_space = 1 + 2 * sizeof(*words);
- size_t i;
-
- for (i = 0; i < data_size; i += sizeof(*words)) {
- if (position + word_str_space >=
- SFC_MCDI_LOG_BUF_SIZE) {
- /* Flush at SFC_MCDI_LOG_BUF_SIZE with backslash
- * at the end which is required by netlogdecode.
- */
- buffer[position] = '\0';
- sfc_efx_log_mcdi(sa, "%s \\", buffer);
- /* Preserve prefix for the next log message */
- position = pfxsize;
- }
- position += snprintf(buffer + position,
- SFC_MCDI_LOG_BUF_SIZE - position,
- " %08x", *words);
- words++;
- }
- return position;
-}
-
-static void
-sfc_efx_mcdi_logger(void *arg, efx_log_msg_t type,
- void *header, size_t header_size,
- void *data, size_t data_size)
-{
- struct sfc_adapter *sa = (struct sfc_adapter *)arg;
- char buffer[SFC_MCDI_LOG_BUF_SIZE];
- size_t pfxsize;
- size_t start;
-
- /*
- * Unlike the other cases, MCDI logging implies more onerous work
- * needed to produce a message. If the dynamic log level prevents
- * the end result from being printed, the CPU time will be wasted.
- *
- * To avoid wasting time, the actual level is examined in advance.
- */
- if (rte_log_get_level(sa->mcdi.logtype) < (int)SFC_EFX_LOG_LEVEL_MCDI)
- return;
-
- /* The format including prefix added by sfc_efx_log_mcdi() is the
- * format consumed by the Solarflare netlogdecode tool.
- */
- pfxsize = snprintf(buffer, sizeof(buffer), "MCDI RPC %s:",
- type == EFX_LOG_MCDI_REQUEST ? "REQ" :
- type == EFX_LOG_MCDI_RESPONSE ? "RESP" : "???");
- start = sfc_efx_mcdi_do_log(sa, buffer, header, header_size,
- pfxsize, pfxsize);
- start = sfc_efx_mcdi_do_log(sa, buffer, data, data_size,
- pfxsize, start);
- if (start != pfxsize) {
- buffer[start] = '\0';
- sfc_efx_log_mcdi(sa, "%s", buffer);
- }
-}
-