> This is exactly what I meant. There's no reason to store it in the

> at86rf230_local struct though, since it's only ever used in
> at86rf230_probe().


Yes, you are right. I will change that and add a comment to platform_data field.


While the basic function works with this patch for my rpi, I got an
additional problem. When sniffing a ZigBee network the driver stops
working after receiving a random (but small) number of non broadcast
packets.

I was able to trace this down to the interrupt handling of the driver.
In at86rf230_isr() the interrupt is disabled at the first line of the
function and gets enabled again in at86rf230_irqwork() after processing
the interrupt (which includes reading the whole received frame from the
radio chip). Because of this the driver is blind to new interrupts while
processing an received frame, and because the rf230 resets its interrupt
line only after we read its interrupt status register the driver stops
working if a new interrupt is generated in this time frame.

Attaching a scope to the interrupt line, watching the last interrupts
before the driver stops working, one can see up to three interrupts for
each packet. The first one is the RX_START interrupt, 500us after this
the AMI (Adress Match Indication) interrupt is generated and only about
25us after this interrupt is handled (interrupt line goes down) the
TRX_END interrupt follows. If the driver miss this interrupt the rf230
doesn't reset its interrupt line and the driver can't detect any new
interrupt. (http://defekt.int.nvbi.de/sascha/rf230_stale_irq.JPG)

For my setup I was able to resolve this problem by completely removing
the disabling / enabling of the interrupt in the driver. As far as I can
see it, disabling the interrupt doesn't make any sense for edge
triggered interrupts. Are there any platforms, that will retrigger the
interrupt, while the interrupt line is high, so that it is necessary to
disable the interrupt while handling it? Or was the assumption, that the
rf230 would automatically reset its interrupt line?

At the moment I am not sure what would be the right solution here. I
think removing the calls to disable / enable the irq would do the trick,
but I don't know if it breaks some other setups :(

Thanks,
Sascha



------------------------------------------------------------------------------
Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013 
and get the hardware for free! Learn more.
http://p.sf.net/sfu/sophos-d2d-feb
_______________________________________________
Linux-zigbee-devel mailing list
Linux-zigbee-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-zigbee-devel

Reply via email to