Home | History | Annotate | Download | only in Library
      1 /** @file
      2 Library functions for Setting QNC internal network port
      3 
      4 Copyright (c) 2013-2015 Intel Corporation.
      5 
      6 This program and the accompanying materials
      7 are licensed and made available under the terms and conditions of the BSD License
      8 which accompanies this distribution.  The full text of the license may be found at
      9 http://opensource.org/licenses/bsd-license.php
     10 
     11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 **/
     15 
     16 #ifndef __QNC_ACCESS_LIB_H__
     17 #define __QNC_ACCESS_LIB_H__
     18 
     19 #include <IntelQNCRegs.h>
     20 
     21 #define MESSAGE_READ_DW(Port, Reg)  \
     22         (UINT32)((QUARK_OPCODE_READ << QNC_MCR_OP_OFFSET) | ((Port << QNC_MCR_PORT_OFFSET) & 0xFF0000) | ((Reg << QNC_MCR_REG_OFFSET) & 0xFF00) | 0xF0)
     23 
     24 #define MESSAGE_WRITE_DW(Port, Reg)  \
     25         (UINT32)((QUARK_OPCODE_WRITE << QNC_MCR_OP_OFFSET) | ((Port << QNC_MCR_PORT_OFFSET) & 0xFF0000) | ((Reg << QNC_MCR_REG_OFFSET) & 0xFF00) | 0xF0)
     26 
     27 #define ALT_MESSAGE_READ_DW(Port, Reg)  \
     28         (UINT32)((QUARK_ALT_OPCODE_READ << QNC_MCR_OP_OFFSET) | ((Port << QNC_MCR_PORT_OFFSET) & 0xFF0000) | ((Reg << QNC_MCR_REG_OFFSET) & 0xFF00) | 0xF0)
     29 
     30 #define ALT_MESSAGE_WRITE_DW(Port, Reg)  \
     31         (UINT32)((QUARK_ALT_OPCODE_WRITE << QNC_MCR_OP_OFFSET) | ((Port << QNC_MCR_PORT_OFFSET) & 0xFF0000) | ((Reg << QNC_MCR_REG_OFFSET) & 0xFF00) | 0xF0)
     32 
     33 #define MESSAGE_IO_READ_DW(Port, Reg)  \
     34         (UINT32)((QUARK_OPCODE_IO_READ << QNC_MCR_OP_OFFSET) | ((Port << QNC_MCR_PORT_OFFSET) & 0xFF0000) | ((Reg << QNC_MCR_REG_OFFSET) & 0xFF00) | 0xF0)
     35 
     36 #define MESSAGE_IO_WRITE_DW(Port, Reg)  \
     37         (UINT32)((QUARK_OPCODE_IO_WRITE << QNC_MCR_OP_OFFSET) | ((Port << QNC_MCR_PORT_OFFSET) & 0xFF0000) | ((Reg << QNC_MCR_REG_OFFSET) & 0xFF00) | 0xF0)
     38 
     39 #define MESSAGE_SHADOW_DW(Port, Reg)  \
     40         (UINT32)((QUARK_DRAM_BASE_ADDR_READY << QNC_MCR_OP_OFFSET) | ((Port << QNC_MCR_PORT_OFFSET) & 0xFF0000) | ((Reg << QNC_MCR_REG_OFFSET) & 0xFF00) | 0xF0)
     41 
     42 
     43 /**
     44   Read required data from QNC internal message network
     45 **/
     46 UINT32
     47 EFIAPI
     48 QNCPortRead(
     49   UINT8 Port,
     50   UINT32 RegAddress
     51   );
     52 
     53 /**
     54   Write prepared data into QNC internal message network.
     55 
     56 **/
     57 VOID
     58 EFIAPI
     59 QNCPortWrite (
     60   UINT8 Port,
     61   UINT32 RegAddress,
     62   UINT32 WriteValue
     63   );
     64 
     65 /**
     66   Read required data from QNC internal message network
     67 **/
     68 UINT32
     69 EFIAPI
     70 QNCAltPortRead(
     71   UINT8 Port,
     72   UINT32 RegAddress
     73   );
     74 
     75 /**
     76   Write prepared data into QNC internal message network.
     77 
     78 **/
     79 VOID
     80 EFIAPI
     81 QNCAltPortWrite (
     82   UINT8 Port,
     83   UINT32 RegAddress,
     84   UINT32 WriteValue
     85   );
     86 
     87 /**
     88   Read required data from QNC internal message network
     89 **/
     90 UINT32
     91 EFIAPI
     92 QNCPortIORead(
     93   UINT8 Port,
     94   UINT32 RegAddress
     95   );
     96 
     97 /**
     98   Write prepared data into QNC internal message network.
     99 
    100 **/
    101 VOID
    102 EFIAPI
    103 QNCPortIOWrite (
    104   UINT8 Port,
    105   UINT32 RegAddress,
    106   UINT32 WriteValue
    107   );
    108 
    109 /**
    110   This is for the special consideration for QNC MMIO write, as required by FWG,
    111   a reading must be performed after MMIO writing to ensure the expected write
    112   is processed and data is flushed into chipset
    113 
    114 **/
    115 RETURN_STATUS
    116 EFIAPI
    117 QNCMmIoWrite (
    118   UINT32             MmIoAddress,
    119   QNC_MEM_IO_WIDTH    Width,
    120   UINT32             DataNumber,
    121   VOID               *pData
    122   );
    123 
    124 UINT32
    125 EFIAPI
    126 QncHsmmcRead (
    127   VOID
    128   );
    129 
    130 VOID
    131 EFIAPI
    132 QncHsmmcWrite (
    133   UINT32 WriteValue
    134   );
    135 
    136 VOID
    137 EFIAPI
    138 QncImrWrite (
    139   UINT32 ImrBaseOffset,
    140   UINT32 ImrLow,
    141   UINT32 ImrHigh,
    142   UINT32 ImrReadMask,
    143   UINT32 ImrWriteMask
    144   );
    145 
    146 VOID
    147 EFIAPI
    148 QncIClkAndThenOr (
    149   UINT32 RegAddress,
    150   UINT32 AndValue,
    151   UINT32 OrValue
    152   );
    153 
    154 VOID
    155 EFIAPI
    156 QncIClkOr (
    157   UINT32 RegAddress,
    158   UINT32 OrValue
    159   );
    160 
    161 UINTN
    162 EFIAPI
    163 QncGetPciExpressBaseAddress (
    164   VOID
    165   );
    166 
    167 #endif
    168