Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/sdmmc Continue parsing frames after empty payload.



details:   https://anonhg.NetBSD.org/src/rev/d22bacb214d0
branches:  trunk
changeset: 956639:d22bacb214d0
user:      mlelstv <mlelstv%NetBSD.org@localhost>
date:      Tue Nov 03 09:26:41 2020 +0000

description:
Continue parsing frames after empty payload.
Add diagnostic messages.

diffstat:

 sys/dev/sdmmc/if_bwfm_sdio.c |  13 ++++++++-----
 1 files changed, 8 insertions(+), 5 deletions(-)

diffs (42 lines):

diff -r 6c6ab059f70f -r d22bacb214d0 sys/dev/sdmmc/if_bwfm_sdio.c
--- a/sys/dev/sdmmc/if_bwfm_sdio.c      Tue Nov 03 08:41:30 2020 +0000
+++ b/sys/dev/sdmmc/if_bwfm_sdio.c      Tue Nov 03 09:26:41 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: if_bwfm_sdio.c,v 1.23 2020/07/22 17:23:12 riastradh Exp $ */
+/* $NetBSD: if_bwfm_sdio.c,v 1.24 2020/11/03 09:26:41 mlelstv Exp $ */
 /* $OpenBSD: if_bwfm_sdio.c,v 1.1 2017/10/11 17:19:50 patrick Exp $ */
 /*
  * Copyright (c) 2010-2016 Broadcom Corporation
@@ -1478,6 +1478,8 @@
                DPRINTF(("%s: hostint 0x%" PRIx32 "\n", DEVNAME(sc), hostint));
                bwfm_sdio_dev_write(sc, SDPCMD_TOSBMAILBOX,
                    SDPCMD_TOSBMAILBOX_INT_ACK);
+               if (hostint & SDPCMD_TOHOSTMAILBOXDATA_FWHALT)
+                       printf("%s: firmware halted\n", DEVNAME(sc));
                if (hostint & SDPCMD_TOHOSTMAILBOXDATA_NAKHANDLED)
                        sc->sc_rxskip = false;
                if (hostint & SDPCMD_TOHOSTMAILBOXDATA_DEVREADY ||
@@ -1726,6 +1728,8 @@
 
                flen = hwhdr->frmlen - (sizeof(*hwhdr) + sizeof(*swhdr));
                if (flen == 0) {
+                       DPRINTF(("%s: empty payload (frmlen=%u)\n",
+                           DEVNAME(sc), hwhdr->frmlen));
                        nextlen = swhdr->nextlen << 4;
                        continue;
                }
@@ -1794,11 +1798,10 @@
                        }
                        m_adj(m, hoff);
                        /* don't pass empty packet to stack */
-                       if (m->m_len == 0) {
+                       if (m->m_len > 0)
+                               bwfm_rx(&sc->sc_sc, m);
+                       else
                                m_freem(m);
-                               break;
-                       }
-                       bwfm_rx(&sc->sc_sc, m);
                        nextlen = swhdr->nextlen << 4;
                        break;
                case BWFM_SDIO_SWHDR_CHANNEL_GLOM:



Home | Main Index | Thread Index | Old Index