2c985e439e07c807c1c16393a77de198e91b0dafvboxsync/** @file
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync * PS/2 devices - Internal header file.
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync */
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync/*
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync * Copyright (C) 2007-2012 Oracle Corporation
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync *
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync * available from http://www.virtualbox.org. This file is free software;
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync * you can redistribute it and/or modify it under the terms of the GNU
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync * General Public License (GPL) as published by the Free Software
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync */
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync#ifndef PS2DEV_H
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync#define PS2DEV_H
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync
13b491985af0d1325baad7591dcab4a9b27949cdvboxsync/** The size of the PS2K/PS2M structure fillers.
2272ae65af7994e8d1b9019609d72ef322b28ca5vboxsync * @note Must be at least as big as the real struct. Compile time assert
2272ae65af7994e8d1b9019609d72ef322b28ca5vboxsync * makes sure this is so. */
2272ae65af7994e8d1b9019609d72ef322b28ca5vboxsync#define PS2K_STRUCT_FILLER 512
13b491985af0d1325baad7591dcab4a9b27949cdvboxsync#define PS2M_STRUCT_FILLER 512
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync/* Hide the internal structure. */
bb4f31aac6155757fe15ef9fe0bf843ed9a14441vboxsync#if !(defined(IN_PS2K) || defined(VBOX_DEVICE_STRUCT_TESTCASE))
2272ae65af7994e8d1b9019609d72ef322b28ca5vboxsynctypedef struct PS2K
2272ae65af7994e8d1b9019609d72ef322b28ca5vboxsync{
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync uint8_t abFiller[PS2K_STRUCT_FILLER];
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync} PS2K;
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync#endif
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync
13b491985af0d1325baad7591dcab4a9b27949cdvboxsync#if !(defined(IN_PS2M) || defined(VBOX_DEVICE_STRUCT_TESTCASE))
13b491985af0d1325baad7591dcab4a9b27949cdvboxsynctypedef struct PS2M
13b491985af0d1325baad7591dcab4a9b27949cdvboxsync{
13b491985af0d1325baad7591dcab4a9b27949cdvboxsync uint8_t abFiller[PS2M_STRUCT_FILLER];
13b491985af0d1325baad7591dcab4a9b27949cdvboxsync} PS2M;
13b491985af0d1325baad7591dcab4a9b27949cdvboxsync#endif
13b491985af0d1325baad7591dcab4a9b27949cdvboxsync
13b491985af0d1325baad7591dcab4a9b27949cdvboxsync/* Internal PS/2 Keyboard interface. */
2c985e439e07c807c1c16393a77de198e91b0dafvboxsynctypedef struct PS2K *PPS2K;
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync
2c985e439e07c807c1c16393a77de198e91b0dafvboxsyncint PS2KByteToKbd(PPS2K pThis, uint8_t cmd);
2c985e439e07c807c1c16393a77de198e91b0dafvboxsyncint PS2KByteFromKbd(PPS2K pThis, uint8_t *pVal);
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync
2272ae65af7994e8d1b9019609d72ef322b28ca5vboxsyncint PS2KConstruct(PPS2K pThis, PPDMDEVINS pDevIns, void *pParent, int iInstance);
2272ae65af7994e8d1b9019609d72ef322b28ca5vboxsyncint PS2KAttach(PPS2K pThis, PPDMDEVINS pDevIns, unsigned iLUN, uint32_t fFlags);
2c985e439e07c807c1c16393a77de198e91b0dafvboxsyncvoid PS2KReset(PPS2K pThis);
2272ae65af7994e8d1b9019609d72ef322b28ca5vboxsyncvoid PS2KRelocate(PPS2K pThis, RTGCINTPTR offDelta, PPDMDEVINS pDevIns);
2272ae65af7994e8d1b9019609d72ef322b28ca5vboxsyncvoid PS2KSaveState(PPS2K pThis, PSSMHANDLE pSSM);
2272ae65af7994e8d1b9019609d72ef322b28ca5vboxsyncint PS2KLoadState(PPS2K pThis, PSSMHANDLE pSSM, uint32_t uVersion);
2389e53a96fd9061a9a8c35b84cef07202233bc5vboxsyncint PS2KLoadDone(PPS2K pThis, PSSMHANDLE pSSM);
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync
13b491985af0d1325baad7591dcab4a9b27949cdvboxsyncPS2K *KBDGetPS2KFromDevIns(PPDMDEVINS pDevIns);
13b491985af0d1325baad7591dcab4a9b27949cdvboxsync
13b491985af0d1325baad7591dcab4a9b27949cdvboxsync
13b491985af0d1325baad7591dcab4a9b27949cdvboxsync/* Internal PS/2 Auxiliary device interface. */
13b491985af0d1325baad7591dcab4a9b27949cdvboxsynctypedef struct PS2M *PPS2M;
13b491985af0d1325baad7591dcab4a9b27949cdvboxsync
13b491985af0d1325baad7591dcab4a9b27949cdvboxsyncint PS2MByteToAux(PPS2M pThis, uint8_t cmd);
13b491985af0d1325baad7591dcab4a9b27949cdvboxsyncint PS2MByteFromAux(PPS2M pThis, uint8_t *pVal);
13b491985af0d1325baad7591dcab4a9b27949cdvboxsync
13b491985af0d1325baad7591dcab4a9b27949cdvboxsyncint PS2MConstruct(PPS2M pThis, PPDMDEVINS pDevIns, void *pParent, int iInstance);
13b491985af0d1325baad7591dcab4a9b27949cdvboxsyncint PS2MAttach(PPS2M pThis, PPDMDEVINS pDevIns, unsigned iLUN, uint32_t fFlags);
13b491985af0d1325baad7591dcab4a9b27949cdvboxsyncvoid PS2MReset(PPS2M pThis);
13b491985af0d1325baad7591dcab4a9b27949cdvboxsyncvoid PS2MRelocate(PPS2M pThis, RTGCINTPTR offDelta, PPDMDEVINS pDevIns);
13b491985af0d1325baad7591dcab4a9b27949cdvboxsyncvoid PS2MSaveState(PPS2M pThis, PSSMHANDLE pSSM);
13b491985af0d1325baad7591dcab4a9b27949cdvboxsyncint PS2MLoadState(PPS2M pThis, PSSMHANDLE pSSM, uint32_t uVersion);
ed4a2bd5f3f74bb638e09a9ef937e69d130263d6vboxsyncvoid PS2MFixupState(PPS2M pThis, uint8_t u8State, uint8_t u8Rate, uint8_t u8Proto);
13b491985af0d1325baad7591dcab4a9b27949cdvboxsync
13b491985af0d1325baad7591dcab4a9b27949cdvboxsyncPS2M *KBDGetPS2MFromDevIns(PPDMDEVINS pDevIns);
13b491985af0d1325baad7591dcab4a9b27949cdvboxsync
13b491985af0d1325baad7591dcab4a9b27949cdvboxsync
13b491985af0d1325baad7591dcab4a9b27949cdvboxsync/* Shared keyboard/aux internal interface. */
2c985e439e07c807c1c16393a77de198e91b0dafvboxsyncvoid KBCUpdateInterrupts(void *pKbc);
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync
2272ae65af7994e8d1b9019609d72ef322b28ca5vboxsync///@todo: This should live with the KBC implementation.
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync/** AT to PC scancode translator state. */
2272ae65af7994e8d1b9019609d72ef322b28ca5vboxsynctypedef enum
2272ae65af7994e8d1b9019609d72ef322b28ca5vboxsync{
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync XS_IDLE, /**< Starting state. */
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync XS_BREAK, /**< F0 break byte was received. */
e03868ae7d2681b60b9b9dfc72c2624c7b522ae8vboxsync XS_HIBIT /**< Break code still active. */
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync} xlat_state_t;
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync
e03868ae7d2681b60b9b9dfc72c2624c7b522ae8vboxsyncint32_t XlateAT2PC(int32_t state, uint8_t scanIn, uint8_t *pScanOut);
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync
2c985e439e07c807c1c16393a77de198e91b0dafvboxsync#endif