<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel/linux.git/drivers/mmc/core/sdio_ops.h, branch linux-4.16.y</title>
<subtitle>Linux kernel stable tree (mirror)</subtitle>
<id>https://git.radix-linux.su/kernel/linux.git/atom?h=linux-4.16.y</id>
<link rel='self' href='https://git.radix-linux.su/kernel/linux.git/atom?h=linux-4.16.y'/>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/'/>
<updated>2017-06-20T08:30:11+00:00</updated>
<entry>
<title>mmc: sdio: Add API to manage SDIO IRQs from a workqueue</title>
<updated>2017-06-20T08:30:11+00:00</updated>
<author>
<name>Ulf Hansson</name>
<email>ulf.hansson@linaro.org</email>
</author>
<published>2017-04-13T14:48:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=682696605c7093d2800c498c04166831e5aedf87'/>
<id>urn:sha1:682696605c7093d2800c498c04166831e5aedf87</id>
<content type='text'>
For hosts not supporting MMC_CAP2_SDIO_IRQ_NOTHREAD but MMC_CAP_SDIO_IRQ,
the SDIO IRQs are processed from a dedicated kernel thread. For these
cases, the host calls mmc_signal_sdio_irq() from its ISR to signal a new
SDIO IRQ.

Signaling an SDIO IRQ makes the host's -&gt;enable_sdio_irq() callback to be
invoked to temporary disable the IRQs, before the kernel thread is woken up
to process it. When processing of the IRQs are completed, they are
re-enabled by the kernel thread, again via invoking the host's
-&gt;enable_sdio_irq().

The observation from this, is that the execution path is being unnecessary
complex, as the host driver already knows that it needs to temporary
disable the IRQs before signaling a new one. Moreover, replacing the kernel
thread with a work/workqueue would not only greatly simplify the code, but
also make it more robust.

To address the above problems, let's continue to build upon the support for
MMC_CAP2_SDIO_IRQ_NOTHREAD, as it already implements SDIO IRQs to be
processed without using the clumsy kernel thread and without the ping-pong
calls of the host's -&gt;enable_sdio_irq() callback for each processed IRQ.

Therefore, let's add new API sdio_signal_irq(), which enables hosts to
signal/process SDIO IRQs by using a work/workqueue, rather than using the
kernel thread.

Add also a new host callback -&gt;ack_sdio_irq(), which the work invokes when
the SDIO IRQs have been processed. This informs the host about when it
shall re-enable the SDIO IRQs. Potentially, we could re-use the existing
-&gt;enable_sdio_irq() callback instead of adding a new one, however it has
turned out that it's more convenient for hosts to get this information via
a separate callback.

Hosts that wants to use this new method to signal/process SDIO IRQs, must
enable MMC_CAP2_SDIO_IRQ_NOTHREAD and implement the -&gt;ack_sdio_irq()
callback.

Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
Tested-by: Douglas Anderson &lt;dianders@chromium.org&gt;
Reviewed-by: Douglas Anderson &lt;dianders@chromium.org&gt;
</content>
</entry>
<entry>
<title>mmc: sdio: Fix sdio wait busy implement limitation</title>
<updated>2017-04-24T19:45:09+00:00</updated>
<author>
<name>jiajie.hao@mediatek.com</name>
<email>jiajie.hao@mediatek.com</email>
</author>
<published>2017-04-23T09:38:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=f328c76e568d13c9fee21b5cf7411c96285f0f89'/>
<id>urn:sha1:f328c76e568d13c9fee21b5cf7411c96285f0f89</id>
<content type='text'>
The host may issue an I/O abort by writing to the CCCR at any time
during I/O read operation via CMD52. And host may need suspend
transcation during write busy stage in SDIO suspend/resume scenario.
&gt;From other side, a card may accept CMD52 during data transfer phase.

Previous implement would block issuing above command in busy stage.
It cause function driver can't implement as proper way and has no
opportunity to do some coverage in error case via I/O abort etc.

We need bypass some necessary operation during busy check stage.

Signed-off-by: Jiajie Hao &lt;jiajie.hao@mediatek.com&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
</content>
</entry>
<entry>
<title>mmc: core: Move public functions from core.h to private headers</title>
<updated>2017-02-13T12:20:21+00:00</updated>
<author>
<name>Ulf Hansson</name>
<email>ulf.hansson@linaro.org</email>
</author>
<published>2017-01-13T13:14:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=55244c5659b5e73a969b285a2e763223d8aab979'/>
<id>urn:sha1:55244c5659b5e73a969b285a2e763223d8aab979</id>
<content type='text'>
A significant amount of functions are available through the public mmc
core.h header file. Let's slim down this public mmc interface, as to
prevent users from abusing it, by moving some of the functions to private
mmc header files.

This change concentrates on moving the functions into private mmc headers,
following changes may continue with additional clean-ups, as an example
some functions can be turned into static.

Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
Reviewed-by: Linus Walleij &lt;linus.walleij@linaro.org&gt;
Reviewed-by: Shawn Lin &lt;shawn.lin@rock-chips.com&gt;
</content>
</entry>
<entry>
<title>mmc: core: First step in cleaning up private mmc header files</title>
<updated>2017-02-13T12:20:20+00:00</updated>
<author>
<name>Ulf Hansson</name>
<email>ulf.hansson@linaro.org</email>
</author>
<published>2017-01-13T13:14:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=066185d690631478b16045d152b163a51a5e4847'/>
<id>urn:sha1:066185d690631478b16045d152b163a51a5e4847</id>
<content type='text'>
This is the first step in cleaning up the private mmc header files. In this
change we makes sure each header file builds standalone, as that helps to
resolve dependencies.

