can: mcp251xfd: mcp251xfd_handle_rxif_ring_uinc(): factor out in separate function
[ Upstream commit d49184b7b585f9da7ee546b744525f62117019f6 ] This is a preparation patch. Sending the UINC messages followed by incrementing the tail pointer will be called in more than one place in upcoming patches, so factor this out into a separate function. Also make mcp251xfd_handle_rxif_ring_uinc() safe to be called with a "len" of 0. Tested-by: Stefan Althöfer <Stefan.Althoefer@janztec.com> Tested-by: Thomas Kopp <thomas.kopp@microchip.com> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
62ca6d3a90
commit
2370061f07
|
@ -198,34 +198,15 @@ mcp251xfd_rx_obj_read(const struct mcp251xfd_priv *priv,
|
|||
}
|
||||
|
||||
static int
|
||||
mcp251xfd_handle_rxif_ring(struct mcp251xfd_priv *priv,
|
||||
struct mcp251xfd_rx_ring *ring)
|
||||
mcp251xfd_handle_rxif_ring_uinc(const struct mcp251xfd_priv *priv,
|
||||
struct mcp251xfd_rx_ring *ring,
|
||||
u8 len)
|
||||
{
|
||||
struct mcp251xfd_hw_rx_obj_canfd *hw_rx_obj = ring->obj;
|
||||
u8 rx_tail, len;
|
||||
int err, i;
|
||||
|
||||
err = mcp251xfd_rx_ring_update(priv, ring);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
while ((len = mcp251xfd_get_rx_linear_len(ring))) {
|
||||
int offset;
|
||||
int err;
|
||||
|
||||
rx_tail = mcp251xfd_get_rx_tail(ring);
|
||||
|
||||
err = mcp251xfd_rx_obj_read(priv, ring, hw_rx_obj,
|
||||
rx_tail, len);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
err = mcp251xfd_handle_rxif_one(priv, ring,
|
||||
(void *)hw_rx_obj +
|
||||
i * ring->obj_size);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
if (!len)
|
||||
return 0;
|
||||
|
||||
/* Increment the RX FIFO tail pointer 'len' times in a
|
||||
* single SPI message.
|
||||
|
@ -243,6 +224,41 @@ mcp251xfd_handle_rxif_ring(struct mcp251xfd_priv *priv,
|
|||
return err;
|
||||
|
||||
ring->tail += len;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
mcp251xfd_handle_rxif_ring(struct mcp251xfd_priv *priv,
|
||||
struct mcp251xfd_rx_ring *ring)
|
||||
{
|
||||
struct mcp251xfd_hw_rx_obj_canfd *hw_rx_obj = ring->obj;
|
||||
u8 rx_tail, len;
|
||||
int err, i;
|
||||
|
||||
err = mcp251xfd_rx_ring_update(priv, ring);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
while ((len = mcp251xfd_get_rx_linear_len(ring))) {
|
||||
rx_tail = mcp251xfd_get_rx_tail(ring);
|
||||
|
||||
err = mcp251xfd_rx_obj_read(priv, ring, hw_rx_obj,
|
||||
rx_tail, len);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
err = mcp251xfd_handle_rxif_one(priv, ring,
|
||||
(void *)hw_rx_obj +
|
||||
i * ring->obj_size);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
err = mcp251xfd_handle_rxif_ring_uinc(priv, ring, len);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue