summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorCristian Sovaiala <cristian.sovaiala@freescale.com>2014-03-25 07:30:21 (GMT)
committerMadalin-Cristian Bucur <madalin.bucur@freescale.com>2014-03-27 10:40:04 (GMT)
commitfa8768e3f1d101349914e827e34f4b05d049cb40 (patch)
tree1a3fe13102ce984f5e4fc346fc3461298771b329 /drivers
parent8e4f6f6cb2233cd40ff80f8c9cd66f187b3656f0 (diff)
downloadlinux-fsl-qoriq-fa8768e3f1d101349914e827e34f4b05d049cb40.tar.xz
fmd: Magic Packet interrupt handling
Signed-off-by: Cristian Sovaiala <cristian.sovaiala@freescale.com> Change-Id: If203b15d0f34b4ace5bd8cb911af1ebf93aa5621 Reviewed-on: http://git.am.freescale.net:8181/10396 Reviewed-by: Igal Liberman <Igal.Liberman@freescale.com> Reviewed-by: Madalin-Cristian Bucur <madalin.bucur@freescale.com> Tested-by: Madalin-Cristian Bucur <madalin.bucur@freescale.com> (cherry picked from commit e8a3fbfddce62f064132632b16682f3dac093e77) Reviewed-on: http://git.am.freescale.net:8181/10403
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/memac.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/memac.c b/drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/memac.c
index a162510..9169ff7 100644
--- a/drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/memac.c
+++ b/drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/memac.c
@@ -217,6 +217,24 @@ static void MemacErrException(t_Handle h_Memac)
p_Memac->f_Exception(p_Memac->h_App, e_FM_MAC_EX_10G_1TX_ECC_ER);
if (event & MEMAC_IEVNT_RX_ECC_ER)
p_Memac->f_Exception(p_Memac->h_App, e_FM_MAC_EX_10G_RX_ECC_ER);
+}
+
+static void MemacException(t_Handle h_Memac)
+{
+ t_Memac *p_Memac = (t_Memac *)h_Memac;
+ uint32_t event, imask;
+
+ event = fman_memac_get_event(p_Memac->p_MemMap, 0xffffffff);
+ imask = fman_memac_get_interrupt_mask(p_Memac->p_MemMap);
+
+ /* Imask include both error and notification/event bits.
+ Leaving only error bits enabled by imask.
+ The imask error bits are shifted by 16 bits offset from
+ their corresponding location in the ievent - hence the >> 16 */
+ event &= ((imask & MEMAC_ALL_ERRS_IMASK) >> 16);
+
+ fman_memac_ack_event(p_Memac->p_MemMap, event);
+
if (event & MEMAC_IEVNT_MGI)
p_Memac->f_Exception(p_Memac->h_App, e_FM_MAC_EX_MAGIC_PACKET_INDICATION);
}
@@ -956,6 +974,13 @@ static t_Error MemacInit(t_Handle h_Memac)
MemacErrException,
p_Memac);
+ FmRegisterIntr(p_Memac->fmMacControllerDriver.h_Fm,
+ (portType == e_FM_MAC_10G) ? e_FM_MOD_10G_MAC : e_FM_MOD_1G_MAC,
+ p_Memac->macId,
+ e_FM_INTR_TYPE_NORMAL,
+ MemacException,
+ p_Memac);
+
XX_Free(p_MemacDriverParam);
p_Memac->p_MemacDriverParam = NULL;