README.i2400m 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. Driver for the Intel Wireless Wimax Connection 2400m
  2. (C) 2008 Intel Corporation < linux-wimax@intel.com >
  3. This provides a driver for the Intel Wireless WiMAX Connection 2400m
  4. and a basic Linux kernel WiMAX stack.
  5. 1. Requirements
  6. * Linux installation with Linux kernel 2.6.22 or newer (if building
  7. from a separate tree)
  8. * Intel i2400m Echo Peak or Baxter Peak; this includes the Intel
  9. Wireless WiMAX/WiFi Link 5x50 series.
  10. * build tools:
  11. + Linux kernel development package for the target kernel; to
  12. build against your currently running kernel, you need to have
  13. the kernel development package corresponding to the running
  14. image installed (usually if your kernel is named
  15. linux-VERSION, the development package is called
  16. linux-dev-VERSION or linux-headers-VERSION).
  17. + GNU C Compiler, make
  18. 2. Compilation and installation
  19. 2.1. Compilation of the drivers included in the kernel
  20. Configure the kernel; to enable the WiMAX drivers select Drivers >
  21. Networking Drivers > WiMAX device support. Enable all of them as
  22. modules (easier).
  23. If USB or SDIO are not enabled in the kernel configuration, the options
  24. to build the i2400m USB or SDIO drivers will not show. Enable said
  25. subsystems and go back to the WiMAX menu to enable the drivers.
  26. Compile and install your kernel as usual.
  27. 2.2. Compilation of the drivers distributed as an standalone module
  28. To compile
  29. $ cd source/directory
  30. $ make
  31. Once built you can load and unload using the provided load.sh script;
  32. load.sh will load the modules, load.sh u will unload them.
  33. To install in the default kernel directories (and enable auto loading
  34. when the device is plugged):
  35. $ make install
  36. $ depmod -a
  37. If your kernel development files are located in a non standard
  38. directory or if you want to build for a kernel that is not the
  39. currently running one, set KDIR to the right location:
  40. $ make KDIR=/path/to/kernel/dev/tree
  41. For more information, please contact linux-wimax@intel.com.
  42. /*(DEBLOBBED)*/
  43. 4. Design
  44. This package contains two major parts: a WiMAX kernel stack and a
  45. driver for the Intel i2400m.
  46. The WiMAX stack is designed to provide for common WiMAX control
  47. services to current and future WiMAX devices from any vendor; please
  48. see README.wimax for details.
  49. The i2400m kernel driver is broken up in two main parts: the bus
  50. generic driver and the bus-specific drivers. The bus generic driver
  51. forms the drivercore and contain no knowledge of the actual method we
  52. use to connect to the device. The bus specific drivers are just the
  53. glue to connect the bus-generic driver and the device. Currently only
  54. USB and SDIO are supported. See drivers/net/wimax/i2400m/i2400m.h for
  55. more information.
  56. The bus generic driver is logically broken up in two parts: OS-glue and
  57. hardware-glue. The OS-glue interfaces with Linux. The hardware-glue
  58. interfaces with the device on using an interface provided by the
  59. bus-specific driver. The reason for this breakup is to be able to
  60. easily reuse the hardware-glue to write drivers for other OSes; note
  61. the hardware glue part is written as a native Linux driver; no
  62. abstraction layers are used, so to port to another OS, the Linux kernel
  63. API calls should be replaced with the target OS's.
  64. 5. Usage
  65. To load the driver, follow the instructions in the install section;
  66. once the driver is loaded, plug in the device (unless it is permanently
  67. plugged in). The driver will enumerate the device, upload the firmware
  68. and output messages in the kernel log (dmesg, /var/log/messages or
  69. /var/log/kern.log) such as:
  70. ...
  71. i2400m_usb 5-4:1.0: firmware interface version 8.0.0
  72. i2400m_usb 5-4:1.0: WiMAX interface wmx0 (00:1d:e1:01:94:2c) ready
  73. At this point the device is ready to work.
  74. Current versions require the Intel WiMAX Network Service in userspace
  75. to make things work. See the network service's README for instructions
  76. on how to scan, connect and disconnect.
  77. 5.1. Module parameters
  78. Module parameters can be set at kernel or module load time or by
  79. echoing values:
  80. $ echo VALUE > /sys/module/MODULENAME/parameters/PARAMETERNAME
  81. To make changes permanent, for example, for the i2400m module, you can
  82. also create a file named /etc/modprobe.d/i2400m containing:
  83. options i2400m idle_mode_disabled=1
  84. To find which parameters are supported by a module, run:
  85. $ modinfo path/to/module.ko
  86. During kernel bootup (if the driver is linked in the kernel), specify
  87. the following to the kernel command line:
  88. i2400m.PARAMETER=VALUE
  89. 5.1.1. i2400m: idle_mode_disabled
  90. The i2400m module supports a parameter to disable idle mode. This
  91. parameter, once set, will take effect only when the device is
  92. reinitialized by the driver (eg: following a reset or a reconnect).
  93. 5.2. Debug operations: debugfs entries
  94. The driver will register debugfs entries that allow the user to tweak
  95. debug settings. There are three main container directories where
  96. entries are placed, which correspond to the three blocks a i2400m WiMAX
  97. driver has:
  98. * /sys/kernel/debug/wimax:DEVNAME/ for the generic WiMAX stack
  99. controls
  100. * /sys/kernel/debug/wimax:DEVNAME/i2400m for the i2400m generic
  101. driver controls
  102. * /sys/kernel/debug/wimax:DEVNAME/i2400m-usb (or -sdio) for the
  103. bus-specific i2400m-usb or i2400m-sdio controls).
  104. Of course, if debugfs is mounted in a directory other than
  105. /sys/kernel/debug, those paths will change.
  106. 5.2.1. Increasing debug output
  107. The files named *dl_* indicate knobs for controlling the debug output
  108. of different submodules:
  109. *
  110. # find /sys/kernel/debug/wimax\:wmx0 -name \*dl_\*
  111. /sys/kernel/debug/wimax:wmx0/i2400m-usb/dl_tx
  112. /sys/kernel/debug/wimax:wmx0/i2400m-usb/dl_rx
  113. /sys/kernel/debug/wimax:wmx0/i2400m-usb/dl_notif
  114. /sys/kernel/debug/wimax:wmx0/i2400m-usb/dl_fw
  115. /sys/kernel/debug/wimax:wmx0/i2400m-usb/dl_usb
  116. /sys/kernel/debug/wimax:wmx0/i2400m/dl_tx
  117. /sys/kernel/debug/wimax:wmx0/i2400m/dl_rx
  118. /sys/kernel/debug/wimax:wmx0/i2400m/dl_rfkill
  119. /sys/kernel/debug/wimax:wmx0/i2400m/dl_netdev
  120. /sys/kernel/debug/wimax:wmx0/i2400m/dl_fw
  121. /sys/kernel/debug/wimax:wmx0/i2400m/dl_debugfs
  122. /sys/kernel/debug/wimax:wmx0/i2400m/dl_driver
  123. /sys/kernel/debug/wimax:wmx0/i2400m/dl_control
  124. /sys/kernel/debug/wimax:wmx0/wimax_dl_stack
  125. /sys/kernel/debug/wimax:wmx0/wimax_dl_op_rfkill
  126. /sys/kernel/debug/wimax:wmx0/wimax_dl_op_reset
  127. /sys/kernel/debug/wimax:wmx0/wimax_dl_op_msg
  128. /sys/kernel/debug/wimax:wmx0/wimax_dl_id_table
  129. /sys/kernel/debug/wimax:wmx0/wimax_dl_debugfs
  130. By reading the file you can obtain the current value of said debug
  131. level; by writing to it, you can set it.
  132. To increase the debug level of, for example, the i2400m's generic TX
  133. engine, just write:
  134. $ echo 3 > /sys/kernel/debug/wimax:wmx0/i2400m/dl_tx
  135. Increasing numbers yield increasing debug information; for details of
  136. what is printed and the available levels, check the source. The code
  137. uses 0 for disabled and increasing values until 8.
  138. 5.2.2. RX and TX statistics
  139. The i2400m/rx_stats and i2400m/tx_stats provide statistics about the
  140. data reception/delivery from the device:
  141. $ cat /sys/kernel/debug/wimax:wmx0/i2400m/rx_stats
  142. 45 1 3 34 3104 48 480
  143. The numbers reported are
  144. * packets/RX-buffer: total, min, max
  145. * RX-buffers: total RX buffers received, accumulated RX buffer size
  146. in bytes, min size received, max size received
  147. Thus, to find the average buffer size received, divide accumulated
  148. RX-buffer / total RX-buffers.
  149. To clear the statistics back to 0, write anything to the rx_stats file:
  150. $ echo 1 > /sys/kernel/debug/wimax:wmx0/i2400m_rx_stats
  151. Likewise for TX.
  152. Note the packets this debug file refers to are not network packet, but
  153. packets in the sense of the device-specific protocol for communication
  154. to the host. See drivers/net/wimax/i2400m/tx.c.
  155. 5.2.3. Tracing messages received from user space
  156. To echo messages received from user space into the trace pipe that the
  157. i2400m driver creates, set the debug file i2400m/trace_msg_from_user to
  158. 1:
  159. *
  160. $ echo 1 > /sys/kernel/debug/wimax:wmx0/i2400m/trace_msg_from_user
  161. 5.2.4. Performing a device reset
  162. By writing a 0, a 1 or a 2 to the file
  163. /sys/kernel/debug/wimax:wmx0/reset, the driver performs a warm (without
  164. disconnecting from the bus), cold (disconnecting from the bus) or bus
  165. (bus specific) reset on the device.
  166. 5.2.5. Asking the device to enter power saving mode
  167. By writing any value to the /sys/kernel/debug/wimax:wmx0 file, the
  168. device will attempt to enter power saving mode.
  169. 6. Troubleshooting
  170. /*(DEBLOBBED)*/