1. 12 6月, 2009 1 次提交
  2. 11 6月, 2009 19 次提交
  3. 29 5月, 2009 7 次提交
  4. 22 5月, 2009 1 次提交
    • I
      wimax/i2400m: usb: fix device reset on autosuspend while not yet idle · e069c0cf
      Inaky Perez-Gonzalez 提交于
      When the i2400m is connected to a network, the host interface (USB)
      cannot be suspended. For that to happen, the device has to have
      negotiated with the basestation to put the link on IDLE state.
      
      If the host tries to put the device in standby while it is connected
      but not idle, the device resets, as the driver should not do that.
      
      To avoid triggering that, when the USB susbsytem requires the driver
      to autosuspend the device, the driver checks if the device is not yet
      idle. If it is not, the request is rejected (will be retried again
      later on after the autosuspend timeout). At some point the device will
      enter idle and the request will succeed (unless of course, there is
      network traffic, but at that point, there is no idle neither in the
      link or the host interface).
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      e069c0cf
  5. 15 5月, 2009 1 次提交
    • I
      wimax/i2400m: fix device crash: fix optimization in _roq_queue_update_ws · 4e5b6d00
      Inaky Perez-Gonzalez 提交于
      When the i2400m receives data and the device indicates there has to be
      reordering, we keep an sliding window implementation to sort the
      packets before sending them to the network stack.
      
      One of the "operations" that the device indicates is "queue a packet
      and update the window start". When the queue is empty, this is
      equivalent to "deliver the packet and update the window start".
      
      That case was optimized in i2400m_roq_queue_update_ws() so that we
      would not pointlessly queue and dequeue a packet. However, when the
      optimization was active, it wasn't updating the window start. That
      caused the reorder management code to get confused later on with what
      seemed to be wrong reorder requests from the device.
      
      Thus the fix implemented is to do the right thing and update the
      window start in both cases, when the queue is empty (and the
      optimization is done) and when not.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      4e5b6d00
  6. 25 3月, 2009 1 次提交
  7. 12 3月, 2009 1 次提交
  8. 02 3月, 2009 8 次提交
    • I
      wimax/i2400m: implement RX reorder support · c747583d
      Inaky Perez-Gonzalez 提交于
      Allow the device to give the driver RX data with reorder information.
      
      When that is done, the device will indicate the driver if a packet has
      to be held in a (sorted) queue. It will also tell the driver when held
      packets have to be released to the OS.
      
      This is done to improve the WiMAX-protocol level retransmission
      support when missing frames are detected.
      
      The code docs provide details about the implementation.
      
      In general, this just hooks into the RX path in rx.c; if a packet with
      the reorder bit in the RX header is detected, the reorder information
      in the header is extracted and one of the four main reorder operations
      are executed. In one case (queue) no packet will be delivered to the
      networking stack, just queued, whereas in the others (reset, update_ws
      and queue_update_ws), queued packet might be delivered depending on
      the window start for the specific queue.
      
      The modifications to files other than rx.c are:
      
      - control.c: during device initialization, enable reordering support
        if the rx_reorder_disabled module parameter is not enabled
      
      - driver.c: expose a rx_reorder_disable module parameter and call
        i2400m_rx_setup/release() to initialize/shutdown RX reorder
        support.
      
      - i2400m.h: introduce members in 'struct i2400m' needed for
        implementing reorder support.
      
      - linux/i2400m.h: introduce TLVs, commands and constant definitions
        related to RX reorder
      
      Last but not least, the rx reorder code includes an small circular log
      where the last N reorder operations are recorded to be displayed in
      case of inconsistency. Otherwise diagnosing issues would be almost
      impossible.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c747583d
    • H
      wimax: replace uses of __constant_{endian} · 61b8d268
      Harvey Harrison 提交于
      Base versions handle constant folding now.
      
      Edited by Inaky to fix conflicts due to changes in netdev.c
      Signed-off-by: NHarvey Harrison <harvey.harrison@gmail.com>
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      61b8d268
    • I
      wimax/i2400m: support extended data RX protocol (no need to reallocate skbs) · fd5c565c
      Inaky Perez-Gonzalez 提交于
      Newer i2400m firmwares (>= v1.4) extend the data RX protocol so that
      each packet has a 16 byte header. This header is mainly used to
      implement host reordeing (which is addressed in later commits).
      
      However, this header also allows us to overwrite it (once data has
      been extracted) with an Ethernet header and deliver to the networking
      stack without having to reallocate the skb (as it happened in fw <=
      v1.3) to make room for it.
      
      - control.c: indicate the device [dev_initialize()] that the driver
        wants to use the extended data RX protocol. Also involves adding the
        definition of the needed data types in include/linux/wimax/i2400m.h.
      
      - rx.c: handle the new payload type for the extended RX data
        protocol. Prepares the skb for delivery to
        netdev.c:i2400m_net_erx().
      
      - netdev.c: Introduce i2400m_net_erx() that adds the fake ethernet
        address to a prepared skb and delivers it to the networking
        stack.
      
      - cleanup: in most instances in rx.c, the variable 'single' was
        renamed to 'single_last' for it better conveys its meaning.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      fd5c565c
    • K
      wimax: struct device - replace bus_id with dev_name(), dev_set_name() · 347707ba
      Kay Sievers 提交于
      Cc: inaky.perez-gonzalez@intel.com
      Cc: linux-wimax@intel.com
      Acked-by: NGreg Kroah-Hartman <gregkh@suse.de>
      Signed-off-by: NKay Sievers <kay.sievers@vrfy.org>
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      347707ba
    • I
      wimax/i2400m: allow control of the base-station idle mode timeout · 8987691a
      Inaky Perez-Gonzalez 提交于
      For power saving reasons, WiMAX links can be put in idle mode while
      connected after a certain time of the link not being used for tx or
      rx. In this mode, the device pages the base-station regularly and when
      data is ready to be transmitted, the link is revived.
      
      This patch allows the user to control the time the device has to be
      idle before it decides to go to idle mode from a sysfs
      interace.
      
      It also updates the initialization code to acknowledge the module
      variable 'idle_mode_disabled' when the firmware is a newer version
      (upcoming 1.4 vs 2.6.29's v1.3).
      
      The method for setting the idle mode timeout in the older firmwares is
      much more limited and can be only done at initialization time. Thus,
      the sysfs file will return -ENOSYS on older ones.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      8987691a
    • I
      wimax/i2400m: firmware_check() encodes the firmware version in i2400m->fw_version · 6a0f7ab8
      Inaky Perez-Gonzalez 提交于
      Upcoming modifications will need to test for the running firmware
      version before activating a feature or not. This is helpful to
      implement backward compatibility with older firmware versions.
      
      Modify i2400m_firmware_check() to encode in i2400m->fw_version the
      major and minor version numbers of the firmware interface.
      
      As well, move the call to be done as the very first operation once we
      have communication with the device during probe() [in
      __i2400m_dev_start()]. This is needed so any operation that is
      executed afterwards can determine which fw version it is talking to.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6a0f7ab8
    • I
      wimax/i2400m: drop support for deprecated major fw interface, add for new minor · efa05d0f
      Inaky Perez-Gonzalez 提交于
      Firmware interface version 8.x.x has long been deprecated and is no
      longer supported (nor available, as it is a preproduction firmware),
      so it can be safely dropped.
      
      Add support for firmware interface v9.2.x (current is 9.1.x). Firmware
      version 9.2.x is backwards compatible with 9.1.x; new features are
      enabled if switches are pressed to turn them on. Forthcoming commits
      to the driver will start pressing those switches when the firmware
      interface supports it.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      efa05d0f
    • I
      wimax/i2400m: add the ability to fallback to other firmware files if the default is not there · 1039abbc
      Inaky Perez-Gonzalez 提交于
      In order to support backwards compatibility with older firmwares when
      a driver is updated by a new kernel release, the i2400m bus drivers
      can declare a list of firmware files they can work with (in general
      these will be each a different version). The firmware loader will try
      them in sequence until one loads.
      
      Thus, if a user doesn't have the latest and greatest firmware that a
      newly installed kernel would require, the driver would fall back to
      the firmware from a previous release.
      
      To support this, the i2400m->bus_fw_name is changed to be a NULL
      terminated array firmware file names (and renamed to bus_fw_names) and
      we add a new entry (i2400m->fw_name) that points to the name of the
      firmware being currently used. All code that needs to print the
      firmware file name uses i2400m->fw_name instead of the old
      i2400m->bus_fw_name.
      
      The code in i2400m_dev_bootstrap() that loads the firmware is changed
      with an iterator over the firmware file name list that tries to load
      each form user space, using the first one that succeeds in
      request_firmware() (and thus stopping the iteration).
      
      The USB and SDIO bus drivers are updated to take advantage of this and
      reflect which firmwares they support.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      1039abbc
  9. 27 2月, 2009 1 次提交