1

默认情况下,在 ath5k 中启用快速帧。(http://wireless.kernel.org/en/users/Drivers/ath5k)我找到了禁用它的宏

#define AR5K_EEPROM_FF_DIS(_v)      (((_v) >> 2) & 0x1

问题是我该怎么处理它?我是否将上面的行替换为

#define AR5K_EEPROM_FF_DIS(_v)  1

?

我是否通过一些参数编译它?

位移表达式使我感到困惑。是_v变量吗?

关于如何在驱动程序中处理此类宏的问题更为笼统。我也在其他代码中看到过它们,并且总是感到困惑。

4

2 回答 2

0

好的,我试着用一个简化的例子来解释

#include <stdio.h>

/* Just for print in binary mode */
char *chartobin(unsigned char c)
{
    static char a[9];
    int i;

    for (i = 0; i < 8; i++)
          a[7 - i] = (c & (1 << i)) == (1 << i) ? '1' : '0';
    a[8] = '\0';
    return a;
}

int main(void)
{
    unsigned char u = 0xf;

    printf("%s\n", chartobin(u)); 
    u >>= 2; // Shift bits 2 positions (to the right)
    printf("%s\n", chartobin(u));       
    printf("%s\n", chartobin(u & 0x1)); // Check if the last bit is on

    return 0;
}

输出:

00001111
00000011
00000001

我用 替换上面的行#define AR5K_EEPROM_FF_DIS(_v) 1吗?

不!

如果你初始化u0xb不是0xf你得到:

00001011
00000010
00000000

如你看到的(((_v) >> 2) & 0x1 != 1

于 2013-08-07T09:46:14.073 回答
0

在 ath5k 上未启用或使用快速帧。这是一项允许卡一次发送多个帧的功能(将其视为 11n帧聚合的早期版本),该功能在 MadWiFi 及其专有驱动程序上实现,并且只能与也支持它的接入点一起使用。您所看到的在设备的 EEPROM 中存储了一个标志,该标志指示驱动程序是否可以使用快速帧,您引用的该宏仅检查该标志是否已设置。您可以修改头文件以始终返回 1 但这不会有任何区别,驱动程序从不使用该信息。

于 2015-04-30T21:38:55.737 回答