1. 18 9月, 2009 1 次提交
    • D
      Input: libps2 - additional locking for i8042 ports · 181d683d
      Dmitry Torokhov 提交于
      The serio ports on i8042 are not completely isolated; while we provide
      enough locking to ensure proper serialization when accessing control
      and data registers AUX and KBD ports can still have an effect on each
      other on PS/2 protocol level. The most prominent effect is that
      issuing a command for the device connected to one port may cause
      abort of the command currently executing by the device connected to
      another port.
      
      Since i8042 nor serio subsystem are not aware of the details of the
      PS/2 protocol (length of the commands and their replies and so on) the
      locking should be done on libps2 level by adding special handling when
      we see that we are dealing with serio port on i8042.
      Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
      181d683d
  2. 11 9月, 2009 4 次提交
    • D
      Input: i8042 - use platform_driver_probe · f8113416
      Dmitry Torokhov 提交于
      i8042 is not hot-pluggable and we create the device when we register
      the driver, so let's save some memory by using platform_device_probe
      and using __init instead of __devinit.
      Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
      f8113416
    • D
      386b3849
    • D
      Input: i8042 - try disabling and re-enabling AUX port at close · 5ddbc77c
      Dmitry Torokhov 提交于
      Ever since we switched from having a polling timer to registering IRQ
      handlers for both keyboard and AUX ports at the driver registration
      time, on certain boxes probing for a mouse results in keyboard
      stopping working. The only real difference between old and new way is
      that before we disabled ports after unsuccessful probe whereas now we
      leave them as is. Try to emulate the old behavior by disabling and
      immediately re-enabling AUX and KBD ports when corresponding serio
      port is being closed.
      Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
      5ddbc77c
    • D
      Input: i8042 - bypass AUX IRQ delivery test on laptops · 1c7827ae
      Dmitry Torokhov 提交于
      It seems that many laptops do not fully implement AUX LOOP command in
      their keyboard controllers, causing issues with touchpad detection.
      We know however that almost every laptop/portable uses a PS/2 pointing
      device and, even if user disables it in favor of an external mouse,
      the system will not use IRQ 12 for anything else. Therefore we may
      bypass AUX IRQ delivery test when running on a laptop and assume that
      it is routed properly.
      
      Just to be safe we require the box to have good PNP data in order to
      bypass the test.
      
      [Jin Dongming <jin.dongming@np.css.fujitsu.com>: fix crash caused
       by missing terminator in the DMI table]
      Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
      1c7827ae
  3. 27 7月, 2009 1 次提交
  4. 08 7月, 2009 1 次提交
  5. 10 5月, 2009 1 次提交
  6. 12 4月, 2009 1 次提交
  7. 17 6月, 2008 1 次提交
  8. 27 5月, 2008 1 次提交
  9. 14 3月, 2008 1 次提交
  10. 06 2月, 2008 1 次提交
  11. 21 1月, 2008 3 次提交
  12. 22 10月, 2007 1 次提交
  13. 05 9月, 2007 1 次提交
  14. 30 8月, 2007 1 次提交
  15. 18 7月, 2007 1 次提交
  16. 08 5月, 2007 1 次提交
  17. 12 4月, 2007 1 次提交
  18. 08 3月, 2007 1 次提交
  19. 18 2月, 2007 2 次提交
  20. 10 2月, 2007 1 次提交
  21. 18 1月, 2007 1 次提交
  22. 17 11月, 2006 1 次提交
    • D
      Input: i8042 - fix shutdown issue on some boxes with active MUXes · a216a4b6
      Dmitry Torokhov 提交于
      MUX error handling has a workaround for KBCs that get confused which
      port data came from and signal MUXERR while data is actually good.
      Unfortunately this workaround hurts with KBCs that signal timeouts
      as 0xfc (spec says that only 0xfd, 0xfe and 0xff are alowed with
      MUXERR) since it causes endless attempts to rescan i8042 serio
      ports. The solution is to treat 0xfc as timeout (0xfe).
      Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
      a216a4b6
  23. 03 11月, 2006 1 次提交
  24. 11 10月, 2006 1 次提交
  25. 05 10月, 2006 1 次提交
    • D
      IRQ: Maintain regs pointer globally rather than passing to IRQ handlers · 7d12e780
      David Howells 提交于
      Maintain a per-CPU global "struct pt_regs *" variable which can be used instead
      of passing regs around manually through all ~1800 interrupt handlers in the
      Linux kernel.
      
      The regs pointer is used in few places, but it potentially costs both stack
      space and code to pass it around.  On the FRV arch, removing the regs parameter
      from all the genirq function results in a 20% speed up of the IRQ exit path
      (ie: from leaving timer_interrupt() to leaving do_IRQ()).
      
      Where appropriate, an arch may override the generic storage facility and do
      something different with the variable.  On FRV, for instance, the address is
      maintained in GR28 at all times inside the kernel as part of general exception
      handling.
      
      Having looked over the code, it appears that the parameter may be handed down
      through up to twenty or so layers of functions.  Consider a USB character
      device attached to a USB hub, attached to a USB controller that posts its
      interrupts through a cascaded auxiliary interrupt controller.  A character
      device driver may want to pass regs to the sysrq handler through the input
      layer which adds another few layers of parameter passing.
      
      I've build this code with allyesconfig for x86_64 and i386.  I've runtested the
      main part of the code on FRV and i386, though I can't test most of the drivers.
      I've also done partial conversion for powerpc and MIPS - these at least compile
      with minimal configurations.
      
      This will affect all archs.  Mostly the changes should be relatively easy.
      Take do_IRQ(), store the regs pointer at the beginning, saving the old one:
      
      	struct pt_regs *old_regs = set_irq_regs(regs);
      
      And put the old one back at the end:
      
      	set_irq_regs(old_regs);
      
      Don't pass regs through to generic_handle_irq() or __do_IRQ().
      
      In timer_interrupt(), this sort of change will be necessary:
      
      	-	update_process_times(user_mode(regs));
      	-	profile_tick(CPU_PROFILING, regs);
      	+	update_process_times(user_mode(get_irq_regs()));
      	+	profile_tick(CPU_PROFILING);
      
      I'd like to move update_process_times()'s use of get_irq_regs() into itself,
      except that i386, alone of the archs, uses something other than user_mode().
      
      Some notes on the interrupt handling in the drivers:
      
       (*) input_dev() is now gone entirely.  The regs pointer is no longer stored in
           the input_dev struct.
      
       (*) finish_unlinks() in drivers/usb/host/ohci-q.c needs checking.  It does
           something different depending on whether it's been supplied with a regs
           pointer or not.
      
       (*) Various IRQ handler function pointers have been moved to type
           irq_handler_t.
      Signed-Off-By: NDavid Howells <dhowells@redhat.com>
      (cherry picked from 1b16e7ac850969f38b375e511e3fa2f474a33867 commit)
      7d12e780
  26. 11 9月, 2006 1 次提交
  27. 03 7月, 2006 1 次提交
  28. 01 7月, 2006 1 次提交
  29. 28 12月, 2005 1 次提交
  30. 10 11月, 2005 1 次提交
  31. 30 10月, 2005 1 次提交
  32. 29 10月, 2005 1 次提交
  33. 11 9月, 2005 1 次提交
  34. 04 9月, 2005 1 次提交