634{
637
639 return ToReturn;
640
641 if (
MouseIdle == DeviceExtension->MouseState)
642 {
643
645 {
646 WARN_(I8042PRT,
"Hot plugged mouse!\n");
649 }
650 else
652 }
655
657 PortDeviceExtension = DeviceExtension->
Common.PortDeviceExtension;
658
659 switch ((
ULONG)DeviceExtension->MouseResetState)
660 {
663 {
664 WARN_(I8042PRT,
"Dropping extra ACK\n");
666 }
667
668
670 {
671 DeviceExtension->MouseResetState++;
672 }
673 else
674 {
675 PortDeviceExtension->
Flags &= ~MOUSE_PRESENT;
677 WARN_(I8042PRT,
"Mouse returned bad reset reply: %x (expected aa)\n",
Value);
678 }
682 {
683 WARN_(I8042PRT,
"Dropping extra ACK #2\n");
685 }
686
688 {
689 DeviceExtension->MouseResetState++;
691 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF2);
692 }
693 else
694 {
695 PortDeviceExtension->
Flags &= ~MOUSE_PRESENT;
697 WARN_(I8042PRT,
"Mouse returned bad reset reply part two: %x (expected 0)\n",
Value);
698 }
702 {
703 DeviceExtension->MouseResetState++;
704 }
706 {
707 DeviceExtension->MouseResetState++;
708
709 WARN_(I8042PRT,
"Mouse doesn't support 0xd2, (returns %x, expected %x), faking\n",
Value,
MOUSE_ACK);
711 }
715 {
716 case 0x02:
717 DeviceExtension->MouseAttributes.MouseIdentifier =
719 break;
720 case 0x03:
721 case 0x04:
722 DeviceExtension->MouseAttributes.MouseIdentifier =
724 break;
725 default:
726 DeviceExtension->MouseAttributes.MouseIdentifier =
728 }
729 DeviceExtension->MouseResetState++;
730 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xE8);
733 DeviceExtension->MouseResetState++;
734 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0x00);
738 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xE6);
742 DeviceExtension->MouseResetState++;
743 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xE6);
746 DeviceExtension->MouseResetState++;
747 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xE9);
750 DeviceExtension->MouseResetState++;
753 DeviceExtension->MouseLogiBuffer[0] =
Value;
754 DeviceExtension->MouseResetState++;
757 DeviceExtension->MouseLogiBuffer[1] =
Value;
758 DeviceExtension->MouseResetState++;
761 DeviceExtension->MouseLogiBuffer[2] =
Value;
762
763
764
765
766
767
768 if (DeviceExtension->MouseLogiBuffer[1])
769 {
770 DeviceExtension->MouseAttributes.NumberOfButtons =
771 DeviceExtension->MouseLogiBuffer[1];
772 DeviceExtension->MouseType =
Ps2pp;
773 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF3);
775
777 }
782 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF3);
783 DeviceExtension->MouseResetState = 1001;
785 case 1001:
786 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xC8);
787 DeviceExtension->MouseResetState++;
789 case 1002:
790 case 1004:
791 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF3);
792 DeviceExtension->MouseResetState++;
794 case 1003:
795 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0x64);
796 DeviceExtension->MouseResetState++;
798 case 1005:
799 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0x50);
800 DeviceExtension->MouseResetState++;
802 case 1006:
803 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF2);
804 DeviceExtension->MouseResetState++;
806 case 1007:
807
808 DeviceExtension->MouseResetState++;
810 case 1008:
812
813 DeviceExtension->MouseAttributes.NumberOfButtons = 3;
814 DeviceExtension->MouseAttributes.MouseIdentifier =
819 }
820 else
821 {
822
823 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF3);
825 }
828 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF3);
829 DeviceExtension->MouseResetState = 1021;
831 case 1022:
832 case 1024:
833 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF3);
834 DeviceExtension->MouseResetState++;
836 case 1021:
837 case 1023:
838 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xC8);
839 DeviceExtension->MouseResetState++;
841 case 1025:
842 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0x50);
843 DeviceExtension->MouseResetState++;
845 case 1026:
846 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF2);
847 DeviceExtension->MouseResetState++;
849 case 1027:
851 {
852 DeviceExtension->MouseAttributes.NumberOfButtons = 5;
853 DeviceExtension->MouseAttributes.MouseIdentifier =
856 }
857 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF3);
861 DeviceExtension->MouseHook.IsrWritePort(
862 DeviceExtension->MouseHook.CallContext,
863 (
UCHAR)DeviceExtension->MouseAttributes.SampleRate);
864 DeviceExtension->MouseResetState++;
868 {
869 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0x3C);
871 DeviceExtension->MouseResetState = 1040;
873 }
874 case 1040:
875 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xE8);
879 DeviceExtension->MouseHook.IsrWritePort(
880 DeviceExtension->MouseHook.CallContext,
882 INFO_(I8042PRT,
"Mouse resolution %lu\n",
887 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF4);
894 INFO_(I8042PRT,
"Mouse type = %u\n", DeviceExtension->MouseType);
896 default:
897 if (DeviceExtension->MouseResetState < 100 || DeviceExtension->MouseResetState > 999)
898 ERR_(I8042PRT,
"MouseResetState went out of range: %lu\n", DeviceExtension->MouseResetState);
900 }
901}
@ ExpectingReadMouseStatusACK
@ ExpectingReadMouseStatusByte1
@ ExpectingSetScaling1to1ACK3
@ ExpectingGetDeviceIdValue
@ ExpectingFinalResolutionValueACK
@ ExpectingSetSamplingRateValueACK
@ ExpectingSetResolutionDefaultACK
@ ExpectingSetScaling1to1ACK
@ ExpectingReadMouseStatusByte3
@ ExpectingSetResolutionDefaultValueACK
@ ExpectingReadMouseStatusByte2
@ ExpectingSetScaling1to1ACK2
@ ExpectingSetSamplingRateACK
@ ExpectingGetDeviceIdACK
@ ExpectingFinalResolutionACK
#define WHEELMOUSE_I8042_HARDWARE
#define BALLPOINT_I8042_HARDWARE
#define MOUSE_I8042_HARDWARE
COMMON_DEVICE_EXTENSION Common