Merge remote-tracking branch 'staging/staging-next'
[deliverable/linux.git] / drivers / staging / rtl8188eu / core / rtw_debug.c
CommitLineData
06a05884
LF
1/******************************************************************************
2 *
3 * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of version 2 of the GNU General Public License as
7 * published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
06a05884
LF
14 ******************************************************************************/
15#define _RTW_DEBUG_C_
16
17#include <rtw_debug.h>
e73fd15e 18#include <usb_ops_linux.h>
06a05884
LF
19
20int proc_get_drv_version(char *page, char **start,
21 off_t offset, int count,
22 int *eof, void *data)
23{
24 int len = 0;
25
26 len += snprintf(page + len, count - len, "%s\n", DRIVERVERSION);
27
28 *eof = 1;
29 return len;
30}
31
32int proc_get_write_reg(char *page, char **start,
33 off_t offset, int count,
34 int *eof, void *data)
35{
36 *eof = 1;
37 return 0;
38}
39
40int proc_set_write_reg(struct file *file, const char __user *buffer,
41 unsigned long count, void *data)
42{
60c89911 43 struct net_device *dev = data;
06a05884
LF
44 struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
45 char tmp[32];
46 u32 addr, val, len;
47
48 if (count < 3) {
49 DBG_88E("argument size is less than 3\n");
50 return -EFAULT;
51 }
52
53 if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
54 int num = sscanf(tmp, "%x %x %x", &addr, &val, &len);
55
56 if (num != 3) {
57 DBG_88E("invalid write_reg parameter!\n");
58 return count;
59 }
60 switch (len) {
61 case 1:
e76484d0 62 usb_write8(padapter, addr, (u8)val);
06a05884
LF
63 break;
64 case 2:
9764ed04 65 usb_write16(padapter, addr, (u16)val);
06a05884
LF
66 break;
67 case 4:
fc158079 68 usb_write32(padapter, addr, val);
06a05884
LF
69 break;
70 default:
71 DBG_88E("error write length =%d", len);
72 break;
73 }
74 }
75 return count;
76}
77
78static u32 proc_get_read_addr = 0xeeeeeeee;
79static u32 proc_get_read_len = 0x4;
80
81int proc_get_read_reg(char *page, char **start,
82 off_t offset, int count,
83 int *eof, void *data)
84{
85 struct net_device *dev = data;
86 struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
87
88 int len = 0;
89
90 if (proc_get_read_addr == 0xeeeeeeee) {
91 *eof = 1;
92 return len;
93 }
94
95 switch (proc_get_read_len) {
96 case 1:
c7b2e995 97 len += snprintf(page + len, count - len, "usb_read8(0x%x)=0x%x\n", proc_get_read_addr, usb_read8(padapter, proc_get_read_addr));
06a05884
LF
98 break;
99 case 2:
551a3972 100 len += snprintf(page + len, count - len, "usb_read16(0x%x)=0x%x\n", proc_get_read_addr, usb_read16(padapter, proc_get_read_addr));
06a05884
LF
101 break;
102 case 4:
99ecfb06 103 len += snprintf(page + len, count - len, "usb_read32(0x%x)=0x%x\n", proc_get_read_addr, usb_read32(padapter, proc_get_read_addr));
06a05884
LF
104 break;
105 default:
106 len += snprintf(page + len, count - len, "error read length=%d\n", proc_get_read_len);
107 break;
108 }
109
110 *eof = 1;
111 return len;
112}
113
114int proc_set_read_reg(struct file *file, const char __user *buffer,
115 unsigned long count, void *data)
116{
117 char tmp[16];
118 u32 addr, len;
119
120 if (count < 2) {
121 DBG_88E("argument size is less than 2\n");
122 return -EFAULT;
123 }
124
125 if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
126 int num = sscanf(tmp, "%x %x", &addr, &len);
127
128 if (num != 2) {
129 DBG_88E("invalid read_reg parameter!\n");
130 return count;
131 }
132
133 proc_get_read_addr = addr;
134
135 proc_get_read_len = len;
136 }
137
138 return count;
139}
140
06a05884
LF
141int proc_get_adapter_state(char *page, char **start,
142 off_t offset, int count,
143 int *eof, void *data)
144{
145 struct net_device *dev = data;
146 struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
147 int len = 0;
148
149 len += snprintf(page + len, count - len, "bSurpriseRemoved=%d, bDriverStopped=%d\n",
150 padapter->bSurpriseRemoved, padapter->bDriverStopped);
151
152 *eof = 1;
153 return len;
154}
155
06a05884
LF
156int proc_get_best_channel(char *page, char **start,
157 off_t offset, int count,
158 int *eof, void *data)
159{
160 struct net_device *dev = data;
161 struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
162 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
163 int len = 0;
164 u32 i, best_channel_24G = 1, best_channel_5G = 36, index_24G = 0, index_5G = 0;
165
166 for (i = 0; pmlmeext->channel_set[i].ChannelNum != 0; i++) {
167 if (pmlmeext->channel_set[i].ChannelNum == 1)
168 index_24G = i;
169 if (pmlmeext->channel_set[i].ChannelNum == 36)
170 index_5G = i;
171 }
172
173 for (i = 0; pmlmeext->channel_set[i].ChannelNum != 0; i++) {
174 /* 2.4G */
175 if (pmlmeext->channel_set[i].ChannelNum == 6) {
176 if (pmlmeext->channel_set[i].rx_count < pmlmeext->channel_set[index_24G].rx_count) {
177 index_24G = i;
178 best_channel_24G = pmlmeext->channel_set[i].ChannelNum;
179 }
180 }
181
182 /* 5G */
183 if (pmlmeext->channel_set[i].ChannelNum >= 36 &&
184 pmlmeext->channel_set[i].ChannelNum < 140) {
4e0fa71c 185 /* Find primary channel */
06a05884
LF
186 if (((pmlmeext->channel_set[i].ChannelNum - 36) % 8 == 0) &&
187 (pmlmeext->channel_set[i].rx_count < pmlmeext->channel_set[index_5G].rx_count)) {
188 index_5G = i;
189 best_channel_5G = pmlmeext->channel_set[i].ChannelNum;
190 }
191 }
192
193 if (pmlmeext->channel_set[i].ChannelNum >= 149 &&
194 pmlmeext->channel_set[i].ChannelNum < 165) {
4e0fa71c 195 /* find primary channel */
06a05884
LF
196 if (((pmlmeext->channel_set[i].ChannelNum - 149) % 8 == 0) &&
197 (pmlmeext->channel_set[i].rx_count < pmlmeext->channel_set[index_5G].rx_count)) {
198 index_5G = i;
199 best_channel_5G = pmlmeext->channel_set[i].ChannelNum;
200 }
201 }
202 /* debug */
203 len += snprintf(page + len, count - len, "The rx cnt of channel %3d = %d\n",
204 pmlmeext->channel_set[i].ChannelNum, pmlmeext->channel_set[i].rx_count);
205 }
206
207 len += snprintf(page + len, count - len, "best_channel_5G = %d\n", best_channel_5G);
208 len += snprintf(page + len, count - len, "best_channel_24G = %d\n", best_channel_24G);
209
210 *eof = 1;
211 return len;
212}
This page took 0.404247 seconds and 5 git commands to generate.