- sfc_warn(sa, "MC %s",
- (eme == EFX_MCDI_EXCEPTION_MC_REBOOT) ? "REBOOT" :
- (eme == EFX_MCDI_EXCEPTION_MC_BADASSERT) ? "BADASSERT" : "UNKNOWN");
-
- sfc_panic(sa, "MCDI exceptions handling is not implemented\n");
-}
-
-#define SFC_MCDI_LOG_BUF_SIZE 128
-
-static size_t
-sfc_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_info(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_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;
-
- if (!sa->mcdi.logging)
- return;
-
- /* The format including prefix added by sfc_info() 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_mcdi_do_log(sa, buffer, header, header_size,
- pfxsize, pfxsize);
- start = sfc_mcdi_do_log(sa, buffer, data, data_size, pfxsize, start);
- if (start != pfxsize) {
- buffer[start] = '\0';
- sfc_info(sa, "%s", buffer);
- }