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