/** I/O work flow of outing 8042 command. @param Command I/O command. @retval EFI_SUCCESS Success to excute I/O work flow @retval EFI_TIMEOUT Keyboard controller time out. **/ EFI_STATUS Out8042Command ( IN UINT8 Command ) { EFI_STATUS Status; // // Wait keyboard controller input buffer empty // Status = WaitInputEmpty (TIMEOUT); if (EFI_ERROR (Status)) { return Status; } // // Send command // IoWrite8 (KBC_CMD_STS_PORT, Command); Status = WaitInputEmpty (TIMEOUT); if (EFI_ERROR (Status)) { return Status; } return EFI_SUCCESS; }
/** I/O work flow of outing 8042 Aux data. @param Data Buffer holding return value @retval EFI_SUCCESS Success to excute I/O work flow. @retval EFI_TIMEOUT Keyboard controller time out. **/ EFI_STATUS Out8042AuxData ( IN UINT8 Data ) { EFI_STATUS Status; // // Wait keyboard controller input buffer empty // Status = WaitInputEmpty (TIMEOUT); if (EFI_ERROR (Status)) { return Status; } // // Send write to auxiliary device command // IoWrite8 (KBC_CMD_STS_PORT, WRITE_AUX_DEV); Status = WaitInputEmpty (TIMEOUT); if (EFI_ERROR (Status)) { return Status; } IoWrite8 (KBC_DATA_PORT, Data); Status = WaitInputEmpty (TIMEOUT); if (EFI_ERROR (Status)) { return Status; } return EFI_SUCCESS; }
/** I/O work flow of outing 8042 data. @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL @param Data Data value @retval EFI_SUCCESS Success to excute I/O work flow @retval EFI_TIMEOUT Keyboard controller time out. **/ EFI_STATUS Out8042Data ( IN EFI_ISA_IO_PROTOCOL *IsaIo, IN UINT8 Data ) { EFI_STATUS Status; UINT8 Temp; // // Wait keyboard controller input buffer empty // Status = WaitInputEmpty (IsaIo, TIMEOUT); if (EFI_ERROR (Status)) { return Status; } Temp = Data; IsaIo->Io.Write (IsaIo, EfiIsaIoWidthUint8, KBC_DATA_PORT, 1, &Temp); Status = WaitInputEmpty (IsaIo, TIMEOUT); if (EFI_ERROR (Status)) { return Status; } return EFI_SUCCESS; }
/** I/O work flow of outing 8042 command. @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL @param Command I/O command. @retval EFI_SUCCESS Success to excute I/O work flow @retval EFI_TIMEOUT Keyboard controller time out. **/ EFI_STATUS Out8042Command ( IN EFI_ISA_IO_PROTOCOL *IsaIo, IN UINT8 Command ) { EFI_STATUS Status; UINT8 Data; // // Wait keyboard controller input buffer empty // Status = WaitInputEmpty (IsaIo, TIMEOUT); if (EFI_ERROR (Status)) { return Status; } // // Send command // Data = Command; IsaIo->Io.Write (IsaIo, EfiIsaIoWidthUint8, KBC_CMD_STS_PORT, 1, &Data); Status = WaitInputEmpty (IsaIo, TIMEOUT); if (EFI_ERROR (Status)) { return Status; } return EFI_SUCCESS; }
/** I/O work flow of outing 8042 data. @param Data Data value @retval EFI_SUCCESS Success to excute I/O work flow @retval EFI_TIMEOUT Keyboard controller time out. **/ EFI_STATUS Out8042Data ( IN UINT8 Data ) { EFI_STATUS Status; // // Wait keyboard controller input buffer empty // Status = WaitInputEmpty (TIMEOUT); if (EFI_ERROR (Status)) { return Status; } IoWrite8 (KBC_DATA_PORT, Data); return WaitInputEmpty (TIMEOUT); }
/** I/O work flow of outing 8042 Aux data. @param IsaIo Pointer to instance of EFI_ISA_IO_PROTOCOL @param Data Buffer holding return value @retval EFI_SUCCESS Success to excute I/O work flow. @retval EFI_TIMEOUT Keyboard controller time out. **/ EFI_STATUS Out8042AuxData ( IN EFI_ISA_IO_PROTOCOL *IsaIo, IN UINT8 Data ) { EFI_STATUS Status; UINT8 Temp; // // Wait keyboard controller input buffer empty // Status = WaitInputEmpty (IsaIo, TIMEOUT); if (EFI_ERROR (Status)) { return Status; } // // Send write to auxiliary device command // Temp = WRITE_AUX_DEV; IsaIo->Io.Write (IsaIo, EfiIsaIoWidthUint8, KBC_CMD_STS_PORT, 1, &Temp); Status = WaitInputEmpty (IsaIo, TIMEOUT); if (EFI_ERROR (Status)) { return Status; } Temp = Data; IsaIo->Io.Write (IsaIo, EfiIsaIoWidthUint8, KBC_DATA_PORT, 1, &Temp); Status = WaitInputEmpty (IsaIo, TIMEOUT); if (EFI_ERROR (Status)) { return Status; } return EFI_SUCCESS; }
/** I/O work flow of outing 8042 Aux command. @param Command Aux I/O command @param Resend Whether need resend the Aux command. @retval EFI_SUCCESS Success to excute I/O work flow @retval EFI_TIMEOUT Keyboard controller time out. **/ EFI_STATUS Out8042AuxCommand ( IN UINT8 Command, IN BOOLEAN Resend ) { EFI_STATUS Status; UINT8 Data; // // Wait keyboard controller input buffer empty // Status = WaitInputEmpty (TIMEOUT); if (EFI_ERROR (Status)) { return Status; } // // Send write to auxiliary device command // IoWrite8 (KBC_CMD_STS_PORT, WRITE_AUX_DEV); Status = WaitInputEmpty (TIMEOUT); if (EFI_ERROR (Status)) { return Status; } // // Send auxiliary device command // IoWrite8 (KBC_DATA_PORT, Command); // // Read return code // Status = In8042AuxData (&Data); if (EFI_ERROR (Status)) { return Status; } if (Data == PS2_ACK) { // // Receive mouse acknowledge, command send success // return EFI_SUCCESS; } else if (Resend) { // // Resend fail // return EFI_DEVICE_ERROR; } else if (Data == PS2_RESEND) { // // Resend command // Status = Out8042AuxCommand (Command, TRUE); if (EFI_ERROR (Status)) { return Status; } } else { // // Invalid return code // return EFI_DEVICE_ERROR; } return EFI_SUCCESS; }