lantiq: Tune the XWAY subtarget cflags
[openwrt/openwrt.git] / package / platform / lantiq / ltq-hcd / src / ifxusb_ctl.c
1 /*****************************************************************************
2 ** FILE NAME : ifxusb_ctl.c
3 ** PROJECT : IFX USB sub-system V3
4 ** MODULES : IFX USB sub-system Host and Device driver
5 ** SRC VERSION : 1.0
6 ** SRC VERSION : 3.2
7 ** DATE : 1/Jan/2011
8 ** DESCRIPTION : Implementing the procfs and sysfs for IFX USB driver
9 ** FUNCTIONS :
10 ** COMPILER : gcc
11 ** REFERENCE : Synopsys DWC-OTG Driver 2.7
12 ** COPYRIGHT : Copyright (c) 2010
13 ** LANTIQ DEUTSCHLAND GMBH,
14 ** Am Campeon 3, 85579 Neubiberg, Germany
15 **
16 ** This program is free software; you can redistribute it and/or modify
17 ** it under the terms of the GNU General Public License as published by
18 ** the Free Software Foundation; either version 2 of the License, or
19 ** (at your option) any later version.
20 **
21 ** Version Control Section **
22 ** $Author$
23 ** $Date$
24 ** $Revisions$
25 ** $Log$ Revision history
26 *****************************************************************************/
27
28 /*
29 * This file contains code fragments from Synopsys HS OTG Linux Software Driver.
30 * For this code the following notice is applicable:
31 *
32 * ==========================================================================
33 *
34 * Synopsys HS OTG Linux Software Driver and documentation (hereinafter,
35 * "Software") is an Unsupported proprietary work of Synopsys, Inc. unless
36 * otherwise expressly agreed to in writing between Synopsys and you.
37 *
38 * The Software IS NOT an item of Licensed Software or Licensed Product under
39 * any End User Software License Agreement or Agreement for Licensed Product
40 * with Synopsys or any supplement thereto. You are permitted to use and
41 * redistribute this Software in source and binary forms, with or without
42 * modification, provided that redistributions of source code must retain this
43 * notice. You may not view, use, disclose, copy or distribute this file or
44 * any information contained herein except pursuant to this license grant from
45 * Synopsys. If you do not agree with this notice, including the disclaimer
46 * below, then you are not authorized to use the Software.
47 *
48 * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS
49 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
50 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
51 * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT,
52 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
53 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
54 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
55 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
56 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
57 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
58 * DAMAGE.
59 * ========================================================================== */
60
61 /*! \file ifxusb_ctl.c
62 \ingroup IFXUSB_DRIVER_V3
63 \brief Implementing the procfs and sysfs for IFX USB driver
64 */
65
66 #include <linux/version.h>
67 #include "ifxusb_version.h"
68
69
70 #include <linux/proc_fs.h>
71 #include <asm/byteorder.h>
72 #include <asm/unaligned.h>
73 #include <asm/uaccess.h>
74
75 #include "ifxusb_plat.h"
76 #include "ifxusb_regs.h"
77 #include "ifxusb_cif.h"
78
79 #ifdef __IS_DEVICE__
80 #include "ifxpcd.h"
81 #ifdef __GADGET_COC__
82 #include <asm/ifx/ifx_types.h>
83 #include <asm/ifx/ifx_pmcu.h>
84 IFX_PMCU_REGISTER_t pmcuRegisterUSBGadget;
85 #endif
86 #endif
87
88 #ifdef __IS_HOST__
89 #include "ifxhcd.h"
90 #ifdef __HOST_COC__
91 #include <asm/ifx/ifx_types.h>
92 #include <asm/ifx/ifx_pmcu.h>
93 #ifdef __IS_DUAL__
94 IFX_PMCU_REGISTER_t pmcuRegisterUSBHost_1;
95 IFX_PMCU_REGISTER_t pmcuRegisterUSBHost_2;
96 #else
97 IFX_PMCU_REGISTER_t pmcuRegisterUSBHost;
98 #endif
99 #endif
100 #endif
101
102 #include <linux/device.h>
103 #include <linux/platform_device.h>
104 #include <linux/gfp.h>
105
106 #ifdef __IS_HOST__
107 extern char ifxusb_hcd_driver_name[];
108
109 #ifdef __IS_DUAL__
110 extern ifxhcd_hcd_t ifxusb_hcd_1;
111 extern ifxhcd_hcd_t ifxusb_hcd_2;
112 extern char ifxusb_hcd_name_1[];
113 extern char ifxusb_hcd_name_2[];
114 #else
115 extern ifxhcd_hcd_t ifxusb_hcd;
116 extern char ifxusb_hcd_name[];
117 #endif
118
119 #endif
120
121 #ifdef __IS_DEVICE__
122 extern char ifxusb_pcd_driver_name[];
123
124 extern ifxpcd_pcd_t ifxusb_pcd;
125 extern char ifxusb_pcd_name[];
126 #endif
127
128
129 //Attributes for sysfs (for 2.6 only)
130
131 #ifdef __IS_HOST__
132 extern struct device_attribute dev_attr_version_h;
133 #else
134 extern struct device_attribute dev_attr_version_d;
135 #endif
136 #ifdef __IS_HOST__
137 extern struct device_attribute dev_attr_dbglevel_h;
138 #else
139 extern struct device_attribute dev_attr_dbglevel_d;
140 #endif
141 #ifdef __IS_HOST__
142 #ifdef __IS_DUAL__
143 extern struct device_attribute dev_attr_suspend_host_1;
144 extern struct device_attribute dev_attr_suspend_host_2;
145 extern struct device_attribute dev_attr_probe_host_1;
146 extern struct device_attribute dev_attr_probe_host_2;
147 extern struct device_attribute dev_attr_probe_timer1_val_h;
148 extern struct device_attribute dev_attr_probe_timer2_val_h;
149 extern struct device_attribute dev_attr_autoprobe_timer1_val_h;
150 extern struct device_attribute dev_attr_autoprobe_timer2_val_h;
151 #else
152 extern struct device_attribute dev_attr_suspend_host;
153 extern struct device_attribute dev_attr_probe_host;
154 extern struct device_attribute dev_attr_probe_timer_val_h;
155 extern struct device_attribute dev_attr_autoprobe_timer_val_h;
156 #endif
157 #endif
158
159 #ifdef __IS_DEVICE__
160 extern struct device_attribute dev_attr_suspend_device;
161 extern struct device_attribute dev_attr_probe_device;
162 extern struct device_attribute dev_attr_probe_timer_val_d;
163 extern struct device_attribute dev_attr_autoprobe_timer_val_d;
164 #endif
165
166 #ifdef __IS_HOST__
167 #ifdef __IS_DUAL__
168 extern struct device_attribute dev_attr_dump_params_h_1;
169 extern struct device_attribute dev_attr_dump_params_h_2;
170 extern struct device_attribute dev_attr_mode_h_1;
171 extern struct device_attribute dev_attr_mode_h_2;
172 #else
173 extern struct device_attribute dev_attr_dump_params_h;
174 extern struct device_attribute dev_attr_mode_h;
175 #endif
176 #else
177 extern struct device_attribute dev_attr_dump_params_d;
178 extern struct device_attribute dev_attr_mode_d;
179 #endif
180
181 #ifdef __IS_HOST__
182 #ifdef __IS_DUAL__
183 extern struct device_attribute dev_attr_pkt_count_limit_bi_1;
184 extern struct device_attribute dev_attr_pkt_count_limit_bo_1;
185 extern struct device_attribute dev_attr_pkt_count_limit_bi_2;
186 extern struct device_attribute dev_attr_pkt_count_limit_bo_2;
187 extern struct device_attribute dev_attr_bandwidth_fs_1;
188 extern struct device_attribute dev_attr_bandwidth_ls_1;
189 extern struct device_attribute dev_attr_bandwidth_hs_2;
190 extern struct device_attribute dev_attr_bandwidth_fs_2;
191 extern struct device_attribute dev_attr_bandwidth_ls_2;
192 extern struct device_attribute dev_attr_buspower_1;
193 extern struct device_attribute dev_attr_buspower_2;
194 extern struct device_attribute dev_attr_bussuspend_1;
195 extern struct device_attribute dev_attr_bussuspend_2;
196 extern struct device_attribute dev_attr_busconnected_1;
197 extern struct device_attribute dev_attr_busconnected_2;
198 extern struct device_attribute dev_attr_connectspeed_1;
199 extern struct device_attribute dev_attr_connectspeed_1;
200 #else
201 extern struct device_attribute dev_attr_pkt_count_limit_bi;
202 extern struct device_attribute dev_attr_pkt_count_limit_bo;
203 extern struct device_attribute dev_attr_bandwidth_hs;
204 extern struct device_attribute dev_attr_bandwidth_fs;
205 extern struct device_attribute dev_attr_bandwidth_ls;
206 extern struct device_attribute dev_attr_buspower;
207 extern struct device_attribute dev_attr_bussuspend;
208 extern struct device_attribute dev_attr_busconnected;
209 extern struct device_attribute dev_attr_connectspeed;
210 #endif
211 #endif //__IS_HOST__
212
213 #ifdef __IS_DEVICE__
214 extern struct device_attribute dev_attr_devspeed;
215 extern struct device_attribute dev_attr_enumspeed;
216 #endif //__IS_DEVICE__
217
218 #ifdef __ENABLE_DUMP__
219 #ifdef __IS_HOST__
220 #ifdef __IS_DUAL__
221 extern struct device_attribute dev_attr_dump_reg_h_1;
222 extern struct device_attribute dev_attr_dump_reg_h_2;
223 extern struct device_attribute dev_attr_dump_spram_h_1;
224 extern struct device_attribute dev_attr_dump_spram_h_2;
225 extern struct device_attribute dev_attr_dump_host_state_1;
226 extern struct device_attribute dev_attr_dump_host_state_2;
227 #else
228 extern struct device_attribute dev_attr_dump_reg_h;
229 extern struct device_attribute dev_attr_dump_spram_h;
230 extern struct device_attribute dev_attr_dump_host_state;
231 #endif
232 #else
233 extern struct device_attribute dev_attr_dump_reg_d;
234 extern struct device_attribute dev_attr_dump_spram_d;
235 #endif
236 #endif //__ENABLE_DUMP__
237
238
239 /////////////////////////////////////////////////////////////////////////////////////////////////////
240 /////////////////////////////////////////////////////////////////////////////////////////////////////
241 /////////////////////////////////////////////////////////////////////////////////////////////////////
242
243 static ssize_t procfs_version_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
244 {
245 return sprintf( buf, "%s\n",IFXUSB_VERSION );
246 }
247
248 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
249 static ssize_t sysfs_version_show( struct device *_dev, struct device_attribute *attr,char *buf)
250 #else
251 static ssize_t sysfs_version_show( struct device *_dev, char *buf)
252 #endif
253 {
254 return sprintf( buf, "%s\n",IFXUSB_VERSION );
255 }
256
257 #ifdef __IS_HOST__
258 DEVICE_ATTR(version_h, S_IRUGO|S_IWUSR, sysfs_version_show, NULL);
259 #else
260 DEVICE_ATTR(version_d, S_IRUGO|S_IWUSR, sysfs_version_show, NULL);
261 #endif
262
263
264 /////////////////////////////////////////////////////////////////////////////////////////////////////
265 /////////////////////////////////////////////////////////////////////////////////////////////////////
266 /////////////////////////////////////////////////////////////////////////////////////////////////////
267 /////////////////////////////////////////////////////////////////////////////////////////////////////
268 /////////////////////////////////////////////////////////////////////////////////////////////////////
269 /////////////////////////////////////////////////////////////////////////////////////////////////////
270
271 static ssize_t procfs_dbglevel_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
272 {
273 #ifdef __IS_HOST__
274 return sprintf( buf, "%08X\n",h_dbg_lvl );
275 #else
276 return sprintf( buf, "%08X\n",d_dbg_lvl );
277 #endif
278 }
279
280 static ssize_t procfs_dbglevel_store(struct file *file, const char *buffer, unsigned long count, void *data)
281 {
282 char buf[10];
283 int i = 0;
284 uint32_t value;
285 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
286 return -EFAULT;
287 value = simple_strtoul(buf, NULL, 16);
288 #ifdef __IS_HOST__
289 h_dbg_lvl =value;
290 #else
291 d_dbg_lvl =value;
292 #endif
293 //turn on and off power
294 return count;
295 }
296
297 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
298 static ssize_t sysfs_dbglevel_show( struct device *_dev, struct device_attribute *attr,char *buf)
299 #else
300 static ssize_t sysfs_dbglevel_show( struct device *_dev, char *buf)
301 #endif
302 {
303 #ifdef __IS_HOST__
304 return sprintf( buf, "%08X\n",h_dbg_lvl );
305 #else
306 return sprintf( buf, "%08X\n",d_dbg_lvl );
307 #endif
308 }
309
310 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
311 static ssize_t sysfs_dbglevel_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
312 #else
313 static ssize_t sysfs_dbglevel_store( struct device *_dev, const char *buffer, size_t count )
314 #endif
315 {
316 char buf[10];
317 int i = 0;
318 uint32_t value;
319 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
320 return -EFAULT;
321 value = simple_strtoul(buf, NULL, 16);
322 #ifdef __IS_HOST__
323 h_dbg_lvl =value;
324 #else
325 d_dbg_lvl =value;
326 #endif
327 //turn on and off power
328 return count;
329 }
330
331 #ifdef __IS_HOST__
332 DEVICE_ATTR(dbglevel_h, S_IRUGO|S_IWUSR, sysfs_dbglevel_show, sysfs_dbglevel_store);
333 #else
334 DEVICE_ATTR(dbglevel_d, S_IRUGO|S_IWUSR, sysfs_dbglevel_show, sysfs_dbglevel_store);
335 #endif
336
337
338 /////////////////////////////////////////////////////////////////////////////////////////////////////
339 /////////////////////////////////////////////////////////////////////////////////////////////////////
340 /////////////////////////////////////////////////////////////////////////////////////////////////////
341
342 static void ifxusb_dump_params(ifxusb_core_if_t *_core_if);
343
344 #ifdef __IS_DUAL__
345 static void dump_params_1(void)
346 {
347 ifxusb_dump_params(&ifxusb_hcd_1.core_if);
348 }
349 static void dump_params_2(void)
350 {
351 ifxusb_dump_params(&ifxusb_hcd_2.core_if);
352 }
353
354 static ssize_t procfs_dump_params_show_1(char *buf, char **start, off_t offset, int count, int *eof, void *data)
355 {
356 dump_params_1();
357 return 0;
358 }
359 static ssize_t procfs_dump_params_show_2(char *buf, char **start, off_t offset, int count, int *eof, void *data)
360 {
361 dump_params_2();
362 return 0;
363 }
364
365 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
366 static ssize_t sysfs_dump_params_show_1( struct device *_dev, struct device_attribute *attr,char *buf)
367 #else
368 static ssize_t sysfs_dump_params_show_1( struct device *_dev,char *buf)
369 #endif
370 {
371 dump_params_1();
372 return 0;
373 }
374 DEVICE_ATTR(dump_params_h_1, S_IRUGO|S_IWUSR, sysfs_dump_params_show_1, NULL);
375
376 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
377 static ssize_t sysfs_dump_params_show_2( struct device *_dev, struct device_attribute *attr,char *buf)
378 #else
379 static ssize_t sysfs_dump_params_show_2( struct device *_dev,char *buf)
380 #endif
381 {
382 dump_params_2();
383 return 0;
384 }
385
386 DEVICE_ATTR(dump_params_h_2, S_IRUGO|S_IWUSR, sysfs_dump_params_show_2, NULL);
387 #else
388 static void dump_params(void)
389 {
390 #ifdef __IS_HOST__
391 ifxusb_dump_params(&ifxusb_hcd.core_if);
392 #else
393 ifxusb_dump_params(&ifxusb_pcd.core_if);
394 #endif
395 }
396
397 static ssize_t procfs_dump_params_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
398 {
399 dump_params();
400 return 0;
401 }
402
403 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
404 static ssize_t sysfs_dump_params_show( struct device *_dev, struct device_attribute *attr,char *buf)
405 #else
406 static ssize_t sysfs_dump_params_show( struct device *_dev,char *buf)
407 #endif
408 {
409 dump_params();
410 return 0;
411 }
412
413 #ifdef __IS_HOST__
414 DEVICE_ATTR(dump_params_h, S_IRUGO|S_IWUSR, sysfs_dump_params_show, NULL);
415 #else
416 DEVICE_ATTR(dump_params_d, S_IRUGO|S_IWUSR, sysfs_dump_params_show, NULL);
417 #endif
418 #endif
419
420 /////////////////////////////////////////////////////////////////////////////////////////////////////
421 /////////////////////////////////////////////////////////////////////////////////////////////////////
422 /////////////////////////////////////////////////////////////////////////////////////////////////////
423
424 #ifdef __IS_DUAL__
425 static ssize_t mode_show_1(char *buf)
426 {
427 if((ifxusb_rreg(&ifxusb_hcd_1.core_if.core_global_regs->gintsts ) & 0x1) == 1)
428 return sprintf( buf, "HOST\n" );
429 else
430 return sprintf( buf, "DEVICE(INCORRECT!)\n" );
431 }
432
433 static ssize_t mode_show_2(char *buf)
434 {
435 if((ifxusb_rreg(&ifxusb_hcd_2.core_if.core_global_regs->gintsts ) & 0x1) == 1)
436 return sprintf( buf, "HOST\n" );
437 else
438 return sprintf( buf, "DEVICE(INCORRECT!)\n" );
439 }
440
441 static ssize_t procfs_mode_show_1(char *buf, char **start, off_t offset, int count, int *eof, void *data)
442 {
443 return mode_show_1(buf);
444 }
445 static ssize_t procfs_mode_show_2(char *buf, char **start, off_t offset, int count, int *eof, void *data)
446 {
447 return mode_show_2(buf);
448 }
449
450 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
451 static ssize_t sysfs_mode_show_1( struct device *_dev, struct device_attribute *attr,char *buf)
452 #else
453 static ssize_t sysfs_mode_show_1( struct device *_dev,char *buf)
454 #endif
455 {
456 return mode_show_1(buf);
457 }
458
459 DEVICE_ATTR(mode_h_1, S_IRUGO|S_IWUSR, sysfs_mode_show_1, 0);
460
461 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
462 static ssize_t sysfs_mode_show_2( struct device *_dev, struct device_attribute *attr,char *buf)
463 #else
464 static ssize_t sysfs_mode_show_2( struct device *_dev,char *buf)
465 #endif
466 {
467 return mode_show_2(buf);
468 }
469 DEVICE_ATTR(mode_h_2, S_IRUGO|S_IWUSR, sysfs_mode_show_2, NULL);
470 #else
471 static ssize_t mode_show(char *buf)
472 {
473 #ifdef __IS_HOST__
474 if((ifxusb_rreg(&ifxusb_hcd.core_if.core_global_regs->gintsts ) & 0x1) == 1)
475 return sprintf( buf, "HOST\n" );
476 else
477 return sprintf( buf, "DEVICE(INCORRECT!)\n" );
478 #else
479 if((ifxusb_rreg(&ifxusb_pcd.core_if.core_global_regs->gintsts ) & 0x1) != 1)
480 return sprintf( buf, "DEVICE\n" );
481 else
482 return sprintf( buf, "HOST(INCORRECT!)\n" );
483 #endif
484 }
485 static ssize_t procfs_mode_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
486 {
487 return mode_show(buf);
488 }
489 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
490 static ssize_t sysfs_mode_show( struct device *_dev, struct device_attribute *attr,char *buf)
491 #else
492 static ssize_t sysfs_mode_show( struct device *_dev, char *buf)
493 #endif
494 {
495 return mode_show(buf);
496 }
497 #ifdef __IS_HOST__
498 DEVICE_ATTR(mode_h, S_IRUGO|S_IWUSR, sysfs_mode_show, NULL);
499 #else
500 DEVICE_ATTR(mode_d, S_IRUGO|S_IWUSR, sysfs_mode_show, NULL);
501 #endif
502 #endif
503
504 /////////////////////////////////////////////////////////////////////////////////////////////////////
505 /////////////////////////////////////////////////////////////////////////////////////////////////////
506 /////////////////////////////////////////////////////////////////////////////////////////////////////
507
508 #ifdef __IS_HOST__
509 /////////////////////////////////////////////////////////////////////////////////////////////////////
510 /////////////////////////////////////////////////////////////////////////////////////////////////////
511 /////////////////////////////////////////////////////////////////////////////////////////////////////
512 #ifdef __IS_DUAL__
513 static ssize_t bandwidth_hs_show_1(char *buf)
514 {
515 return sprintf( buf, "%d\n",ifxusb_hcd_1.pkt_remaining_reload_hs );
516 }
517 static ssize_t bandwidth_fs_show_1(char *buf)
518 {
519 return sprintf( buf, "%d\n",ifxusb_hcd_1.pkt_remaining_reload_fs );
520 }
521 static ssize_t bandwidth_ls_show_1(char *buf)
522 {
523 return sprintf( buf, "%d\n",ifxusb_hcd_1.pkt_remaining_reload_ls );
524 }
525 static void bandwidth_hs_store_1(uint32_t value)
526 {
527 if(value>16 && value<120)
528 {
529 hprt0_data_t hprt0;
530 ifxusb_hcd_1.pkt_remaining_reload_hs = value;
531 hprt0.d32 = ifxusb_rreg(ifxusb_hcd_1.core_if.hprt0);
532 if(hprt0.b.prtspd == IFXUSB_HPRT0_PRTSPD_HIGH_SPEED)
533 ifxusb_hcd_1.pkt_remaining_reload=value;
534 }
535 }
536 static void bandwidth_fs_store_1(uint32_t value)
537 {
538 if (value>2 && value<30)
539 {
540 hprt0_data_t hprt0;
541 ifxusb_hcd_1.pkt_remaining_reload_fs = value;
542 hprt0.d32 = ifxusb_rreg(ifxusb_hcd_1.core_if.hprt0);
543 if(hprt0.b.prtspd != IFXUSB_HPRT0_PRTSPD_LOW_SPEED && hprt0.b.prtspd != IFXUSB_HPRT0_PRTSPD_HIGH_SPEED)
544 ifxusb_hcd_1.pkt_remaining_reload=value;
545 }
546 }
547 static void bandwidth_ls_store_1(uint32_t value)
548 {
549 if (value>2 && value<30)
550 {
551 hprt0_data_t hprt0;
552 ifxusb_hcd_1.pkt_remaining_reload_ls = value;
553 hprt0.d32 = ifxusb_rreg(ifxusb_hcd_1.core_if.hprt0);
554 if(hprt0.b.prtspd == IFXUSB_HPRT0_PRTSPD_LOW_SPEED)
555 ifxusb_hcd_1.pkt_remaining_reload=value;
556 }
557 }
558 static ssize_t bandwidth_hs_show_2(char *buf)
559 {
560 return sprintf( buf, "%d\n",ifxusb_hcd_2.pkt_remaining_reload_hs );
561 }
562 static ssize_t bandwidth_fs_show_2(char *buf)
563 {
564 return sprintf( buf, "%d\n",ifxusb_hcd_2.pkt_remaining_reload_fs );
565 }
566 static ssize_t bandwidth_ls_show_2(char *buf)
567 {
568 return sprintf( buf, "%d\n",ifxusb_hcd_2.pkt_remaining_reload_ls );
569 }
570 static void bandwidth_hs_store_2(uint32_t value)
571 {
572 if(value>16 && value<120)
573 {
574 hprt0_data_t hprt0;
575 ifxusb_hcd_2.pkt_remaining_reload_hs = value;
576 hprt0.d32 = ifxusb_rreg(ifxusb_hcd_2.core_if.hprt0);
577 if(hprt0.b.prtspd == IFXUSB_HPRT0_PRTSPD_HIGH_SPEED)
578 ifxusb_hcd_2.pkt_remaining_reload=value;
579 }
580 }
581 static void bandwidth_fs_store_2(uint32_t value)
582 {
583 if (value>2 && value<30)
584 {
585 hprt0_data_t hprt0;
586 ifxusb_hcd_2.pkt_remaining_reload_fs = value;
587 hprt0.d32 = ifxusb_rreg(ifxusb_hcd_2.core_if.hprt0);
588 if(hprt0.b.prtspd != IFXUSB_HPRT0_PRTSPD_LOW_SPEED && hprt0.b.prtspd != IFXUSB_HPRT0_PRTSPD_HIGH_SPEED)
589 ifxusb_hcd_2.pkt_remaining_reload=value;
590 }
591 }
592 static void bandwidth_ls_store_2(uint32_t value)
593 {
594 if (value>2 && value<30)
595 {
596 hprt0_data_t hprt0;
597 ifxusb_hcd_2.pkt_remaining_reload_ls = value;
598 hprt0.d32 = ifxusb_rreg(ifxusb_hcd_2.core_if.hprt0);
599 if(hprt0.b.prtspd == IFXUSB_HPRT0_PRTSPD_LOW_SPEED)
600 ifxusb_hcd_2.pkt_remaining_reload=value;
601 }
602 }
603 static ssize_t procfs_bandwidth_hs_show_1(char *buf, char **start, off_t offset, int count, int *eof, void *data)
604 {
605 return bandwidth_hs_show_1(buf);
606 }
607 static ssize_t procfs_bandwidth_fs_show_1(char *buf, char **start, off_t offset, int count, int *eof, void *data)
608 {
609 return bandwidth_fs_show_1(buf);
610 }
611 static ssize_t procfs_bandwidth_ls_show_1(char *buf, char **start, off_t offset, int count, int *eof, void *data)
612 {
613 return bandwidth_ls_show_1(buf);
614 }
615 static ssize_t procfs_bandwidth_hs_store_1(struct file *file, const char *buffer, unsigned long count, void *data)
616 {
617 char buf[10];
618 int i = 0;
619 uint32_t value;
620 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
621 return -EFAULT;
622 value = simple_strtoul(buf, NULL, 10);
623 bandwidth_hs_store_1(value);
624 return count;
625 }
626 static ssize_t procfs_bandwidth_fs_store_1(struct file *file, const char *buffer, unsigned long count, void *data)
627 {
628 char buf[10];
629 int i = 0;
630 uint32_t value;
631 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
632 return -EFAULT;
633 value = simple_strtoul(buf, NULL, 10);
634 bandwidth_fs_store_1(value);
635 return count;
636 }
637 static ssize_t procfs_bandwidth_ls_store_1(struct file *file, const char *buffer, unsigned long count, void *data)
638 {
639 char buf[10];
640 int i = 0;
641 uint32_t value;
642 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
643 return -EFAULT;
644 value = simple_strtoul(buf, NULL, 10);
645 bandwidth_ls_store_1(value);
646 return count;
647 }
648 static ssize_t procfs_bandwidth_hs_show_2(char *buf, char **start, off_t offset, int count, int *eof, void *data)
649 {
650 return bandwidth_hs_show_2(buf);
651 }
652 static ssize_t procfs_bandwidth_fs_show_2(char *buf, char **start, off_t offset, int count, int *eof, void *data)
653 {
654 return bandwidth_fs_show_2(buf);
655 }
656 static ssize_t procfs_bandwidth_ls_show_2(char *buf, char **start, off_t offset, int count, int *eof, void *data)
657 {
658 return bandwidth_ls_show_2(buf);
659 }
660 static ssize_t procfs_bandwidth_hs_store_2(struct file *file, const char *buffer, unsigned long count, void *data)
661 {
662 char buf[10];
663 int i = 0;
664 uint32_t value;
665 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
666 return -EFAULT;
667 value = simple_strtoul(buf, NULL, 10);
668 bandwidth_hs_store_2(value);
669 return count;
670 }
671 static ssize_t procfs_bandwidth_fs_store_2(struct file *file, const char *buffer, unsigned long count, void *data)
672 {
673 char buf[10];
674 int i = 0;
675 uint32_t value;
676 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
677 return -EFAULT;
678 value = simple_strtoul(buf, NULL, 10);
679 bandwidth_fs_store_2(value);
680 return count;
681 }
682 static ssize_t procfs_bandwidth_ls_store_2(struct file *file, const char *buffer, unsigned long count, void *data)
683 {
684 char buf[10];
685 int i = 0;
686 uint32_t value;
687 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
688 return -EFAULT;
689 value = simple_strtoul(buf, NULL, 10);
690 bandwidth_ls_store_2(value);
691 return count;
692 }
693
694 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
695 static ssize_t sysfs_bandwidth_hs_show_1( struct device *_dev, struct device_attribute *attr,char *buf)
696 #else
697 static ssize_t sysfs_bandwidth_hs_show_1( struct device *_dev,char *buf)
698 #endif
699 {
700 return bandwidth_hs_show_1(buf);
701 }
702 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
703 static ssize_t sysfs_bandwidth_hs_store_1( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
704 #else
705 static ssize_t sysfs_bandwidth_hs_store_1( struct device *_dev, const char *buffer, size_t count )
706 #endif
707 {
708 char buf[10];
709 int i = 0;
710 uint32_t value;
711 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
712 return -EFAULT;
713 value = simple_strtoul(buf, NULL, 10);
714 bandwidth_hs_store_1(value);
715 return count;
716 }
717 DEVICE_ATTR(bandwidth_hs_1, S_IRUGO|S_IWUSR, sysfs_bandwidth_hs_show_1, sysfs_bandwidth_hs_store_1);
718
719 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
720 static ssize_t sysfs_bandwidth_fs_show_1( struct device *_dev, struct device_attribute *attr,char *buf)
721 #else
722 static ssize_t sysfs_bandwidth_fs_show_1( struct device *_dev,char *buf)
723 #endif
724 {
725 return bandwidth_fs_show_1(buf);
726 }
727 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
728 static ssize_t sysfs_bandwidth_fs_store_1( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
729 #else
730 static ssize_t sysfs_bandwidth_fs_store_1( struct device *_dev, const char *buffer, size_t count )
731 #endif
732 {
733 char buf[10];
734 int i = 0;
735 uint32_t value;
736 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
737 return -EFAULT;
738 value = simple_strtoul(buf, NULL, 10);
739 bandwidth_fs_store_1(value);
740 return count;
741 }
742 DEVICE_ATTR(bandwidth_fs_1, S_IRUGO|S_IWUSR, sysfs_bandwidth_fs_show_1, sysfs_bandwidth_fs_store_1);
743
744 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
745 static ssize_t sysfs_bandwidth_ls_show_1( struct device *_dev, struct device_attribute *attr,char *buf)
746 #else
747 static ssize_t sysfs_bandwidth_ls_show_1( struct device *_dev,char *buf)
748 #endif
749 {
750 return bandwidth_ls_show_1(buf);
751 }
752 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
753 static ssize_t sysfs_bandwidth_ls_store_1( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
754 #else
755 static ssize_t sysfs_bandwidth_ls_store_1( struct device *_dev, const char *buffer, size_t count )
756 #endif
757 {
758 char buf[10];
759 int i = 0;
760 uint32_t value;
761 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
762 return -EFAULT;
763 value = simple_strtoul(buf, NULL, 10);
764 bandwidth_ls_store_1(value);
765 return count;
766 }
767 DEVICE_ATTR(bandwidth_ls_1, S_IRUGO|S_IWUSR, sysfs_bandwidth_ls_show_1, sysfs_bandwidth_ls_store_1);
768
769 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
770 static ssize_t sysfs_bandwidth_hs_show_2( struct device *_dev, struct device_attribute *attr,char *buf)
771 #else
772 static ssize_t sysfs_bandwidth_hs_show_2( struct device *_dev,char *buf)
773 #endif
774 {
775 return bandwidth_hs_show_2(buf);
776 }
777 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
778 static ssize_t sysfs_bandwidth_hs_store_2( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
779 #else
780 static ssize_t sysfs_bandwidth_hs_store_2( struct device *_dev, const char *buffer, size_t count )
781 #endif
782 {
783 char buf[10];
784 int i = 0;
785 uint32_t value;
786 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
787 return -EFAULT;
788 value = simple_strtoul(buf, NULL, 10);
789 bandwidth_hs_store_2(value);
790 return count;
791 }
792 DEVICE_ATTR(bandwidth_hs_2, S_IRUGO|S_IWUSR, sysfs_bandwidth_hs_show_2, sysfs_bandwidth_hs_store_2);
793
794 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
795 static ssize_t sysfs_bandwidth_fs_show_2( struct device *_dev, struct device_attribute *attr,char *buf)
796 #else
797 static ssize_t sysfs_bandwidth_fs_show_2( struct device *_dev,char *buf)
798 #endif
799 {
800 return bandwidth_fs_show_2(buf);
801 }
802 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
803 static ssize_t sysfs_bandwidth_fs_store_2( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
804 #else
805 static ssize_t sysfs_bandwidth_fs_store_2( struct device *_dev, const char *buffer, size_t count )
806 #endif
807 {
808 char buf[10];
809 int i = 0;
810 uint32_t value;
811 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
812 return -EFAULT;
813 value = simple_strtoul(buf, NULL, 10);
814 bandwidth_fs_store_2(value);
815 return count;
816 }
817 DEVICE_ATTR(bandwidth_fs_2, S_IRUGO|S_IWUSR, sysfs_bandwidth_fs_show_2, sysfs_bandwidth_fs_store_2);
818
819 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
820 static ssize_t sysfs_bandwidth_ls_show_2( struct device *_dev, struct device_attribute *attr,char *buf)
821 #else
822 static ssize_t sysfs_bandwidth_ls_show_2( struct device *_dev,char *buf)
823 #endif
824 {
825 return bandwidth_ls_show_2(buf);
826 }
827 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
828 static ssize_t sysfs_bandwidth_ls_store_2( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
829 #else
830 static ssize_t sysfs_bandwidth_ls_store_2( struct device *_dev, const char *buffer, size_t count )
831 #endif
832 {
833 char buf[10];
834 int i = 0;
835 uint32_t value;
836 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
837 return -EFAULT;
838 value = simple_strtoul(buf, NULL, 10);
839 bandwidth_ls_store_2(value);
840 return count;
841 }
842 DEVICE_ATTR(bandwidth_ls_2, S_IRUGO|S_IWUSR, sysfs_bandwidth_ls_show_2, sysfs_bandwidth_ls_store_2);
843 #else
844 static ssize_t bandwidth_hs_show(char *buf)
845 {
846 return sprintf( buf, "%d\n",ifxusb_hcd.pkt_remaining_reload_hs );
847 }
848 static ssize_t bandwidth_fs_show(char *buf)
849 {
850 return sprintf( buf, "%d\n",ifxusb_hcd.pkt_remaining_reload_fs );
851 }
852 static ssize_t bandwidth_ls_show(char *buf)
853 {
854 return sprintf( buf, "%d\n",ifxusb_hcd.pkt_remaining_reload_ls );
855 }
856 static void bandwidth_hs_store(uint32_t value)
857 {
858 if (value>16 && value<120)
859 {
860 hprt0_data_t hprt0;
861 ifxusb_hcd.pkt_remaining_reload_hs = value;
862 hprt0.d32 = ifxusb_rreg(ifxusb_hcd.core_if.hprt0);
863 if(hprt0.b.prtspd == IFXUSB_HPRT0_PRTSPD_HIGH_SPEED)
864 ifxusb_hcd.pkt_remaining_reload=value;
865 }
866 }
867 static void bandwidth_fs_store(uint32_t value)
868 {
869 if (value>2 && value<30)
870 {
871 hprt0_data_t hprt0;
872 ifxusb_hcd.pkt_remaining_reload_fs = value;
873 hprt0.d32 = ifxusb_rreg(ifxusb_hcd.core_if.hprt0);
874 if(hprt0.b.prtspd != IFXUSB_HPRT0_PRTSPD_LOW_SPEED && hprt0.b.prtspd != IFXUSB_HPRT0_PRTSPD_HIGH_SPEED)
875 ifxusb_hcd.pkt_remaining_reload=value;
876 }
877 }
878 static void bandwidth_ls_store(uint32_t value)
879 {
880 if (value>2 && value<30)
881 {
882 hprt0_data_t hprt0;
883 ifxusb_hcd.pkt_remaining_reload_hs = value;
884 hprt0.d32 = ifxusb_rreg(ifxusb_hcd.core_if.hprt0);
885 if(hprt0.b.prtspd == IFXUSB_HPRT0_PRTSPD_LOW_SPEED)
886 ifxusb_hcd.pkt_remaining_reload=value;
887 }
888 }
889 static ssize_t procfs_bandwidth_hs_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
890 {
891 return bandwidth_hs_show(buf);
892 }
893 static ssize_t procfs_bandwidth_fs_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
894 {
895 return bandwidth_fs_show(buf);
896 }
897 static ssize_t procfs_bandwidth_ls_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
898 {
899 return bandwidth_ls_show(buf);
900 }
901 static ssize_t procfs_bandwidth_hs_store(struct file *file, const char *buffer, unsigned long count, void *data)
902 {
903 char buf[10];
904 int i = 0;
905 uint32_t value;
906 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
907 return -EFAULT;
908 value = simple_strtoul(buf, NULL, 10);
909 bandwidth_hs_store(value);
910 return count;
911 }
912 static ssize_t procfs_bandwidth_fs_store(struct file *file, const char *buffer, unsigned long count, void *data)
913 {
914 char buf[10];
915 int i = 0;
916 uint32_t value;
917 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
918 return -EFAULT;
919 value = simple_strtoul(buf, NULL, 10);
920 bandwidth_fs_store(value);
921 return count;
922 }
923 static ssize_t procfs_bandwidth_ls_store(struct file *file, const char *buffer, unsigned long count, void *data)
924 {
925 char buf[10];
926 int i = 0;
927 uint32_t value;
928 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
929 return -EFAULT;
930 value = simple_strtoul(buf, NULL, 10);
931 bandwidth_ls_store(value);
932 return count;
933 }
934
935 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
936 static ssize_t sysfs_bandwidth_hs_show( struct device *_dev, struct device_attribute *attr,char *buf)
937 #else
938 static ssize_t sysfs_bandwidth_hs_show( struct device *_dev,char *buf)
939 #endif
940 {
941 return bandwidth_hs_show(buf);
942 }
943 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
944 static ssize_t sysfs_bandwidth_hs_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
945 #else
946 static ssize_t sysfs_bandwidth_hs_store( struct device *_dev, const char *buffer, size_t count )
947 #endif
948 {
949 char buf[10];
950 int i = 0;
951 uint32_t value;
952 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
953 return -EFAULT;
954 value = simple_strtoul(buf, NULL, 10);
955 bandwidth_hs_store(value);
956 return count;
957 }
958 DEVICE_ATTR(bandwidth_hs, S_IRUGO|S_IWUSR, sysfs_bandwidth_hs_show, sysfs_bandwidth_hs_store);
959
960 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
961 static ssize_t sysfs_bandwidth_fs_show( struct device *_dev, struct device_attribute *attr,char *buf)
962 #else
963 static ssize_t sysfs_bandwidth_fs_show( struct device *_dev,char *buf)
964 #endif
965 {
966 return bandwidth_fs_show(buf);
967 }
968 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
969 static ssize_t sysfs_bandwidth_fs_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
970 #else
971 static ssize_t sysfs_bandwidth_fs_store( struct device *_dev, const char *buffer, size_t count )
972 #endif
973 {
974 char buf[10];
975 int i = 0;
976 uint32_t value;
977 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
978 return -EFAULT;
979 value = simple_strtoul(buf, NULL, 10);
980 bandwidth_fs_store(value);
981 return count;
982 }
983 DEVICE_ATTR(bandwidth_fs, S_IRUGO|S_IWUSR, sysfs_bandwidth_fs_show, sysfs_bandwidth_fs_store);
984
985 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
986 static ssize_t sysfs_bandwidth_ls_show( struct device *_dev, struct device_attribute *attr,char *buf)
987 #else
988 static ssize_t sysfs_bandwidth_ls_show( struct device *_dev,char *buf)
989 #endif
990 {
991 return bandwidth_ls_show(buf);
992 }
993 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
994 static ssize_t sysfs_bandwidth_ls_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
995 #else
996 static ssize_t sysfs_bandwidth_ls_store( struct device *_dev, const char *buffer, size_t count )
997 #endif
998 {
999 char buf[10];
1000 int i = 0;
1001 uint32_t value;
1002 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
1003 return -EFAULT;
1004 value = simple_strtoul(buf, NULL, 10);
1005 bandwidth_ls_store(value);
1006 return count;
1007 }
1008 DEVICE_ATTR(bandwidth_ls, S_IRUGO|S_IWUSR, sysfs_bandwidth_ls_show, sysfs_bandwidth_ls_store);
1009 #endif
1010
1011 /////////////////////////////////////////////////////////////////////////////////////////////////////
1012 /////////////////////////////////////////////////////////////////////////////////////////////////////
1013 #ifdef __IS_DUAL__
1014 static ssize_t pkt_count_limit_bi_show_1(char *buf)
1015 {
1016 return sprintf( buf, "%d\n",ifxusb_hcd_1.pkt_count_limit_bi );
1017 }
1018 static ssize_t pkt_count_limit_bo_show_1(char *buf)
1019 {
1020 return sprintf( buf, "%d\n",ifxusb_hcd_1.pkt_count_limit_bo );
1021 }
1022 static void pkt_count_limit_bi_store_1(uint32_t value)
1023 {
1024 if(value<=13)
1025 ifxusb_hcd_1.pkt_count_limit_bi = value;
1026 }
1027 static void pkt_count_limit_bo_store_1(uint32_t value)
1028 {
1029 if (value<=13)
1030 ifxusb_hcd_1.pkt_count_limit_bo = value;
1031 }
1032 static ssize_t pkt_count_limit_bi_show_2(char *buf)
1033 {
1034 return sprintf( buf, "%d\n",ifxusb_hcd_2.pkt_count_limit_bi );
1035 }
1036 static ssize_t pkt_count_limit_bo_show_2(char *buf)
1037 {
1038 return sprintf( buf, "%d\n",ifxusb_hcd_2.pkt_count_limit_bo );
1039 }
1040 static void pkt_count_limit_bi_store_2(uint32_t value)
1041 {
1042 if(value<=13)
1043 ifxusb_hcd_2.pkt_count_limit_bi = value;
1044 }
1045 static void pkt_count_limit_bo_store_2(uint32_t value)
1046 {
1047 if(value<=13)
1048 ifxusb_hcd_2.pkt_count_limit_bo = value;
1049 }
1050 static ssize_t procfs_pkt_count_limit_bi_show_1(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1051 {
1052 return pkt_count_limit_bi_show_1(buf);
1053 }
1054 static ssize_t procfs_pkt_count_limit_bo_show_1(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1055 {
1056 return pkt_count_limit_bo_show_1(buf);
1057 }
1058 static ssize_t procfs_pkt_count_limit_bi_store_1(struct file *file, const char *buffer, unsigned long count, void *data)
1059 {
1060 char buf[10];
1061 int i = 0;
1062 uint32_t value;
1063 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
1064 return -EFAULT;
1065 value = simple_strtoul(buf, NULL, 10);
1066 pkt_count_limit_bi_store_1(value);
1067 return count;
1068 }
1069 static ssize_t procfs_pkt_count_limit_bo_store_1(struct file *file, const char *buffer, unsigned long count, void *data)
1070 {
1071 char buf[10];
1072 int i = 0;
1073 uint32_t value;
1074 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
1075 return -EFAULT;
1076 value = simple_strtoul(buf, NULL, 10);
1077 pkt_count_limit_bo_store_1(value);
1078 return count;
1079 }
1080 static ssize_t procfs_pkt_count_limit_bi_show_2(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1081 {
1082 return pkt_count_limit_bi_show_2(buf);
1083 }
1084 static ssize_t procfs_pkt_count_limit_bo_show_2(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1085 {
1086 return pkt_count_limit_bo_show_2(buf);
1087 }
1088 static ssize_t procfs_pkt_count_limit_bi_store_2(struct file *file, const char *buffer, unsigned long count, void *data)
1089 {
1090 char buf[10];
1091 int i = 0;
1092 uint32_t value;
1093 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
1094 return -EFAULT;
1095 value = simple_strtoul(buf, NULL, 10);
1096 pkt_count_limit_bi_store_2(value);
1097 return count;
1098 }
1099 static ssize_t procfs_pkt_count_limit_bo_store_2(struct file *file, const char *buffer, unsigned long count, void *data)
1100 {
1101 char buf[10];
1102 int i = 0;
1103 uint32_t value;
1104 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
1105 return -EFAULT;
1106 value = simple_strtoul(buf, NULL, 10);
1107 pkt_count_limit_bo_store_2(value);
1108 return count;
1109 }
1110
1111 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1112 static ssize_t sysfs_pkt_count_limit_bi_show_1( struct device *_dev, struct device_attribute *attr,char *buf)
1113 #else
1114 static ssize_t sysfs_pkt_count_limit_bi_show_1( struct device *_dev,char *buf)
1115 #endif
1116 {
1117 return pkt_count_limit_bi_show_1(buf);
1118 }
1119 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1120 static ssize_t sysfs_pkt_count_limit_bi_store_1( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
1121 #else
1122 static ssize_t sysfs_pkt_count_limit_bi_store_1( struct device *_dev, const char *buffer, size_t count )
1123 #endif
1124 {
1125 char buf[10];
1126 int i = 0;
1127 uint32_t value;
1128 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
1129 return -EFAULT;
1130 value = simple_strtoul(buf, NULL, 10);
1131 pkt_count_limit_bi_store_1(value);
1132 return count;
1133 }
1134 DEVICE_ATTR(pkt_count_limit_bi_1, S_IRUGO|S_IWUSR, sysfs_pkt_count_limit_bi_show_1, sysfs_pkt_count_limit_bi_store_1);
1135
1136 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1137 static ssize_t sysfs_pkt_count_limit_bo_show_1( struct device *_dev, struct device_attribute *attr,char *buf)
1138 #else
1139 static ssize_t sysfs_pkt_count_limit_bo_show_1( struct device *_dev,char *buf)
1140 #endif
1141 {
1142 return pkt_count_limit_bo_show_1(buf);
1143 }
1144 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1145 static ssize_t sysfs_pkt_count_limit_bo_store_1( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
1146 #else
1147 static ssize_t sysfs_pkt_count_limit_bo_store_1( struct device *_dev, const char *buffer, size_t count )
1148 #endif
1149 {
1150 char buf[10];
1151 int i = 0;
1152 uint32_t value;
1153 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
1154 return -EFAULT;
1155 value = simple_strtoul(buf, NULL, 10);
1156 pkt_count_limit_bo_store_1(value);
1157 return count;
1158 }
1159 DEVICE_ATTR(pkt_count_limit_bo_1, S_IRUGO|S_IWUSR, sysfs_pkt_count_limit_bo_show_1, sysfs_pkt_count_limit_bo_store_1);
1160
1161 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1162 static ssize_t sysfs_pkt_count_limit_bi_show_2( struct device *_dev, struct device_attribute *attr,char *buf)
1163 #else
1164 static ssize_t sysfs_pkt_count_limit_bi_show_2( struct device *_dev,char *buf)
1165 #endif
1166 {
1167 return pkt_count_limit_bi_show_2(buf);
1168 }
1169 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1170 static ssize_t sysfs_pkt_count_limit_bi_store_2( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
1171 #else
1172 static ssize_t sysfs_pkt_count_limit_bi_2( struct device *_dev, const char *buffer, size_t count )
1173 #endif
1174 {
1175 char buf[10];
1176 int i = 0;
1177 uint32_t value;
1178 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
1179 return -EFAULT;
1180 value = simple_strtoul(buf, NULL, 10);
1181 pkt_count_limit_bi_store_2(value);
1182 return count;
1183 }
1184 DEVICE_ATTR(pkt_count_limit_bi_2, S_IRUGO|S_IWUSR, sysfs_pkt_count_limit_bi_show_2, sysfs_pkt_count_limit_bi_store_2);
1185
1186 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1187 static ssize_t sysfs_pkt_count_limit_bo_show_2( struct device *_dev, struct device_attribute *attr,char *buf)
1188 #else
1189 static ssize_t sysfs_pkt_count_limit_bo_show_2( struct device *_dev,char *buf)
1190 #endif
1191 {
1192 return pkt_count_limit_bo_show_2(buf);
1193 }
1194 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1195 static ssize_t sysfs_pkt_count_limit_bo_store_2( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
1196 #else
1197 static ssize_t sysfs_pkt_count_limit_bo_store_2( struct device *_dev, const char *buffer, size_t count )
1198 #endif
1199 {
1200 char buf[10];
1201 int i = 0;
1202 uint32_t value;
1203 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
1204 return -EFAULT;
1205 value = simple_strtoul(buf, NULL, 10);
1206 pkt_count_limit_bo_store_2(value);
1207 return count;
1208 }
1209 DEVICE_ATTR(pkt_count_limit_bo_2, S_IRUGO|S_IWUSR, sysfs_pkt_count_limit_bo_show_2, sysfs_pkt_count_limit_bo_store_2);
1210 #else
1211 static ssize_t pkt_count_limit_bi_show(char *buf)
1212 {
1213 return sprintf( buf, "%d\n",ifxusb_hcd.pkt_count_limit_bi );
1214 }
1215 static ssize_t pkt_count_limit_bo_show(char *buf)
1216 {
1217 return sprintf( buf, "%d\n",ifxusb_hcd.pkt_count_limit_bo );
1218 }
1219 static void pkt_count_limit_bi_store(uint32_t value)
1220 {
1221 if (value<=13)
1222 ifxusb_hcd.pkt_count_limit_bi = value;
1223 }
1224 static void pkt_count_limit_bo_store(uint32_t value)
1225 {
1226 if (value<=13)
1227 ifxusb_hcd.pkt_count_limit_bo = value;
1228 }
1229 static ssize_t procfs_pkt_count_limit_bi_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1230 {
1231 return pkt_count_limit_bi_show(buf);
1232 }
1233 static ssize_t procfs_pkt_count_limit_bo_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1234 {
1235 return pkt_count_limit_bo_show(buf);
1236 }
1237 static ssize_t procfs_pkt_count_limit_bi_store(struct file *file, const char *buffer, unsigned long count, void *data)
1238 {
1239 char buf[10];
1240 int i = 0;
1241 uint32_t value;
1242 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
1243 return -EFAULT;
1244 value = simple_strtoul(buf, NULL, 10);
1245 pkt_count_limit_bi_store(value);
1246 return count;
1247 }
1248 static ssize_t procfs_pkt_count_limit_bo_store(struct file *file, const char *buffer, unsigned long count, void *data)
1249 {
1250 char buf[10];
1251 int i = 0;
1252 uint32_t value;
1253 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
1254 return -EFAULT;
1255 value = simple_strtoul(buf, NULL, 10);
1256 pkt_count_limit_bo_store(value);
1257 return count;
1258 }
1259
1260 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1261 static ssize_t sysfs_pkt_count_limit_bi_show( struct device *_dev, struct device_attribute *attr,char *buf)
1262 #else
1263 static ssize_t sysfs_pkt_count_limit_bi_show( struct device *_dev,char *buf)
1264 #endif
1265 {
1266 return pkt_count_limit_bi_show(buf);
1267 }
1268 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1269 static ssize_t sysfs_pkt_count_limit_bi_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
1270 #else
1271 static ssize_t sysfs_pkt_count_limit_bi_store( struct device *_dev, const char *buffer, size_t count )
1272 #endif
1273 {
1274 char buf[10];
1275 int i = 0;
1276 uint32_t value;
1277 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
1278 return -EFAULT;
1279 value = simple_strtoul(buf, NULL, 10);
1280 pkt_count_limit_bi_store(value);
1281 return count;
1282 }
1283 DEVICE_ATTR(pkt_count_limit_bi, S_IRUGO|S_IWUSR, sysfs_pkt_count_limit_bi_show, sysfs_pkt_count_limit_bi_store);
1284
1285 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1286 static ssize_t sysfs_pkt_count_limit_bo_show( struct device *_dev, struct device_attribute *attr,char *buf)
1287 #else
1288 static ssize_t sysfs_pkt_count_limit_bo_show( struct device *_dev,char *buf)
1289 #endif
1290 {
1291 return pkt_count_limit_bo_show(buf);
1292 }
1293 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1294 static ssize_t sysfs_pkt_count_limit_bo_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
1295 #else
1296 static ssize_t sysfs_pkt_count_limit_bo_store( struct device *_dev, const char *buffer, size_t count )
1297 #endif
1298 {
1299 char buf[10];
1300 int i = 0;
1301 uint32_t value;
1302 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
1303 return -EFAULT;
1304 value = simple_strtoul(buf, NULL, 10);
1305 pkt_count_limit_bo_store(value);
1306 return count;
1307 }
1308 DEVICE_ATTR(pkt_count_limit_bo, S_IRUGO|S_IWUSR, sysfs_pkt_count_limit_bo_show, sysfs_pkt_count_limit_bo_store);
1309 #endif
1310
1311 /////////////////////////////////////////////////////////////////////////////////////////////////////
1312 /////////////////////////////////////////////////////////////////////////////////////////////////////
1313 /////////////////////////////////////////////////////////////////////////////////////////////////////
1314
1315 #ifdef __IS_DUAL__
1316 static ssize_t buspower_show_1(char *buf)
1317 {
1318 if(ifxusb_vbus (&ifxusb_hcd_1.core_if)==1) return sprintf( buf, "1\n" );
1319 if(ifxusb_vbus (&ifxusb_hcd_1.core_if)==0) return sprintf( buf, "0\n" );
1320 return sprintf( buf, "UNKNOWN\n" );
1321 }
1322 static void buspower_store_1(uint32_t value)
1323 {
1324 if (value==1) ifxusb_vbus_on (&ifxusb_hcd_1.core_if);
1325 else if(value==0) ifxusb_vbus_off(&ifxusb_hcd_1.core_if);
1326 }
1327 static ssize_t buspower_show_2(char *buf)
1328 {
1329 if(ifxusb_vbus (&ifxusb_hcd_2.core_if)==1) return sprintf( buf, "1\n" );
1330 if(ifxusb_vbus (&ifxusb_hcd_2.core_if)==0) return sprintf( buf, "0\n" );
1331 return sprintf( buf, "UNKNOWN\n" );
1332 }
1333 static void buspower_store_2(uint32_t value)
1334 {
1335 if (value==1) ifxusb_vbus_on (&ifxusb_hcd_2.core_if);
1336 else if(value==0) ifxusb_vbus_off(&ifxusb_hcd_2.core_if);
1337 }
1338 static ssize_t procfs_buspower_show_1(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1339 {
1340 return buspower_show_1(buf);
1341 }
1342 static ssize_t procfs_buspower_store_1(struct file *file, const char *buffer, unsigned long count, void *data)
1343 {
1344 char buf[10];
1345 int i = 0;
1346 uint32_t value;
1347 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
1348 return -EFAULT;
1349 value = simple_strtoul(buf, NULL, 10);
1350 buspower_store_1(value);
1351 return count;
1352 }
1353 static ssize_t procfs_buspower_show_2(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1354 {
1355 return buspower_show_2(buf);
1356 }
1357 static ssize_t procfs_buspower_store_2(struct file *file, const char *buffer, unsigned long count, void *data)
1358 {
1359 char buf[10];
1360 int i = 0;
1361 uint32_t value;
1362 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
1363 return -EFAULT;
1364 value = simple_strtoul(buf, NULL, 10);
1365 buspower_store_2(value);
1366 return count;
1367 }
1368
1369 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1370 static ssize_t sysfs_buspower_show_1( struct device *_dev, struct device_attribute *attr,char *buf)
1371 #else
1372 static ssize_t sysfs_buspower_show_1( struct device *_dev,char *buf)
1373 #endif
1374 {
1375 return buspower_show_1(buf);
1376 }
1377 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1378 static ssize_t sysfs_buspower_store_1( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
1379 #else
1380 static ssize_t sysfs_buspower_store_1( struct device *_dev, const char *buffer, size_t count )
1381 #endif
1382 {
1383 char buf[10];
1384 int i = 0;
1385 uint32_t value;
1386 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
1387 return -EFAULT;
1388 value = simple_strtoul(buf, NULL, 10);
1389 buspower_store_1(value);
1390 return count;
1391 }
1392 DEVICE_ATTR(buspower_1, S_IRUGO|S_IWUSR, sysfs_buspower_show_1, sysfs_buspower_store_1);
1393
1394 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1395 static ssize_t sysfs_buspower_show_2( struct device *_dev, struct device_attribute *attr,char *buf)
1396 #else
1397 static ssize_t sysfs_buspower_show_2( struct device *_dev,char *buf)
1398 #endif
1399 {
1400 return buspower_show_2(buf);
1401 }
1402 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1403 static ssize_t sysfs_buspower_store_2( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
1404 #else
1405 static ssize_t sysfs_buspower_store_2( struct device *_dev, const char *buffer, size_t count )
1406 #endif
1407 {
1408 char buf[10];
1409 int i = 0;
1410 uint32_t value;
1411 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
1412 return -EFAULT;
1413 value = simple_strtoul(buf, NULL, 10);
1414 buspower_store_2(value);
1415 return count;
1416 }
1417 DEVICE_ATTR(buspower_2, S_IRUGO|S_IWUSR, sysfs_buspower_show_2, sysfs_buspower_store_2);
1418 #else
1419 static ssize_t buspower_show(char *buf)
1420 {
1421 if(ifxusb_vbus (&ifxusb_hcd.core_if)==1) return sprintf( buf, "1\n" );
1422 if(ifxusb_vbus (&ifxusb_hcd.core_if)==0) return sprintf( buf, "0\n" );
1423 return sprintf( buf, "UNKNOWN\n" );
1424 }
1425 static void buspower_store(uint32_t value)
1426 {
1427 if (value==1) ifxusb_vbus_on (&ifxusb_hcd.core_if);
1428 else if(value==0) ifxusb_vbus_off(&ifxusb_hcd.core_if);
1429 }
1430 static ssize_t procfs_buspower_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1431 {
1432 return buspower_show(buf);
1433 }
1434 static ssize_t procfs_buspower_store(struct file *file, const char *buffer, unsigned long count, void *data)
1435 {
1436 char buf[10];
1437 int i = 0;
1438 uint32_t value;
1439 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
1440 return -EFAULT;
1441 value = simple_strtoul(buf, NULL, 10);
1442 buspower_store(value);
1443 return count;
1444 }
1445 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1446 static ssize_t sysfs_buspower_show( struct device *_dev, struct device_attribute *attr,char *buf)
1447 #else
1448 static ssize_t sysfs_buspower_show( struct device *_dev, char *buf)
1449 #endif
1450 {
1451 return buspower_show(buf);
1452 }
1453 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1454 static ssize_t sysfs_buspower_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
1455 #else
1456 static ssize_t sysfs_buspower_store( struct device *_dev, const char *buffer, size_t count )
1457 #endif
1458 {
1459 char buf[10];
1460 int i = 0;
1461 uint32_t value;
1462 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
1463 return -EFAULT;
1464 value = simple_strtoul(buf, NULL, 10);
1465 buspower_store(value);
1466 return count;
1467 }
1468 DEVICE_ATTR(buspower, S_IRUGO|S_IWUSR, sysfs_buspower_show, sysfs_buspower_store);
1469 #endif
1470
1471 /////////////////////////////////////////////////////////////////////////////////////////////////////
1472 /////////////////////////////////////////////////////////////////////////////////////////////////////
1473 /////////////////////////////////////////////////////////////////////////////////////////////////////
1474
1475
1476 #ifdef __IS_DUAL__
1477 static ssize_t bussuspend_show_1(char *buf)
1478 {
1479 hprt0_data_t val;
1480 val.d32 = ifxusb_rreg(ifxusb_hcd_1.core_if.hprt0);
1481 return sprintf (buf, "Bus Suspend = 0x%x\n", val.b.prtsusp);
1482 }
1483 static ssize_t bussuspend_show_2(char *buf)
1484 {
1485 hprt0_data_t val;
1486 val.d32 = ifxusb_rreg(ifxusb_hcd_2.core_if.hprt0);
1487 return sprintf (buf, "Bus Suspend = 0x%x\n", val.b.prtsusp);
1488 }
1489
1490 static ssize_t procfs_bussuspend_show_1(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1491 {
1492 return bussuspend_show_1(buf);
1493 }
1494 static ssize_t procfs_bussuspend_show_2(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1495 {
1496 return bussuspend_show_2(buf);
1497 }
1498 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1499 static ssize_t sysfs_bussuspend_show_1( struct device *_dev, struct device_attribute *attr,char *buf)
1500 #else
1501 static ssize_t sysfs_bussuspend_show_1( struct device *_dev,char *buf)
1502 #endif
1503 {
1504 return bussuspend_show_1(buf);
1505 }
1506 DEVICE_ATTR(bussuspend_1, S_IRUGO|S_IWUSR, sysfs_bussuspend_show_1, 0);
1507 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1508 static ssize_t sysfs_bussuspend_show_2( struct device *_dev, struct device_attribute *attr,char *buf)
1509 #else
1510 static ssize_t sysfs_bussuspend_show_2( struct device *_dev,char *buf)
1511 #endif
1512 {
1513 return bussuspend_show_2(buf);
1514 }
1515 DEVICE_ATTR(bussuspend_2, S_IRUGO|S_IWUSR, sysfs_bussuspend_show_2, 0);
1516 #else
1517 static ssize_t bussuspend_show(char *buf)
1518 {
1519 hprt0_data_t val;
1520 val.d32 = ifxusb_rreg(ifxusb_hcd.core_if.hprt0);
1521 return sprintf (buf, "Bus Suspend = 0x%x\n", val.b.prtsusp);
1522 }
1523 static ssize_t procfs_bussuspend_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1524 {
1525 return bussuspend_show(buf);
1526 }
1527
1528 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1529 static ssize_t sysfs_bussuspend_show( struct device *_dev, struct device_attribute *attr,char *buf)
1530 #else
1531 static ssize_t sysfs_bussuspend_show( struct device *_dev, char *buf)
1532 #endif
1533 {
1534 return bussuspend_show(buf);
1535 }
1536 DEVICE_ATTR(bussuspend, S_IRUGO|S_IWUSR, sysfs_bussuspend_show, 0);
1537 #endif
1538
1539 /////////////////////////////////////////////////////////////////////////////////////////////////////
1540 /////////////////////////////////////////////////////////////////////////////////////////////////////
1541 /////////////////////////////////////////////////////////////////////////////////////////////////////
1542
1543 #ifdef __IS_DUAL__
1544 static ssize_t busconnected_show_1(char *buf)
1545 {
1546 hprt0_data_t val;
1547 val.d32 = ifxusb_rreg(ifxusb_hcd_1.core_if.hprt0);
1548 return sprintf (buf, "Bus Connected = 0x%x\n", val.b.prtconnsts);
1549 }
1550 static ssize_t busconnected_show_2(char *buf)
1551 {
1552 hprt0_data_t val;
1553 val.d32 = ifxusb_rreg(ifxusb_hcd_2.core_if.hprt0);
1554 return sprintf (buf, "Bus Connected = 0x%x\n", val.b.prtconnsts);
1555 }
1556
1557 static ssize_t procfs_busconnected_show_1(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1558 {
1559 return busconnected_show_1(buf);
1560 }
1561 static ssize_t procfs_busconnected_show_2(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1562 {
1563 return busconnected_show_2(buf);
1564 }
1565 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1566 static ssize_t sysfs_busconnected_show_1( struct device *_dev, struct device_attribute *attr,char *buf)
1567 #else
1568 static ssize_t sysfs_busconnected_show_1( struct device *_dev,char *buf)
1569 #endif
1570 {
1571 return busconnected_show_1(buf);
1572 }
1573 DEVICE_ATTR(busconnected_1, S_IRUGO|S_IWUSR, sysfs_busconnected_show_1, 0);
1574 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1575 static ssize_t sysfs_busconnected_show_2( struct device *_dev, struct device_attribute *attr,char *buf)
1576 #else
1577 static ssize_t sysfs_busconnected_show_2( struct device *_dev,char *buf)
1578 #endif
1579 {
1580 return busconnected_show_2(buf);
1581 }
1582 DEVICE_ATTR(busconnected_2, S_IRUGO|S_IWUSR, sysfs_busconnected_show_2, 0);
1583 #else
1584 static ssize_t busconnected_show(char *buf)
1585 {
1586 hprt0_data_t val;
1587 val.d32 = ifxusb_rreg(ifxusb_hcd.core_if.hprt0);
1588 return sprintf (buf, "Bus Connected = 0x%x\n", val.b.prtconnsts);
1589 }
1590 static ssize_t procfs_busconnected_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1591 {
1592 return busconnected_show(buf);
1593 }
1594
1595 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1596 static ssize_t sysfs_busconnected_show( struct device *_dev, struct device_attribute *attr,char *buf)
1597 #else
1598 static ssize_t sysfs_busconnected_show( struct device *_dev, char *buf)
1599 #endif
1600 {
1601 return busconnected_show(buf);
1602 }
1603 DEVICE_ATTR(busconnected, S_IRUGO|S_IWUSR, sysfs_busconnected_show, 0);
1604 #endif
1605
1606 /////////////////////////////////////////////////////////////////////////////////////////////////////
1607 /////////////////////////////////////////////////////////////////////////////////////////////////////
1608 /////////////////////////////////////////////////////////////////////////////////////////////////////
1609
1610 #ifdef __IS_DUAL__
1611 static ssize_t connectspeed_show_1(char *buf)
1612 {
1613 hprt0_data_t val;
1614 val.d32 = ifxusb_rreg(ifxusb_hcd_1.core_if.hprt0);
1615 if( val.b.prtspd ==0) return sprintf (buf, "Bus Speed = High (%d)\n", val.b.prtspd);
1616 if( val.b.prtspd ==1) return sprintf (buf, "Bus Speed = Full (%d)\n", val.b.prtspd);
1617 if( val.b.prtspd ==2) return sprintf (buf, "Bus Speed = Low (%d)\n", val.b.prtspd);
1618 return sprintf (buf, "Bus Speed = Unknown (%d)\n", val.b.prtspd);
1619 }
1620 static ssize_t connectspeed_show_2(char *buf)
1621 {
1622 hprt0_data_t val;
1623 val.d32 = ifxusb_rreg(ifxusb_hcd_2.core_if.hprt0);
1624 if( val.b.prtspd ==0) return sprintf (buf, "Bus Speed = High (%d)\n", val.b.prtspd);
1625 if( val.b.prtspd ==1) return sprintf (buf, "Bus Speed = Full (%d)\n", val.b.prtspd);
1626 if( val.b.prtspd ==2) return sprintf (buf, "Bus Speed = Low (%d)\n", val.b.prtspd);
1627 return sprintf (buf, "Bus Speed = Unknown (%d)\n", val.b.prtspd);
1628 }
1629
1630 static ssize_t procfs_connectspeed_show_1(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1631 {
1632 return connectspeed_show_1(buf);
1633 }
1634 static ssize_t procfs_connectspeed_show_2(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1635 {
1636 return connectspeed_show_2(buf);
1637 }
1638 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1639 static ssize_t sysfs_connectspeed_show_1( struct device *_dev, struct device_attribute *attr,char *buf)
1640 #else
1641 static ssize_t sysfs_connectspeed_show_1( struct device *_dev,char *buf)
1642 #endif
1643 {
1644 return connectspeed_show_1(buf);
1645 }
1646 DEVICE_ATTR(connectspeed_1, S_IRUGO|S_IWUSR, sysfs_connectspeed_show_1, 0);
1647 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1648 static ssize_t sysfs_connectspeed_show_2( struct device *_dev, struct device_attribute *attr,char *buf)
1649 #else
1650 static ssize_t sysfs_connectspeed_show_2( struct device *_dev,char *buf)
1651 #endif
1652 {
1653 return connectspeed_show_2(buf);
1654 }
1655 DEVICE_ATTR(connectspeed_2, S_IRUGO|S_IWUSR, sysfs_connectspeed_show_2, 0);
1656 #else
1657 static ssize_t connectspeed_show(char *buf)
1658 {
1659 hprt0_data_t val;
1660 val.d32 = ifxusb_rreg(ifxusb_hcd.core_if.hprt0);
1661 if( val.b.prtspd ==0) return sprintf (buf, "Bus Speed = High (%d)\n", val.b.prtspd);
1662 if( val.b.prtspd ==1) return sprintf (buf, "Bus Speed = Full (%d)\n", val.b.prtspd);
1663 if( val.b.prtspd ==2) return sprintf (buf, "Bus Speed = Low (%d)\n", val.b.prtspd);
1664 return sprintf (buf, "Bus Speed = Unknown (%d)\n", val.b.prtspd);
1665 }
1666
1667 static ssize_t procfs_connectspeed_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1668 {
1669 return connectspeed_show(buf);
1670 }
1671
1672 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1673 static ssize_t sysfs_connectspeed_show( struct device *_dev, struct device_attribute *attr,char *buf)
1674 #else
1675 static ssize_t sysfs_connectspeed_show( struct device *_dev, char *buf)
1676 #endif
1677 {
1678 return connectspeed_show(buf);
1679 }
1680 DEVICE_ATTR(connectspeed, S_IRUGO|S_IWUSR, sysfs_connectspeed_show, 0);
1681 #endif
1682 /////////////////////////////////////////////////////////////////////////////////////////////////////
1683 /////////////////////////////////////////////////////////////////////////////////////////////////////
1684 /////////////////////////////////////////////////////////////////////////////////////////////////////
1685 #endif
1686
1687
1688 #ifdef __IS_DEVICE__
1689 /////////////////////////////////////////////////////////////////////////////////////////////////////
1690 /////////////////////////////////////////////////////////////////////////////////////////////////////
1691 /////////////////////////////////////////////////////////////////////////////////////////////////////
1692 static ssize_t devspeed_show(char *buf)
1693 {
1694 dcfg_data_t val;
1695 val.d32 = ifxusb_rreg(&ifxusb_pcd.core_if.dev_global_regs->dcfg);
1696 if( val.b.devspd ==0) return sprintf (buf, "Dev Speed = High (%d)\n", val.b.devspd);
1697 if( val.b.devspd ==1) return sprintf (buf, "Dev Speed = Full (%d)\n", val.b.devspd);
1698 if( val.b.devspd ==3) return sprintf (buf, "Dev Speed = Full (%d)\n", val.b.devspd);
1699 return sprintf (buf, "Dev Speed = Unknown (%d)\n", val.b.devspd);
1700 }
1701
1702 static ssize_t procfs_devspeed_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1703 {
1704 return devspeed_show(buf);
1705 }
1706
1707 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1708 static ssize_t sysfs_devspeed_show( struct device *_dev, struct device_attribute *attr,char *buf)
1709 #else
1710 static ssize_t sysfs_devspeed_show( struct device *_dev, char *buf)
1711 #endif
1712 {
1713 return devspeed_show(buf);
1714 }
1715 DEVICE_ATTR(devspeed, S_IRUGO|S_IWUSR, sysfs_devspeed_show, 0);
1716
1717 static ssize_t enumspeed_show(char *buf)
1718 {
1719 dsts_data_t val;
1720 val.d32 = ifxusb_rreg(&ifxusb_pcd.core_if.dev_global_regs->dsts);
1721 if( val.b.enumspd ==0) return sprintf (buf, "Enum Speed = High (%d)\n", val.b.enumspd);
1722 if( val.b.enumspd ==1) return sprintf (buf, "Enum Speed = Full (%d)\n", val.b.enumspd);
1723 if( val.b.enumspd ==2) return sprintf (buf, "Enum Speed = Low (%d)\n", val.b.enumspd);
1724 return sprintf (buf, "Enum Speed = invalid(%d)\n", val.b.enumspd);
1725 }
1726
1727 static ssize_t procfs_enumspeed_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1728 {
1729 return enumspeed_show(buf);
1730 }
1731
1732 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1733 static ssize_t sysfs_enumspeed_show( struct device *_dev, struct device_attribute *attr,char *buf)
1734 #else
1735 static ssize_t sysfs_enumspeed_show( struct device *_dev, char *buf)
1736 #endif
1737 {
1738 return enumspeed_show(buf);
1739 }
1740 DEVICE_ATTR(enumspeed, S_IRUGO|S_IWUSR, sysfs_enumspeed_show, 0);
1741 /////////////////////////////////////////////////////////////////////////////////////////////////////
1742 /////////////////////////////////////////////////////////////////////////////////////////////////////
1743 /////////////////////////////////////////////////////////////////////////////////////////////////////
1744 #endif
1745
1746
1747 //////////////////////////////////////////////////////////////////////////////////
1748 #ifdef __ENABLE_DUMP__
1749
1750 #ifdef __IS_DUAL__
1751 static void dump_reg_1(void)
1752 {
1753 ifxusb_dump_registers_h(&ifxusb_hcd_1.core_if);
1754 }
1755 static void dump_reg_2(void)
1756 {
1757 ifxusb_dump_registers_h(&ifxusb_hcd_2.core_if);
1758 }
1759
1760 static ssize_t procfs_dump_reg_show_1(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1761 {
1762 dump_reg_1();
1763 return 0;
1764 }
1765 static ssize_t procfs_dump_reg_show_2(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1766 {
1767 dump_reg_2();
1768 return 0;
1769 }
1770 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1771 static ssize_t sysfs_dump_reg_show_1( struct device *_dev, struct device_attribute *attr,char *buf)
1772 #else
1773 static ssize_t sysfs_dump_reg_show_1( struct device *_dev,char *buf)
1774 #endif
1775 {
1776 dump_reg_1();
1777 return 0;
1778 }
1779 DEVICE_ATTR(dump_reg_h_1, S_IRUGO|S_IWUSR, sysfs_dump_reg_show_1, 0);
1780 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1781 static ssize_t sysfs_dump_reg_show_2( struct device *_dev, struct device_attribute *attr,char *buf)
1782 #else
1783 static ssize_t sysfs_dump_reg_show_2( struct device *_dev,char *buf)
1784 #endif
1785 {
1786 dump_reg_2();
1787 return 0;
1788 }
1789 DEVICE_ATTR(dump_reg_h_2, S_IRUGO|S_IWUSR, sysfs_dump_reg_show_2, 0);
1790 #else
1791 static void dump_reg(void)
1792 {
1793 #ifdef __IS_HOST__
1794 ifxusb_dump_registers_h(&ifxusb_hcd.core_if);
1795 #endif
1796 #ifdef __IS_DEVICE__
1797 ifxusb_dump_registers_d(&ifxusb_pcd.core_if);
1798 #endif
1799 }
1800 static ssize_t procfs_dump_reg_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1801 {
1802 dump_reg();
1803 return 0;
1804 }
1805 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1806 static ssize_t sysfs_dump_reg_show( struct device *_dev, struct device_attribute *attr,char *buf)
1807 #else
1808 static ssize_t sysfs_dump_reg_show( struct device *_dev,char *buf)
1809 #endif
1810 {
1811 dump_reg();
1812 return 0;
1813 }
1814 #ifdef __IS_HOST__
1815 DEVICE_ATTR(dump_reg_h, S_IRUGO|S_IWUSR, sysfs_dump_reg_show, 0);
1816 #else
1817 DEVICE_ATTR(dump_reg_d, S_IRUGO|S_IWUSR, sysfs_dump_reg_show, 0);
1818 #endif
1819 #endif
1820
1821
1822 /////////////////////////////////////////////////////////////////////////////////////////////////////
1823 /////////////////////////////////////////////////////////////////////////////////////////////////////
1824 /////////////////////////////////////////////////////////////////////////////////////////////////////
1825
1826 #ifdef __IS_DUAL__
1827 static void dump_spram_1(void)
1828 {
1829 ifxusb_dump_spram_h(&ifxusb_hcd_1.core_if);
1830 }
1831 static void dump_spram_2(void)
1832 {
1833 ifxusb_dump_spram_h(&ifxusb_hcd_2.core_if);
1834 }
1835
1836 static ssize_t procfs_dump_spram_show_1(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1837 {
1838 dump_spram_1();
1839 return 0;
1840 }
1841 static ssize_t procfs_dump_spram_show_2(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1842 {
1843 dump_spram_2();
1844 return 0;
1845 }
1846 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1847 static ssize_t sysfs_dump_spram_show_1( struct device *_dev, struct device_attribute *attr,char *buf)
1848 #else
1849 static ssize_t sysfs_dump_spram_show_1( struct device *_dev,char *buf)
1850 #endif
1851 {
1852 dump_spram_1();
1853 return 0;
1854 }
1855 DEVICE_ATTR(dump_spram_h_1, S_IRUGO|S_IWUSR, sysfs_dump_spram_show_1, 0);
1856
1857 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1858 static ssize_t sysfs_dump_spram_show_2( struct device *_dev, struct device_attribute *attr,char *buf)
1859 #else
1860 static ssize_t sysfs_dump_spram_show_2( struct device *_dev,char *buf)
1861 #endif
1862 {
1863 dump_spram_2();
1864 return 0;
1865 }
1866 DEVICE_ATTR(dump_spram_h_2, S_IRUGO|S_IWUSR, sysfs_dump_spram_show_2, 0);
1867 #else
1868 static void dump_spram(void)
1869 {
1870 #ifdef __IS_HOST__
1871 ifxusb_dump_spram_h(&ifxusb_hcd.core_if);
1872 #endif
1873 #ifdef __IS_DEVICE__
1874 ifxusb_dump_spram_d(&ifxusb_pcd.core_if);
1875 #endif
1876 }
1877 static ssize_t procfs_dump_spram_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1878 {
1879 dump_spram();
1880 return 0;
1881 }
1882 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1883 static ssize_t sysfs_dump_spram_show( struct device *_dev, struct device_attribute *attr,char *buf)
1884 #else
1885 static ssize_t sysfs_dump_spram_show( struct device *_dev,char *buf)
1886 #endif
1887 {
1888 dump_spram();
1889 return 0;
1890 }
1891 #ifdef __IS_HOST__
1892 DEVICE_ATTR(dump_spram_h, S_IRUGO|S_IWUSR, sysfs_dump_spram_show, 0);
1893 #else
1894 DEVICE_ATTR(dump_spram_d, S_IRUGO|S_IWUSR, sysfs_dump_spram_show, 0);
1895 #endif
1896
1897 #endif
1898 /////////////////////////////////////////////////////////////////////////////////////////////////////
1899 /////////////////////////////////////////////////////////////////////////////////////////////////////
1900 /////////////////////////////////////////////////////////////////////////////////////////////////////
1901
1902 #ifdef __IS_HOST__
1903 #ifdef __IS_DUAL__
1904 static ssize_t procfs_dump_host_state_show_1(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1905 {
1906 ifxhcd_dump_state(&ifxusb_hcd_1);
1907 return 0;
1908 }
1909 static ssize_t procfs_dump_host_state_show_2(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1910 {
1911 ifxhcd_dump_state(&ifxusb_hcd_2);
1912 return 0;
1913 }
1914 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1915 static ssize_t sysfs_dump_host_state_show_1( struct device *_dev, struct device_attribute *attr,char *buf)
1916 #else
1917 static ssize_t sysfs_dump_host_state_show_1( struct device *_dev,char *buf)
1918 #endif
1919 {
1920 ifxhcd_dump_state(&ifxusb_hcd_1);
1921 return 0;
1922 }
1923 DEVICE_ATTR(dump_host_state_1, S_IRUGO|S_IWUSR, sysfs_dump_host_state_show_1, 0);
1924 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1925 static ssize_t sysfs_dump_host_state_show_2( struct device *_dev, struct device_attribute *attr,char *buf)
1926 #else
1927 static ssize_t sysfs_dump_host_state_show_2( struct device *_dev,char *buf)
1928 #endif
1929 {
1930 ifxhcd_dump_state(&ifxusb_hcd_2);
1931 return 0;
1932 }
1933 DEVICE_ATTR(dump_host_state_2, S_IRUGO|S_IWUSR, sysfs_dump_host_state_show_2, 0);
1934 #else
1935 static ssize_t procfs_dump_host_state_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
1936 {
1937 ifxhcd_dump_state(&ifxusb_hcd);
1938 return 0;
1939 }
1940 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1941 static ssize_t sysfs_dump_host_state_show( struct device *_dev, struct device_attribute *attr,char *buf)
1942 #else
1943 static ssize_t sysfs_dump_host_state_show( struct device *_dev,char *buf)
1944 #endif
1945 {
1946 ifxhcd_dump_state(&ifxusb_hcd);
1947 return 0;
1948 }
1949 DEVICE_ATTR(dump_host_state, S_IRUGO|S_IWUSR, sysfs_dump_host_state_show, 0);
1950 #endif
1951
1952 /////////////////////////////////////////////////////////////////////////////////////////////////////
1953 /////////////////////////////////////////////////////////////////////////////////////////////////////
1954 /////////////////////////////////////////////////////////////////////////////////////////////////////
1955
1956 #endif //IS_HOST_
1957
1958 #endif //__ENABLE_DUMP__
1959 /////////////////////////////////////////////////////////////////////////////////////////////////////
1960 /////////////////////////////////////////////////////////////////////////////////////////////////////
1961 #ifdef __IS_HOST__
1962 static void host_probe(unsigned long _ptr)
1963 {
1964 ifxhcd_hcd_t *ifxhcd = (ifxhcd_hcd_t *)_ptr;
1965
1966 if(ifxhcd->flags.b.port_connect_status)
1967 {
1968 del_timer(&ifxhcd->host_probe_timer);
1969 del_timer(&ifxhcd->autoprobe_timer);
1970 ifxhcd->power_status = 0;
1971 }
1972 else
1973 {
1974 del_timer(&ifxhcd->autoprobe_timer);
1975 ifxhcd->autoprobe_timer.expires = jiffies + (HZ*ifxhcd->autoprobe_sec);
1976 add_timer(&ifxhcd->autoprobe_timer);
1977 ifxhcd->power_status = 2;
1978 del_timer(&ifxhcd->host_probe_timer);
1979 do_suspend_h(&ifxhcd->core_if);
1980 }
1981 }
1982
1983 static void host_autoprobe(unsigned long _ptr)
1984 {
1985 ifxhcd_hcd_t *ifxhcd = (ifxhcd_hcd_t *)_ptr;
1986 del_timer(&ifxhcd->host_probe_timer);
1987 ifxhcd->host_probe_timer.function = host_probe;
1988 ifxhcd->host_probe_timer.expires = jiffies + (HZ*ifxhcd->probe_sec);
1989 ifxhcd->host_probe_timer.data = (unsigned long)ifxhcd;
1990 add_timer(&ifxhcd->host_probe_timer);
1991 do_resume_h(&ifxhcd->core_if);
1992 }
1993
1994 static void suspend_host_store(ifxhcd_hcd_t *ifxhcd , uint32_t value)
1995 {
1996 if(value==2)
1997 {
1998 del_timer(&ifxhcd->autoprobe_timer);
1999 ifxhcd->autoprobe_timer.function = host_autoprobe;
2000 ifxhcd->autoprobe_timer.expires = jiffies + (HZ*ifxhcd->autoprobe_sec);
2001 ifxhcd->autoprobe_timer.data = (unsigned long)ifxhcd;
2002 add_timer(&ifxhcd->autoprobe_timer);
2003 ifxhcd->power_status = 2;
2004 }
2005 else if(value==1)
2006 {
2007 do_suspend_h(&ifxhcd->core_if);
2008 ifxhcd->power_status = 1;
2009 del_timer(&ifxhcd->host_probe_timer);
2010 del_timer(&ifxhcd->autoprobe_timer);
2011 }
2012 else if(value==0)
2013 {
2014 do_resume_h(&ifxhcd->core_if);
2015 ifxhcd->power_status = 0;
2016 del_timer(&ifxhcd->host_probe_timer);
2017 del_timer(&ifxhcd->autoprobe_timer);
2018 }
2019 }
2020 #ifdef __IS_DUAL__
2021 static ssize_t procfs_suspend_host_2_store(struct file *file, const char *buffer, unsigned long count, void *data)
2022 {
2023 char buf[10];
2024 int i = 0;
2025 uint32_t value;
2026 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2027 return -EFAULT;
2028 value = simple_strtoul(buf, NULL, 10);
2029 suspend_host_store(&ifxusb_hcd_2,value);
2030 return count;
2031 }
2032
2033 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2034 static ssize_t sysfs_suspend_host_2_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
2035 #else
2036 static ssize_t sysfs_suspend_host_2_store( struct device *_dev, const char *buffer, size_t count )
2037 #endif
2038 {
2039 char buf[10];
2040 int i = 0;
2041 uint32_t value;
2042 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2043 return -EFAULT;
2044 value = simple_strtoul(buf, NULL, 10);
2045 suspend_host_store(&ifxusb_hcd_2,value);
2046 return count;
2047 }
2048
2049 static ssize_t procfs_suspend_host_1_store(struct file *file, const char *buffer, unsigned long count, void *data)
2050 {
2051 char buf[10];
2052 int i = 0;
2053 uint32_t value;
2054 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2055 return -EFAULT;
2056 value = simple_strtoul(buf, NULL, 10);
2057 suspend_host_store(&ifxusb_hcd_1,value);
2058 return count;
2059 }
2060
2061 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2062 static ssize_t sysfs_suspend_host_1_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
2063 #else
2064 static ssize_t sysfs_suspend_host_1_store( struct device *_dev, const char *buffer, size_t count )
2065 #endif
2066 {
2067 char buf[10];
2068 int i = 0;
2069 uint32_t value;
2070 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2071 return -EFAULT;
2072 value = simple_strtoul(buf, NULL, 10);
2073 suspend_host_store(&ifxusb_hcd_1,value);
2074 return count;
2075 }
2076 DEVICE_ATTR(suspend_host_2, S_IWUSR,NULL, sysfs_suspend_host_2_store);
2077 DEVICE_ATTR(suspend_host_1, S_IWUSR,NULL, sysfs_suspend_host_1_store);
2078 /////////////////////////////////////////////////////////////////////////////////////////////////////
2079 #else
2080 static ssize_t procfs_suspend_host_store(struct file *file, const char *buffer, unsigned long count, void *data)
2081 {
2082 char buf[10];
2083 int i = 0;
2084 uint32_t value;
2085 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2086 return -EFAULT;
2087 value = simple_strtoul(buf, NULL, 10);
2088 suspend_host_store(&ifxusb_hcd,value);
2089 return count;
2090 }
2091
2092 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2093 static ssize_t sysfs_suspend_host_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
2094 #else
2095 static ssize_t sysfs_suspend_host_store( struct device *_dev, const char *buffer, size_t count )
2096 #endif
2097 {
2098 char buf[10];
2099 int i = 0;
2100 uint32_t value;
2101 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2102 return -EFAULT;
2103 value = simple_strtoul(buf, NULL, 10);
2104 suspend_host_store(&ifxusb_hcd,value);
2105 return count;
2106 }
2107 DEVICE_ATTR(suspend_host, S_IWUSR,NULL, sysfs_suspend_host_store);
2108 #endif
2109 #endif
2110
2111 /////////////////////////////////////////////////////////////////////////////////////////////////////
2112 /////////////////////////////////////////////////////////////////////////////////////////////////////
2113 #ifdef __IS_HOST__
2114 static void probe_host_store(ifxhcd_hcd_t *ifxhcd, uint32_t value)
2115 {
2116 if(ifxhcd->power_status == 1)
2117 {
2118 del_timer(&ifxhcd->host_probe_timer);
2119 ifxhcd->host_probe_timer.function = host_probe;
2120 ifxhcd->host_probe_timer.expires = jiffies + (HZ*ifxhcd->probe_sec);
2121 ifxhcd->host_probe_timer.data = (unsigned long) ifxhcd;
2122 add_timer(&ifxhcd->host_probe_timer);
2123 do_resume_h(&ifxhcd->core_if);
2124 }
2125 }
2126 #ifdef __IS_DUAL__
2127 static ssize_t probe_host_2_show(char *buf)
2128 {
2129 if(ifxusb_hcd_2.power_status == 0)
2130 return sprintf (buf,"Host 2 power status is ON\n");
2131 else if(ifxusb_hcd_2.power_status == 1)
2132 return sprintf (buf,"Host 2 power status is Suspend\n");
2133 else
2134 return sprintf (buf,"Host 2 power status is Auto-probing\n");
2135 }
2136 static ssize_t probe_host_1_show(char *buf)
2137 {
2138 if(ifxusb_hcd_1.power_status == 0)
2139 return sprintf (buf,"Host 1 power status is ON\n");
2140 else if(ifxusb_hcd_1.power_status == 1)
2141 return sprintf (buf,"Host 1 power status is Suspend\n");
2142 else
2143 return sprintf (buf,"Host 1 power status is Auto-probing\n");
2144 }
2145 static ssize_t procfs_probe_host_2_store(struct file *file, const char *buffer, unsigned long count, void *data)
2146 {
2147 char buf[10];
2148 int i = 0;
2149 uint32_t value;
2150 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2151 return -EFAULT;
2152 value = simple_strtoul(buf, NULL, 10);
2153 probe_host_store(&ifxusb_hcd_2,value);
2154 return count;
2155 }
2156 static ssize_t procfs_probe_host_2_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
2157 {
2158 return probe_host_2_show(buf);
2159 }
2160 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2161 static ssize_t sysfs_probe_host_2_show( struct device *_dev, struct device_attribute *attr,char *buf)
2162 #else
2163 static ssize_t sysfs_probe_host_2_show( struct device *_dev, char *buf)
2164 #endif
2165 {
2166 return probe_host_2_show(buf);
2167 }
2168 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2169 static ssize_t sysfs_probe_host_2_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
2170 #else
2171 static ssize_t sysfs_probe_host_2_store( struct device *_dev, const char *buffer, size_t count )
2172 #endif
2173 {
2174 char buf[10];
2175 int i = 0;
2176 uint32_t value;
2177 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2178 return -EFAULT;
2179 value = simple_strtoul(buf, NULL, 10);
2180 probe_host_store(&ifxusb_hcd_2,value);
2181 return count;
2182 }
2183
2184 static ssize_t procfs_probe_host_1_store(struct file *file, const char *buffer, unsigned long count, void *data)
2185 {
2186 char buf[10];
2187 int i = 0;
2188 uint32_t value;
2189 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2190 return -EFAULT;
2191 value = simple_strtoul(buf, NULL, 10);
2192 probe_host_store(&ifxusb_hcd_1,value);
2193 return count;
2194 }
2195 static ssize_t procfs_probe_host_1_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
2196 {
2197 return probe_host_1_show(buf);
2198 }
2199 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2200 static ssize_t sysfs_probe_host_1_show( struct device *_dev, struct device_attribute *attr,char *buf)
2201 #else
2202 static ssize_t sysfs_probe_host_1_show( struct device *_dev, char *buf)
2203 #endif
2204 {
2205 return probe_host_1_show(buf);
2206 }
2207 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2208 static ssize_t sysfs_probe_host_1_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
2209 #else
2210 static ssize_t sysfs_probe_host_1_store( struct device *_dev, const char *buffer, size_t count )
2211 #endif
2212 {
2213 char buf[10];
2214 int i = 0;
2215 uint32_t value;
2216 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2217 return -EFAULT;
2218 value = simple_strtoul(buf, NULL, 10);
2219 probe_host_store(&ifxusb_hcd_1,value);
2220 return count;
2221 }
2222 DEVICE_ATTR(probe_host_2, S_IRUGO|S_IWUSR, sysfs_probe_host_2_show, sysfs_probe_host_2_store);
2223 DEVICE_ATTR(probe_host_1, S_IRUGO|S_IWUSR, sysfs_probe_host_1_show, sysfs_probe_host_1_store);
2224 /////////////////////////////////////////////////////////////////////////////////////////////////////
2225 #else
2226 static ssize_t probe_host_show(char *buf)
2227 {
2228 if(ifxusb_hcd.power_status == 0)
2229 return sprintf (buf,"Host power status is ON\n");
2230 else if(ifxusb_hcd.power_status == 1)
2231 return sprintf (buf,"Host power status is Suspend\n");
2232 else
2233 return sprintf (buf,"Host power status is Auto-probing\n");
2234 }
2235 static ssize_t procfs_probe_host_store(struct file *file, const char *buffer, unsigned long count, void *data)
2236 {
2237 char buf[10];
2238 int i = 0;
2239 uint32_t value;
2240 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2241 return -EFAULT;
2242 value = simple_strtoul(buf, NULL, 10);
2243 probe_host_store(&ifxusb_hcd,value);
2244 return count;
2245 }
2246 static ssize_t procfs_probe_host_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
2247 {
2248 return probe_host_show(buf);
2249 }
2250 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2251 static ssize_t sysfs_probe_host_show( struct device *_dev, struct device_attribute *attr,char *buf)
2252 #else
2253 static ssize_t sysfs_probe_host_show( struct device *_dev, char *buf)
2254 #endif
2255 {
2256 return probe_host_show(buf);
2257 }
2258 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2259 static ssize_t sysfs_probe_host_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
2260 #else
2261 static ssize_t sysfs_probe_host_store( struct device *_dev, const char *buffer, size_t count )
2262 #endif
2263 {
2264 char buf[10];
2265 int i = 0;
2266 uint32_t value;
2267 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2268 return -EFAULT;
2269 value = simple_strtoul(buf, NULL, 10);
2270 probe_host_store(&ifxusb_hcd,value);
2271 return count;
2272 }
2273 DEVICE_ATTR(probe_host, S_IRUGO|S_IWUSR, sysfs_probe_host_show, sysfs_probe_host_store);
2274 #endif
2275 #endif
2276 /////////////////////////////////////////////////////////////////////////////////////////////////////
2277 /////////////////////////////////////////////////////////////////////////////////////////////////////
2278 #ifdef __IS_DEVICE__
2279 static void device_probe(unsigned long _ptr)
2280 {
2281 if(ifxusb_pcd.power_status == 2)
2282 {
2283 del_timer(&ifxusb_pcd.device_autoprobe_timer);
2284 ifxusb_pcd.device_autoprobe_timer.expires = jiffies + (HZ*ifxusb_pcd.autoprobe_sec);
2285 add_timer(&ifxusb_pcd.device_autoprobe_timer);
2286 ifxusb_pcd.power_status = 2;
2287 do_suspend_d(&ifxusb_pcd.core_if);
2288 }
2289 else if(ifxusb_pcd.power_status == 1)
2290 {
2291 do_suspend_d(&ifxusb_pcd.core_if);
2292 ifxusb_pcd.power_status = 1;
2293 }
2294 }
2295 static void device_autoprobe(unsigned long _ptr)
2296 {
2297 init_timer(&ifxusb_pcd.device_probe_timer);
2298 ifxusb_pcd.device_probe_timer.function = device_probe;
2299 ifxusb_pcd.device_probe_timer.expires = jiffies + (HZ*ifxusb_pcd.probe_sec);
2300 add_timer(&ifxusb_pcd.device_probe_timer);
2301 do_resume_d(&ifxusb_pcd.core_if);
2302 }
2303 static void suspend_device_store(uint32_t value)
2304 {
2305 if(value==2)
2306 {
2307 del_timer(&ifxusb_pcd.device_autoprobe_timer);
2308 ifxusb_pcd.device_autoprobe_timer.function = device_autoprobe;
2309 ifxusb_pcd.device_autoprobe_timer.expires = jiffies + (HZ*ifxusb_pcd.autoprobe_sec);
2310 add_timer(&ifxusb_pcd.device_autoprobe_timer);
2311 ifxusb_pcd.power_status = 2;
2312 }
2313 else if(value==1)
2314 {
2315 do_suspend_d(&ifxusb_pcd.core_if);
2316 ifxusb_pcd.power_status = 1;
2317 del_timer(&ifxusb_pcd.device_autoprobe_timer);
2318 del_timer(&ifxusb_pcd.device_probe_timer);
2319 }
2320 else if(value==0)
2321 {
2322 do_resume_d(&ifxusb_pcd.core_if);
2323 ifxusb_pcd.power_status = 0;
2324 del_timer(&ifxusb_pcd.device_autoprobe_timer);
2325 del_timer(&ifxusb_pcd.device_probe_timer);
2326 }
2327 }
2328 static ssize_t procfs_suspend_device_store(struct file *file, const char *buffer, unsigned long count, void *data)
2329 {
2330 char buf[10];
2331 int i = 0;
2332 uint32_t value;
2333 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2334 return -EFAULT;
2335 value = simple_strtoul(buf, NULL, 10);
2336 suspend_device_store(value);
2337 return count;
2338 }
2339 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2340 static ssize_t sysfs_suspend_device_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
2341 #else
2342 static ssize_t sysfs_suspend_device_store( struct device *_dev, const char *buffer, size_t count )
2343 #endif
2344 {
2345 char buf[10];
2346 int i = 0;
2347 uint32_t value;
2348 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2349 return -EFAULT;
2350 value = simple_strtoul(buf, NULL, 10);
2351 suspend_device_store(value);
2352 return count;
2353 }
2354 DEVICE_ATTR(suspend_device, S_IWUSR,NULL,sysfs_suspend_device_store);
2355 #endif
2356 /////////////////////////////////////////////////////////////////////////////////////////////////////
2357 #ifdef __IS_DEVICE__
2358 static ssize_t probe_device_show(char *buf)
2359 {
2360 if(ifxusb_pcd.power_status == 0)
2361 return sprintf (buf,"Device power status is ON\n");
2362 else if(ifxusb_pcd.power_status == 1)
2363 return sprintf (buf,"Device power status is Suspend\n");
2364 else
2365 return printk(buf,"Device power status is Auto-probing\n");
2366 }
2367 static void probe_device_store(uint32_t value)
2368 {
2369
2370 if(ifxusb_pcd.power_status == 1)
2371 {
2372 del_timer(&ifxusb_pcd.device_probe_timer);
2373 ifxusb_pcd.device_probe_timer.function = device_probe;
2374 ifxusb_pcd.device_probe_timer.expires = jiffies + (HZ*ifxusb_pcd.probe_sec);
2375 add_timer(&ifxusb_pcd.device_probe_timer);
2376 do_resume_d(&ifxusb_pcd.core_if);
2377 }
2378 }
2379 static ssize_t procfs_probe_device_store(struct file *file, const char *buffer, unsigned long count, void *data)
2380 {
2381 char buf[10];
2382 int i = 0;
2383 uint32_t value;
2384 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2385 return -EFAULT;
2386 value = simple_strtoul(buf, NULL, 10);
2387 probe_device_store(value);
2388 return count;
2389 }
2390 static ssize_t procfs_probe_device_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
2391 {
2392 return probe_device_show(buf);
2393 }
2394 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2395 static ssize_t sysfs_probe_device_show( struct device *_dev, struct device_attribute *attr,char *buf)
2396 #else
2397 static ssize_t sysfs_probe_device_show( struct device *_dev, char *buf)
2398 #endif
2399 {
2400 return probe_device_show(buf);
2401 }
2402 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2403 static ssize_t sysfs_probe_device_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
2404 #else
2405 static ssize_t sysfs_probe_device_store( struct device *_dev, const char *buffer, size_t count )
2406 #endif
2407 {
2408 char buf[10];
2409 int i = 0;
2410 uint32_t value;
2411 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2412 return -EFAULT;
2413 value = simple_strtoul(buf, NULL, 10);
2414 probe_device_store(value);
2415 return count;
2416 }
2417 DEVICE_ATTR(probe_device, S_IRUGO|S_IWUSR, sysfs_probe_device_show, sysfs_probe_device_store);
2418 #endif
2419 /////////////////////////////////////////////////////////////////////////////////////////////////////
2420 /////////////////////////////////////////////////////////////////////////////////////////////////////
2421 #ifdef __IS_HOST__
2422 #ifdef __IS_DUAL__
2423 static ssize_t autoprobe_timer2_val_show(char *buf)
2424 {
2425 return sprintf (buf,"Host 2 auto-probe timer is %d second\n",ifxusb_hcd_2.autoprobe_sec);
2426 }
2427 static ssize_t procfs_autoprobe_timer2_val_store(struct file *file, const char *buffer, unsigned long count, void *data)
2428 {
2429 char buf[10];
2430 int i = 0;
2431 uint32_t value;
2432 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2433 return -EFAULT;
2434 value = simple_strtoul(buf, NULL, 10);
2435 if((value > 0)&&(value < 300))
2436 ifxusb_hcd_2.autoprobe_sec = value;
2437 return count;
2438 }
2439 static ssize_t procfs_autoprobe_timer2_val_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
2440 {
2441 return autoprobe_timer2_val_show(buf);
2442 }
2443 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2444 static ssize_t sysfs_autoprobe_timer2_val_show( struct device *_dev, struct device_attribute *attr,char *buf)
2445 #else
2446 static ssize_t sysfs_autoprobe_timer2_val_show( struct device *_dev, char *buf)
2447 #endif
2448 {
2449 return autoprobe_timer2_val_show(buf);
2450 }
2451 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2452 static ssize_t sysfs_autoprobe_timer2_val_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
2453 #else
2454 static ssize_t sysfs_autoprobe_timer2_val_store( struct device *_dev, const char *buffer, size_t count )
2455 #endif
2456 {
2457 char buf[10];
2458 int i = 0;
2459 uint32_t value;
2460 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2461 return -EFAULT;
2462 value = simple_strtoul(buf, NULL, 10);
2463 if((value > 0)&&(value < 300))
2464 ifxusb_hcd_2.autoprobe_sec = value;
2465 return count;
2466 }
2467
2468 static ssize_t autoprobe_timer1_val_show(char *buf)
2469 {
2470 return sprintf (buf,"Host 1 auto-probe timer is %d second\n",ifxusb_hcd_1.autoprobe_sec);
2471 }
2472 static ssize_t procfs_autoprobe_timer1_val_store(struct file *file, const char *buffer, unsigned long count, void *data)
2473 {
2474 char buf[10];
2475 int i = 0;
2476 uint32_t value;
2477 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2478 return -EFAULT;
2479 value = simple_strtoul(buf, NULL, 10);
2480 if((value > 0)&&(value < 300))
2481 ifxusb_hcd_1.autoprobe_sec = value;
2482 return count;
2483 }
2484 static ssize_t procfs_autoprobe_timer1_val_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
2485 {
2486 return autoprobe_timer1_val_show(buf);
2487 }
2488 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2489 static ssize_t sysfs_autoprobe_timer1_val_show( struct device *_dev, struct device_attribute *attr,char *buf)
2490 #else
2491 static ssize_t sysfs_autoprobe_timer1_val_show( struct device *_dev, char *buf)
2492 #endif
2493 {
2494 return autoprobe_timer1_val_show(buf);
2495 }
2496 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2497 static ssize_t sysfs_autoprobe_timer1_val_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
2498 #else
2499 static ssize_t sysfs_autoautoprobe_timer1_val_store( struct device *_dev, const char *buffer, size_t count )
2500 #endif
2501 {
2502 char buf[10];
2503 int i = 0;
2504 uint32_t value;
2505 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2506 return -EFAULT;
2507 value = simple_strtoul(buf, NULL, 10);
2508 if((value > 0)&&(value < 300))
2509 ifxusb_hcd_1.autoprobe_sec = value;
2510 return count;
2511 }
2512
2513 static ssize_t probe_timer2_val_show(char *buf)
2514 {
2515 return sprintf (buf,"Host 2 probe timer is %d second\n",ifxusb_hcd_2.probe_sec);
2516 }
2517 static ssize_t procfs_probe_timer2_val_store(struct file *file, const char *buffer, unsigned long count, void *data)
2518 {
2519 char buf[10];
2520 int i = 0;
2521 uint32_t value;
2522 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2523 return -EFAULT;
2524 value = simple_strtoul(buf, NULL, 10);
2525 if((value > 0)&&(value < 10))
2526 ifxusb_hcd_2.probe_sec = value;
2527 return count;
2528 }
2529 static ssize_t procfs_probe_timer2_val_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
2530 {
2531 return probe_timer2_val_show(buf);
2532 }
2533 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2534 static ssize_t sysfs_probe_timer2_val_show( struct device *_dev, struct device_attribute *attr,char *buf)
2535 #else
2536 static ssize_t sysfs_probe_timer2_val_show( struct device *_dev, char *buf)
2537 #endif
2538 {
2539 return probe_timer2_val_show(buf);
2540 }
2541 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2542 static ssize_t sysfs_probe_timer2_val_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
2543 #else
2544 static ssize_t sysfs_probe_timer2_val_store( struct device *_dev, const char *buffer, size_t count )
2545 #endif
2546 {
2547 char buf[10];
2548 int i = 0;
2549 uint32_t value;
2550 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2551 return -EFAULT;
2552 value = simple_strtoul(buf, NULL, 10);
2553 if((value > 0)&&(value < 10))
2554 ifxusb_hcd_2.probe_sec = value;
2555 return count;
2556 }
2557
2558 static ssize_t probe_timer1_val_show(char *buf)
2559 {
2560 return sprintf (buf,"Host 1 probe timer is %d second\n",ifxusb_hcd_1.probe_sec);
2561 }
2562 static ssize_t procfs_probe_timer1_val_store(struct file *file, const char *buffer, unsigned long count, void *data)
2563 {
2564 char buf[10];
2565 int i = 0;
2566 uint32_t value;
2567 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2568 return -EFAULT;
2569 value = simple_strtoul(buf, NULL, 10);
2570 if((value > 0)&&(value < 10))
2571 ifxusb_hcd_1.probe_sec = value;
2572 return count;
2573 }
2574 static ssize_t procfs_probe_timer1_val_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
2575 {
2576 return probe_timer1_val_show(buf);
2577 }
2578 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2579 static ssize_t sysfs_probe_timer1_val_show( struct device *_dev, struct device_attribute *attr,char *buf)
2580 #else
2581 static ssize_t sysfs_probe_timer1_val_show( struct device *_dev, char *buf)
2582 #endif
2583 {
2584 return probe_timer1_val_show(buf);
2585 }
2586 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2587 static ssize_t sysfs_probe_timer1_val_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
2588 #else
2589 static ssize_t sysfs_probe_timer1_val_store( struct device *_dev, const char *buffer, size_t count )
2590 #endif
2591 {
2592 char buf[10];
2593 int i = 0;
2594 uint32_t value;
2595 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2596 return -EFAULT;
2597 value = simple_strtoul(buf, NULL, 10);
2598 if((value > 0)&&(value < 10))
2599 ifxusb_hcd_1.probe_sec = value;
2600 return count;
2601 }
2602 DEVICE_ATTR(probe_timer1_val_h, S_IRUGO|S_IWUSR, sysfs_probe_timer1_val_show, sysfs_probe_timer1_val_store);
2603 DEVICE_ATTR(probe_timer2_val_h, S_IRUGO|S_IWUSR, sysfs_probe_timer2_val_show, sysfs_probe_timer2_val_store);
2604 DEVICE_ATTR(autoprobe_timer1_val_h, S_IRUGO|S_IWUSR, sysfs_autoprobe_timer1_val_show, sysfs_autoprobe_timer1_val_store);
2605 DEVICE_ATTR(autoprobe_timer2_val_h, S_IRUGO|S_IWUSR, sysfs_autoprobe_timer2_val_show, sysfs_autoprobe_timer2_val_store);
2606 #else
2607 static ssize_t autoprobe_timer_val_show(char *buf)
2608 {
2609 return sprintf (buf,"Host auto-probe timer is %d second\n",ifxusb_hcd.autoprobe_sec);
2610 }
2611 static ssize_t procfs_autoprobe_timer_val_store(struct file *file, const char *buffer, unsigned long count, void *data)
2612 {
2613 char buf[10];
2614 int i = 0;
2615 uint32_t value;
2616 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2617 return -EFAULT;
2618 value = simple_strtoul(buf, NULL, 10);
2619 if((value > 0)&&(value < 300))
2620 ifxusb_hcd.autoprobe_sec = value;
2621 return count;
2622 }
2623 static ssize_t procfs_autoprobe_timer_val_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
2624 {
2625 return autoprobe_timer_val_show(buf);
2626 }
2627 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2628 static ssize_t sysfs_autoprobe_timer_val_show( struct device *_dev, struct device_attribute *attr,char *buf)
2629 #else
2630 static ssize_t sysfs_autoprobe_timer_val_show( struct device *_dev, char *buf)
2631 #endif
2632 {
2633 return autoprobe_timer_val_show(buf);
2634 }
2635 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2636 static ssize_t sysfs_autoprobe_timer_val_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
2637 #else
2638 static ssize_t sysfs_autoautoprobe_timer_val_store( struct device *_dev, const char *buffer, size_t count )
2639 #endif
2640 {
2641 char buf[10];
2642 int i = 0;
2643 uint32_t value;
2644 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2645 return -EFAULT;
2646 value = simple_strtoul(buf, NULL, 10);
2647 if((value > 0)&&(value < 300))
2648 ifxusb_hcd.autoprobe_sec = value;
2649 return count;
2650 }
2651 static ssize_t probe_timer_val_show(char *buf)
2652 {
2653 return sprintf (buf,"Host probe timer is %d second\n",ifxusb_hcd.probe_sec);
2654 }
2655 static ssize_t procfs_probe_timer_val_store(struct file *file, const char *buffer, unsigned long count, void *data)
2656 {
2657 char buf[10];
2658 int i = 0;
2659 uint32_t value;
2660 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2661 return -EFAULT;
2662 value = simple_strtoul(buf, NULL, 10);
2663 if((value > 0)&&(value < 10))
2664 ifxusb_hcd.probe_sec = value;
2665 return count;
2666 }
2667 static ssize_t procfs_probe_timer_val_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
2668 {
2669 return probe_timer_val_show(buf);
2670 }
2671 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2672 static ssize_t sysfs_probe_timer_val_show( struct device *_dev, struct device_attribute *attr,char *buf)
2673 #else
2674 static ssize_t sysfs_probe_timer_val_show( struct device *_dev, char *buf)
2675 #endif
2676 {
2677 return probe_timer_val_show(buf);
2678 }
2679 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2680 static ssize_t sysfs_probe_timer_val_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
2681 #else
2682 static ssize_t sysfs_probe_timer_val_store( struct device *_dev, const char *buffer, size_t count )
2683 #endif
2684 {
2685 char buf[10];
2686 int i = 0;
2687 uint32_t value;
2688 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2689 return -EFAULT;
2690 value = simple_strtoul(buf, NULL, 10);
2691 if((value > 0)&&(value < 10))
2692 ifxusb_hcd.probe_sec = value;
2693 return count;
2694 }
2695 DEVICE_ATTR(probe_timer_val_h, S_IRUGO|S_IWUSR, sysfs_probe_timer_val_show, sysfs_probe_timer_val_store);
2696 DEVICE_ATTR(autoprobe_timer_val_h, S_IRUGO|S_IWUSR, sysfs_autoprobe_timer_val_show, sysfs_autoprobe_timer_val_store);
2697 #endif
2698 #endif
2699 /////////////////////////////////////////////////////////////////////////////////////////////////////
2700 /////////////////////////////////////////////////////////////////////////////////////////////////////
2701 #ifdef __IS_DEVICE__
2702 static ssize_t autoprobe_timer_val_show(char *buf)
2703 {
2704 return sprintf (buf,"Device auto-probe timer is %d second\n",ifxusb_pcd.autoprobe_sec);
2705 }
2706 static ssize_t procfs_autoprobe_timer_val_store(struct file *file, const char *buffer, unsigned long count, void *data)
2707 {
2708 char buf[10];
2709 int i = 0;
2710 uint32_t value;
2711 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2712 return -EFAULT;
2713 value = simple_strtoul(buf, NULL, 10);
2714 if((value > 0)&&(value < 300))
2715 ifxusb_pcd.autoprobe_sec = value;
2716 return count;
2717 }
2718 static ssize_t procfs_autoprobe_timer_val_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
2719 {
2720 return autoprobe_timer_val_show(buf);
2721 }
2722 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2723 static ssize_t sysfs_autoprobe_timer_val_show( struct device *_dev, struct device_attribute *attr,char *buf)
2724 #else
2725 static ssize_t sysfs_autoprobe_timer_val_show( struct device *_dev, char *buf)
2726 #endif
2727 {
2728 return autoprobe_timer_val_show(buf);
2729 }
2730 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2731 static ssize_t sysfs_autoprobe_timer_val_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
2732 #else
2733 static ssize_t sysfs_autoautoprobe_timer_val_store( struct device *_dev, const char *buffer, size_t count )
2734 #endif
2735 {
2736 char buf[10];
2737 int i = 0;
2738 uint32_t value;
2739 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2740 return -EFAULT;
2741 value = simple_strtoul(buf, NULL, 10);
2742 if((value > 0)&&(value < 300))
2743 ifxusb_pcd.autoprobe_sec = value;
2744 return count;
2745 }
2746 static ssize_t probe_timer_val_show(char *buf)
2747 {
2748 return sprintf (buf,"Device probe timer is %d second\n",ifxusb_pcd.probe_sec);
2749 }
2750 static ssize_t procfs_probe_timer_val_store(struct file *file, const char *buffer, unsigned long count, void *data)
2751 {
2752 char buf[10];
2753 int i = 0;
2754 uint32_t value;
2755 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2756 return -EFAULT;
2757 value = simple_strtoul(buf, NULL, 10);
2758 if((value > 0)&&(value < 10))
2759 ifxusb_pcd.probe_sec = value;
2760 return count;
2761 }
2762 static ssize_t procfs_probe_timer_val_show(char *buf, char **start, off_t offset, int count, int *eof, void *data)
2763 {
2764 return probe_timer_val_show(buf);
2765 }
2766 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2767 static ssize_t sysfs_probe_timer_val_show( struct device *_dev, struct device_attribute *attr,char *buf)
2768 #else
2769 static ssize_t sysfs_probe_timer_val_show( struct device *_dev, char *buf)
2770 #endif
2771 {
2772 return probe_timer_val_show(buf);
2773 }
2774 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
2775 static ssize_t sysfs_probe_timer_val_store( struct device *_dev, struct device_attribute *attr,const char *buffer, size_t count )
2776 #else
2777 static ssize_t sysfs_probe_timer_val_store( struct device *_dev, const char *buffer, size_t count )
2778 #endif
2779 {
2780 char buf[10];
2781 int i = 0;
2782 uint32_t value;
2783 if (copy_from_user(buf, &buffer[i], sizeof("0xFFFFFFFF\n")+1))
2784 return -EFAULT;
2785 value = simple_strtoul(buf, NULL, 10);
2786 if((value > 0)&&(value < 10))
2787 ifxusb_pcd.probe_sec = value;
2788 return count;
2789 }
2790 DEVICE_ATTR(probe_timer_val_d, S_IRUGO|S_IWUSR, sysfs_probe_timer_val_show, sysfs_probe_timer_val_store);
2791 DEVICE_ATTR(autoprobe_timer_val_d, S_IRUGO|S_IWUSR, sysfs_autoprobe_timer_val_show, sysfs_autoprobe_timer_val_store);
2792 #endif
2793 //////////////////////////////////////////////////////////////////////////////////
2794 //////////////////////////////////////////////////////////////////////////////////
2795
2796 static int ifx_proc_addproc(char *funcname, read_proc_t *hookfuncr, write_proc_t *hookfuncw);
2797 static void ifx_proc_delproc(char *funcname);
2798
2799 //////////////////////////////////////////////////////////////////////////////////
2800
2801 #if defined(__IS_HOST__) && defined(__HOST_COC__)
2802 #ifdef __IS_DUAL__
2803 static IFX_PMCU_MODULE_DEP_t depListUSBHost_1=
2804 {
2805 1,
2806 {
2807 {IFX_PMCU_MODULE_CPU, IFX_PMCU_STATE_D0, IFX_PMCU_STATE_D0D3, IFX_PMCU_STATE_D0D3, IFX_PMCU_STATE_D0D3}
2808 }
2809 };
2810 static IFX_PMCU_MODULE_DEP_t depListUSBHost_2=
2811 {
2812 1,
2813 {
2814 {IFX_PMCU_MODULE_CPU, IFX_PMCU_STATE_D0, IFX_PMCU_STATE_D0D3, IFX_PMCU_STATE_D0D3, IFX_PMCU_STATE_D0D3}
2815 }
2816 };
2817 // This functions returns the current power state of the module
2818 static IFX_PMCU_RETURN_t
2819 ifx_usbhost_stateGet_1(IFX_PMCU_STATE_t *pmcuModState) {
2820 printk(KERN_DEBUG "ifx_usbhost_stateGet_1 is called\n");
2821 if(ifxusb_hcd_1.power_status == 0){
2822 printk(KERN_DEBUG "current power state of USB Host #1 is D0\n");
2823 *pmcuModState = IFX_PMCU_STATE_D0; // set here the right value
2824 }
2825 else if(ifxusb_hcd_1.power_status == 1){
2826 printk(KERN_DEBUG "current power state of USB Host #1 is D3 (Suspend)\n");
2827 *pmcuModState = IFX_PMCU_STATE_D3; // set here the right value
2828 }
2829 else if(ifxusb_hcd_1.power_status == 2){
2830 printk(KERN_DEBUG "current power state of USB Host #1 is D3 (Auto-Probing)\n");
2831 *pmcuModState = IFX_PMCU_STATE_D3; // set here the right value
2832 }
2833 else{
2834 printk(KERN_DEBUG "current power state of USB Host #1 is unknown (%d)\n",ifxusb_hcd_1.power_status);
2835 *pmcuModState = IFX_PMCU_STATE_INVALID; // must be set to INVALID
2836 }
2837 return IFX_PMCU_RETURN_SUCCESS;
2838 }
2839 static IFX_PMCU_RETURN_t
2840 ifx_usbhost_stateGet_2(IFX_PMCU_STATE_t *pmcuModState) {
2841 printk(KERN_DEBUG "ifx_usbhost_stateGet_2 is called\n");
2842 if(ifxusb_hcd_2.power_status == 0){
2843 printk(KERN_DEBUG "current power state of USB Host #2 is D0\n");
2844 *pmcuModState = IFX_PMCU_STATE_D0; // set here the right value
2845 }
2846 else if(ifxusb_hcd_2.power_status == 1){
2847 printk(KERN_DEBUG "current power state of USB Host #2 is D3 (Suspend)\n");
2848 *pmcuModState = IFX_PMCU_STATE_D3; // set here the right value
2849 }
2850 else if(ifxusb_hcd_2.power_status == 2){
2851 printk(KERN_DEBUG "current power state of USB Host #2 is D3 (Auto-Probing)\n");
2852 *pmcuModState = IFX_PMCU_STATE_D3; // set here the right value
2853 }
2854 else{
2855 printk(KERN_DEBUG "current power state of USB Host #2 is unknown (%d)\n",ifxusb_hcd_2.power_status);
2856 *pmcuModState = IFX_PMCU_STATE_INVALID; // must be set to INVALID
2857 }
2858 return IFX_PMCU_RETURN_SUCCESS;
2859 }
2860
2861
2862 // The function should be used to enable/disable the module specific power saving methods
2863 static IFX_PMCU_RETURN_t
2864 ifx_usbhost_pwrFeatureSwitch_1(IFX_PMCU_PWR_STATE_ENA_t pmcuPwrStateEna)
2865 {
2866 if (pmcuPwrStateEna == IFX_PMCU_PWR_STATE_ON) {
2867 suspend_host_store(&ifxusb_hcd_1, 0);
2868 return IFX_PMCU_RETURN_SUCCESS;
2869 }
2870 if (pmcuPwrStateEna == IFX_PMCU_PWR_STATE_OFF) {
2871 suspend_host_store(&ifxusb_hcd_1, 1);
2872 return IFX_PMCU_RETURN_SUCCESS;
2873 }
2874 return IFX_PMCU_RETURN_SUCCESS;
2875 }
2876 static IFX_PMCU_RETURN_t
2877 ifx_usbhost_pwrFeatureSwitch_2(IFX_PMCU_PWR_STATE_ENA_t pmcuPwrStateEna)
2878 {
2879 if (pmcuPwrStateEna == IFX_PMCU_PWR_STATE_ON) {
2880 suspend_host_store(&ifxusb_hcd_2, 0);
2881 return IFX_PMCU_RETURN_SUCCESS;
2882 }
2883 if (pmcuPwrStateEna == IFX_PMCU_PWR_STATE_OFF) {
2884 suspend_host_store(&ifxusb_hcd_2, 1);
2885 return IFX_PMCU_RETURN_SUCCESS;
2886 }
2887 return IFX_PMCU_RETURN_SUCCESS;
2888 }
2889
2890 // This function should be used to do all the necessary clean-up's before a the real
2891 // power state change is initiated; e.g. flush all serial buffers inside the UART before
2892 // the frequency will be changed.
2893 static IFX_PMCU_RETURN_t
2894 ifx_usbhost_preChange_1(IFX_PMCU_MODULE_t pmcuModule, IFX_PMCU_STATE_t newState, IFX_PMCU_STATE_t oldState)
2895 {
2896 printk(KERN_DEBUG "ifx_usbhost_preChange_1 is called\n");
2897 return IFX_PMCU_RETURN_SUCCESS;
2898 }
2899 static IFX_PMCU_RETURN_t
2900 ifx_usbhost_preChange_2(IFX_PMCU_MODULE_t pmcuModule, IFX_PMCU_STATE_t newState, IFX_PMCU_STATE_t oldState)
2901 {
2902 printk(KERN_DEBUG "ifx_usbhost_preChange_2 is called\n");
2903 return IFX_PMCU_RETURN_SUCCESS;
2904 }
2905
2906
2907 // This function initiate the real power state change. The module should do all the necessary
2908 // adpations to the new state.
2909 static IFX_PMCU_RETURN_t
2910 ifx_usbhost_stateChange_1(IFX_PMCU_STATE_t newState)
2911 {
2912 printk(KERN_DEBUG "ifx_usbhost_stateChange_1 is called\n");
2913 if (newState == IFX_PMCU_STATE_D0) {
2914 suspend_host_store(&ifxusb_hcd_1, 0);
2915 return IFX_PMCU_RETURN_SUCCESS;
2916 }
2917 if (newState == IFX_PMCU_STATE_D1) {
2918 suspend_host_store(&ifxusb_hcd_1, 1);
2919 return IFX_PMCU_RETURN_SUCCESS;
2920 }
2921 if (newState == IFX_PMCU_STATE_D2) {
2922 suspend_host_store(&ifxusb_hcd_1, 1);
2923 return IFX_PMCU_RETURN_SUCCESS;
2924 }
2925 if (newState == IFX_PMCU_STATE_D3) {
2926 suspend_host_store(&ifxusb_hcd_1, 1);
2927 return IFX_PMCU_RETURN_SUCCESS;
2928 }
2929 return IFX_PMCU_RETURN_SUCCESS;
2930 }
2931 static IFX_PMCU_RETURN_t
2932 ifx_usbhost_stateChange_2(IFX_PMCU_STATE_t newState)
2933 {
2934 printk(KERN_DEBUG "ifx_usbhost_stateChange_2 is called\n");
2935 if (newState == IFX_PMCU_STATE_D0) {
2936 suspend_host_store(&ifxusb_hcd_2, 0);
2937 return IFX_PMCU_RETURN_SUCCESS;
2938 }
2939 if (newState == IFX_PMCU_STATE_D1) {
2940 suspend_host_store(&ifxusb_hcd_2, 1);
2941 return IFX_PMCU_RETURN_SUCCESS;
2942 }
2943 if (newState == IFX_PMCU_STATE_D2) {
2944 suspend_host_store(&ifxusb_hcd_2, 1);
2945 return IFX_PMCU_RETURN_SUCCESS;
2946 }
2947 if (newState == IFX_PMCU_STATE_D3) {
2948 suspend_host_store(&ifxusb_hcd_2, 1);
2949 return IFX_PMCU_RETURN_SUCCESS;
2950 }
2951 return IFX_PMCU_RETURN_SUCCESS;
2952 }
2953
2954 // This function should be used to do all the necessary post processing after a the real
2955 // power state change was initiated.
2956 static IFX_PMCU_RETURN_t
2957 ifx_usbhost_postChange_1(IFX_PMCU_MODULE_t pmcuModule, IFX_PMCU_STATE_t newState, IFX_PMCU_STATE_t oldState)
2958 {
2959 printk(KERN_DEBUG "ifx_usbhost_postChange_1 is called\n");
2960 return IFX_PMCU_RETURN_SUCCESS;
2961 }
2962 static IFX_PMCU_RETURN_t
2963 ifx_usbhost_postChange_2(IFX_PMCU_MODULE_t pmcuModule, IFX_PMCU_STATE_t newState, IFX_PMCU_STATE_t oldState)
2964 {
2965 printk(KERN_DEBUG "ifx_usbhost_postChange_2 is called\n");
2966 return IFX_PMCU_RETURN_SUCCESS;
2967 }
2968 #else
2969 static IFX_PMCU_MODULE_DEP_t depListUSBHost=
2970 {
2971 1,
2972 {
2973 {IFX_PMCU_MODULE_CPU, IFX_PMCU_STATE_D0, IFX_PMCU_STATE_D0D3, IFX_PMCU_STATE_D0D3, IFX_PMCU_STATE_D0D3}
2974 }
2975 };
2976 // This functions returns the current power state of the module
2977 static IFX_PMCU_RETURN_t
2978 ifx_usbhost_stateGet(IFX_PMCU_STATE_t *pmcuModState) {
2979 printk(KERN_DEBUG "ifx_usbhost_stateGet is called\n");
2980 if(ifxusb_hcd.power_status == 0){
2981 printk(KERN_DEBUG "current power state of USB Host is D0\n");
2982 *pmcuModState = IFX_PMCU_STATE_D0; // set here the right value
2983 }
2984 else if(ifxusb_hcd.power_status == 1){
2985 printk(KERN_DEBUG "current power state of USB Host is D3 (Suspend)\n");
2986 *pmcuModState = IFX_PMCU_STATE_D3; // set here the right value
2987 }
2988 else if(ifxusb_hcd.power_status == 2){
2989 printk(KERN_DEBUG "current power state of USB Host is D3 (Auto-Probing)\n");
2990 *pmcuModState = IFX_PMCU_STATE_D3; // set here the right value
2991 }
2992 else{
2993 printk(KERN_DEBUG "current power state of USB Host is unknown (%d)\n",ifxusb_hcd.power_status);
2994 *pmcuModState = IFX_PMCU_STATE_INVALID; // must be set to INVALID
2995 }
2996 return IFX_PMCU_RETURN_SUCCESS;
2997 }
2998 // The function should be used to enable/disable the module specific power saving methods
2999 static IFX_PMCU_RETURN_t
3000 ifx_usbhost_pwrFeatureSwitch(IFX_PMCU_PWR_STATE_ENA_t pmcuPwrStateEna)
3001 {
3002 if (pmcuPwrStateEna == IFX_PMCU_PWR_STATE_ON) {
3003 suspend_host_store(&ifxusb_hcd, 0);
3004 return IFX_PMCU_RETURN_SUCCESS;
3005 }
3006 if (pmcuPwrStateEna == IFX_PMCU_PWR_STATE_OFF) {
3007 suspend_host_store(&ifxusb_hcd, 1);
3008 return IFX_PMCU_RETURN_SUCCESS;
3009 }
3010 return IFX_PMCU_RETURN_SUCCESS;
3011 }
3012
3013 // This function should be used to do all the necessary clean-up's before a the real
3014 // power state change is initiated; e.g. flush all serial buffers inside the UART before
3015 // the frequency will be changed.
3016 static IFX_PMCU_RETURN_t
3017 ifx_usbhost_preChange(IFX_PMCU_MODULE_t pmcuModule, IFX_PMCU_STATE_t newState, IFX_PMCU_STATE_t oldState)
3018 {
3019 printk(KERN_DEBUG "ifx_usbhost_preChange is called\n");
3020 return IFX_PMCU_RETURN_SUCCESS;
3021 }
3022
3023
3024 // This function initiate the real power state change. The module should do all the necessary
3025 // adpations to the new state.
3026 static IFX_PMCU_RETURN_t
3027 ifx_usbhost_stateChange(IFX_PMCU_STATE_t newState)
3028 {
3029 printk(KERN_DEBUG "ifx_usbhost_stateChange is called\n");
3030 if (newState == IFX_PMCU_STATE_D0) {
3031 suspend_host_store(&ifxusb_hcd, 0);
3032 return IFX_PMCU_RETURN_SUCCESS;
3033 }
3034 if (newState == IFX_PMCU_STATE_D1) {
3035 suspend_host_store(&ifxusb_hcd, 1);
3036 return IFX_PMCU_RETURN_SUCCESS;
3037 }
3038 if (newState == IFX_PMCU_STATE_D2) {
3039 suspend_host_store(&ifxusb_hcd, 1);
3040 return IFX_PMCU_RETURN_SUCCESS;
3041 }
3042 if (newState == IFX_PMCU_STATE_D3) {
3043 suspend_host_store(&ifxusb_hcd, 1);
3044 return IFX_PMCU_RETURN_SUCCESS;
3045 }
3046 return IFX_PMCU_RETURN_SUCCESS;
3047 }
3048
3049 // This function should be used to do all the necessary post processing after a the real
3050 // power state change was initiated.
3051 static IFX_PMCU_RETURN_t
3052 ifx_usbhost_postChange(IFX_PMCU_MODULE_t pmcuModule, IFX_PMCU_STATE_t newState, IFX_PMCU_STATE_t oldState)
3053 {
3054 printk(KERN_DEBUG "ifx_usbhost_postChange is called\n");
3055 return IFX_PMCU_RETURN_SUCCESS;
3056 }
3057 #endif
3058 #endif
3059 #if defined(__IS_DEVICE__) && defined(__GADGET_COC__)
3060 static IFX_PMCU_MODULE_DEP_t depListUSBGadget=
3061 {
3062 1,
3063 {
3064 {IFX_PMCU_MODULE_CPU, IFX_PMCU_STATE_D0, IFX_PMCU_STATE_D0D3, IFX_PMCU_STATE_D0D3, IFX_PMCU_STATE_D0D3}
3065 }
3066 };
3067 // This functions returns the current power state of the module
3068 static IFX_PMCU_RETURN_t
3069 ifx_usbgadget_stateGet(IFX_PMCU_STATE_t *pmcuModState) {
3070 printk(KERN_DEBUG "ifx_usbgadget_stateGet is called\n");
3071 if(ifxusb_pcd.power_status == 0){
3072 printk(KERN_DEBUG "current power state of USB Gadget is D0\n");
3073 *pmcuModState = IFX_PMCU_STATE_D0; // set here the right value
3074 }
3075 else if(ifxusb_pcd.power_status == 1){
3076 printk(KERN_DEBUG "current power state of USB Gadget is D3 (Suspend)\n");
3077 *pmcuModState = IFX_PMCU_STATE_D3; // set here the right value
3078 }
3079 else if(ifxusb_pcd.power_status == 2){
3080 printk(KERN_DEBUG "current power state of USB Gadget is D3 (Auto-Probing)\n");
3081 *pmcuModState = IFX_PMCU_STATE_D3; // set here the right value
3082 }
3083 else{
3084 printk(KERN_DEBUG "current power state of USB Gadget is unknown (%d)\n",ifxusb_pcd.power_status);
3085 *pmcuModState = IFX_PMCU_STATE_INVALID; // must be set to INVALID
3086 }
3087 return IFX_PMCU_RETURN_SUCCESS;
3088 }
3089 // The function should be used to enable/disable the module specific power saving methods
3090 static IFX_PMCU_RETURN_t
3091 ifx_usbgadget_pwrFeatureSwitch(IFX_PMCU_PWR_STATE_ENA_t pmcuPwrStateEna)
3092 {
3093 if (pmcuPwrStateEna == IFX_PMCU_PWR_STATE_ON) {
3094 suspend_device_store(0);
3095 return IFX_PMCU_RETURN_SUCCESS;
3096 }
3097 if (pmcuPwrStateEna == IFX_PMCU_PWR_STATE_OFF) {
3098 suspend_device_store(1);
3099 return IFX_PMCU_RETURN_SUCCESS;
3100 }
3101 return IFX_PMCU_RETURN_SUCCESS;
3102 }
3103
3104 // This function should be used to do all the necessary clean-up's before a the real
3105 // power state change is initiated; e.g. flush all serial buffers inside the UART before
3106 // the frequency will be changed.
3107 static IFX_PMCU_RETURN_t
3108 ifx_usbgadget_preChange(IFX_PMCU_MODULE_t pmcuModule, IFX_PMCU_STATE_t newState, IFX_PMCU_STATE_t oldState)
3109 {
3110 printk(KERN_DEBUG "ifx_usbgadget_preChange is called\n");
3111 return IFX_PMCU_RETURN_SUCCESS;
3112 }
3113
3114
3115 // This function initiate the real power state change. The module should do all the necessary
3116 // adpations to the new state.
3117 static IFX_PMCU_RETURN_t
3118 ifx_usbgadget_stateChange(IFX_PMCU_STATE_t newState)
3119 {
3120 printk(KERN_DEBUG "ifx_usbgadget_stateChange is called\n");
3121 if (newState == IFX_PMCU_STATE_D0) {
3122 suspend_device_store(0);
3123 return IFX_PMCU_RETURN_SUCCESS;
3124 }
3125 if (newState == IFX_PMCU_STATE_D1) {
3126 suspend_device_store(1);
3127 return IFX_PMCU_RETURN_SUCCESS;
3128 }
3129 if (newState == IFX_PMCU_STATE_D2) {
3130 suspend_device_store(1);
3131 return IFX_PMCU_RETURN_SUCCESS;
3132 }
3133 if (newState == IFX_PMCU_STATE_D3) {
3134 suspend_device_store(1);
3135 return IFX_PMCU_RETURN_SUCCESS;
3136 }
3137 return IFX_PMCU_RETURN_SUCCESS;
3138 }
3139
3140 // This function should be used to do all the necessary post processing after a the real
3141 // power state change was initiated.
3142 static IFX_PMCU_RETURN_t
3143 ifx_usbgadget_postChange(IFX_PMCU_MODULE_t pmcuModule, IFX_PMCU_STATE_t newState, IFX_PMCU_STATE_t oldState)
3144 {
3145 printk(KERN_DEBUG "ifx_usbgadget_postChange is called\n");
3146 return IFX_PMCU_RETURN_SUCCESS;
3147 }
3148 #endif
3149
3150
3151 /*!
3152 \brief This function create the sysfs and procfs entries
3153 \param[in] _dev Pointer of device structure, if applied
3154 */
3155 #ifdef __IS_HOST__
3156 void ifxusb_attr_create_h (void *_dev)
3157 #else
3158 void ifxusb_attr_create_d (void *_dev)
3159 #endif
3160 {
3161 int error;
3162
3163 struct device *dev = (struct device *) _dev;
3164
3165 IFX_DEBUGPL(DBG_ENTRY, "%s() %d\n", __func__, __LINE__ );
3166
3167 error = ifx_proc_addproc("dbglevel", procfs_dbglevel_show, procfs_dbglevel_store);
3168 #ifdef __IS_HOST__
3169 error = device_create_file(dev, &dev_attr_dbglevel_h);
3170 #else
3171 error = device_create_file(dev, &dev_attr_dbglevel_d);
3172 #endif
3173
3174 #ifdef __IS_HOST__
3175 #ifdef __IS_DUAL__
3176 error = ifx_proc_addproc("dump_params_1", procfs_dump_params_show_1, NULL);
3177 error = ifx_proc_addproc("dump_params_2", procfs_dump_params_show_2, NULL);
3178 error = device_create_file(dev, &dev_attr_dump_params_h_1);
3179 error = device_create_file(dev, &dev_attr_dump_params_h_2);
3180
3181 error = ifx_proc_addproc("mode_1", procfs_mode_show_1, NULL);
3182 error = ifx_proc_addproc("mode_2", procfs_mode_show_2, NULL);
3183 error = device_create_file(dev, &dev_attr_mode_h_1);
3184 error = device_create_file(dev, &dev_attr_mode_h_2);
3185 #else
3186 error = ifx_proc_addproc("dump_params", procfs_dump_params_show, NULL);
3187 error = device_create_file(dev, &dev_attr_dump_params_h);
3188 error = ifx_proc_addproc("mode", procfs_mode_show, NULL);
3189 error = device_create_file(dev, &dev_attr_mode_h);
3190 #endif
3191 #else
3192 error = ifx_proc_addproc("dump_params", procfs_dump_params_show, NULL);
3193 error = device_create_file(dev, &dev_attr_dump_params_d);
3194
3195 error = ifx_proc_addproc("mode", procfs_mode_show, NULL);
3196 error = device_create_file(dev, &dev_attr_mode_d);
3197 #endif
3198
3199 #ifdef __IS_HOST__
3200 error = ifx_proc_addproc("version", procfs_version_show, NULL);
3201 error = device_create_file(dev, &dev_attr_version_h);
3202 #else
3203 error = ifx_proc_addproc("version", procfs_version_show, NULL);
3204 error = device_create_file(dev, &dev_attr_version_d);
3205 #endif
3206
3207
3208 #ifdef __IS_HOST__
3209 #ifdef __IS_DUAL__
3210 error = ifx_proc_addproc("pkt_count_limit_bi_1", procfs_pkt_count_limit_bi_show_1, procfs_pkt_count_limit_bi_store_1);
3211 error = ifx_proc_addproc("pkt_count_limit_bo_1", procfs_pkt_count_limit_bo_show_1, procfs_pkt_count_limit_bo_store_1);
3212 error = ifx_proc_addproc("pkt_count_limit_bi_2", procfs_pkt_count_limit_bi_show_2, procfs_pkt_count_limit_bi_store_2);
3213 error = ifx_proc_addproc("pkt_count_limit_bo_2", procfs_pkt_count_limit_bo_show_2, procfs_pkt_count_limit_bo_store_2);
3214 error = ifx_proc_addproc("bandwidth_hs_1", procfs_bandwidth_hs_show_1, procfs_bandwidth_hs_store_1);
3215 error = ifx_proc_addproc("bandwidth_fs_1", procfs_bandwidth_fs_show_1, procfs_bandwidth_fs_store_1);
3216 error = ifx_proc_addproc("bandwidth_ls_1", procfs_bandwidth_ls_show_1, procfs_bandwidth_ls_store_1);
3217 error = ifx_proc_addproc("bandwidth_hs_2", procfs_bandwidth_hs_show_2, procfs_bandwidth_hs_store_2);
3218 error = ifx_proc_addproc("bandwidth_fs_2", procfs_bandwidth_fs_show_2, procfs_bandwidth_fs_store_2);
3219 error = ifx_proc_addproc("bandwidth_ls_2", procfs_bandwidth_ls_show_2, procfs_bandwidth_ls_store_2);
3220 error = device_create_file(dev, &dev_attr_pkt_count_limit_bi_1);
3221 error = device_create_file(dev, &dev_attr_pkt_count_limit_bo_1);
3222 error = device_create_file(dev, &dev_attr_pkt_count_limit_bi_2);
3223 error = device_create_file(dev, &dev_attr_pkt_count_limit_bo_2);
3224 error = device_create_file(dev, &dev_attr_bandwidth_hs_1);
3225 error = device_create_file(dev, &dev_attr_bandwidth_fs_1);
3226 error = device_create_file(dev, &dev_attr_bandwidth_ls_1);
3227 error = device_create_file(dev, &dev_attr_bandwidth_hs_2);
3228 error = device_create_file(dev, &dev_attr_bandwidth_fs_2);
3229 error = device_create_file(dev, &dev_attr_bandwidth_ls_2);
3230 #else
3231 error = ifx_proc_addproc("pkt_count_limit_bi", procfs_pkt_count_limit_bi_show, procfs_pkt_count_limit_bi_store);
3232 error = ifx_proc_addproc("pkt_count_limit_bo", procfs_pkt_count_limit_bo_show, procfs_pkt_count_limit_bo_store);
3233 error = ifx_proc_addproc("bandwidth_hs", procfs_bandwidth_hs_show, procfs_bandwidth_hs_store);
3234 error = ifx_proc_addproc("bandwidth_fs", procfs_bandwidth_fs_show, procfs_bandwidth_fs_store);
3235 error = ifx_proc_addproc("bandwidth_ls", procfs_bandwidth_ls_show, procfs_bandwidth_ls_store);
3236 error = device_create_file(dev, &dev_attr_pkt_count_limit_bi);
3237 error = device_create_file(dev, &dev_attr_pkt_count_limit_bo);
3238 error = device_create_file(dev, &dev_attr_bandwidth_hs);
3239 error = device_create_file(dev, &dev_attr_bandwidth_fs);
3240 error = device_create_file(dev, &dev_attr_bandwidth_ls);
3241 #endif
3242
3243 #ifdef __IS_DUAL__
3244 error = ifx_proc_addproc("buspower_1", procfs_buspower_show_1, procfs_buspower_store_1);
3245 error = ifx_proc_addproc("buspower_2", procfs_buspower_show_2, procfs_buspower_store_2);
3246 error = device_create_file(dev, &dev_attr_buspower_1);
3247 error = device_create_file(dev, &dev_attr_buspower_2);
3248 #else
3249 error = ifx_proc_addproc("buspower", procfs_buspower_show, procfs_buspower_store);
3250 error = device_create_file(dev, &dev_attr_buspower);
3251 #endif
3252
3253 #ifdef __IS_DUAL__
3254 error = ifx_proc_addproc("bussuspend_1", procfs_bussuspend_show_1, NULL);
3255 error = ifx_proc_addproc("bussuspend_2", procfs_bussuspend_show_2, NULL);
3256 error = device_create_file(dev, &dev_attr_bussuspend_1);
3257 error = device_create_file(dev, &dev_attr_bussuspend_2);
3258 #else
3259 error = ifx_proc_addproc("bussuspend", procfs_bussuspend_show, NULL);
3260 error = device_create_file(dev, &dev_attr_bussuspend);
3261 #endif
3262
3263 #ifdef __IS_DUAL__
3264 error = ifx_proc_addproc("busconnected_1", procfs_busconnected_show_1, NULL);
3265 error = ifx_proc_addproc("busconnected_2", procfs_busconnected_show_2, NULL);
3266 error = device_create_file(dev, &dev_attr_busconnected_1);
3267 error = device_create_file(dev, &dev_attr_busconnected_2);
3268 #else
3269 error = ifx_proc_addproc("busconnected", procfs_busconnected_show, NULL);
3270 error = device_create_file(dev, &dev_attr_busconnected);
3271 #endif
3272
3273 #ifdef __IS_DUAL__
3274 error = ifx_proc_addproc("connectspeed_1", procfs_connectspeed_show_1, NULL);
3275 error = ifx_proc_addproc("connectspeed_2", procfs_connectspeed_show_2, NULL);
3276 error = device_create_file(dev, &dev_attr_connectspeed_1);
3277 error = device_create_file(dev, &dev_attr_connectspeed_2);
3278 #else
3279 error = ifx_proc_addproc("connectspeed", procfs_connectspeed_show, NULL);
3280 error = device_create_file(dev, &dev_attr_connectspeed);
3281 #endif
3282 #endif
3283
3284 #ifdef __IS_DEVICE__
3285 error = ifx_proc_addproc("devspeed", procfs_devspeed_show, NULL);
3286 error = device_create_file(dev, &dev_attr_devspeed);
3287 error = ifx_proc_addproc("enumspeed", procfs_enumspeed_show, NULL);
3288 error = device_create_file(dev, &dev_attr_enumspeed);
3289 #endif
3290
3291 //////////////////////////////////////////////////////
3292 #ifdef __ENABLE_DUMP__
3293
3294 #ifdef __IS_HOST__
3295 #ifdef __IS_DUAL__
3296 error = ifx_proc_addproc("dump_reg_1", procfs_dump_reg_show_1, NULL);
3297 error = ifx_proc_addproc("dump_reg_2", procfs_dump_reg_show_2, NULL);
3298 error = device_create_file(dev, &dev_attr_dump_reg_h_1);
3299 error = device_create_file(dev, &dev_attr_dump_reg_h_2);
3300 #else
3301 error = ifx_proc_addproc("dump_reg", procfs_dump_reg_show, NULL);
3302 error = device_create_file(dev, &dev_attr_dump_reg_h);
3303 #endif
3304
3305 #ifdef __IS_DUAL__
3306 error = ifx_proc_addproc("dump_spram_1", procfs_dump_spram_show_1, NULL);
3307 error = ifx_proc_addproc("dump_spram_2", procfs_dump_spram_show_2, NULL);
3308 error = device_create_file(dev, &dev_attr_dump_spram_h_1);
3309 error = device_create_file(dev, &dev_attr_dump_spram_h_2);
3310 #else
3311 error = ifx_proc_addproc("dump_spram", procfs_dump_spram_show, NULL);
3312 error = device_create_file(dev, &dev_attr_dump_spram_h);
3313 #endif
3314
3315 #ifdef __IS_DUAL__
3316 error = ifx_proc_addproc("dump_host_state_1", procfs_dump_host_state_show_1, NULL);
3317 error = ifx_proc_addproc("dump_host_state_2", procfs_dump_host_state_show_2, NULL);
3318 error = device_create_file(dev, &dev_attr_dump_host_state_1);
3319 error = device_create_file(dev, &dev_attr_dump_host_state_2);
3320 #else
3321 error = ifx_proc_addproc("dump_host_state", procfs_dump_host_state_show, NULL);
3322 error = device_create_file(dev, &dev_attr_dump_host_state);
3323 #endif
3324 #else
3325 error = ifx_proc_addproc("dump_reg", procfs_dump_reg_show, NULL);
3326 error = device_create_file(dev, &dev_attr_dump_reg_d);
3327 error = ifx_proc_addproc("dump_spram", procfs_dump_spram_show, NULL);
3328 error = device_create_file(dev, &dev_attr_dump_spram_d);
3329 #endif
3330 #endif //__ENABLE_DUMP__
3331 //////////////////////////////////////////////////////
3332 #ifdef __IS_HOST__
3333 #ifdef __IS_DUAL__
3334 error = ifx_proc_addproc("suspend_host_1",NULL, procfs_suspend_host_1_store);
3335 error = device_create_file(dev, &dev_attr_suspend_host_1);
3336
3337 error = ifx_proc_addproc("probe_host_1", procfs_probe_host_1_show, procfs_probe_host_1_store);
3338 error = device_create_file(dev, &dev_attr_probe_host_1);
3339
3340 error = ifx_proc_addproc("suspend_host_2",NULL, procfs_suspend_host_2_store);
3341 error = device_create_file(dev, &dev_attr_suspend_host_2);
3342
3343 error = ifx_proc_addproc("probe_host_2", procfs_probe_host_2_show, procfs_probe_host_2_store);
3344 error = device_create_file(dev, &dev_attr_probe_host_2);
3345
3346 error = ifx_proc_addproc("probe_timer1", procfs_probe_timer1_val_show, procfs_probe_timer1_val_store);
3347 error = device_create_file(dev, &dev_attr_probe_timer1_val_h);
3348
3349 error = ifx_proc_addproc("probe_timer2", procfs_probe_timer2_val_show, procfs_probe_timer2_val_store);
3350 error = device_create_file(dev, &dev_attr_probe_timer2_val_h);
3351
3352 error = ifx_proc_addproc("autoprobe_timer1", procfs_autoprobe_timer1_val_show, procfs_autoprobe_timer1_val_store);
3353 error = device_create_file(dev, &dev_attr_autoprobe_timer1_val_h);
3354
3355 error = ifx_proc_addproc("autoprobe_timer2", procfs_autoprobe_timer2_val_show, procfs_autoprobe_timer2_val_store);
3356 error = device_create_file(dev, &dev_attr_autoprobe_timer2_val_h);
3357 #else
3358 error = ifx_proc_addproc("suspend_host",NULL, procfs_suspend_host_store);
3359 error = device_create_file(dev, &dev_attr_suspend_host);
3360
3361 error = ifx_proc_addproc("probe_host", procfs_probe_host_show, procfs_probe_host_store);
3362 error = device_create_file(dev, &dev_attr_probe_host);
3363
3364 error = ifx_proc_addproc("probe_timer", procfs_probe_timer_val_show, procfs_probe_timer_val_store);
3365 error = device_create_file(dev, &dev_attr_probe_timer_val_h);
3366
3367 error = ifx_proc_addproc("autoprobe_timer", procfs_autoprobe_timer_val_show, procfs_autoprobe_timer_val_store);
3368 error = device_create_file(dev, &dev_attr_autoprobe_timer_val_h);
3369 #endif
3370 #endif
3371
3372 #ifdef __IS_DEVICE__
3373 error = ifx_proc_addproc("suspend_device",NULL, procfs_suspend_device_store);
3374 error = device_create_file(dev, &dev_attr_suspend_device);
3375
3376 error = ifx_proc_addproc("probe_device", procfs_probe_device_show, procfs_probe_device_store);
3377 error = device_create_file(dev, &dev_attr_probe_device);
3378
3379 error = ifx_proc_addproc("probe_timer", procfs_probe_timer_val_show, procfs_probe_timer_val_store);
3380 error = device_create_file(dev, &dev_attr_probe_timer_val_d);
3381
3382 error = ifx_proc_addproc("autoprobe_timer", procfs_autoprobe_timer_val_show, procfs_autoprobe_timer_val_store);
3383 error = device_create_file(dev, &dev_attr_autoprobe_timer_val_d);
3384 #endif
3385 #if defined(__IS_HOST__) && defined(__HOST_COC__)
3386 #ifdef __IS_DUAL__
3387 memset (&pmcuRegisterUSBHost_1, 0, sizeof(pmcuRegisterUSBHost_1));
3388 memset (&pmcuRegisterUSBHost_2, 0, sizeof(pmcuRegisterUSBHost_2));
3389 pmcuRegisterUSBHost_1.pmcuModule=
3390 pmcuRegisterUSBHost_2.pmcuModule=IFX_PMCU_MODULE_USB;
3391 pmcuRegisterUSBHost_1.pmcuModuleNr=1;
3392 pmcuRegisterUSBHost_2.pmcuModuleNr=2;
3393 pmcuRegisterUSBHost_1.pmcuModuleDep = &depListUSBHost_1;
3394 pmcuRegisterUSBHost_2.pmcuModuleDep = &depListUSBHost_2;
3395 pmcuRegisterUSBHost_1.pre = ifx_usbhost_preChange_1;
3396 pmcuRegisterUSBHost_2.pre = ifx_usbhost_preChange_2;
3397 pmcuRegisterUSBHost_1.post = ifx_usbhost_postChange_1;
3398 pmcuRegisterUSBHost_2.post = ifx_usbhost_postChange_2;
3399 pmcuRegisterUSBHost_1.ifx_pmcu_state_change = ifx_usbhost_stateChange_1;
3400 pmcuRegisterUSBHost_2.ifx_pmcu_state_change = ifx_usbhost_stateChange_2;
3401 pmcuRegisterUSBHost_1.ifx_pmcu_state_get = ifx_usbhost_stateGet_1;
3402 pmcuRegisterUSBHost_2.ifx_pmcu_state_get = ifx_usbhost_stateGet_2;
3403 pmcuRegisterUSBHost_1.ifx_pmcu_pwr_feature_switch = ifx_usbhost_pwrFeatureSwitch_1;
3404 pmcuRegisterUSBHost_2.ifx_pmcu_pwr_feature_switch = ifx_usbhost_pwrFeatureSwitch_2;
3405 ifx_pmcu_register ( &pmcuRegisterUSBHost_1 );
3406 ifx_pmcu_register ( &pmcuRegisterUSBHost_2 );
3407 #else
3408 memset (&pmcuRegisterUSBHost, 0, sizeof(pmcuRegisterUSBHost));
3409 pmcuRegisterUSBHost.pmcuModule=IFX_PMCU_MODULE_USB;
3410 pmcuRegisterUSBHost.pmcuModuleNr=1;
3411 pmcuRegisterUSBHost.pmcuModuleDep = &depListUSBHost;
3412 pmcuRegisterUSBHost.pre = ifx_usbhost_preChange;
3413 pmcuRegisterUSBHost.post = ifx_usbhost_postChange;
3414 pmcuRegisterUSBHost.ifx_pmcu_state_change = ifx_usbhost_stateChange;
3415 pmcuRegisterUSBHost.ifx_pmcu_state_get = ifx_usbhost_stateGet;
3416 pmcuRegisterUSBHost.ifx_pmcu_pwr_feature_switch = ifx_usbhost_pwrFeatureSwitch;
3417 ifx_pmcu_register ( &pmcuRegisterUSBHost );
3418 #endif
3419 #endif
3420 #if defined(__IS_DEVICE__) && defined(__GADGET_COC__)
3421 memset (&pmcuRegisterUSBGadget, 0, sizeof(pmcuRegisterUSBGadget));
3422 pmcuRegisterUSBGadget.pmcuModule=IFX_PMCU_MODULE_USB;
3423 pmcuRegisterUSBGadget.pmcuModuleNr=0;
3424 pmcuRegisterUSBGadget.pmcuModuleDep = &depListUSBGadget;
3425 pmcuRegisterUSBGadget.pre = ifx_usbgadget_preChange;
3426 pmcuRegisterUSBGadget.post = ifx_usbgadget_postChange;
3427 pmcuRegisterUSBGadget.ifx_pmcu_state_change = ifx_usbgadget_stateChange;
3428 pmcuRegisterUSBGadget.ifx_pmcu_state_get = ifx_usbgadget_stateGet;
3429 pmcuRegisterUSBGadget.ifx_pmcu_pwr_feature_switch = ifx_usbgadget_pwrFeatureSwitch;
3430 ifx_pmcu_register ( &pmcuRegisterUSBGadget );
3431 #endif
3432 }
3433
3434
3435 /*!
3436 \brief This function remove the sysfs and procfs entries
3437 \param[in] _dev Pointer of device structure, if applied
3438 */
3439 #ifdef __IS_HOST__
3440 void ifxusb_attr_remove_h (void *_dev)
3441 #else
3442 void ifxusb_attr_remove_d (void *_dev)
3443 #endif
3444 {
3445 struct device *dev = (struct device *) _dev;
3446
3447 IFX_DEBUGPL(DBG_ENTRY, "%s() %d\n", __func__, __LINE__ );
3448 ifx_proc_delproc("dbglevel");
3449 #ifdef __IS_HOST__
3450 device_remove_file(dev, &dev_attr_dbglevel_h);
3451 #else
3452 device_remove_file(dev, &dev_attr_dbglevel_d);
3453 #endif
3454
3455 #ifdef __IS_HOST__
3456 #ifdef __IS_DUAL__
3457 ifx_proc_delproc("dump_params_1");
3458 ifx_proc_delproc("dump_params_2");
3459 device_remove_file(dev, &dev_attr_dump_params_h_1);
3460 device_remove_file(dev, &dev_attr_dump_params_h_2);
3461 #else
3462 ifx_proc_delproc("dump_params");
3463 device_remove_file(dev, &dev_attr_dump_params_h);
3464 #endif
3465
3466 #ifdef __IS_DUAL__
3467 ifx_proc_delproc("mode_1");
3468 ifx_proc_delproc("mode_2");
3469 device_remove_file(dev, &dev_attr_mode_h_1);
3470 device_remove_file(dev, &dev_attr_mode_h_2);
3471 #else
3472 ifx_proc_delproc("mode");
3473 device_remove_file(dev, &dev_attr_mode_h);
3474 #endif
3475 #else
3476 ifx_proc_delproc("dump_params");
3477 device_remove_file(dev, &dev_attr_dump_params_d);
3478 ifx_proc_delproc("mode");
3479 device_remove_file(dev, &dev_attr_mode_d);
3480 #endif
3481
3482 #ifdef __IS_HOST__
3483 ifx_proc_delproc("version");
3484 device_remove_file(dev, &dev_attr_version_h);
3485 #else
3486 ifx_proc_delproc("version");
3487 device_remove_file(dev, &dev_attr_version_d);
3488 #endif
3489
3490
3491 #ifdef __IS_HOST__
3492 #ifdef __IS_DUAL__
3493 ifx_proc_delproc("pkt_count_limit_bi_1");
3494 ifx_proc_delproc("pkt_count_limit_bo_1");
3495 ifx_proc_delproc("pkt_count_limit_bi_2");
3496 ifx_proc_delproc("pkt_count_limit_bo_2");
3497 ifx_proc_delproc("bandwidth_hs_1");
3498 ifx_proc_delproc("bandwidth_fs_1");
3499 ifx_proc_delproc("bandwidth_ls_1");
3500 ifx_proc_delproc("bandwidth_hs_2");
3501 ifx_proc_delproc("bandwidth_fs_2");
3502 ifx_proc_delproc("bandwidth_ls_2");
3503 device_remove_file(dev, &dev_attr_pkt_count_limit_bi_1);
3504 device_remove_file(dev, &dev_attr_pkt_count_limit_bo_1);
3505 device_remove_file(dev, &dev_attr_pkt_count_limit_bi_2);
3506 device_remove_file(dev, &dev_attr_pkt_count_limit_bo_2);
3507 device_remove_file(dev, &dev_attr_bandwidth_hs_1);
3508 device_remove_file(dev, &dev_attr_bandwidth_fs_1);
3509 device_remove_file(dev, &dev_attr_bandwidth_ls_1);
3510 device_remove_file(dev, &dev_attr_bandwidth_hs_2);
3511 device_remove_file(dev, &dev_attr_bandwidth_fs_2);
3512 device_remove_file(dev, &dev_attr_bandwidth_ls_2);
3513 #else
3514 ifx_proc_delproc("pkt_count_limit_bi");
3515 ifx_proc_delproc("pkt_count_limit_bo");
3516 ifx_proc_delproc("bandwidth_hs");
3517 ifx_proc_delproc("bandwidth_fs");
3518 ifx_proc_delproc("bandwidth_ls");
3519 device_remove_file(dev, &dev_attr_pkt_count_limit_bi);
3520 device_remove_file(dev, &dev_attr_pkt_count_limit_bo);
3521 device_remove_file(dev, &dev_attr_bandwidth_hs);
3522 device_remove_file(dev, &dev_attr_bandwidth_fs);
3523 device_remove_file(dev, &dev_attr_bandwidth_ls);
3524 #endif
3525 #endif
3526
3527 #ifdef __IS_HOST__
3528 #ifdef __IS_DUAL__
3529 ifx_proc_delproc("buspower_1");
3530 ifx_proc_delproc("buspower_2");
3531 device_remove_file(dev, &dev_attr_buspower_1);
3532 device_remove_file(dev, &dev_attr_buspower_2);
3533 #else
3534 ifx_proc_delproc("buspower");
3535 device_remove_file(dev, &dev_attr_buspower);
3536 #endif
3537
3538 #ifdef __IS_DUAL__
3539 ifx_proc_delproc("bussuspend_1");
3540 ifx_proc_delproc("bussuspend_2");
3541 device_remove_file(dev, &dev_attr_bussuspend_1);
3542 device_remove_file(dev, &dev_attr_bussuspend_2);
3543 #else
3544 ifx_proc_delproc("bussuspend");
3545 device_remove_file(dev, &dev_attr_bussuspend);
3546 #endif
3547
3548 #ifdef __IS_DUAL__
3549 ifx_proc_delproc("busconnected_1");
3550 ifx_proc_delproc("busconnected_2");
3551 device_remove_file(dev, &dev_attr_busconnected_1);
3552 device_remove_file(dev, &dev_attr_busconnected_2);
3553 #else
3554 ifx_proc_delproc("busconnected");
3555 device_remove_file(dev, &dev_attr_busconnected);
3556 #endif
3557
3558 #ifdef __IS_DUAL__
3559 ifx_proc_delproc("connectspeed_1");
3560 ifx_proc_delproc("connectspeed_2");
3561 device_remove_file(dev, &dev_attr_connectspeed_1);
3562 device_remove_file(dev, &dev_attr_connectspeed_2);
3563 #else
3564 ifx_proc_delproc("connectspeed");
3565 device_remove_file(dev, &dev_attr_connectspeed);
3566 #endif
3567 #endif
3568
3569 #ifdef __IS_DEVICE__
3570 ifx_proc_delproc("devspeed");
3571 device_remove_file(dev, &dev_attr_devspeed);
3572 ifx_proc_delproc("enumspeed");
3573 device_remove_file(dev, &dev_attr_enumspeed);
3574 #endif
3575
3576 #ifdef __ENABLE_DUMP__
3577 #ifdef __IS_HOST__
3578 #ifdef __IS_DUAL__
3579 ifx_proc_delproc("dump_reg_1");
3580 ifx_proc_delproc("dump_reg_2");
3581 device_remove_file(dev, &dev_attr_dump_reg_h_1);
3582 device_remove_file(dev, &dev_attr_dump_reg_h_2);
3583 #else
3584 ifx_proc_delproc("dump_reg");
3585 device_remove_file(dev, &dev_attr_dump_reg_h);
3586 #endif
3587
3588 #ifdef __IS_DUAL__
3589 ifx_proc_delproc("dump_spram_1");
3590 ifx_proc_delproc("dump_spram_2");
3591 device_remove_file(dev, &dev_attr_dump_spram_h_1);
3592 device_remove_file(dev, &dev_attr_dump_spram_h_2);
3593 #else
3594 ifx_proc_delproc("dump_spram");
3595 device_remove_file(dev, &dev_attr_dump_spram_h);
3596 #endif
3597
3598 #ifdef __IS_DUAL__
3599 ifx_proc_delproc("dump_host_state_1");
3600 ifx_proc_delproc("dump_host_state_2");
3601 device_remove_file(dev, &dev_attr_dump_host_state_1);
3602 device_remove_file(dev, &dev_attr_dump_host_state_2);
3603 #else
3604 ifx_proc_delproc("dump_host_state");
3605 device_remove_file(dev, &dev_attr_dump_host_state);
3606 #endif
3607 #else
3608 ifx_proc_delproc("dump_reg");
3609 device_remove_file(dev, &dev_attr_dump_reg_d);
3610 ifx_proc_delproc("dump_spram");
3611 device_remove_file(dev, &dev_attr_dump_spram_d);
3612 #endif
3613
3614 #ifdef __IS_HOST__
3615 #endif
3616 #endif //__ENABLE_DUMP__
3617 #ifdef __IS_HOST__
3618 #ifdef __IS_DUAL__
3619 ifx_proc_delproc("suspend_host_1");
3620 ifx_proc_delproc("probe_host_1");
3621 device_remove_file(dev, &dev_attr_suspend_host_1);
3622 device_remove_file(dev, &dev_attr_probe_host_1);
3623 ifx_proc_delproc("suspend_host_2");
3624 ifx_proc_delproc("probe_host_2");
3625 device_remove_file(dev, &dev_attr_suspend_host_2);
3626 device_remove_file(dev, &dev_attr_probe_host_2);
3627 ifx_proc_delproc("probe_timer1");
3628 ifx_proc_delproc("autoprobe_timer1");
3629 device_remove_file(dev, &dev_attr_probe_timer1_val_h);
3630 device_remove_file(dev, &dev_attr_autoprobe_timer1_val_h);
3631 ifx_proc_delproc("probe_timer2");
3632 ifx_proc_delproc("autoprobe_timer2");
3633 device_remove_file(dev, &dev_attr_probe_timer2_val_h);
3634 device_remove_file(dev, &dev_attr_autoprobe_timer2_val_h);
3635 #else
3636 ifx_proc_delproc("suspend_host");
3637 ifx_proc_delproc("probe_host");
3638 device_remove_file(dev, &dev_attr_suspend_host);
3639 device_remove_file(dev, &dev_attr_probe_host);
3640 ifx_proc_delproc("probe_timer");
3641 ifx_proc_delproc("autoprobe_timer");
3642 device_remove_file(dev, &dev_attr_probe_timer_val_h);
3643 device_remove_file(dev, &dev_attr_autoprobe_timer_val_h);
3644 #endif
3645 remove_proc_entry(ifxusb_hcd_driver_name, (void *)0);
3646 #endif
3647
3648 #ifdef __IS_DEVICE__
3649 ifx_proc_delproc("suspend_device");
3650 ifx_proc_delproc("probe_device");
3651 device_remove_file(dev, &dev_attr_suspend_device);
3652 device_remove_file(dev, &dev_attr_probe_device);
3653 ifx_proc_delproc("probe_timer");
3654 ifx_proc_delproc("autoprobe_timer");
3655 device_remove_file(dev, &dev_attr_probe_timer_val_d);
3656 device_remove_file(dev, &dev_attr_autoprobe_timer_val_d);
3657 remove_proc_entry(ifxusb_pcd_driver_name, (void *)0);
3658 #endif
3659 #if defined(__IS_HOST__) && defined(__HOST_COC__)
3660 #ifdef __IS_DUAL__
3661 ifx_pmcu_unregister ( &pmcuRegisterUSBHost_1 );
3662 ifx_pmcu_unregister ( &pmcuRegisterUSBHost_2 );
3663 #else
3664 ifx_pmcu_unregister ( &pmcuRegisterUSBHost );
3665 #endif
3666 #endif
3667 #if defined(__IS_DEVICE__) && defined(__GADGET_COC__)
3668 ifx_pmcu_unregister ( &pmcuRegisterUSBGadget );
3669 #endif
3670
3671 }
3672
3673 static struct proc_dir_entry * proc_ifx_root = NULL;
3674
3675 /* initialize the proc file system and make a dir named /proc/[name] */
3676 static void ifx_proc_init(void)
3677 {
3678 IFX_DEBUGPL(DBG_ENTRY, "%s() %d\n", __func__, __LINE__ );
3679 #ifdef __IS_HOST__
3680 proc_ifx_root = proc_mkdir(ifxusb_hcd_driver_name, (void *)0);
3681 if (!proc_ifx_root){
3682 IFX_PRINT("%s proc initialization failed! \n", ifxusb_hcd_driver_name);
3683 return;
3684 }
3685 #else
3686 proc_ifx_root = proc_mkdir(ifxusb_pcd_driver_name, (void *)0);
3687 if (!proc_ifx_root){
3688 IFX_PRINT("%s proc initialization failed! \n", ifxusb_pcd_driver_name);
3689 return;
3690 }
3691 #endif
3692 }
3693
3694 /* proc file system add function for debugging. */
3695 static int ifx_proc_addproc(char *funcname, read_proc_t *hookfuncr, write_proc_t *hookfuncw)
3696 {
3697 struct proc_dir_entry *pe;
3698 IFX_DEBUGPL(DBG_ENTRY, "%s() %d\n", __func__, __LINE__ );
3699 if (!proc_ifx_root)
3700 ifx_proc_init();
3701
3702 if (hookfuncw == NULL)
3703 {
3704 pe = create_proc_read_entry(funcname, S_IRUGO, proc_ifx_root, hookfuncr, NULL);
3705 if (!pe)
3706 {
3707 IFX_PRINT("ERROR in creating read proc entry (%s)! \n", funcname);
3708 return -1;
3709 }
3710 }
3711 else
3712 {
3713 pe = create_proc_entry(funcname, S_IRUGO | S_IWUGO, proc_ifx_root);
3714 if (pe)
3715 {
3716 pe->read_proc = hookfuncr;
3717 pe->write_proc = hookfuncw;
3718 }
3719 else
3720 {
3721 IFX_PRINT("ERROR in creating proc entry (%s)! \n", funcname);
3722 return -1;
3723 }
3724 }
3725 return 0;
3726 }
3727
3728
3729 /* proc file system del function for removing module. */
3730 static void ifx_proc_delproc(char *funcname)
3731 {
3732 char pname[30];
3733 IFX_DEBUGPL(DBG_ENTRY, "%s() %d\n", __func__, __LINE__ );
3734 sprintf(pname, "%s", funcname);
3735
3736 remove_proc_entry(pname, proc_ifx_root);
3737
3738 }
3739
3740 static void ifxusb_dump_params(ifxusb_core_if_t *_core_if)
3741 {
3742 ifxusb_params_t *params=&_core_if->params;
3743
3744 #ifdef __IS_HOST__
3745 IFX_PRINT("IFXUSB Dump Parameters ( Host Mode) \n");
3746 #endif //__IS_HOST__
3747 #ifdef __IS_DEVICE__
3748 IFX_PRINT("IFXUSB Dump Parameters ( Device Mode) \n");
3749 #endif //__IS_DEVICE__
3750
3751 #ifdef __DESC_DMA__
3752 IFX_PRINT("DMA: Hermes DMA\n");
3753 #else
3754 IFX_PRINT("DMA: Non-Desc DMA\n");
3755 #endif
3756 IFX_PRINT(" Burst size: %d\n",params->dma_burst_size);
3757
3758 if (params->speed==1)
3759 IFX_PRINT("Full Speed only\n");
3760 else if(params->speed==0)
3761 IFX_PRINT("Full/Hign Speed\n");
3762 else
3763 IFX_PRINT("Unkonwn setting (%d) for Speed\n",params->speed);
3764
3765 IFX_PRINT("Total Data FIFO size: %d(0x%06X) DWord, %d(0x%06X) Bytes\n",
3766 params->data_fifo_size,params->data_fifo_size,
3767 params->data_fifo_size*4, params->data_fifo_size*4
3768 );
3769
3770 #ifdef __IS_DEVICE__
3771 IFX_PRINT("Rx FIFO size: %d(0x%06X) DWord, %d(0x%06X) Bytes\n",
3772 params->rx_fifo_size,params->rx_fifo_size,
3773 params->rx_fifo_size*4, params->rx_fifo_size*4
3774 );
3775 {
3776 int i;
3777 for(i=0;i<MAX_EPS_CHANNELS;i++)
3778 {
3779 IFX_PRINT("Tx FIFO #%d size: %d(0x%06X) DWord, %d(0x%06X) Bytes\n",i,
3780 params->tx_fifo_size[i],params->tx_fifo_size[i],
3781 params->tx_fifo_size[i]*4, params->tx_fifo_size[i]*4
3782 );
3783 }
3784 }
3785 #ifdef __DED_FIFO__
3786 IFX_PRINT("Treshold : %s Rx:%d Tx:%d \n",
3787 (params->thr_ctl)?"On":"Off",params->tx_thr_length,params->rx_thr_length);
3788 #endif
3789 #else //__IS_HOST__
3790 IFX_PRINT("Host Channels: %d\n",params->host_channels);
3791
3792 IFX_PRINT("Rx FIFO size: %d(0x%06X) DWord, %d(0x%06X) Bytes\n",
3793 params->data_fifo_size,params->data_fifo_size,
3794 params->data_fifo_size*4, params->data_fifo_size*4
3795 );
3796
3797 IFX_PRINT("NP Tx FIFO size: %d(0x%06X) DWord, %d(0x%06X) Bytes\n",
3798 params->nperio_tx_fifo_size,params->nperio_tx_fifo_size,
3799 params->nperio_tx_fifo_size*4, params->nperio_tx_fifo_size*4
3800 );
3801
3802 IFX_PRINT(" P Tx FIFO size: %d(0x%06X) DWord, %d(0x%06X) Bytes\n",
3803 params->perio_tx_fifo_size,params->perio_tx_fifo_size,
3804 params->perio_tx_fifo_size*4, params->perio_tx_fifo_size*4
3805 );
3806 #endif //__IS_HOST__
3807
3808 IFX_PRINT("Max Transfer size: %d(0x%06X) Bytes\n",
3809 params->max_transfer_size,params->max_transfer_size
3810 );
3811 IFX_PRINT("Max Packet Count: %d(0x%06X)\n",
3812 params->max_packet_count,params->max_packet_count
3813 );
3814
3815 IFX_PRINT("PHY UTMI Width: %d\n",params->phy_utmi_width);
3816
3817 IFX_PRINT("Turn Around Time: HS:%d FS:%d\n",params->turn_around_time_hs,params->turn_around_time_fs);
3818 IFX_PRINT("Timeout Calibration: HS:%d FS:%d\n",params->timeout_cal_hs,params->timeout_cal_fs);
3819
3820
3821 IFX_PRINT("==================================================\n");
3822 IFX_PRINT("End of Parameters Dump\n");
3823 IFX_PRINT("==================================================\n");
3824 }
3825