#include "mdio_10g.h"
 #include "falcon.h"
 
+/**************************************************************************
+ *
+ * Type name strings
+ *
+ **************************************************************************
+ */
+
+/* Loopback mode names (see LOOPBACK_MODE()) */
+const unsigned int efx_loopback_mode_max = LOOPBACK_MAX;
+const char *efx_loopback_mode_names[] = {
+       [LOOPBACK_NONE]         = "NONE",
+       [LOOPBACK_GMAC]         = "GMAC",
+       [LOOPBACK_XGMII]        = "XGMII",
+       [LOOPBACK_XGXS]         = "XGXS",
+       [LOOPBACK_XAUI]         = "XAUI",
+       [LOOPBACK_GPHY]         = "GPHY",
+       [LOOPBACK_PHYXS]        = "PHYXS",
+       [LOOPBACK_PCS]          = "PCS",
+       [LOOPBACK_PMAPMD]       = "PMA/PMD",
+       [LOOPBACK_NETWORK]      = "NETWORK",
+};
+
+/* Interrupt mode names (see INT_MODE())) */
+const unsigned int efx_interrupt_mode_max = EFX_INT_MODE_MAX;
+const char *efx_interrupt_mode_names[] = {
+       [EFX_INT_MODE_MSIX]   = "MSI-X",
+       [EFX_INT_MODE_MSI]    = "MSI",
+       [EFX_INT_MODE_LEGACY] = "legacy",
+};
+
+const unsigned int efx_reset_type_max = RESET_TYPE_MAX;
+const char *efx_reset_type_names[] = {
+       [RESET_TYPE_INVISIBLE]     = "INVISIBLE",
+       [RESET_TYPE_ALL]           = "ALL",
+       [RESET_TYPE_WORLD]         = "WORLD",
+       [RESET_TYPE_DISABLE]       = "DISABLE",
+       [RESET_TYPE_TX_WATCHDOG]   = "TX_WATCHDOG",
+       [RESET_TYPE_INT_ERROR]     = "INT_ERROR",
+       [RESET_TYPE_RX_RECOVERY]   = "RX_RECOVERY",
+       [RESET_TYPE_RX_DESC_FETCH] = "RX_DESC_FETCH",
+       [RESET_TYPE_TX_DESC_FETCH] = "TX_DESC_FETCH",
+       [RESET_TYPE_TX_SKIP]       = "TX_SKIP",
+};
+
 #define EFX_MAX_MTU (9 * 1024)
 
 /* RX slow fill workqueue. If memory allocation fails in the fast path,
                goto out_unlock;
        }
 
-       EFX_INFO(efx, "resetting (%d)\n", method);
+       EFX_INFO(efx, "resetting (%s)\n", RESET_TYPE(method));
 
        efx_reset_down(efx, method, &ecmd);
 
        }
 
        if (method != type)
-               EFX_LOG(efx, "scheduling reset (%d:%d)\n", type, method);
+               EFX_LOG(efx, "scheduling %s reset for %s\n",
+                       RESET_TYPE(method), RESET_TYPE(type));
        else
-               EFX_LOG(efx, "scheduling reset (%d)\n", method);
+               EFX_LOG(efx, "scheduling %s reset\n", RESET_TYPE(method));
 
        efx->reset_pending = method;
 
 
 #include "spi.h"
 #include "mdio_10g.h"
 
-const char *efx_loopback_mode_names[] = {
-       [LOOPBACK_NONE]         = "NONE",
-       [LOOPBACK_GMAC]         = "GMAC",
-       [LOOPBACK_XGMII]        = "XGMII",
-       [LOOPBACK_XGXS]         = "XGXS",
-       [LOOPBACK_XAUI]         = "XAUI",
-       [LOOPBACK_GPHY]         = "GPHY",
-       [LOOPBACK_PHYXS]        = "PHYXS",
-       [LOOPBACK_PCS]          = "PCS",
-       [LOOPBACK_PMAPMD]       = "PMA/PMD",
-       [LOOPBACK_NETWORK]      = "NETWORK",
-};
-
 struct ethtool_string {
        char name[ETH_GSTRING_LEN];
 };
 #define EFX_TX_QUEUE_NAME(_tx_queue) "txq%d", _tx_queue->queue
 #define EFX_RX_QUEUE_NAME(_rx_queue) "rxq%d", _rx_queue->queue
 #define EFX_LOOPBACK_NAME(_mode, _counter)                     \
-       "loopback.%s." _counter, LOOPBACK_MODE_NAME(mode)
+       "loopback.%s." _counter, STRING_TABLE_LOOKUP(_mode, efx_loopback_mode)
 
 /**
  * efx_fill_loopback_test - fill in a block of loopback self-test entries
 
        EFX_LED_DEFAULT = 2
 };
 
-#define STRING_TABLE_LOOKUP(val, member)       \
-       member ## _names[val]
+#define STRING_TABLE_LOOKUP(val, member) \
+       ((val) < member ## _max) ? member ## _names[val] : "(invalid)"
+
+extern const char *efx_loopback_mode_names[];
+extern const unsigned int efx_loopback_mode_max;
+#define LOOPBACK_MODE(efx) \
+       STRING_TABLE_LOOKUP((efx)->loopback_mode, efx_loopback_mode)
+
+extern const char *efx_interrupt_mode_names[];
+extern const unsigned int efx_interrupt_mode_max;
+#define INT_MODE(efx) \
+       STRING_TABLE_LOOKUP(efx->interrupt_mode, efx_interrupt_mode)
+
+extern const char *efx_reset_type_names[];
+extern const unsigned int efx_reset_type_max;
+#define RESET_TYPE(type) \
+       STRING_TABLE_LOOKUP(type, efx_reset_type)
 
 enum efx_int_mode {
        /* Be careful if altering to correct macro below */