Gregory,

Thank you for your support. I will work on this.

Best regards.

Flavio

Em qua., 14 de abr. de 2021 11:09, Gregory Nutt <spudan...@gmail.com>
escreveu:

> You board must provide CONFIG_ARCH_PHY_INTERRUPT:
>
>     $ find boards/ -name Kconfig | xargs grep ARCH_PHY_INTERRUPT
>     boards/Kconfig: select ARCH_PHY_INTERRUPT
>     boards/Kconfig: select ARCH_PHY_INTERRUPT if SAMA5_EMACA ||
>     SAMA5_EMAC0 || SAMA5_EMAC1 || SAMA5_GMAC
>     boards/Kconfig: select ARCH_PHY_INTERRUPT
>     boards/Kconfig: select ARCH_PHY_INTERRUPT
>     boards/Kconfig: select ARCH_PHY_INTERRUPT
>     boards/Kconfig: select ARCH_PHY_INTERRUPT
>     boards/Kconfig: select ARCH_PHY_INTERRUPT
>
> and you must implement PHY interrupt handling as documented in
> include/nuttx/arch.h:
>
>
> /****************************************************************************
>       * Name: arch_phy_irq
>       *
>       * Description:
>       *   This function may be called to register an interrupt handler
>     that will
>       *   be called when a PHY interrupt occurs.  This function both
>     attaches
>       *   the interrupt handler and enables the interrupt if 'handler'
>     is non-
>       *   NULL.  If handler is NULL, then the interrupt is detached and
>     disabled
>       *   instead.
>       *
>       *   The PHY interrupt is always disabled upon return.  The caller
> must
>       *   call back through the enable function point to control the
>     state of
>       *   the interrupt.
>       *
>       *   This interrupt may or may not be available on a given platform
>     depending
>       *   on how the network hardware architecture is implemented. In a
>     typical
>       *   case, the PHY interrupt is provided to board-level logic as a
> GPIO
>       *   interrupt (in which case this is a board-specific interface
>     and really
>       *   should be called board_phy_irq()); In other cases, the PHY
>     interrupt
>       *   may be cause by the chip's MAC logic (in which case
>     arch_phy_irq()) is
>       *   an appropriate name.  Other other boards, there may be no PHY
>     interrupts
>       *   available at all.  If client attachable PHY interrupts are
>     available
>       *   from the board or from the chip, then
>     CONFIG_ARCH_PHY_INTERRUPT should
>       *   be defined to indicate that fact.
>       *
>       *   Typical usage:
>       *   a. OS service logic (not application logic*) attaches to the PHY
>       *      PHY interrupt and enables the PHY interrupt.
>       *   b. When the PHY interrupt occurs:  (1) the interrupt should be
>       *      disabled and () work should be scheduled on the worker
>     thread (or
>       *      perhaps a dedicated application thread).
>       *   c. That worker thread should use the SIOCGMIIPHY, SIOCGMIIREG,
>       *      and SIOCSMIIREG ioctl calls** to communicate with the PHY,
>       *      determine what network event took place (Link Up/Down?), and
>       *      take the appropriate actions.
>       *   d. It should then interact the PHY to clear any pending
>       *      interrupts, then re-enable the PHY interrupt.
>       *
>       *    * This is an OS internal interface and should not be used from
>       *      application space.  Rather applications should use the
>     SIOCMIISIG
>       *      ioctl to receive a signal when a PHY event occurs.
>       *   ** This interrupt is really of no use if the Ethernet MAC driver
>       *      does not support these ioctl calls.
>       *
>       * Input Parameters:
>       *   intf    - Identifies the network interface.  For example
>     "eth0".  Only
>       *             useful on platforms that support multiple Ethernet
>     interfaces
>       *             and, hence, multiple PHYs and PHY interrupts.
>       *   handler - The client interrupt handler to be invoked when the PHY
>       *             asserts an interrupt.  Must reside in OS space, but can
>       *             signal tasks in user space.  A value of NULL can be
>     passed
>       *             in order to detach and disable the PHY interrupt.
>       *   arg     - The argument that will accompany the interrupt
>       *   enable  - A function pointer that be unused to enable or
>     disable the
>       *             PHY interrupt.
>       *
>       * Returned Value:
>       *   Zero (OK) returned on success; a negated errno value is
>     returned on
>       *   failure.
>       *
>
>   
> ****************************************************************************/
>
>     #ifdef CONFIG_ARCH_PHY_INTERRUPT
>     int arch_phy_irq(FAR const char *intf, xcpt_t handler, void *arg,
>                       phy_enable_t *enable);
>     #endif
>
>
> Lots of examples.  Note that it already exists for STM32F4 Discovery:
>
>     $ find boards/ -name "*.c" | xargs grep arch_phy_irq
>     boards/arm/imxrt/imxrt1020-evk/src/imxrt_ethernet.c: * Name:
>     arch_phy_irq
>     boards/arm/imxrt/imxrt1020-evk/src/imxrt_ethernet.c: *   may be
>     cause by the chip's MAC logic (in which case arch_phy_irq()) is
>     boards/arm/imxrt/imxrt1020-evk/src/imxrt_ethernet.c:int
>     arch_phy_irq(FAR const char *intf, xcpt_t handler, void *arg,
>     boards/arm/imxrt/imxrt1050-evk/src/imxrt_ethernet.c: * Name:
>     arch_phy_irq
>     boards/arm/imxrt/imxrt1050-evk/src/imxrt_ethernet.c: *   may be
>     cause by the chip's MAC logic (in which case arch_phy_irq()) is
>     boards/arm/imxrt/imxrt1050-evk/src/imxrt_ethernet.c:int
>     arch_phy_irq(FAR const char *intf, xcpt_t handler, void *arg,
>     boards/arm/imxrt/imxrt1060-evk/src/imxrt_ethernet.c: * Name:
>     arch_phy_irq
>     boards/arm/imxrt/imxrt1060-evk/src/imxrt_ethernet.c: *   may be
>     cause by the chip's MAC logic (in which case arch_phy_irq()) is
>     boards/arm/imxrt/imxrt1060-evk/src/imxrt_ethernet.c:int
>     arch_phy_irq(FAR const char *intf, xcpt_t handler, void *arg,
>     boards/arm/imxrt/teensy-4.x/src/imxrt_ethernet.c: * Name: arch_phy_irq
>     boards/arm/imxrt/teensy-4.x/src/imxrt_ethernet.c: *   may be cause
>     by the chip's MAC logic (in which case arch_phy_irq()) is
>     boards/arm/imxrt/teensy-4.x/src/imxrt_ethernet.c:int
>     arch_phy_irq(FAR const char *intf, xcpt_t handler, void *arg,
>     boards/arm/sam34/sam4e-ek/src/sam_ethernet.c: * Name: arch_phy_irq
>     boards/arm/sam34/sam4e-ek/src/sam_ethernet.c: *   may be cause by
>     the chip's MAC logic (in which case arch_phy_irq()) is
>     boards/arm/sam34/sam4e-ek/src/sam_ethernet.c:int arch_phy_irq(FAR
>     const char *intf, xcpt_t handler, void *arg,
>     boards/arm/sama5/sama5d2-xult/src/sam_ethernet.c: * Name: arch_phy_irq
>     boards/arm/sama5/sama5d2-xult/src/sam_ethernet.c: *   may be cause
>     by the chip's MAC logic (in which case arch_phy_irq()) is
>     boards/arm/sama5/sama5d2-xult/src/sam_ethernet.c:int
>     arch_phy_irq(FAR const char *intf, xcpt_t handler, void *arg,
>     boards/arm/sama5/sama5d3-xplained/src/sam_ethernet.c: * Name:
>     arch_phy_irq
>     boards/arm/sama5/sama5d3-xplained/src/sam_ethernet.c: *   may be
>     cause by the chip's MAC logic (in which case arch_phy_irq()) is
>     boards/arm/sama5/sama5d3-xplained/src/sam_ethernet.c:int
>     arch_phy_irq(FAR const char *intf, xcpt_t handler, void *arg,
>     boards/arm/sama5/sama5d3x-ek/src/sam_ethernet.c: * Name: arch_phy_irq
>     boards/arm/sama5/sama5d3x-ek/src/sam_ethernet.c: *   may be cause by
>     the chip's MAC logic (in which case arch_phy_irq()) is
>     boards/arm/sama5/sama5d3x-ek/src/sam_ethernet.c:int arch_phy_irq(FAR
>     const char *intf, xcpt_t handler, void *arg,
>     boards/arm/sama5/sama5d4-ek/src/sam_ethernet.c: * Name: arch_phy_irq
>     boards/arm/sama5/sama5d4-ek/src/sam_ethernet.c: *   may be cause by
>     the chip's MAC logic (in which case arch_phy_irq()) is
>     boards/arm/sama5/sama5d4-ek/src/sam_ethernet.c:int arch_phy_irq(FAR
>     const char *intf, xcpt_t handler, void *arg,
>     boards/arm/samv7/same70-xplained/src/sam_ethernet.c: * Name:
>     arch_phy_irq
>     boards/arm/samv7/same70-xplained/src/sam_ethernet.c: *   may be
>     cause by the chip's MAC logic (in which case arch_phy_irq()) is
>     boards/arm/samv7/same70-xplained/src/sam_ethernet.c:int
>     arch_phy_irq(FAR const char *intf, xcpt_t handler, void *arg,
>     boards/arm/samv7/samv71-xult/src/sam_ethernet.c: * Name: arch_phy_irq
>     boards/arm/samv7/samv71-xult/src/sam_ethernet.c: *   may be cause by
>     the chip's MAC logic (in which case arch_phy_irq()) is
>     boards/arm/samv7/samv71-xult/src/sam_ethernet.c:int arch_phy_irq(FAR
>     const char *intf, xcpt_t handler, void *arg,
>     boards/arm/stm32/stm32f4discovery/src/stm32_ethernet.c: * Name:
>     arch_phy_irq
>     boards/arm/stm32/stm32f4discovery/src/stm32_ethernet.c: *   may be
>     cause by the chip's MAC logic (in which case arch_phy_irq()) is
>     boards/arm/stm32/stm32f4discovery/src/stm32_ethernet.c:int
>     arch_phy_irq(FAR const char *intf, xcpt_t handler, void *arg,
>
>
> On 4/14/2021 7:59 AM, Flavio Castro Alves Filho wrote:
> > The netinit_monitor code is self-explanatory :-/
> >
> > I could understand what must be done ... and, naturally, it is in
> > accord with the documents.
> >
> > In my case, I cannot easily enable it from menuconfig ... as far as I
> > understood.
> >
> > Em qua., 14 de abr. de 2021 às 10:49, Gregory Nutt
> > <spudan...@gmail.com> escreveu:
> >> This is very out of date, but 90% accurate:
> >>
> >>
> https://cwiki.apache.org/confluence/display/NUTTX/Network+Link+Management
> >>
> https://cwiki.apache.org/confluence/display/NUTTX/NSH+Network+Link+Management
> >>
> >> This was not updated after the network initialization and network
> >> monitor were removed from NSH and made a separate feature.  It needs so
> >> clean-up.
> >>
> >> On 4/14/2021 7:40 AM, Alan Carvalho de Assis wrote:
> >>> I think this is kind of question that should be in some FAQ or in our
> >>> documentation, it is asked often...
> >>>
> >>> Is there some only place in our Documentation where we could include
> it?
> >>>
> >>> BR,
> >>>
> >>> Alan
> >>>
> >>> On 4/14/21, Gregory Nutt <spudan...@gmail.com> wrote:
> >>>> Normally this is done using the PHY driver at
> >>>> nuttx/drivers/net/phy_notify.c that provides PHY-related events to
> >>>> applications via signals.  It requires board-level support to handle
> PHY
> >>>> interrupts.
> >>>>
> >>>> The network monitor thread at apps/netutils/netinit (see
> >>>> CONFIG_NETINIT_MONITOR) will handle taking the network down if the
> cable
> >>>> is unplugged and bringing it back up when the cable is restored.
> >>>>
> >>>> On 4/14/2021 7:24 AM, Flavio Castro Alves Filho wrote:
> >>>>> Hello,
> >>>>>
> >>>>> I am implementing an application using NuttX where I need to detect
> if
> >>>>> the network cable is plugged or not in my board.
> >>>>>
> >>>>> Today I implemented the function netlib_getifstatus(), which
> automates
> >>>>> the read of SIOCGIFFLAGS, similar to what we have in Linux.
> >>>>>
> >>>>> But, in my tests, it seems that it is not working correctly.
> >>>>>
> >>>>> What is the recommended approach to have this feature implemented?
> >>>>>
> >>>>> Best regards,
> >>>>>
> >>>>> Flavio
> >>>>>
> >
>
>

Reply via email to