While changing this, it also seems reasonable to stop including other
headers from inside a header itself which it don't depend upon.
Additionally, in some cases such dependencies are better resolved by
forward declaring the needed struct.

Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
Reviewed-by: Shawn Lin &lt;shawn.lin@rock-chips.com&gt;
</content>
</entry>
<entry>
<title>mmc: Add mmc_is_io_op helper function</title>
<updated>2015-10-26T15:00:01+00:00</updated>
<author>
<name>Hans de Goede</name>
<email>hdegoede@redhat.com</email>
</author>
<published>2015-09-22T15:30:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=de98c55682790437fb3c6b5335f2bf3ce20539db'/>
<id>urn:sha1:de98c55682790437fb3c6b5335f2bf3ce20539db</id>
<content type='text'>
Add a helper function to check if an opcode is a sd-io-rw-* opcode.

Signed-off-by: Hans de Goede &lt;hdegoede@redhat.com&gt;
Signed-off-by: Ulf Hansson &lt;ulf.hansson@linaro.org&gt;
</content>
</entry>
<entry>
<title>sdio: recognize io card without powercycle</title>
<updated>2010-03-12T23:52:28+00:00</updated>
<author>
<name>Albert Herranz</name>
<email>albert_herranz@yahoo.es</email>
</author>
<published>2010-03-10T23:20:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=516a82422209e078345d0ca54b16793d7bfd4782'/>
<id>urn:sha1:516a82422209e078345d0ca54b16793d7bfd4782</id>
<content type='text'>
SDIO Simplified Specification V2.00 states that it is strongly recommended
that the host executes either a power reset or issues a CMD52 (I/O Reset)
to re-initialize an I/O only card or the I/O portion of a combo card.
Additionally, the CMD52 must be issued first because it cannot be issued
after a CMD0.

With this patch the Nintendo Wii SDIO-based WLAN card is detected after a
system reset, without requiring a complete system powercycle.

Signed-off-by: Albert Herranz &lt;albert_herranz@yahoo.es&gt;
Cc: &lt;linux-mmc@vger.kernel.org&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>sdio: extend sdio_readsb() and friends to handle any length of buffer</title>
<updated>2007-09-23T19:21:32+00:00</updated>
<author>
<name>David Vrabel</name>
<email>david.vrabel@csr.com</email>
</author>
<published>2007-08-08T13:24:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=eb6594689226663968ef0a9fd71ec5e1e4e04f9c'/>
<id>urn:sha1:eb6594689226663968ef0a9fd71ec5e1e4e04f9c</id>
<content type='text'>
Extend sdio_readsb(), sdio_writesb(), sdio_memcpy_fromio(), and
sdio_memcpy_toio() to handle any length of buffer by splitting the transfer
into several IO_RW_EXTENDED commands. Typically, a transfer would be split
into a single block mode transfer followed by a byte mode transfer for the
remainder but we also handle lack of block mode support and the block size
being greater than 512 (the maximum byte mode transfer size).

host-&gt;max_seg_size &lt;= host-&gt;max_req_size so there's no need to check both
when determining the maximum data size for a single command.

Signed-off-by: David Vrabel &lt;david.vrabel@csr.com&gt;
Signed-off-by: Pierre Ossman &lt;drzeus@drzeus.cx&gt;
</content>
</entry>
<entry>
<title>sdio: support IO_RW_EXTENDED</title>
<updated>2007-09-23T19:09:34+00:00</updated>
<author>
<name>Pierre Ossman</name>
<email>drzeus@drzeus.cx</email>
</author>
<published>2007-07-06T11:35:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=112c9db91ee6bf19eca7cbb6854be3127381c229'/>
<id>urn:sha1:112c9db91ee6bf19eca7cbb6854be3127381c229</id>
<content type='text'>
Support the multi-byte transfer operation, including handlers for
common operations like writel()/readl().

Signed-off-by: Pierre Ossman &lt;drzeus@drzeus.cx&gt;
</content>
</entry>
<entry>
<title>mmc: implement SDIO IO_RW_DIRECT operation</title>
<updated>2007-09-23T17:42:37+00:00</updated>
<author>
<name>Pierre Ossman</name>
<email>drzeus@drzeus.cx</email>
</author>
<published>2007-05-22T18:25:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=b2bcc798bbb482b2909801280f3c4aff8cbbf5be'/>
<id>urn:sha1:b2bcc798bbb482b2909801280f3c4aff8cbbf5be</id>
<content type='text'>
Signed-off-by: Pierre Ossman &lt;drzeus@drzeus.cx&gt;
</content>
</entry>
<entry>
<title>mmc: detect SDIO cards</title>
<updated>2007-09-23T17:40:07+00:00</updated>
<author>
<name>Pierre Ossman</name>
<email>drzeus@drzeus.cx</email>
</author>
<published>2007-05-21T18:23:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=5c4e6f1301649d5b29dd0f70e6da83e728ab5ca5'/>
<id>urn:sha1:5c4e6f1301649d5b29dd0f70e6da83e728ab5ca5</id>
<content type='text'>
Really basic init sequence for SDIO cards.

Signed-off-by: Pierre Ossman &lt;drzeus@drzeus.cx&gt;
</content>
</entry>
</feed>
