1 // SPDX-License-Identifier: GPL-2.0
2 /******************************************************************************
4 * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
6 ******************************************************************************/
10 #include <usb_ops_linux.h>
12 int proc_get_drv_version(char *page, char **start,
13 off_t offset, int count,
18 len += snprintf(page + len, count - len, "%s\n", DRIVERVERSION);
24 int proc_get_write_reg(char *page, char **start,
25 off_t offset, int count,
32 int proc_set_write_reg(struct file *file, const char __user *buffer,
33 unsigned long count, void *data)
35 struct net_device *dev = data;
36 struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
41 DBG_88E("argument size is less than 3\n");
45 if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
46 int num = sscanf(tmp, "%x %x %x", &addr, &val, &len);
49 DBG_88E("invalid write_reg parameter!\n");
54 usb_write8(padapter, addr, (u8)val);
57 usb_write16(padapter, addr, (u16)val);
60 usb_write32(padapter, addr, val);
63 DBG_88E("error write length =%d", len);
70 static u32 proc_get_read_addr = 0xeeeeeeee;
71 static u32 proc_get_read_len = 0x4;
73 int proc_get_read_reg(char *page, char **start,
74 off_t offset, int count,
77 struct net_device *dev = data;
78 struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
82 if (proc_get_read_addr == 0xeeeeeeee) {
87 switch (proc_get_read_len) {
89 len += snprintf(page + len, count - len, "usb_read8(0x%x)=0x%x\n", proc_get_read_addr, usb_read8(padapter, proc_get_read_addr));
92 len += snprintf(page + len, count - len, "usb_read16(0x%x)=0x%x\n", proc_get_read_addr, usb_read16(padapter, proc_get_read_addr));
95 len += snprintf(page + len, count - len, "usb_read32(0x%x)=0x%x\n", proc_get_read_addr, usb_read32(padapter, proc_get_read_addr));
98 len += snprintf(page + len, count - len, "error read length=%d\n", proc_get_read_len);
106 int proc_set_read_reg(struct file *file, const char __user *buffer,
107 unsigned long count, void *data)
113 DBG_88E("argument size is less than 2\n");
117 if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
118 int num = sscanf(tmp, "%x %x", &addr, &len);
121 DBG_88E("invalid read_reg parameter!\n");
125 proc_get_read_addr = addr;
127 proc_get_read_len = len;
133 int proc_get_adapter_state(char *page, char **start,
134 off_t offset, int count,
135 int *eof, void *data)
137 struct net_device *dev = data;
138 struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
141 len += snprintf(page + len, count - len, "bSurpriseRemoved=%d, bDriverStopped=%d\n",
142 padapter->bSurpriseRemoved, padapter->bDriverStopped);
148 int proc_get_best_channel(char *page, char **start,
149 off_t offset, int count,
150 int *eof, void *data)
152 struct net_device *dev = data;
153 struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
154 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
156 u32 i, best_channel_24G = 1, best_channel_5G = 36, index_24G = 0, index_5G = 0;
158 for (i = 0; pmlmeext->channel_set[i].ChannelNum != 0; i++) {
159 if (pmlmeext->channel_set[i].ChannelNum == 1)
161 if (pmlmeext->channel_set[i].ChannelNum == 36)
165 for (i = 0; pmlmeext->channel_set[i].ChannelNum != 0; i++) {
167 if (pmlmeext->channel_set[i].ChannelNum == 6) {
168 if (pmlmeext->channel_set[i].rx_count < pmlmeext->channel_set[index_24G].rx_count) {
170 best_channel_24G = pmlmeext->channel_set[i].ChannelNum;
175 if (pmlmeext->channel_set[i].ChannelNum >= 36 &&
176 pmlmeext->channel_set[i].ChannelNum < 140) {
177 /* Find primary channel */
178 if (((pmlmeext->channel_set[i].ChannelNum - 36) % 8 == 0) &&
179 (pmlmeext->channel_set[i].rx_count < pmlmeext->channel_set[index_5G].rx_count)) {
181 best_channel_5G = pmlmeext->channel_set[i].ChannelNum;
185 if (pmlmeext->channel_set[i].ChannelNum >= 149 &&
186 pmlmeext->channel_set[i].ChannelNum < 165) {
187 /* find primary channel */
188 if (((pmlmeext->channel_set[i].ChannelNum - 149) % 8 == 0) &&
189 (pmlmeext->channel_set[i].rx_count < pmlmeext->channel_set[index_5G].rx_count)) {
191 best_channel_5G = pmlmeext->channel_set[i].ChannelNum;
195 len += snprintf(page + len, count - len, "The rx cnt of channel %3d = %d\n",
196 pmlmeext->channel_set[i].ChannelNum, pmlmeext->channel_set[i].rx_count);
199 len += snprintf(page + len, count - len, "best_channel_5G = %d\n", best_channel_5G);
200 len += snprintf(page + len, count - len, "best_channel_24G = %d\n", best_channel_24G);