diff options
author | Cristian Sovaiala <cristian.sovaiala@freescale.com> | 2014-03-25 07:30:21 (GMT) |
---|---|---|
committer | Madalin-Cristian Bucur <madalin.bucur@freescale.com> | 2014-03-27 10:40:04 (GMT) |
commit | fa8768e3f1d101349914e827e34f4b05d049cb40 (patch) | |
tree | 1a3fe13102ce984f5e4fc346fc3461298771b329 /drivers | |
parent | 8e4f6f6cb2233cd40ff80f8c9cd66f187b3656f0 (diff) | |
download | linux-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.c | 25 |
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; |