Home | History | Annotate | Download | only in Wpce791
      1 /** @file
      2 
      3   Copyright (c) 2004  - 2014, Intel Corporation. All rights reserved.<BR>
      4 
      5   This program and the accompanying materials are licensed and made available under
      7   the terms and conditions of the BSD License that accompanies this distribution.
      9   The full text of the license may be found at
     11   http://opensource.org/licenses/bsd-license.php.
     13 
     15   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     17   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     19 
     21 
     23 Module Name:
     24 
     25 Module Name:
     26 
     27     LpcSio.c
     28 
     29 Abstract: Sio implementation
     30 
     31 Revision History
     32 
     33 --*/
     34 
     35 #include "LpcDriver.h"
     36 #include <Library/S3BootScriptLib.h>
     37 
     38 VOID
     39 WriteRegister (
     40   IN  UINT8   Index,
     41   IN  UINT8   Data
     42   );
     43 
     44 typedef struct {
     45   UINT8 Register;
     46   UINT8 Value;
     47 } EFI_SIO_TABLE;
     48 
     49 EFI_SIO_TABLE mSioTable[] = {
     50   //
     51   // Init keyboard controller
     52   //
     53   { REG_LOGICAL_DEVICE, SIO_KEYBOARD },
     54   { BASE_ADDRESS_HIGH, 0x00 },
     55   { BASE_ADDRESS_LOW, 0x60 },
     56   { BASE_ADDRESS_HIGH2, 0x00 },
     57   { BASE_ADDRESS_LOW2, 0x64 },
     58   { PRIMARY_INTERRUPT_SELECT, 0x01 },
     59   { ACTIVATE, 0x1 },
     60 
     61   //
     62   // Init Mouse controller
     63   //
     64   { REG_LOGICAL_DEVICE, SIO_MOUSE },
     65   { BASE_ADDRESS_HIGH, 0x00 },
     66   { BASE_ADDRESS_LOW, 0x60 },
     67   { BASE_ADDRESS_HIGH2, 0x00 },
     68   { BASE_ADDRESS_LOW2, 0x64 },
     69   { PRIMARY_INTERRUPT_SELECT, 0x0c },
     70   { ACTIVATE, 0x1 },
     71 
     72   { REG_LOGICAL_DEVICE, SIO_COM },
     73   { BASE_ADDRESS_HIGH, 0x03 },
     74   { BASE_ADDRESS_LOW, 0xf8 },
     75   { PRIMARY_INTERRUPT_SELECT, 0x04 },
     76   { ACTIVATE, 0x1 },
     77 
     78 
     79 };
     80 
     81 VOID
     82 LPCWPCE791SetDefault ()
     83 {
     84   UINT8           Index;
     85 
     86   for (Index = 0; Index < sizeof(mSioTable)/sizeof(EFI_SIO_TABLE); Index++) {
     87     WriteRegisterAndSaveToScript (mSioTable[Index].Register, mSioTable[Index].Value);
     88   }
     89 
     90   return;
     91 }
     92 
     93 VOID
     94 DisableLogicalDevice (
     95   UINT8       DeviceId
     96   )
     97 {
     98   WriteRegisterAndSaveToScript (REG_LOGICAL_DEVICE, DeviceId);
     99   WriteRegisterAndSaveToScript (ACTIVATE, 0);
    100   WriteRegisterAndSaveToScript (BASE_ADDRESS_HIGH, 0);
    101   WriteRegisterAndSaveToScript (BASE_ADDRESS_LOW, 0);
    102 
    103   return;
    104 }
    105 
    106 VOID
    107 WriteRegister (
    108   IN  UINT8   Index,
    109   IN  UINT8   Data
    110   )
    111 {
    112   LpcIoWrite8(CONFIG_PORT, Index);
    113   LpcIoWrite8(DATA_PORT, Data);
    114 
    115   return;
    116 }
    117 
    118 VOID
    119 WriteRegisterAndSaveToScript (
    120   IN  UINT8   Index,
    121   IN  UINT8   Data
    122   )
    123 {
    124   UINT8  Buffer[2];
    125 
    126   LpcIoWrite8(CONFIG_PORT, Index);
    127   LpcIoWrite8(DATA_PORT, Data);
    128 
    129   Buffer[0] = Index;
    130   Buffer[1] = Data;
    131   S3BootScriptSaveIoWrite (
    132     EfiBootScriptWidthUint8,
    133     INDEX_PORT,
    134     2,
    135     Buffer
    136     );
    137 
    138   return;
    139 }
    140 
    141