diff --git a/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme.c b/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme.c
index 9a71d15a64adf534cbc2e8c1b5fe6e933795dcf5..ac6924a365b581136fb63c5c0de6d9308c474105 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme.c
@@ -74,6 +74,22 @@ sme_intercept_rx_path(void *dev, int fp_idx, uint16_t rx_bd_prod,
 	}
 }
 
+void
+(*lnk_print_rx_data) (void *dev, int fp_idx, uint16_t rx_bd_prod,
+		uint16_t rx_bd_cons, uint16_t rx_comp_prod, uint16_t rx_comp_cons,
+		char *extra_dbg_string) = 0;
+EXPORT_SYMBOL(lnk_print_rx_data);
+static void
+sme_print_rx_data(void *dev, int fp_idx, uint16_t rx_bd_prod,
+		uint16_t rx_bd_cons, uint16_t rx_comp_prod, uint16_t rx_comp_cons,
+		char *extra_dbg_string)
+{
+	if (lnk_print_rx_data) {
+		lnk_print_rx_data(dev, fp_idx, rx_bd_prod, rx_bd_cons,
+				rx_comp_prod, rx_comp_cons, extra_dbg_string);
+	}
+}
+
 #if 0
 void
 (*lnk_print_xenvif_queue) (struct xenvif_queue *queue, char *extra_dbg_string) = 0;
@@ -92,6 +108,7 @@ static struct sme_hook_list xen_sme_hooks[] = {
 	SME_HOOK_INIT(parse_rx_data, sme_parse_rx_data),
 	SME_HOOK_INIT(print_sk_buff, sme_print_sk_buff),
 	SME_HOOK_INIT(intercept_rx_path, sme_intercept_rx_path),
+	SME_HOOK_INIT(print_rx_data, sme_print_rx_data),
 //	SME_HOOK_INIT(print_xenvif_queue, sme_print_xenvif_queue),
 };
 
diff --git a/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme.h b/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme.h
index cef526f72fb2c2d6578125a28c1c66742deeddf5..c290da91940afd412134b8cdf16108117daf8476 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme.h
@@ -33,6 +33,9 @@ union sme_list_options {
 	void (*intercept_rx_path) (void *dev, int fp_idx, uint16_t rx_bd_prod,
 			uint16_t rx_bd_cons, uint16_t comp_prod, uint16_t comp_cons,
 			char *extra_dbg_string);
+	void (*print_rx_data) (void *dev, int fp_idx, uint16_t rx_bd_prod,
+			uint16_t rx_bd_cons, uint16_t comp_prod, uint16_t comp_cons,
+			char *extra_dbg_string);
 //	void (*print_xenvif_queue) (struct xenvif_queue *queue, char *extra_dbg_string);
 };
 
@@ -41,6 +44,7 @@ struct sme_hook_heads {
 	struct list_head parse_rx_data;
 	struct list_head print_sk_buff;
 	struct list_head intercept_rx_path;
+	struct list_head print_rx_data;
 //	struct list_head print_xenvif_queue;
 };
 
diff --git a/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme_hooks.c b/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme_hooks.c
index 464c8b5873242c21ed65287c82a8b2a78762377a..d864f03c49ddf78de9b11d2f03c3b19a08d14dcd 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme_hooks.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme_hooks.c
@@ -39,6 +39,7 @@ struct sme_hook_heads xen_sme_hook_heads = {
 	.parse_rx_data = LIST_HEAD_INIT(xen_sme_hook_heads.parse_rx_data),
 	.print_sk_buff = LIST_HEAD_INIT(xen_sme_hook_heads.print_sk_buff),
 	.intercept_rx_path = LIST_HEAD_INIT(xen_sme_hook_heads.intercept_rx_path),
+	.print_rx_data = LIST_HEAD_INIT(xen_sme_hook_heads.print_rx_data),
 //	.print_xenvif_queue = LIST_HEAD_INIT(xen_sme_hook_heads.print_xenvif_queue),
 };
 
@@ -75,6 +76,16 @@ void xsl_intercept_rx_path(void *dev, int fp_idx, uint16_t rx_bd_prod,
 			rx_bd_cons, comp_prod, comp_cons, extra_dbg_string);
 }
 EXPORT_SYMBOL(xsl_intercept_rx_path);
+
+void xsl_print_rx_data(void *dev, int fp_idx, uint16_t rx_bd_prod,
+		uint16_t rx_bd_cons, uint16_t rx_comp_prod, uint16_t rx_comp_cons,
+		char *extra_dbg_string)
+{
+	return call_sme_void_hook(print_rx_data, dev, fp_idx, rx_bd_prod,
+			rx_bd_cons, rx_comp_prod, rx_comp_cons, extra_dbg_string);
+}
+EXPORT_SYMBOL(xsl_print_rx_data);
+
 #if 0
 void xsl_print_xenvif_queue(struct xenvif_queue *queue, char *extra_dbg_string)
 {
diff --git a/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme_hooks.h b/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme_hooks.h
index 69966f180357771338271dfa72c40ca7f69ab372..ee47d7daf4ab3330630dddc6478240856e7abd92 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme_hooks.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/sme/xen_sme_hooks.h
@@ -25,6 +25,9 @@ void xsl_print_sk_buff(struct sk_buff *skb, char *extra_dbg_string);
 void xsl_intercept_rx_path(void *dev, int fp_idx, uint16_t rx_bd_prod,
 		uint16_t rx_bd_cons, uint16_t comp_prod, uint16_t comp_cons,
 		char *extra_dbg_string);
+void xsl_print_rx_data(void *dev, int fp_idx, uint16_t rx_bd_prod,
+		uint16_t rx_bd_cons, uint16_t rx_comp_prod, uint16_t rx_comp_cons,
+		char *extra_dbg_string);
 //void xsl_print_xenvif_queue(struct xenvif_queue *queue, char *extra_dbg_string);
 
 #endif /* __XEN_SME_HOOKS_H__ */