pcidriver.h
来自「source code of armboot for s3c4510」· C头文件 代码 · 共 70 行
H
70 行
/*
* File: pcidriver.h
*/
#ifndef __PCIDRIVER_H__
#define __PCIDRIVER_H__
#if !defined(__TTYPE_H__)
#include "ttype.h"
#endif
#if !defined(__DEVICE_H__)
#include "device.h"
#endif
/*--------------------- Export Definitions ------------------------*/
// Get AHB Address for PCI Bus or CardBus Transaction
#define ENC_ADDR(device) (device)
/*--------------------- Export Types ------------------------------*/
/*--------------------- Export Macros -----------------------------*/
#define AHB_2_PCI_CFG0(device, functn, offset) (AHB2PCI_CFG0_BASE_ADDR |((ENC_ADDR(device) & 0x1F) << 11) |(((functn)& 0x07) << 8) | (((offset) & 0xFF)))
#define AHB_2_PCI_CFG1(bus, device, functn, offset) (AHB2PCI_CFG1_BASE_ADDR |(((bus)& 0xFF) << 16) | ((ENC_ADDR(device) & 0x1F) << 11) | (((functn)& 0x07) << 8) | (((offset)& 0xFF)))
#define AHB_2_PCI_MEM(addr) (AHB2PCI_MEM_BASE_ADDR | (((UINT32)(addr)) & 0x0FFFFFFF))
#define AHB_2_PCI_IO(addr) (AHB2PCI_IO_BASE_ADDR | (((UINT32)(addr)) & 0x03FFFFFF))
// AHB bus to PCI memory space access macros
// top 4-bit translation
#define PCIMEM_Read8(Offset, pData) do { ASIC_PCI_PCIBATAPM = (Offset) & 0xF0000000; *(UINT8 *)(pData) = *(volatile UINT8 *)AHB_2_PCI_MEM(Offset); } while (0)
#define PCIMEM_Read16(Offset, pData) do { ASIC_PCI_PCIBATAPM = (Offset) & 0xF0000000; *(UINT16 *)(pData) = *(volatile UINT16 *)AHB_2_PCI_MEM(Offset); } while (0)
#define PCIMEM_Read32(Offset, pData) do { ASIC_PCI_PCIBATAPM = (Offset) & 0xF0000000; *(UINT32 *)(pData) = *(volatile UINT32 *)AHB_2_PCI_MEM(Offset); } while (0)
#define PCIMEM_Write8(Offset, Data) do { ASIC_PCI_PCIBATAPM = (Offset) & 0xF0000000; *(volatile UINT8 *)AHB_2_PCI_MEM(Offset) = ((UINT8)Data); } while (0)
#define PCIMEM_Write16(Offset, Data) do { ASIC_PCI_PCIBATAPM = (Offset) & 0xF0000000; *(volatile UINT16 *)AHB_2_PCI_MEM(Offset) = ((UINT16)Data); } while (0)
#define PCIMEM_Write32(Offset, Data) do { ASIC_PCI_PCIBATAPM = (Offset) & 0xF0000000; *(volatile UINT32 *)AHB_2_PCI_MEM(Offset) = ((UINT32)Data); } while (0)
// AHB bus to PCI I/O space access macros
// top 6-bit translation
#define PCIIO_Read8(Offset, pData) do { ASIC_PCI_PCIBATAPI = (Offset) & 0xFC000000; *(pData) = *(volatile UINT8 *)AHB_2_PCI_IO(Offset); } while (0)
#define PCIIO_Read16(Offset, pData) do { ASIC_PCI_PCIBATAPI = (Offset) & 0xFC000000; *(pData) = *(volatile UINT16 *)AHB_2_PCI_IO(Offset); } while (0)
#define PCIIO_Read32(Offset, pData) do { ASIC_PCI_PCIBATAPI = (Offset) & 0xFC000000; *(pData) = *(volatile UINT32 *)AHB_2_PCI_IO(Offset); } while (0)
#define PCIIO_Write8(Offset, Data) do { ASIC_PCI_PCIBATAPI = (Offset) & 0xFC000000; *(volatile UINT8 *)AHB_2_PCI_IO(Offset) = ((UINT8)Data); } while (0)
#define PCIIO_Write16(Offset, Data) do { ASIC_PCI_PCIBATAPI = (Offset) & 0xFC000000; *(volatile UINT16 *)AHB_2_PCI_IO(Offset) = ((UINT16)Data); } while (0)
#define PCIIO_Write32(Offset, Data) do { ASIC_PCI_PCIBATAPI = (Offset) & 0xFC000000; *(volatile UINT32 *)AHB_2_PCI_IO(Offset) = ((UINT32)Data); } while (0)
/*--------------------- Export Classes ----------------------------*/
/*--------------------- Export Variables --------------------------*/
/*--------------------- Export Functions --------------------------*/
void PCIBDG_Initialize(void);
UINT8 PCICFG_Read8(UINT32 bus, UINT32 device, UINT32 function, UINT32 offset);
UINT16 PCICFG_Read16(UINT32 bus, UINT32 device, UINT32 function, UINT32 offset);
UINT32 PCICFG_Read32(UINT32 bus, UINT32 device, UINT32 function, UINT32 offset);
void PCICFG_Write8(UINT32 bus, UINT32 device, UINT32 function, UINT32 offset, UINT32 data);
void PCICFG_Write16(UINT32 bus, UINT32 device, UINT32 function, UINT32 offset, UINT32 data);
void PCICFG_Write32(UINT32 bus, UINT32 device, UINT32 function, UINT32 offset, UINT32 data);
#endif /* __PCIDRIVER_H__ */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?