opensubscriber
   Find in this group all groups
 
Unknown more information…

x : xbox-linux-devel@lists.sourceforge.net 8 March 2008 • 3:06AM -0500

Re: [Xbox-linux] Mad Catz Beat Pad not recognized in xpad ver 0.1.7
by Roderick B. Greening

REPLY TO AUTHOR
 
REPLY TO GROUP




I've done some additional digging and where it fails below

        usb_fill_int_urb(xpad->irq_in, udev,
                         usb_rcvintpipe(udev, ep_irq_in->bEndpointAddress),
                         xpad->idata, XPAD_PKT_LEN, xpad_irq_in,
                         xpad, ep_irq_in->bInterval);

I've added in some test code (diff below) just before it. The code bails if
ep_irq_in is NULL (undefined):

@@ -554,6 +556,13 @@

        /* init input URB for USB INT transfer from device */
        ep_irq_in = &intf->cur_altsetting->endpoint[0].desc;
+
+       // Testing for valid input
+       if (!ep_irq_in) {
+               info("ep_irq_in undefined");
+               goto fail2;
+       }
+
        usb_fill_int_urb(xpad->irq_in, udev,
                         usb_rcvintpipe(udev, ep_irq_in->bEndpointAddress),
                         xpad->idata, XPAD_PKT_LEN, xpad_irq_in,

As you can see in the dmesg output below:

[  104.270277] input: Mad Catz Beat Pad
as /devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.0/input/input10
[  104.285890] input: Mad Catz Beat Pad
as /devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.1/input/input11
[  104.298252] input: Mad Catz Beat Pad
as /devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.2/input/input12
[  104.304010] /home/rgreening/xpad/xpad.c: ep_irq_in undefined
[  104.304558] xpad: probe of 1-1:1.3 failed with error -12

It appears that the call to "ep_irq_in =
&intf->cur_altsetting->endpoint[0].desc;" is returning NULL is not caught by
the code. Therefore it crashes.

I guess there's some additional checking and logic that needs to occur there,
though I am at a loss as to exactly what needs to be done.

Suggestions?


On Friday 07 March 2008 2:41:34 pm Roderick B. Greening wrote:
> I have an unrecognized controller. It's a Mad Catz Beat Pad.
>
> I have modified the xpad.c (from version 0.1.7 in CVS) to attempt to
> support this controller. No luck. I can get it to start and perform the
> xpad_probe, at which point it picks up the inputs (3 of them) and then
> promptly causes the kernel to OOPS with a NULL reference.
>
> Here's the diff of my change:
>
> --- xpad.c.orig 2008-03-06 17:09:03.000000000 -0330
> +++ xpad.c      2008-03-07 10:59:29.000000000 -0330
> @@ -104,6 +104,7 @@
>         { 0x0738, 0x4540, "Mad Catz Beat Pad", GAMEPAD_XBOX_MAT },
>         { 0x0738, 0x4556, "Mad Catz Lynx Wireless Controller", GAMEPAD_XBOX
> }, { 0x0738, 0x4716, "Mad Catz Xbox 360 Controller", GAMEPAD_XBOX360 }, +  
>     { 0x0738, 0x4740, "Mad Catz Beat Pad", GAMEPAD_XBOX_MAT }, { 0x0738,
> 0x6040, "Mad Catz Beat Pad Pro", GAMEPAD_XBOX_MAT }, { 0x0c12, 0x8802,
> "Zeroplus Xbox Controller", GAMEPAD_XBOX }, { 0x0c12, 0x8810, "Zeroplus
> Xbox Controller", GAMEPAD_XBOX }, @@ -161,6 +162,7 @@
>         { USB_DEVICE(0x045e, 0x028e) }, /* Xbox 360 Controller */
>         { USB_DEVICE(0x045e, 0x0291) }, /* Xbox 360 Wireless Controller */
>         { USB_DEVICE(0x045e, 0x0719) }, /* Xbox 360 Wireless PC Receiver */
> +       { USB_DEVICE(0x0738, 0x4740) }, /* Mad Catz Beat Pad */
>         { USB_DEVICE(0x1430, 0x4748) }, /* RedOctane Guitar Hero X-plorer
> */ { }
>  };
>
>
> Here's the output of lsusb -vv -d 0x0738:0x4740
>
> Bus 001 Device 002: ID 0738:4740 Mad Catz, Inc.
> Device Descriptor:
>   bLength                18
>   bDescriptorType         1
>   bcdUSB               2.00
>   bDeviceClass          255 Vendor Specific Class
>   bDeviceSubClass       255 Vendor Specific Subclass
>   bDeviceProtocol       255 Vendor Specific Protocol
>   bMaxPacketSize0         8
>   idVendor           0x0738 Mad Catz, Inc.
>   idProduct          0x4740
>   bcdDevice           31.20
>   iManufacturer           1 Mad Catz, Inc.
>   iProduct                2 Beat Pad
>   iSerial                 3 4C7CD68
>   bNumConfigurations      1
>   Configuration Descriptor:
>     bLength                 9
>     bDescriptorType         2
>     wTotalLength          153
>     bNumInterfaces          4
>     bConfigurationValue     1
>     iConfiguration          0
>     bmAttributes         0xa0
>       (Bus Powered)
>       Remote Wakeup
>     MaxPower              500mA
>     Interface Descriptor:
>       bLength                 9
>       bDescriptorType         4
>       bInterfaceNumber        0
>       bAlternateSetting       0
>       bNumEndpoints           2
>       bInterfaceClass       255 Vendor Specific Class
>       bInterfaceSubClass     93
>       bInterfaceProtocol      1
>       iInterface              0
>       ** UNRECOGNIZED:  11 21 10 01 05 25 81 14 03 03 03 04 13 02 08 03 03
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x81  EP 1 IN
>         bmAttributes            3
>           Transfer Type            Interrupt
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0020  1x 32 bytes
>         bInterval               4
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x02  EP 2 OUT
>         bmAttributes            3
>           Transfer Type            Interrupt
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0020  1x 32 bytes
>         bInterval               8
>     Interface Descriptor:
>       bLength                 9
>       bDescriptorType         4
>       bInterfaceNumber        1
>       bAlternateSetting       0
>       bNumEndpoints           4
>       bInterfaceClass       255 Vendor Specific Class
>       bInterfaceSubClass     93
>       bInterfaceProtocol      3
>       iInterface              0
>       ** UNRECOGNIZED:  1b 21 00 01 01 01 83 40 01 04 20 16 85 00 00 00 00
> 00 00 16 05 00 00 00 00 00 00
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x83  EP 3 IN
>         bmAttributes            3
>           Transfer Type            Interrupt
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0020  1x 32 bytes
>         bInterval               2
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x04  EP 4 OUT
>         bmAttributes            3
>           Transfer Type            Interrupt
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0020  1x 32 bytes
>         bInterval               4
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x85  EP 5 IN
>         bmAttributes            3
>           Transfer Type            Interrupt
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0020  1x 32 bytes
>         bInterval              64
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x05  EP 5 OUT
>         bmAttributes            3
>           Transfer Type            Interrupt
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0020  1x 32 bytes
>         bInterval              16
>     Interface Descriptor:
>       bLength                 9
>       bDescriptorType         4
>       bInterfaceNumber        2
>       bAlternateSetting       0
>       bNumEndpoints           1
>       bInterfaceClass       255 Vendor Specific Class
>       bInterfaceSubClass     93
>       bInterfaceProtocol      2
>       iInterface              0
>       ** UNRECOGNIZED:  09 21 00 01 01 22 86 07 00
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x86  EP 6 IN
>         bmAttributes            3
>           Transfer Type            Interrupt
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0020  1x 32 bytes
>         bInterval              16
>     Interface Descriptor:
>       bLength                 9
>       bDescriptorType         4
>       bInterfaceNumber        3
>       bAlternateSetting       0
>       bNumEndpoints           0
>       bInterfaceClass       255 Vendor Specific Class
>       bInterfaceSubClass    253
>       bInterfaceProtocol     19
>       iInterface              4
>       ** UNRECOGNIZED:  06 41 00 01 01 03
> Device Status:     0x0002
>   (Bus Powered)
>   Remote Wakeup Enabled
>
> If I modprobe the driver with the added info, it segfaults.
>
> Here is the output from /proc/bus/input/devices after I modprobe the
> driver:
>
> I: Bus=0003 Vendor=0738 Product=4740 Version=3120
> N: Name="Mad Catz Beat Pad"
> P: Phys=usb-0000:00:1d.0-1/input0
> S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.0/input/input10
> U: Uniq=
> H: Handlers=event10
> B: EV=3
> B: KEY=81b0000 40000f 0 0 0 0 0 0 0 0
>
> I: Bus=0003 Vendor=0738 Product=4740 Version=3120
> N: Name="Mad Catz Beat Pad"
> P: Phys=usb-0000:00:1d.0-1/input0
> S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.1/input/input11
> U: Uniq=
> H: Handlers=event11
> B: EV=3
> B: KEY=81b0000 40000f 0 0 0 0 0 0 0 0
>
> I: Bus=0003 Vendor=0738 Product=4740 Version=3120
> N: Name="Mad Catz Beat Pad"
> P: Phys=usb-0000:00:1d.0-1/input0
> S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.2/input/input12
> U: Uniq=
> H: Handlers=event12
> B: EV=3
> B: KEY=81b0000 40000f 0 0 0 0 0 0 0 0
>
> Here is the OOPS info from the fault:
>
> [ 1821.884921] input: Mad Catz Beat Pad
> as /devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.0/input/input10
> [ 1821.912849] input: Mad Catz Beat Pad
> as /devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.1/input/input11
> [ 1821.928805] input: Mad Catz Beat Pad
> as /devices/pci0000:00/0000:00:1d.0/usb1/1-1/1-1:1.2/input/input12
> [ 1821.944820] BUG: unable to handle kernel NULL pointer dereference at
> virtual address 00000006
> [ 1821.944827] printing eip: f8f60a5c *pde = 00000000
> [ 1821.944832] Oops: 0000 [#1] SMP
> [ 1821.944836] Modules linked in: xpad snd_rtctimer binfmt_misc af_packet
> pktcdvd i915 drm ppdev ipv6 acpi_cpufreq cpufreq_stats cpufreq_conservative
> cpufreq_powersave cpufreq_userspace cpufreq_ondemand
>  freq_table container dock sbs sbshc iptable_filter ip_tables x_tables
> aes_i586 dm_crypt dm_mod berry_charge parport_pc lp parport acerhk usbhid
> hid arc4 ecb blkcipher joydev pcmcia snd_hda_intel snd_pc
> m_oss snd_mixer_oss snd_pcm snd_page_alloc snd_hwdep battery snd_seq_dummy
> iwl3945 ac iwlwifi_mac80211 cfg80211 snd_seq_oss sdhci video output
> tifm_7xx1 snd_seq_midi snd_rawmidi mmc_core tifm_core yenta
> _socket rsrc_nonstatic pcmcia_core snd_seq_midi_event snd_seq snd_timer
> snd_seq_device button snd iTCO_wdt iTCO_vendor_support psmouse soundcore
> serio_raw intel_agp agpgart acer_acpi led_class evdev pcs
> pkr shpchp pci_hotplug wmi_acer ext3 jbd mbcache sg sr_mod cdrom sd_mod
> pata_acpi ata_piix ata_generic libata scsi_mod ehci_hcd r8169 uhci_hcd
> usbcore thermal processor fan fuse
> [ 1821.944908]
> [ 1821.944911] Pid: 23723, comm: modprobe Not tainted (2.6.24-11-generic
> #1) [ 1821.944914] EIP: 0060:[<f8f60a5c>] EFLAGS: 00010286 CPU: 1
> [ 1821.944921] EIP is at xpad_probe+0x23c/0x4b0 [xpad]
> [ 1821.944923] EAX: 00000000 EBX: ef67d214 ECX: f74f0080 EDX: 00000002
> [ 1821.944926] ESI: 00000016 EDI: f71ef000 EBP: f066d400 ESP: ea8adda8
> [ 1821.944928]  DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
> [ 1821.944932] Process modprobe (pid: 23723, ti=ea8ac000 task=eff49680
> task.ti=ea8ac000)
> [ 1821.944934] Stack: ef67d214 00000041 f8f60fe3 f7d1ace4 f066d404 ef81761c
> ef817600 01f625a4
> [ 1821.944941]        ef67d200 f8f625a4 ef817600 f8f625a4 ef817600 f8f62480
> f066d400 f88a15a9
> [ 1821.944948]        00000000 ef81761c ef817694 00000000 ef81761c 00000000
> f8f624b4 f88ba500
> [ 1821.944954] Call Trace:
> [ 1821.944970]  [<f88a15a9>] usb_probe_interface+0xb9/0x140 [usbcore]
> [ 1821.945007]  [<c027ea28>] driver_probe_device+0x88/0x190
> [ 1821.945022]  [<c027ec9e>] __driver_attach+0x9e/0xa0
> [ 1821.945032]  [<c027de5b>] bus_for_each_dev+0x3b/0x60
> [ 1821.945044]  [<c027e8a6>] driver_attach+0x16/0x20
> [ 1821.945048]  [<c027ec00>] __driver_attach+0x0/0xa0
> [ 1821.945052]  [<c027e1da>] bus_add_driver+0x8a/0x1e0
> [ 1821.945064]  [<f88a10ee>] usb_register_driver+0x8e/0x110 [usbcore]
> [ 1821.945096]  [<f8a49018>] usb_xpad_init+0x18/0x39 [xpad]
> [ 1821.945100]  [<c0146547>] blocking_notifier_call_chain+0x17/0x20
> [ 1821.945110]  [<c01516c6>] sys_init_module+0x126/0x19c0
> [ 1821.945151]  [<c01053c2>] sysenter_past_esp+0x6b/0xa9
> [ 1821.945169]  =======================
> [ 1821.945170] Code: 00 98 f0 0f ab 47 1c 83 c2 01 0f b7 84 12 ec 0e f6 f8
> 66 85 c0 79 ea 8b 54 24 18 8b 42 04 8b 54 24 20 8b 40 0c 8b 4a 0c 8b 55 00
> <0f> b6 70 06 0f b6 40 02 c1 e2 08 c1 e0 0f 09 c2 8b 44 24 20 81
> [ 1821.945204] EIP: [<f8f60a5c>] xpad_probe+0x23c/0x4b0 [xpad] SS:ESP
> 0068:ea8adda8
> [ 1821.945211] ---[ end trace 4b99b6c629b69949 ]---
>
> I have tried this on two different systems with two different kernels. This
> system is Hardy Heron (latest development release from Ubuntu) running
> kernel 2.6.24. I also tried it on my wifes system, which is Gutsy Gibbon
> (7.10 Ubuntu) running kernel 2.6.22. Both exhibit the same problem.
>
> If I do not apply the patch, the controller is not picked up. Is there some
> default thing I can test here?
>
> If only apply "{ 0x0738, 0x4740, "Mad Catz Beat Pad", GAMEPAD_XBOX_MAT },",
> then it is still not picked up.
>
> Anything you can do to assist would be greatly appreciated.
>
> Also, it appears as though this driver is not updated into later kernels.
> The default in 2.6.24 is version 0.0.6 where it should be 0.1.7 (seeing as
> it's been 9 months since that version was released). Do you pass this along
> to upstream kernel?
>
> I've attmpted to isolate exactly where in the code it fails. After some
> further debugging, i'vediscovered that it succesfully gets input 10, 11 and
> 12 (3 successive calls to xpad_probe), it then attmpts to get the next
> input and fails (this is the fourth call to xpad_probe).
>
> It crashes here in the code:
>
>         usb_fill_int_urb(xpad->irq_in, udev,
>                          usb_rcvintpipe(udev, ep_irq_in->bEndpointAddress),
>                          xpad->idata, XPAD_PKT_LEN, xpad_irq_in,
>                          xpad, ep_irq_in->bInterval);
>
> I'm not sure I can offer any additional assistance, as I am not familiar
> with the code nor the intent, only that for some reason this causes a NULL
> reference and crashes the kernel, but only on the fourth iteration. Perhaps
> one of the parameters to the call to usb_fill_int_urb is being passed a
> NULL or some other invalid value causing usb_int_fill_urb to fail.
>
> I am willing to assist further in debugging, just let me know what to test.
>
> Cheers,
>
> Rod.



-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Xbox-linux-devel mailing list
Xbox-linux-devel@list...
https://lists.sourceforge.net/lists/listinfo/xbox-linux-devel

Bookmark with:

Delicious   Digg   reddit   Facebook   StumbleUpon

Related Messages

opensubscriber is not affiliated with the authors of this message nor responsible for its content.