637{
640
642 return ToReturn;
643
644 if (
MouseIdle == DeviceExtension->MouseState)
645 {
646
648 {
649 WARN_(I8042PRT,
"Hot plugged mouse!\n");
652 }
653 else
655 }
658
660 PortDeviceExtension = DeviceExtension->
Common.PortDeviceExtension;
661
662 switch ((
ULONG)DeviceExtension->MouseResetState)
663 {
666 {
667 WARN_(I8042PRT,
"Dropping extra ACK\n");
669 }
670
671
673 {
674 DeviceExtension->MouseResetState++;
675 }
676 else
677 {
678 PortDeviceExtension->
Flags &= ~MOUSE_PRESENT;
680 WARN_(I8042PRT,
"Mouse returned bad reset reply: %x (expected aa)\n",
Value);
681 }
685 {
686 WARN_(I8042PRT,
"Dropping extra ACK #2\n");
688 }
689
691 {
692 DeviceExtension->MouseResetState++;
694 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF2);
695 }
696 else
697 {
698 PortDeviceExtension->
Flags &= ~MOUSE_PRESENT;
700 WARN_(I8042PRT,
"Mouse returned bad reset reply part two: %x (expected 0)\n",
Value);
701 }
705 {
706 DeviceExtension->MouseResetState++;
707 }
709 {
710 DeviceExtension->MouseResetState++;
711
712 WARN_(I8042PRT,
"Mouse doesn't support 0xd2, (returns %x, expected %x), faking\n",
Value,
MOUSE_ACK);
714 }
718 {
719 case 0x02:
720 DeviceExtension->MouseAttributes.MouseIdentifier =
722 break;
723 case 0x03:
724 case 0x04:
725 DeviceExtension->MouseAttributes.MouseIdentifier =
727 break;
728 default:
729 DeviceExtension->MouseAttributes.MouseIdentifier =
731 }
732 DeviceExtension->MouseResetState++;
733 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xE8);
736 DeviceExtension->MouseResetState++;
737 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0x00);
741 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xE6);
745 DeviceExtension->MouseResetState++;
746 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xE6);
749 DeviceExtension->MouseResetState++;
750 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xE9);
753 DeviceExtension->MouseResetState++;
756 DeviceExtension->MouseLogiBuffer[0] =
Value;
757 DeviceExtension->MouseResetState++;
760 DeviceExtension->MouseLogiBuffer[1] =
Value;
761 DeviceExtension->MouseResetState++;
764 DeviceExtension->MouseLogiBuffer[2] =
Value;
765
766
767
768
769
770
771 if (DeviceExtension->MouseLogiBuffer[1])
772 {
773 DeviceExtension->MouseAttributes.NumberOfButtons =
774 DeviceExtension->MouseLogiBuffer[1];
775 DeviceExtension->MouseType =
Ps2pp;
776 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF3);
778
780 }
785 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF3);
786 DeviceExtension->MouseResetState = 1001;
788 case 1001:
789 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xC8);
790 DeviceExtension->MouseResetState++;
792 case 1002:
793 case 1004:
794 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF3);
795 DeviceExtension->MouseResetState++;
797 case 1003:
798 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0x64);
799 DeviceExtension->MouseResetState++;
801 case 1005:
802 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0x50);
803 DeviceExtension->MouseResetState++;
805 case 1006:
806 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF2);
807 DeviceExtension->MouseResetState++;
809 case 1007:
810
811 DeviceExtension->MouseResetState++;
813 case 1008:
815
816 DeviceExtension->MouseAttributes.NumberOfButtons = 3;
817 DeviceExtension->MouseAttributes.MouseIdentifier =
822 }
823 else
824 {
825
826 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF3);
828 }
831 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF3);
832 DeviceExtension->MouseResetState = 1021;
834 case 1022:
835 case 1024:
836 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF3);
837 DeviceExtension->MouseResetState++;
839 case 1021:
840 case 1023:
841 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xC8);
842 DeviceExtension->MouseResetState++;
844 case 1025:
845 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0x50);
846 DeviceExtension->MouseResetState++;
848 case 1026:
849 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF2);
850 DeviceExtension->MouseResetState++;
852 case 1027:
854 {
855 DeviceExtension->MouseAttributes.NumberOfButtons = 5;
856 DeviceExtension->MouseAttributes.MouseIdentifier =
859 }
860 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF3);
864 DeviceExtension->MouseHook.IsrWritePort(
865 DeviceExtension->MouseHook.CallContext,
866 (
UCHAR)DeviceExtension->MouseAttributes.SampleRate);
867 DeviceExtension->MouseResetState++;
871 {
872 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0x3C);
874 DeviceExtension->MouseResetState = 1040;
876 }
877 case 1040:
878 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xE8);
882 DeviceExtension->MouseHook.IsrWritePort(
883 DeviceExtension->MouseHook.CallContext,
885 INFO_(I8042PRT,
"Mouse resolution %lu\n",
890 DeviceExtension->MouseHook.IsrWritePort(DeviceExtension->MouseHook.CallContext, 0xF4);
897 INFO_(I8042PRT,
"Mouse type = %u\n", DeviceExtension->MouseType);
899 default:
900 if (DeviceExtension->MouseResetState < 100 || DeviceExtension->MouseResetState > 999)
901 ERR_(I8042PRT,
"MouseResetState went out of range: %lu\n", DeviceExtension->MouseResetState);
903 }
904}
@ 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