On 03/24/2013 09:40 AM, Stefan Schmidt wrote: > Implement the filter function to update short address, pan id and ieee > address on change. Allowing for hardware address filtering needed for > auto ACK. > > Signed-off-by: Stefan Schmidt <ste...@datenfreihafen.org> > --- > drivers/net/ieee802154/at86rf230.c | 45 > ++++++++++++++++++++++++++++++++++++ > 1 file changed, 45 insertions(+) > > diff --git a/drivers/net/ieee802154/at86rf230.c > b/drivers/net/ieee802154/at86rf230.c > index fc1687e..10e79a4 100644 > --- a/drivers/net/ieee802154/at86rf230.c > +++ b/drivers/net/ieee802154/at86rf230.c > @@ -619,6 +619,50 @@ err: > return -EINVAL; > } > > +static int > +at86rf230_set_hw_addr_filt(struct ieee802154_dev *dev, > + struct ieee802154_hw_addr_filt > *filt, > + unsigned long changed) > +{ > + struct at86rf230_local *lp = dev->priv; > + > + might_sleep();
There's nothing in this function that _explicitly_ sleeps. The SPI functions will sleep, but those functions will themselves call might_sleep(), so I don't think it's appropriate to do here. > + > + if (changed & IEEE802515_AFILT_SADDR_CHANGED) { > + dev_info(&lp->spi->dev, "at86rf230_set_hw_addr_filt called for > saddr\n"); > + __at86rf230_write(lp, RG_SHORT_ADDR_0, filt->short_addr & > 0xff); /* LSB */ > + __at86rf230_write(lp, RG_SHORT_ADDR_1, (filt->short_addr >> 8) > & 0xff); /* MSB */ > + } > + > + if (changed & IEEE802515_AFILT_PANID_CHANGED) { > + dev_info(&lp->spi->dev, "at86rf230_set_hw_addr_filt called for > pan id\n"); > + __at86rf230_write(lp, RG_PAN_ID_0, filt->pan_id & 0xff); /* LSB > */ > + __at86rf230_write(lp, RG_PAN_ID_1, (filt->pan_id >> 8) & 0xff); > /* MSB */ > + } > + > + if (changed & IEEE802515_AFILT_IEEEADDR_CHANGED) { > + dev_info(&lp->spi->dev, "at86rf230_set_hw_addr_filt called ieee > addr\n"); > + at86rf230_write_subreg(lp, SR_IEEE_ADDR_0, filt->ieee_addr[7]); > + at86rf230_write_subreg(lp, SR_IEEE_ADDR_1, filt->ieee_addr[6]); > + at86rf230_write_subreg(lp, SR_IEEE_ADDR_2, filt->ieee_addr[5]); > + at86rf230_write_subreg(lp, SR_IEEE_ADDR_3, filt->ieee_addr[4]); > + at86rf230_write_subreg(lp, SR_IEEE_ADDR_4, filt->ieee_addr[3]); > + at86rf230_write_subreg(lp, SR_IEEE_ADDR_5, filt->ieee_addr[2]); > + at86rf230_write_subreg(lp, SR_IEEE_ADDR_6, filt->ieee_addr[1]); > + at86rf230_write_subreg(lp, SR_IEEE_ADDR_7, filt->ieee_addr[0]); > + } > + > + if (changed & IEEE802515_AFILT_PANC_CHANGED) { > + dev_info(&lp->spi->dev, "at86rf230_set_hw_addr_filt called panc > change\n"); > + if (filt->pan_coord) > + at86rf230_write_subreg(lp, SR_AACK_I_AM_COORD, 1); > + else > + at86rf230_write_subreg(lp, SR_AACK_I_AM_COORD, 0); > + } > + > + return 0; > +} Some of those lines break the 80 column rule. You might get away with it. It's up to you if you want to try. > + > static struct ieee802154_ops at86rf230_ops = { > .owner = THIS_MODULE, > .xmit = at86rf230_xmit, > @@ -626,6 +670,7 @@ static struct ieee802154_ops at86rf230_ops = { > .set_channel = at86rf230_channel, > .start = at86rf230_start, > .stop = at86rf230_stop, > + .set_hw_addr_filt = at86rf230_set_hw_addr_filt, > }; > > static void at86rf230_irqwork(struct work_struct *work) ------------------------------------------------------------------------------ Everyone hates slow websites. So do we. Make your web apps faster with AppDynamics Download AppDynamics Lite for free today: http://p.sf.net/sfu/appdyn_d2d_mar _______________________________________________ Linux-zigbee-devel mailing list Linux-zigbee-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-zigbee-devel