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