Home | History | Annotate | Download | only in PciBusDxe
      1 /** @file
      2   PCI command register operations supporting functions declaration for PCI Bus module.
      3 
      4 Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
      5 This program and the accompanying materials
      6 are licensed and made available under the terms and conditions of the BSD License
      7 which accompanies this distribution.  The full text of the license may be found at
      8 http://opensource.org/licenses/bsd-license.php
      9 
     10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13 **/
     14 
     15 
     16 #ifndef _EFI_PCI_COMMAND_H_
     17 #define _EFI_PCI_COMMAND_H_
     18 
     19 //
     20 // The PCI Command register bits owned by PCI Bus driver.
     21 //
     22 // They should be cleared at the beginning. The other registers
     23 // are owned by chipset, we should not touch them.
     24 //
     25 #define EFI_PCI_COMMAND_BITS_OWNED                          ( \
     26                 EFI_PCI_COMMAND_IO_SPACE                    | \
     27                 EFI_PCI_COMMAND_MEMORY_SPACE                | \
     28                 EFI_PCI_COMMAND_BUS_MASTER                  | \
     29                 EFI_PCI_COMMAND_MEMORY_WRITE_AND_INVALIDATE | \
     30                 EFI_PCI_COMMAND_VGA_PALETTE_SNOOP           | \
     31                 EFI_PCI_COMMAND_FAST_BACK_TO_BACK             \
     32                 )
     33 
     34 //
     35 // The PCI Bridge Control register bits owned by PCI Bus driver.
     36 //
     37 // They should be cleared at the beginning. The other registers
     38 // are owned by chipset, we should not touch them.
     39 //
     40 #define EFI_PCI_BRIDGE_CONTROL_BITS_OWNED                   ( \
     41                 EFI_PCI_BRIDGE_CONTROL_ISA                  | \
     42                 EFI_PCI_BRIDGE_CONTROL_VGA                  | \
     43                 EFI_PCI_BRIDGE_CONTROL_VGA_16               | \
     44                 EFI_PCI_BRIDGE_CONTROL_FAST_BACK_TO_BACK      \
     45                 )
     46 
     47 //
     48 // The PCCard Bridge Control register bits owned by PCI Bus driver.
     49 //
     50 // They should be cleared at the beginning. The other registers
     51 // are owned by chipset, we should not touch them.
     52 //
     53 #define EFI_PCCARD_BRIDGE_CONTROL_BITS_OWNED                ( \
     54                 EFI_PCI_BRIDGE_CONTROL_ISA                  | \
     55                 EFI_PCI_BRIDGE_CONTROL_VGA                  | \
     56                 EFI_PCI_BRIDGE_CONTROL_FAST_BACK_TO_BACK      \
     57                 )
     58 
     59 
     60 #define EFI_GET_REGISTER      1
     61 #define EFI_SET_REGISTER      2
     62 #define EFI_ENABLE_REGISTER   3
     63 #define EFI_DISABLE_REGISTER  4
     64 
     65 /**
     66   Operate the PCI register via PciIo function interface.
     67 
     68   @param PciIoDevice    Pointer to instance of PCI_IO_DEVICE.
     69   @param Command        Operator command.
     70   @param Offset         The address within the PCI configuration space for the PCI controller.
     71   @param Operation      Type of Operation.
     72   @param PtrCommand     Return buffer holding old PCI command, if operation is not EFI_SET_REGISTER.
     73 
     74   @return Status of PciIo operation.
     75 
     76 **/
     77 EFI_STATUS
     78 PciOperateRegister (
     79   IN  PCI_IO_DEVICE *PciIoDevice,
     80   IN  UINT16        Command,
     81   IN  UINT8         Offset,
     82   IN  UINT8         Operation,
     83   OUT UINT16        *PtrCommand
     84   );
     85 
     86 /**
     87   Check the cpability supporting by given device.
     88 
     89   @param PciIoDevice   Pointer to instance of PCI_IO_DEVICE.
     90 
     91   @retval TRUE         Cpability supportted.
     92   @retval FALSE        Cpability not supportted.
     93 
     94 **/
     95 BOOLEAN
     96 PciCapabilitySupport (
     97   IN PCI_IO_DEVICE  *PciIoDevice
     98   );
     99 
    100 /**
    101   Locate capability register block per capability ID.
    102 
    103   @param PciIoDevice       A pointer to the PCI_IO_DEVICE.
    104   @param CapId             The capability ID.
    105   @param Offset            A pointer to the offset returned.
    106   @param NextRegBlock      A pointer to the next block returned.
    107 
    108   @retval EFI_SUCCESS      Successfuly located capability register block.
    109   @retval EFI_UNSUPPORTED  Pci device does not support capability.
    110   @retval EFI_NOT_FOUND    Pci device support but can not find register block.
    111 
    112 **/
    113 EFI_STATUS
    114 LocateCapabilityRegBlock (
    115   IN PCI_IO_DEVICE  *PciIoDevice,
    116   IN UINT8          CapId,
    117   IN OUT UINT8      *Offset,
    118   OUT UINT8         *NextRegBlock OPTIONAL
    119   );
    120 
    121 /**
    122   Locate PciExpress capability register block per capability ID.
    123 
    124   @param PciIoDevice       A pointer to the PCI_IO_DEVICE.
    125   @param CapId             The capability ID.
    126   @param Offset            A pointer to the offset returned.
    127   @param NextRegBlock      A pointer to the next block returned.
    128 
    129   @retval EFI_SUCCESS      Successfuly located capability register block.
    130   @retval EFI_UNSUPPORTED  Pci device does not support capability.
    131   @retval EFI_NOT_FOUND    Pci device support but can not find register block.
    132 
    133 **/
    134 EFI_STATUS
    135 LocatePciExpressCapabilityRegBlock (
    136   IN     PCI_IO_DEVICE *PciIoDevice,
    137   IN     UINT16        CapId,
    138   IN OUT UINT32        *Offset,
    139      OUT UINT32        *NextRegBlock OPTIONAL
    140   );
    141 
    142 /**
    143   Macro that reads command register.
    144 
    145   @param a[in]            Pointer to instance of PCI_IO_DEVICE.
    146   @param b[out]           Pointer to the 16-bit value read from command register.
    147 
    148   @return status of PciIo operation
    149 
    150 **/
    151 #define PCI_READ_COMMAND_REGISTER(a,b) \
    152         PciOperateRegister (a, 0, PCI_COMMAND_OFFSET, EFI_GET_REGISTER, b)
    153 
    154 /**
    155   Macro that writes command register.
    156 
    157   @param a[in]            Pointer to instance of PCI_IO_DEVICE.
    158   @param b[in]            The 16-bit value written into command register.
    159 
    160   @return status of PciIo operation
    161 
    162 **/
    163 #define PCI_SET_COMMAND_REGISTER(a,b) \
    164         PciOperateRegister (a, b, PCI_COMMAND_OFFSET, EFI_SET_REGISTER, NULL)
    165 
    166 /**
    167   Macro that enables command register.
    168 
    169   @param a[in]            Pointer to instance of PCI_IO_DEVICE.
    170   @param b[in]            The enabled value written into command register.
    171 
    172   @return status of PciIo operation
    173 
    174 **/
    175 #define PCI_ENABLE_COMMAND_REGISTER(a,b) \
    176         PciOperateRegister (a, b, PCI_COMMAND_OFFSET, EFI_ENABLE_REGISTER, NULL)
    177 
    178 /**
    179   Macro that disalbes command register.
    180 
    181   @param a[in]            Pointer to instance of PCI_IO_DEVICE.
    182   @param b[in]            The disabled value written into command register.
    183 
    184   @return status of PciIo operation
    185 
    186 **/
    187 #define PCI_DISABLE_COMMAND_REGISTER(a,b) \
    188         PciOperateRegister (a, b, PCI_COMMAND_OFFSET, EFI_DISABLE_REGISTER, NULL)
    189 
    190 /**
    191   Macro that reads PCI bridge control register.
    192 
    193   @param a[in]            Pointer to instance of PCI_IO_DEVICE.
    194   @param b[out]           The 16-bit value read from control register.
    195 
    196   @return status of PciIo operation
    197 
    198 **/
    199 #define PCI_READ_BRIDGE_CONTROL_REGISTER(a,b) \
    200         PciOperateRegister (a, 0, PCI_BRIDGE_CONTROL_REGISTER_OFFSET, EFI_GET_REGISTER, b)
    201 
    202 /**
    203   Macro that writes PCI bridge control register.
    204 
    205   @param a[in]            Pointer to instance of PCI_IO_DEVICE.
    206   @param b[in]            The 16-bit value written into control register.
    207 
    208   @return status of PciIo operation
    209 
    210 **/
    211 #define PCI_SET_BRIDGE_CONTROL_REGISTER(a,b) \
    212         PciOperateRegister (a, b, PCI_BRIDGE_CONTROL_REGISTER_OFFSET, EFI_SET_REGISTER, NULL)
    213 
    214 /**
    215   Macro that enables PCI bridge control register.
    216 
    217   @param a[in]            Pointer to instance of PCI_IO_DEVICE.
    218   @param b[in]            The enabled value written into command register.
    219 
    220   @return status of PciIo operation
    221 
    222 **/
    223 #define PCI_ENABLE_BRIDGE_CONTROL_REGISTER(a,b) \
    224         PciOperateRegister (a, b, PCI_BRIDGE_CONTROL_REGISTER_OFFSET, EFI_ENABLE_REGISTER, NULL)
    225 
    226 /**
    227  Macro that disalbes PCI bridge control register.
    228 
    229   @param a[in]            Pointer to instance of PCI_IO_DEVICE.
    230   @param b[in]            The disabled value written into command register.
    231 
    232   @return status of PciIo operation
    233 
    234 **/
    235 #define PCI_DISABLE_BRIDGE_CONTROL_REGISTER(a,b) \
    236         PciOperateRegister (a, b, PCI_BRIDGE_CONTROL_REGISTER_OFFSET, EFI_DISABLE_REGISTER, NULL)
    237 
    238 #endif
    239