The user has already the power to control which DMA buffer
will generate interrupt, but no clean way to enable RX/TX
interrupts on DMA channel. Without this patch the user had
to init DMA config rx/tx_irq_en_cnt to a very large value.
* Add support for reading the GRSPW TX/RX descriptor counters
directly.
* Add semaphore lock to counters to avoid couters being out
of sync
* This makes it possible for the user in polling mode to check
the amount of work before entering RX/TX descriptor table
processing.
The user is now responsible to stop and close the DMA channels
before closing the device. To prevent complicated situations and
blocking the caller of grspw_close and grspw_dma_close a return
code was added to indicate to the user that the DMA may not have
been stopped or that blocked tasks are still active within the
driver for the specified device.
Improved the link error handling options. Its now possible to
disable the link on individual link errors/warnings instead of
always on all or none.
Changed name of LINKOPTS_IRQ to LINKOPTS_EIRQ to match Linux
and VxWorks SpW driver.
NOTE that this will change the association of /dev/occanN
with OCCAN[N] device to the same order as in hardware. This means
that if you have been useing /dev/occan0 before you have to use
/dev/occan1 on a dual OCCAN device system (this affects GR712RC).
The EN bit (enable separate node address for this channel) is preserved when
grspw_dma_start is called. This preserves any previous address configuration.
There was a mixup between the transmit descriptor Link error (LE) bit and
Interrupt enable (IE) bit. TXPKT_FLAG_LINKERR now correctly indicates the link
error condition.
The fix does not affect the driver since the bit definitions
were never used by the GR5133B drivers. However it could affect
and application using the definitions.
This function may be used to do a two-step interrupt processing. The
first step is done in interrupt context which calls this function. The
second step is then done in the context of the interrupt server.
It is necessary to enable the DWT using a special initialization
sequence before the CYCCNT can be enabled. See for example the
RESET_CYCLE_COUNTER in libbsp/arm/atsam/utils/utility.h.
Note that this problem only occurs if no debugger is connected. A
debugger most likely already enables the necessary module.
Enable/Disable vector routines now check for a valid vector. Without
these guards, the Enable/Disable vector routines will not work with the
interrupt server.