PCI Cardreader
Benjamin Close
Benjamin.Close at clearchain.com
Thu Nov 8 17:54:34 PST 2007
Rene Ladan wrote:
> 2007/11/8, Rene Ladan <r.c.ladan at gmail.com>:
>
>> Alexandre "Sunny" Kovalenko schreef:
>>
>>> On Wed, 2007-11-07 at 22:13 +0100, Rene Ladan wrote:
>>>
>>>> Bachilo Dmitry schreef:
>>>>
>>>>> Hello all.
>>>>> I always used USB cardreaders and had no problem with it, but now in my
>>>>> notebook I have a cardreader, that appears to be onboard PCI device. And so
>>>>> FreeBSD sees it as this:
>>>>> pci6: <memory, flash> at device 4.1 (no driver attached)
>>>>> pci6: <base peripheral> at device 4.2 (no driver attached)
>>>>> pci6: <memory, flash> at device 4.3 (no driver attached)
>>>>> pci6: <memory, flash> at device 4.4 (no driver attached)
>>>>>
>>>>>
>>>>> That's even more odd because three are recognized as flash and one is not.
>>>>> pciconf -lv shows this:
>>>>>
>>>>> none13 at pci6:4:1: class=0x050100 card=0x009f1025 chip=0x05301524
>>>>> rev=0x01 hdr=0x00
>>>>> vendor = 'ENE Technology Inc'
>>>>> device = 'PCI Memory Stick Card Reader Controller'
>>>>> class = memory
>>>>> subclass = flash
>>>>>
>>>>> Well, in 7.0-CURRENT it showed all four devices and now in BETA-2 only this
>>>>> one.
>>>>>
>>>>>
>>>> On my 8.0-CURRENT box (20071105) it shows all four devices:
>>>>
>>>> cbb0 at pci0:4:1:0: class=0x060700 card=0x14371043 chip=0x04761180 rev=0xb3 hdr=0x02
>>>> vendor = 'Ricoh Company, Ltd.'
>>>> device = 'unknown Ricoh R/RL/5C476(II)'
>>>> class = bridge
>>>> subclass = PCI-CardBus
>>>> fwohci0 at pci0:4:1:1: class=0x0c0010 card=0x14371043 chip=0x05521180 rev=0x08 hdr=0x00
>>>> vendor = 'Ricoh Company, Ltd.'
>>>> device = 'RL5c552 IEEE-1394 Controller'
>>>> class = serial bus
>>>> subclass = FireWire
>>>> none0 at pci0:4:1:2: class=0x080500 card=0x14371043 chip=0x08221180 rev=0x17 hdr=0x00
>>>> vendor = 'Ricoh Company, Ltd.'
>>>> device = 'R5C832, R5C843 SDA Standard Compliant SD Host Controller'
>>>> class = base peripheral
>>>> none1 at pci0:4:1:3: class=0x088000 card=0x14371043 chip=0x05921180 rev=0x08 hdr=0x00
>>>> vendor = 'Ricoh Company, Ltd.'
>>>> device = '13871043 Ricoh Memory Stick Host Controller'
>>>> class = base peripheral
>>>>
>>>>
>>>>> Is there any way I can make them work?
>>>>>
>>>>>
>>>> You can add these lines to your kernel configuration:
>>>>
>>>> device mmc
>>>> device mmcsd
>>>>
>>>> But don't expect any magic. mmc(4) and mmcsd(4) tell that nothing currently works,
>>>> which seems to be true on my Asus A6JE (using a Kingston micro-SD card with adapter).
>>>>
>>>> imp@ is the last person who touched the driver which lives in /usr/src/sys/dev/mmc/
>>>>
>>>>
>>> Thing below is on my list to try out when I get enough breathing room
>>> (or when I would have a dire need to read SD cards on my ThinkPad
>>> X60 ;). Did you, by any chance, try it? Any experiences to share?
>>>
>>> http://www.freebsd.org/cgi/getmsg.cgi?fetch=17399+21119
>>> +/usr/local/www/db/text/2007/freebsd-mobile/20070916.freebsd-mobile
>>>
>>>
>> Not yet, I didn't see the message until now since I'm not (yet) on the mobile list.
>> A quick try showed that it does not compile on my box. I'll investigate why.
>> The author did not leave an email address in the files.
>>
>>
> The short story is bus_setup_intr() gained some parameters, I'll
> figure out which. According to a blog at bsdimp.blogspot.com, Ricoh
> based readers should work with this driver :)
The attached patch gets it compiling but I think there might be some
locking issues still as I got an immediate panic at module load. Not
sure who put up the tar.gz but I know Max has done some work porting it
from OpenBSD in p4:
http://perforce.freebsd.org/changeList.cgi?CMD=changes&FSPC=//depot/user/mlaier/sdmmc/sys/...
diff -ur sdmmc-20070627/dev/sdmmc/sdshc.c
sdmmc-20070627-devel/dev/sdmmc/sdshc.c
--- sdmmc-20070627/dev/sdmmc/sdshc.c 2007-06-25 19:55:52.000000000 +0930
+++ sdmmc-20070627-devel/dev/sdmmc/sdshc.c 2007-11-09
11:45:00.779789122 +1030
@@ -42,6 +42,8 @@
#include <sys/systm.h>
#include <sys/conf.h>
#include <sys/malloc.h>
+#include <sys/bus.h>
+#include <machine/bus.h>
#include <dev/pci/pcireg.h>
#include <dev/pci/pcivar.h>
@@ -342,7 +344,7 @@
* Hook our interrupt after all initialization is complete.
*/
LOG(0x10, (dev, "Setup Intr\n"));
- error = bus_setup_intr(dev, sc->irq, INTR_TYPE_NET|INTR_MPSAFE ,
+ error = bus_setup_intr(dev, sc->irq, INTR_TYPE_NET|INTR_MPSAFE , NULL,
sdshc_intr, sc, &sc->ih);
if (error != 0) {
MSG((dev, "could not set up interrupt\n"));
diff -ur sdmmc-20070627/dev/sdmmc/sdshcbus.c
sdmmc-20070627-devel/dev/sdmmc/sdshcbus.c
--- sdmmc-20070627/dev/sdmmc/sdshcbus.c 2007-06-20 03:12:28.000000000 +0930
+++ sdmmc-20070627-devel/dev/sdmmc/sdshcbus.c 2007-11-09
11:49:18.706315189 +1030
@@ -41,6 +41,8 @@
#include <sys/conf.h>
#include <sys/malloc.h>
#include <sys/ctype.h>
+#include <sys/bus.h>
+#include <machine/bus.h>
#include "sdbus_if.h"
More information about the freebsd-mobile
mailing list