Am Mittwoch, 15. Juni 2005 03:02 schrieb Wakko Warner:
> Here's my modified int_callback:
> static void int_callback(struct urb *u, struct pt_regs *regs)
> {
> struct kaweth_device *kaweth = u->context;
> int act_state;
>
> printk(KERN_INFO "kaweth: begin callback\n");
> printk(KERN_INFO "kaweth: u->status: %d\n", u->status);
> switch (u->status) {
> case 0: /* success */
> break;
> case -ECONNRESET: /* unlink */
> case -ENOENT:
> case -ESHUTDOWN:
> return;
> /* -EPIPE: should clear the halt */
> default: /* error */
> goto resubmit;
> }
>
> /* we check the link state to report changes */
> if (kaweth->linkstate != (act_state = (
> kaweth->intbuffer[STATE_OFFSET]
> printk(KERN_INFO "kaweth: Link state change. kaweth->linkstate: %d act_state:
> kaweth->linkstate, act_state);
> if (!act_state) {
> printk(KERN_INFO "kaweth: netif_carrier_on\n");
> netif_carrier_on(kaweth->net);
> } else {
> printk(KERN_INFO "kaweth: netif_carrier_off\n");
> netif_carrier_off(kaweth->net);
> }
>
> kaweth->linkstate = act_state;
> printk(KERN_INFO "kaweth: new link state: %d\n", act_state);
> }
> resubmit:
> kaweth_resubmit_int_urb(kaweth, GFP_ATOMIC);
> printk(KERN_INFO "kaweth: end callback\n");
> }
Very well.
> Results (after ifconfig up, ethernet cable was plugged in at the time):
> Jun 14 20:50:25 gonzales kernel: [80756.691742] kaweth: begin callback
> Jun 14 20:50:25 gonzales kernel: [80756.691754] kaweth: u->status: 0
> Jun 14 20:50:25 gonzales kernel: [80756.691759] kaweth: Link state change.
> kaweth->linkstate: 0 act_state: 2
> Jun 14 20:50:25 gonzales kernel: [80756.691764] kaweth: netif_carrier_off
OK, that should not happen.
Could you remove the "!" at 'if (!act_state) {' and retest?
The documentation I got says that it should be there, but who knows
how accurate it is for all devices.
> Jun 14 20:50:25 gonzales kernel: [80756.691769] kaweth: new link state: 2
> Jun 14 20:50:25 gonzales kernel: [80756.691776] kaweth: end callback
>
> the next thing was:
> Jun 14 20:50:25 gonzales kernel: [80756.819793] kaweth: begin callback
> Jun 14 20:50:25 gonzales kernel: [80756.819800] kaweth: u->status: 0
> Jun 14 20:50:25 gonzales kernel: [80756.819807] kaweth: end callback
> many times, last occurence:
> Jun 14 20:50:36 gonzales kernel: [80767.576134] kaweth: begin callback
> Jun 14 20:50:36 gonzales kernel: [80767.576143] kaweth: u->status: 0
> Jun 14 20:50:36 gonzales kernel: [80767.576157] kaweth: end callback
>
> then I ifconfig down since it was spewing that information:
> Jun 14 20:50:36 gonzales kernel: [80767.618157] kaweth: begin callback
> Jun 14 20:50:36 gonzales kernel: [80767.618172] kaweth: u->status: -2
>
> I assume it didn't print the end since the status was -2 (not sure what -2 is)
Killing the URB due to ifconfig.
Thank you
Oliver
-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel