82 lines
		
	
	
	
		
			3.1 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			82 lines
		
	
	
	
		
			3.1 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   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.
							 |