|  |  | 
|  | 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. |