Inaky Perez-Gonzalez | 0d69591 | 2008-12-20 16:57:32 -0800 | [diff] [blame] | 1 | |
| 2 | Linux kernel WiMAX stack |
| 3 | |
| 4 | (C) 2008 Intel Corporation < linux-wimax@intel.com > |
| 5 | |
| 6 | This provides a basic Linux kernel WiMAX stack to provide a common |
| 7 | control API for WiMAX devices, usable from kernel and user space. |
| 8 | |
| 9 | 1. Design |
| 10 | |
| 11 | The WiMAX stack is designed to provide for common WiMAX control |
| 12 | services to current and future WiMAX devices from any vendor. |
| 13 | |
| 14 | Because currently there is only one and we don't know what would be the |
| 15 | common services, the APIs it currently provides are very minimal. |
| 16 | However, it is done in such a way that it is easily extensible to |
| 17 | accommodate future requirements. |
| 18 | |
| 19 | The stack works by embedding a struct wimax_dev in your device's |
| 20 | control structures. This provides a set of callbacks that the WiMAX |
| 21 | stack will call in order to implement control operations requested by |
| 22 | the user. As well, the stack provides API functions that the driver |
| 23 | calls to notify about changes of state in the device. |
| 24 | |
| 25 | The stack exports the API calls needed to control the device to user |
| 26 | space using generic netlink as a marshalling mechanism. You can access |
| 27 | them using your own code or use the wrappers provided for your |
| 28 | convenience in libwimax (in the wimax-tools package). |
| 29 | |
| 30 | For detailed information on the stack, please see |
| 31 | include/linux/wimax.h. |
| 32 | |
| 33 | 2. Usage |
| 34 | |
| 35 | For usage in a driver (registration, API, etc) please refer to the |
| 36 | instructions in the header file include/linux/wimax.h. |
| 37 | |
| 38 | When a device is registered with the WiMAX stack, a set of debugfs |
| 39 | files will appear in /sys/kernel/debug/wimax:wmxX can tweak for |
| 40 | control. |
| 41 | |
| 42 | 2.1. Obtaining debug information: debugfs entries |
| 43 | |
| 44 | The WiMAX stack is compiled, by default, with debug messages that can |
| 45 | be used to diagnose issues. By default, said messages are disabled. |
| 46 | |
| 47 | The drivers will register debugfs entries that allow the user to tweak |
| 48 | debug settings. |
| 49 | |
| 50 | Each driver, when registering with the stack, will cause a debugfs |
| 51 | directory named wimax:DEVICENAME to be created; optionally, it might |
| 52 | create more subentries below it. |
| 53 | |
| 54 | 2.1.1. Increasing debug output |
| 55 | |
| 56 | The files named *dl_* indicate knobs for controlling the debug output |
| 57 | of different submodules of the WiMAX stack: |
| 58 | * |
| 59 | # find /sys/kernel/debug/wimax\:wmx0 -name \*dl_\* |
| 60 | /sys/kernel/debug/wimax:wmx0/wimax_dl_stack |
| 61 | /sys/kernel/debug/wimax:wmx0/wimax_dl_op_rfkill |
| 62 | /sys/kernel/debug/wimax:wmx0/wimax_dl_op_reset |
| 63 | /sys/kernel/debug/wimax:wmx0/wimax_dl_op_msg |
| 64 | /sys/kernel/debug/wimax:wmx0/wimax_dl_id_table |
| 65 | /sys/kernel/debug/wimax:wmx0/wimax_dl_debugfs |
| 66 | /sys/kernel/debug/wimax:wmx0/.... # other driver specific files |
| 67 | |
| 68 | NOTE: Of course, if debugfs is mounted in a directory other than |
| 69 | /sys/kernel/debug, those paths will change. |
| 70 | |
| 71 | By reading the file you can obtain the current value of said debug |
| 72 | level; by writing to it, you can set it. |
| 73 | |
| 74 | To increase the debug level of, for example, the id-table submodule, |
| 75 | just write: |
| 76 | |
| 77 | $ echo 3 > /sys/kernel/debug/wimax:wmx0/wimax_dl_id_table |
| 78 | |
| 79 | Increasing numbers yield increasing debug information; for details of |
| 80 | what is printed and the available levels, check the source. The code |
| 81 | uses 0 for disabled and increasing values until 8. |