| Linux kernel WiMAX stack | |
| (C) 2008 Intel Corporation < linux-wimax@intel.com > | |
| This provides a basic Linux kernel WiMAX stack to provide a common | |
| control API for WiMAX devices, usable from kernel and user space. | |
| 1. Design | |
| The WiMAX stack is designed to provide for common WiMAX control | |
| services to current and future WiMAX devices from any vendor. | |
| Because currently there is only one and we don't know what would be the | |
| common services, the APIs it currently provides are very minimal. | |
| However, it is done in such a way that it is easily extensible to | |
| accommodate future requirements. | |
| The stack works by embedding a struct wimax_dev in your device's | |
| control structures. This provides a set of callbacks that the WiMAX | |
| stack will call in order to implement control operations requested by | |
| the user. As well, the stack provides API functions that the driver | |
| calls to notify about changes of state in the device. | |
| The stack exports the API calls needed to control the device to user | |
| space using generic netlink as a marshalling mechanism. You can access | |
| them using your own code or use the wrappers provided for your | |
| convenience in libwimax (in the wimax-tools package). | |
| For detailed information on the stack, please see | |
| include/linux/wimax.h. | |
| 2. Usage | |
| For usage in a driver (registration, API, etc) please refer to the | |
| instructions in the header file include/linux/wimax.h. | |
| When a device is registered with the WiMAX stack, a set of debugfs | |
| files will appear in /sys/kernel/debug/wimax:wmxX can tweak for | |
| control. | |
| 2.1. Obtaining debug information: debugfs entries | |
| The WiMAX stack is compiled, by default, with debug messages that can | |
| be used to diagnose issues. By default, said messages are disabled. | |
| The drivers will register debugfs entries that allow the user to tweak | |
| debug settings. | |
| Each driver, when registering with the stack, will cause a debugfs | |
| directory named wimax:DEVICENAME to be created; optionally, it might | |
| create more subentries below it. | |
| 2.1.1. Increasing debug output | |
| The files named *dl_* indicate knobs for controlling the debug output | |
| of different submodules of the WiMAX stack: | |
| * | |
| # find /sys/kernel/debug/wimax\:wmx0 -name \*dl_\* | |
| /sys/kernel/debug/wimax:wmx0/wimax_dl_stack | |
| /sys/kernel/debug/wimax:wmx0/wimax_dl_op_rfkill | |
| /sys/kernel/debug/wimax:wmx0/wimax_dl_op_reset | |
| /sys/kernel/debug/wimax:wmx0/wimax_dl_op_msg | |
| /sys/kernel/debug/wimax:wmx0/wimax_dl_id_table | |
| /sys/kernel/debug/wimax:wmx0/wimax_dl_debugfs | |
| /sys/kernel/debug/wimax:wmx0/.... # other driver specific files | |
| NOTE: Of course, if debugfs is mounted in a directory other than | |
| /sys/kernel/debug, those paths will change. | |
| By reading the file you can obtain the current value of said debug | |
| level; by writing to it, you can set it. | |
| To increase the debug level of, for example, the id-table submodule, | |
| just write: | |
| $ echo 3 > /sys/kernel/debug/wimax:wmx0/wimax_dl_id_table | |
| Increasing numbers yield increasing debug information; for details of | |
| what is printed and the available levels, check the source. The code | |
| uses 0 for disabled and increasing values until 8. |