📄 sm_drv_sysfs_umac.c
字号:
/* * src/sm_drv_sysfs_umac.c * * * Copyright (C) 2004, 2005, 2006 Nokia Corporation * Author: Samuel Ortiz <samuel.ortiz@nokia.com> * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * */#include <linux/platform_device.h>#include "sm_drv.h"#include "sm_drv_ioctl.h"#include "sm_drv_pda.h"#include "sm_drv_sysfs.h"unsigned int driver_type = SM_DRIVER_TYPE_UMAC;static ssize_t sm_drv_show_signal_quality(struct device *dev, struct device_attribute *attr, char *buf){ struct net_device * net_dev; struct net_local *lp; uint32_t quality, noise_floor; struct obj_bss bss; net_dev = (struct net_device *)dev_get_drvdata(dev); lp = net_dev->priv; sm_drv_oid_get(net_dev, DOT11_OID_NOISEFLOOR, (void*)&noise_floor, sizeof(uint32_t)); /* copy this MAC to the bss */ bss.ext = lp->ext; memcpy(bss.address, lp->ap_mac_address, ETH_ALEN); /* now ask for the corresponding bss */ sm_drv_oid_get(net_dev, DOT11_OID_BSSFIND, (void *)&bss, sizeof(struct obj_bss)); /* report the rssi and use it to calculate * link quality through a signal-noise * ratio */ quality = bss.rssi - noise_floor; printk("Quality: %d\n", quality); return sprintf(buf, "%d\n", quality);}static ssize_t sm_drv_show_rssi(struct device *dev, struct device_attribute *attr, char *buf){ struct net_device * net_dev; struct net_local *lp; uint32_t rssi, noise_floor; struct obj_bss bss; net_dev = (struct net_device *)dev_get_drvdata(dev); lp = net_dev->priv; sm_drv_oid_get(net_dev, DOT11_OID_NOISEFLOOR, (void*)&noise_floor, sizeof(uint32_t)); /* copy this MAC to the bss */ bss.ext = lp->ext; memcpy(bss.address, lp->ap_mac_address, ETH_ALEN); /* now ask for the corresponding bss */ sm_drv_oid_get(net_dev, DOT11_OID_BSSFIND, (void *)&bss, sizeof(struct obj_bss)); /* report the rssi and use it to calculate * link quality through a signal-noise * ratio */ rssi = bss.rssi; return sprintf(buf, "%d\n", rssi);}static ssize_t sm_drv_store_psm(struct device *dev, struct device_attribute *attr, const char *buf, size_t count){ uint32_t psm = simple_strtol(buf, NULL, 0); if (psm < DOT11_PSM_ACTIVE || psm > DOT11_PSM_POWERSAVE) return 0; if (sm_drv_oid_set((struct net_device *)dev_get_drvdata(dev), DOT11_OID_PSM, (void *)&psm, sizeof(uint32_t)) < 0) return 0; return count;}static ssize_t sm_drv_show_psm(struct device *dev, struct device_attribute *attr, char *buf){ uint32_t psm; if (sm_drv_oid_get((struct net_device *)dev_get_drvdata(dev), DOT11_OID_PSM, (void *)&psm, sizeof(uint32_t)) < 0) return 0; return sprintf(buf, "%d\n", psm);}static DEVICE_ATTR(psm, S_IRUGO | S_IWUGO, sm_drv_show_psm, sm_drv_store_psm);static DEVICE_ATTR(signal_quality, S_IRUGO | S_IWUSR, sm_drv_show_signal_quality, NULL);static DEVICE_ATTR(rssi, S_IRUGO | S_IWUSR, sm_drv_show_rssi, NULL);extern struct platform_device wlan_omap_device;int sm_drv_sysfs_umac_create_files(void){ device_create_file(&(wlan_omap_device.dev), &dev_attr_psm); device_create_file(&(wlan_omap_device.dev), &dev_attr_signal_quality); device_create_file(&(wlan_omap_device.dev), &dev_attr_rssi); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -