From: "Jérôme Pouiller" <jerome.pouiller@silabs.com>
To: Kalle Valo <kvalo@codeaurora.org>
Cc: linux-wireless@vger.kernel.org, netdev@vger.kernel.org,
devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"David S . Miller" <davem@davemloft.net>,
devicetree@vger.kernel.org, "Rob Herring" <robh+dt@kernel.org>,
linux-mmc@vger.kernel.org, "Pali Rohár" <pali@kernel.org>,
"Ulf Hansson" <ulf.hansson@linaro.org>
Subject: Re: [PATCH v7 05/24] wfx: add main.c/main.h
Date: Wed, 10 Nov 2021 12:10:16 +0100 [thread overview]
Message-ID: <1948585.sCnHgVVQio@pc-42> (raw)
In-Reply-To: <87lf1wnxgu.fsf@codeaurora.org>
On Wednesday 10 November 2021 10:58:41 CET Kalle Valo wrote:
> Jérôme Pouiller <jerome.pouiller@silabs.com> writes:
> > On Thursday 7 October 2021 12:49:47 CEST Kalle Valo wrote:
> >> Kalle Valo <kvalo@codeaurora.org> writes:
> >> > Jérôme Pouiller <jerome.pouiller@silabs.com> writes:
> >> >>> >> >> I'm not really fond of having this kind of ASCII based parser in the
> >> >>> >> >> kernel. Do you have an example compressed file somewhere?
> >> >>> >> >
> >> >>> >> > An example of uncompressed configuration file can be found here[1]. Once
> >> >>> >> > compressed with [2], you get:
> >> >>> >> >
> >> >>> >> > {a:{a:4,b:1},b:{a:{a:4,b:0,c:0,d:0,e:A},b:{a:4,b:0,c:0,d:0,e:B},c:{a:4,b:0,c:0,d:0,e:C},d:{a:4,b:0,c:0,d:0,e:D},e:{a:4,b:0,c:0,d:0,e:E},f:{a:4,b:0,c:0,d:0,e:F},g:{a:4,b:0,c:0,d:0,e:G},h:{a:4,b:0,c:0,d:0,e:H},i:{a:4,b:0,c:0,d:0,e:I},j:{a:4,b:0,c:0,d:0,e:J},k:{a:4,b:0,c:0,d:0,e:K},l:{a:4,b:0,c:0,d:1,e:L},m:{a:4,b:0,c:0,d:1,e:M}},c:{a:{a:4},b:{a:6},c:{a:6,c:0},d:{a:6},e:{a:6},f:{a:6}},e:{b:0,c:1},h:{e:0,a:50,b:0,d:0,c:[{a:1,b:[0,0,0,0,0,0]},{a:2,b:[0,0,0,0,0,0]},{a:[3,9],b:[0,0,0,0,0,0]},{a:A,b:[0,0,0,0,0,0]},{a:B,b:[0,0,0,0,0,0]},{a:[C,D],b:[0,0,0,0,0,0]},{a:E,b:[0,0,0,0,0,0]}]},j:{a:0,b:0}}
> >> >>> >>
> >> >>> >> So what's the grand idea with this braces format? I'm not getting it.
> >> >>> >
> >> >>> > - It allows to describe a tree structure
> >> >>> > - It is ascii (easy to dump, easy to copy-paste)
> >> >>> > - It is small (as I explain below, size matters)
> >> >>> > - Since it is similar to JSON, the structure is obvious to many people
> >> >>> >
> >> >>> > Anyway, I am not the author of that and I have to deal with it.
> >> >>>
> >> >>> I'm a supported for JSON like formats, flexibility and all that. But
> >> >>> they belong to user space, not kernel.
> >> >>>
> >> >>> >> Usually the drivers just consider this kind of firmware configuration
> >> >>> >> data as a binary blob and dump it to the firmware, without knowing what
> >> >>> >> the data contains. Can't you do the same?
> >> >>> >
> >> >>> > [I didn't had received this mail :( ]
> >> >>> >
> >> >>> > The idea was also to send it as a binary blob. However, the firmware use
> >> >>> > a limited buffer (1500 bytes) to parse it. In most of case the PDS exceeds
> >> >>> > this size. So, we have to split the PDS before to send it.
> >> >>> >
> >> >>> > Unfortunately, we can't split it anywhere. The PDS is a tree structure and
> >> >>> > the firmware expects to receive a well formatted tree.
> >> >>> >
> >> >>> > So, the easiest way to send it to the firmware is to split the tree
> >> >>> > between each root nodes and send each subtree separately (see also the
> >> >>> > comment above wfx_send_pds()).
> >> >>> >
> >> >>> > Anyway, someone has to cook this configuration before to send it to the
> >> >>> > firmware. This could be done by a script outside of the kernel. Then we
> >> >>> > could change the input format to simplify a bit the processing in the
> >> >>> > kernel.
> >> >>>
> >> >>> I think a binary file with TLV format would be much better, but I'm sure
> >> >>> there also other good choises.
> >> >>>
> >> >>> > However, the driver has already some users and I worry that changing
> >> >>> > the input format would lead to a mess.
> >> >>>
> >> >>> You can implement a script which converts the old format to the new
> >> >>> format. And you can use different naming scheme in the new format so
> >> >>> that we don't accidentally load the old format. And even better if you
> >> >>> add a some kind of signature in the new format and give a proper error
> >> >>> from the driver if it doesn't match.
> >> >>
> >> >> Ok. I am going to change the input format. I think the new function is
> >> >> going to look like:
> >> >>
> >> >> int wfx_send_pds(struct wfx_dev *wdev, u8 *buf, size_t buf_len)
> >> >> {
> >> >> int ret;
> >> >> int start = 0;
> >> >>
> >> >> if (buf[start] != '{') {
> >> >> dev_err(wdev->dev, "valid PDS start with '{'. Did you forget to compress it?\n");
> >> >> return -EINVAL;
> >> >> }
> >> >> while (start < buf_len) {
> >> >> len = strnlen(buf + start, buf_len - start);
> >> >> if (len > WFX_PDS_MAX_SIZE) {
> >> >> dev_err(wdev->dev, "PDS chunk is too big (legacy format?)\n");
> >> >> return -EINVAL;
> >> >> }
> >> >> dev_dbg(wdev->dev, "send PDS '%s'\n", buf + start);
> >> >> ret = wfx_hif_configuration(wdev, buf + start, len);
> >> >> /* FIXME: Add error handling here */
> >> >> start += len;
> >> >> }
> >> >> return 0;
> >> >
> >> > Did you read at all what I wrote above? Please ditch the ASCII format
> >> > completely.
> >>
> >> Sorry, I read this too hastily. I just saw "buf[start] != '{'" and
> >> assumed this is the same ASCII format, but not sure anymore. Can you
> >> explain what changes you made now?
> >
> > The script I am going to write will compute where the PDS have to be split
> > (this work is currently done by the driver). The script will add a
> > separating character (let's say '\0') between each chunk.
> >
> > The driver will just have to find the separating character, send the
> > chunk and repeat.
>
> I would forget ASCII altogether and implement a proper binary format
> like TLV. For example, ath10k uses TLV with board-2.bin files (grep for
> enum ath10k_bd_ie_type).
Maybe you plan to have common functions to parse TLV files? Without that,
I do not see so much benefits to TLV. However, it does not cost me so
much. So all right, I'll do.
> Also I recommend changing the file "signature" ('{') to something else
> so that the driver detects incorrect formats. And maybe even use suffix
> .pds2 or something like that to make it more obvious and avoid
> confusion?
Maybe I could replace '{' by '\x7b'? :)
More seriously, this value is enforced by the device. However, with the
introduction of TLV, I will already test the value of the Type field, so
I think this test will be less important and I could remove it.
--
Jérôme Pouiller
next prev parent reply other threads:[~2021-11-10 11:10 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-20 16:11 [PATCH v7 00/24] wfx: get out from the staging area Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 01/24] mmc: sdio: add SDIO IDs for Silabs WF200 chip Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 02/24] dt-bindings: introduce silabs,wfx.yaml Jerome Pouiller
2021-09-23 17:09 ` Rob Herring
2021-09-20 16:11 ` [PATCH v7 03/24] wfx: add Makefile/Kconfig Jerome Pouiller
2021-10-01 9:04 ` Kalle Valo
2021-10-01 9:06 ` Kalle Valo
2021-09-20 16:11 ` [PATCH v7 04/24] wfx: add wfx.h Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 05/24] wfx: add main.c/main.h Jerome Pouiller
2021-10-01 9:22 ` Kalle Valo
2021-10-01 9:44 ` Jérôme Pouiller
2021-10-01 12:18 ` Kalle Valo
2021-10-06 7:32 ` Jérôme Pouiller
2021-10-07 8:35 ` Kalle Valo
2021-10-07 10:00 ` Jérôme Pouiller
2021-10-07 10:41 ` Kalle Valo
2021-10-07 10:49 ` Kalle Valo
2021-10-07 11:22 ` Jérôme Pouiller
2021-11-10 9:58 ` Kalle Valo
2021-11-10 11:10 ` Jérôme Pouiller [this message]
2021-10-01 15:29 ` Jérôme Pouiller
2021-10-05 5:56 ` Kalle Valo
2021-10-05 8:12 ` Jérôme Pouiller
2021-09-20 16:11 ` [PATCH v7 06/24] wfx: add bus.h Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 07/24] wfx: add bus_spi.c Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 08/24] wfx: add bus_sdio.c Jerome Pouiller
2021-09-30 10:07 ` Ulf Hansson
2021-09-30 16:51 ` Jérôme Pouiller
2021-09-30 17:06 ` Pali Rohár
2021-10-01 15:23 ` Ulf Hansson
2021-10-05 8:14 ` Jérôme Pouiller
2021-10-06 15:02 ` Ulf Hansson
2021-10-06 15:42 ` Jérôme Pouiller
2021-10-07 8:26 ` Kalle Valo
2021-10-07 10:24 ` Pali Rohár
2021-10-01 15:37 ` Ulf Hansson
2021-10-05 5:59 ` Kalle Valo
2021-09-20 16:11 ` [PATCH v7 09/24] wfx: add hwio.c/hwio.h Jerome Pouiller
2021-10-01 9:52 ` Kalle Valo
2021-10-01 12:39 ` Kalle Valo
2021-09-20 16:11 ` [PATCH v7 10/24] wfx: add fwio.c/fwio.h Jerome Pouiller
2021-10-01 11:58 ` Kalle Valo
2021-10-01 15:09 ` Jérôme Pouiller
2021-10-01 16:08 ` Pali Rohár
2021-10-01 16:46 ` Jérôme Pouiller
2021-10-07 8:19 ` Kalle Valo
2021-10-07 10:10 ` Pali Rohár
2021-10-07 8:16 ` Kalle Valo
2021-10-07 10:13 ` Pali Rohár
2021-10-07 8:08 ` Kalle Valo
2021-10-07 9:35 ` Jérôme Pouiller
2021-09-20 16:11 ` [PATCH v7 11/24] wfx: add bh.c/bh.h Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 12/24] wfx: add hif_api_*.h Jerome Pouiller
2021-10-01 11:41 ` Kalle Valo
2021-10-01 11:52 ` Jérôme Pouiller
2021-10-01 12:45 ` Kalle Valo
2021-10-01 11:45 ` Kalle Valo
2021-10-01 11:48 ` Kalle Valo
2021-09-20 16:11 ` [PATCH v7 13/24] wfx: add hif_tx*.c/hif_tx*.h Jerome Pouiller
2021-10-01 9:55 ` Kalle Valo
2021-10-01 15:17 ` Jérôme Pouiller
2021-10-01 16:13 ` Pali Rohár
2021-10-05 6:12 ` Kalle Valo
2021-10-05 6:44 ` Greg Kroah-Hartman
2021-10-05 8:17 ` Jérôme Pouiller
2021-10-05 8:21 ` Greg Kroah-Hartman
2021-10-05 9:18 ` Jérôme Pouiller
2021-10-05 14:02 ` Jakub Kicinski
2021-09-20 16:11 ` [PATCH v7 14/24] wfx: add key.c/key.h Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 15/24] wfx: add hif_rx.c/hif_rx.h Jerome Pouiller
2021-10-01 10:09 ` Kalle Valo
2021-09-20 16:11 ` [PATCH v7 16/24] wfx: add data_rx.c/data_rx.h Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 17/24] wfx: add queue.c/queue.h Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 18/24] wfx: add data_tx.c/data_tx.h Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 19/24] wfx: add sta.c/sta.h Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 20/24] wfx: add scan.c/scan.h Jerome Pouiller
2021-10-01 9:35 ` Kalle Valo
2021-09-20 16:11 ` [PATCH v7 21/24] wfx: add debug.c/debug.h Jerome Pouiller
2021-10-01 12:01 ` Kalle Valo
2021-09-20 16:11 ` [PATCH v7 22/24] wfx: add traces.h Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 23/24] wfx: remove from the staging area Jerome Pouiller
2021-09-20 16:11 ` [PATCH v7 24/24] wfx: get out " Jerome Pouiller
2021-10-01 12:42 ` [PATCH v7 00/24] " Kalle Valo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1948585.sCnHgVVQio@pc-42 \
--to=jerome.pouiller@silabs.com \
--cc=davem@davemloft.net \
--cc=devel@driverdev.osuosl.org \
--cc=devicetree@vger.kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=kvalo@codeaurora.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pali@kernel.org \
--cc=robh+dt@kernel.org \
--cc=ulf.hansson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.