2015-09-29 16:38:22

by Pascal Huerst

[permalink] [raw]
Subject: rt2x00: Firmware loading vs. udev rules

Hey Stanislaw, all,

on rt2x00 devices, firmware gets loaded in:

int rt2x00lib_start(struct rt2x00_dev *rt2x00dev)

which is called, when we start the interface by:

ifconfig wlan0 up

I need to lower tx power of the device and created a udev rule for that:

KERNEL=="wlan0", RUN+="/usr/sbin/iw dev wlan0 set txpower fixed 1800"

Obviously this does not work, since the firmware is not loaded, yet.

Is there a reason, why the firmware is loaded so late and not earlier in
probe or so?
Can this be done in any other proper way I don't know about?
I think the device should be ready for any operation, when the udev rule
triggers, right?

regards
Pascal


2015-10-02 08:45:08

by Stanislaw Gruszka

[permalink] [raw]
Subject: Re: rt2x00: Firmware loading vs. udev rules

Hi

On Tue, Sep 29, 2015 at 06:38:19PM +0200, Pascal Huerst wrote:
> on rt2x00 devices, firmware gets loaded in:
>
> int rt2x00lib_start(struct rt2x00_dev *rt2x00dev)
>
> which is called, when we start the interface by:
>
> ifconfig wlan0 up
>
> I need to lower tx power of the device and created a udev rule for that:
>
> KERNEL=="wlan0", RUN+="/usr/sbin/iw dev wlan0 set txpower fixed 1800"
>
> Obviously this does not work, since the firmware is not loaded, yet.

Well, I don't think it will work even when you do this after firmware
load due to issue on __ieee80211_recalc_txpower(), which do not work
for drivers that don't use channel context. Command may finish without
an error but tx power setting in driver will not be changed.

> Is there a reason, why the firmware is loaded so late and not earlier in
> probe or so?

Don't enable things that are not used.

> Can this be done in any other proper way I don't know about?
> I think the device should be ready for any operation, when the udev rule
> triggers, right?

Assuming channel context issue will be fixed, you can add script to
/etc/NetworkManager/dispatcher.d/ or on older system
use one of /etc/sysconfig/network-scripts scripts. I think systemd also
allow you to add a custom service, which can be triggered on network
start.

Stanislaw