From: Dan Williams <dcbw@redhat.com>
To: Bryan Wu <cooloney@kernel.org>
Cc: linville@tuxdriver.com, linux-wireless@vger.kernel.org,
linux-kernel@vger.kernel.org, Cliff Cai <cliff.cai@analog.com>
Subject: Re: [PATCH] wireless: introduce POWEROF2_BLOCKSIZE_ONLY option
Date: Thu, 05 Feb 2009 10:03:15 -0500 [thread overview]
Message-ID: <1233846195.3028.14.camel@localhost> (raw)
In-Reply-To: <1233819002-6912-1-git-send-email-cooloney@kernel.org>
On Thu, 2009-02-05 at 15:30 +0800, Bryan Wu wrote:
> From: Cliff Cai <cliff.cai@analog.com>
>
> Introduce POWEROF2_BLOCKSIZE_ONLY option for those SD/SDIO host
> which only support transferring block with size of power-of-2
Is the point here to avoid copying in the controller code? As with the
other patches on libertas-dev, I really dislike adding code to *every
SDIO driver* just because the host has certain restrictions. I'd much
rather that the host/controller code became aware of it's own
restrictions, and exposed those generically to drivers above it.
Without a KConfig option.
Seriously. The host knows what it needs. The code to handle that
should go in the host.
How about adding a method like "sdio_align_size" that takes the
controller's constraints into account? That seems a lot cleaner than
adding #define/KConfig junk to every SDIO driver in the kernel. One
less codepath to test, makes your life and all our lives easier.
Dan
> [ Bryan Wu <cooloney@kernel.org>:
> - remove some useless coding style cleanup
> - using roundup() function as upstream does
> ]
>
> Signed-off-by: Cliff Cai <cliff.cai@analog.com>
> Signed-off-by: Bryan Wu <cooloney@kernel.org>
> ---
> drivers/net/wireless/Kconfig | 6 ++++++
> drivers/net/wireless/libertas/if_sdio.c | 16 ++++++++++++++++
> 2 files changed, 22 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/net/wireless/Kconfig b/drivers/net/wireless/Kconfig
> index e4f9f74..a2685fa 100644
> --- a/drivers/net/wireless/Kconfig
> +++ b/drivers/net/wireless/Kconfig
> @@ -151,6 +151,12 @@ config LIBERTAS_SDIO
> ---help---
> A driver for Marvell Libertas 8385 and 8686 SDIO devices.
>
> +config POWEROF2_BLOCKSIZE_ONLY
> + bool "Support transferring block with size of power-of-2 only"
> + depends on LIBERTAS_SDIO
> + ---help---
> + For SD/SDIO host which only supports transferring block with size of power-of-2.
> +
> config LIBERTAS_DEBUG
> bool "Enable full debugging output in the Libertas module."
> depends on LIBERTAS
> diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c
> index 4519d73..5efc056 100644
> --- a/drivers/net/wireless/libertas/if_sdio.c
> +++ b/drivers/net/wireless/libertas/if_sdio.c
> @@ -272,6 +272,11 @@ static int if_sdio_card_to_host(struct if_sdio_card *card)
> */
> chunk = sdio_align_size(card->func, size);
>
> +/* For SD/SDIO host which only supports transferring block with size of power-of-2 */
> +#if defined(CONFIG_POWEROF2_BLOCKSIZE_ONLY)
> + chunk = (chunk + card->func->cur_blksize - 1) /
> + card->func->cur_blksize * card->func->cur_blksize;
> +#endif
> ret = sdio_readsb(card->func, card->buffer, card->ioport, chunk);
> if (ret)
> goto out;
> @@ -581,8 +586,14 @@ static int if_sdio_prog_real(struct if_sdio_card *card)
> lbs_deb_sdio("sending %d bytes (%d bytes) chunk\n",
> chunk_size, (chunk_size + 31) / 32 * 32);
> */
> +/* For SD/SDIO host which only supports transferring block with size of power-of-2 */
> +#if defined(CONFIG_POWEROF2_BLOCKSIZE_ONLY)
> + ret = sdio_writesb(card->func, card->ioport,
> + chunk_buffer, roundup(chunk_size, 256);
> +#else
> ret = sdio_writesb(card->func, card->ioport,
> chunk_buffer, roundup(chunk_size, 32));
> +#endif
> if (ret)
> goto release;
>
> @@ -699,6 +710,11 @@ static int if_sdio_host_to_card(struct lbs_private *priv,
> */
> size = sdio_align_size(card->func, nb + 4);
>
> +/* For SD/SDIO host which only supports transferring block with size of power-of-2 */
> +#if defined(CONFIG_POWEROF2_BLOCKSIZE_ONLY)
> + size = (size + card->func->cur_blksize - 1) /
> + card->func->cur_blksize * card->func->cur_blksize;
> +#endif
> packet = kzalloc(sizeof(struct if_sdio_packet) + size,
> GFP_ATOMIC);
> if (!packet) {
next prev parent reply other threads:[~2009-02-05 15:04 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-05 7:30 [PATCH] wireless: introduce POWEROF2_BLOCKSIZE_ONLY option Bryan Wu
2009-02-05 15:03 ` Dan Williams [this message]
2009-02-06 7:47 ` Bryan Wu
2009-02-06 8:00 ` Bryan Wu
2009-02-10 16:04 ` John W. Linville
2009-02-10 16:26 ` Dan Williams
2009-02-11 3:32 ` Bryan Wu
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=1233846195.3028.14.camel@localhost \
--to=dcbw@redhat.com \
--cc=cliff.cai@analog.com \
--cc=cooloney@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
/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.