AppleIntelPIIXATAHW.h [plain text]
#ifndef _APPLEINTELPIIXATAHW_H
#define _APPLEINTELPIIXATAHW_H
enum {
kPCI_ID_PIIX = 0x12308086,
kPCI_ID_PIIX3 = 0x70108086,
kPCI_ID_PIIX4 = 0x71118086,
kPCI_ID_ICH = 0x24118086,
kPCI_ID_ICH0 = 0x24218086,
kPCI_ID_ICH2_M = 0x244a8086,
kPCI_ID_ICH2 = 0x244b8086,
kPCI_ID_NONE = 0xffffffff
};
enum {
kPIIX_P_CMD_ADDR = 0x1f0,
kPIIX_P_CTL_ADDR = 0x3f4,
kPIIX_S_CMD_ADDR = 0x170,
kPIIX_S_CTL_ADDR = 0x374
};
enum {
kPIIX_P_IRQ = 14,
kPIIX_S_IRQ = 15
};
enum {
kPIIX_CHANNEL_PRIMARY = 0,
kPIIX_CHANNEL_SECONDARY
};
enum {
kPIIX_PCI_CFID = 0x00, kPIIX_PCI_PCICMD = 0x04, kPIIX_PCI_PCISTS = 0x06, kPIIX_PCI_RID = 0x08, kPIIX_PCI_PI = 0x09, kPIIX_PCI_MLT = 0x0d, kPIIX_PCI_HEDT = 0x0e, kPIIX_PCI_BMIBA = 0x20, kPIIX_PCI_IDETIM = 0x40, kPIIX_PCI_IDETIM_S = 0x42, kPIIX_PCI_SIDETIM = 0x44, kPIIX_PCI_UDMACTL = 0x48, kPIIX_PCI_UDMATIM = 0x4a, kPIIX_PCI_IDECONFIG = 0x54, kPIIX_PCI_MAP = 0x90, kPIIX_PCI_PCS = 0x92 };
#define kPIIX_PCI_BMIBA_RTE 0x01 // resource type indicator (I/O)
#define kPIIX_PCI_BMIBA_MASK 0xfff0 // base address mask
#define kPIIX_PCI_PCICMD_IOSE 0x01 // I/O space enable
#define kPIIX_PCI_PCICMD_BME 0x04 // bus-master enable
#define kPIIX_PCI_IDETIM_IDE 0x8000 // IDE decode enable
#define kPIIX_PCI_IDETIM_SITRE 0x4000 // slave timing register enable
#define kPIIX_PCI_IDETIM_ISP_MASK 0x3000
#define kPIIX_PCI_IDETIM_ISP_SHIFT 12
#define kPIIX_PCI_IDETIM_ISP_5 0x0000 // IORDY sample point
#define kPIIX_PCI_IDETIM_ISP_4 0x1000 // (PCI clocks)
#define kPIIX_PCI_IDETIM_ISP_3 0x2000
#define kPIIX_PCI_IDETIM_ISP_2 0x3000
#define kPIIX_PCI_IDETIM_RTC_MASK 0x0300
#define kPIIX_PCI_IDETIM_RTC_SHIFT 8
#define kPIIX_PCI_IDETIM_RTC_4 0x0000 // recovery time (PCI clocks)
#define kPIIX_PCI_IDETIM_RTC_3 0x0100
#define kPIIX_PCI_IDETIM_RTC_2 0x0200
#define kPIIX_PCI_IDETIM_RTC_1 0x0300
#define kPIIX_PCI_IDETIM_DTE1 0x0080 // DMA timing enable only
#define kPIIX_PCI_IDETIM_PPE1 0x0040 // prefetch and posting enabled
#define kPIIX_PCI_IDETIM_IE1 0x0020 // IORDY sample point enable
#define kPIIX_PCI_IDETIM_TIME1 0x0010 // fast timing enable
#define kPIIX_PCI_IDETIM_DTE0 0x0008 // same as above for drive 0
#define kPIIX_PCI_IDETIM_PPE0 0x0004
#define kPIIX_PCI_IDETIM_IE0 0x0002
#define kPIIX_PCI_IDETIM_TIME0 0x0001
#define kPIIX_PCI_SIDETIM_SISP1_MASK 0xc0
#define kPIIX_PCI_SIDETIM_SISP1_SHIFT 6
#define kPIIX_PCI_SIDETIM_SRTC1_MASK 0x30
#define kPIIX_PCI_SIDETIM_SRTC1_SHIFT 4
#define kPIIX_PCI_SIDETIM_PISP1_MASK 0x0c
#define kPIIX_PCI_SIDETIM_PISP1_SHIFT 2
#define kPIIX_PCI_SIDETIM_PRTC1_MASK 0x03
#define kPIIX_PCI_SIDETIM_PRTC1_SHIFT 0
#define kPIIX_PCI_UDMACTL_SSDE1 0x08 // Enable UDMA/33 Sec/Drive1
#define kPIIX_PCI_UDMACTL_SSDE0 0x04 // Enable UDMA/33 Sec/Drive0
#define kPIIX_PCI_UDMACTL_PSDE1 0x02 // Enable UDMA/33 Pri/Drive1
#define kPIIX_PCI_UDMACTL_PSDE0 0x01 // Enable UDMA/33 Pri/Drive0
#define kPIIX_PCI_UDMATIM_PCT0_MASK 0x0003
#define kPIIX_PCI_UDMATIM_PCT0_SHIFT 0
#define kPIIX_PCI_UDMATIM_PCT1_MASK 0x0030
#define kPIIX_PCI_UDMATIM_PCT1_SHIFT 4
#define kPIIX_PCI_UDMATIM_SCT0_MASK 0x0300
#define kPIIX_PCI_UDMATIM_SCT0_SHIFT 8
#define kPIIX_PCI_UDMATIM_SCT1_MASK 0x3000
#define kPIIX_PCI_UDMATIM_SCT1_SHIFT 12
#define kPIIX_PCI_IDECONFIG_PCB0 0x0001
#define kPIIX_PCI_IDECONFIG_PCB1 0x0002
#define kPIIX_PCI_IDECONFIG_SCB0 0x0004
#define kPIIX_PCI_IDECONFIG_SCB1 0x0008
#define kPIIX_PCI_IDECONFIG_PCR0 0x0010
#define kPIIX_PCI_IDECONFIG_PCR1 0x0020
#define kPIIX_PCI_IDECONFIG_SCR0 0x0040
#define kPIIX_PCI_IDECONFIG_SCR1 0x0080
#define kPIIX_PCI_IDECONFIG_WR_PP_EN 0x0400
#define kPIIX_PCI_IDECONFIG_FAST_PCB0 0x1000
#define kPIIX_PCI_IDECONFIG_FAST_PCB1 0x2000
#define kPIIX_PCI_IDECONFIG_FAST_SCB0 0x4000
#define kPIIX_PCI_IDECONFIG_FAST_SCB1 0x8000
enum {
kPIIX_PCI_PCS_P0E = 0x01,
kPIIX_PCI_PCS_P1E = 0x02,
kPIIX_PCI_PCS_P0P = 0x10,
kPIIX_PCI_PCS_P1P = 0x20
};
enum {
kPIIX_IO_BMICX = 0x00, kPIIX_IO_BMISX = 0x02, kPIIX_IO_BMIDTPX = 0x04, kPIIX_IO_BM_OFFSET = 0x08, kPIIX_IO_BM_MASK = 0xfff0 };
#define kPIIX_IO_BMICX_SSBM 0x01 // 1=Start, 0=Stop
#define kPIIX_IO_BMICX_RWCON 0x08 // 0=Read, 1=Write (drive not host)
#define kPIIX_IO_BMISX_DMA1CAP 0x40 // drive 1 is capable of DMA transfers
#define kPIIX_IO_BMISX_DMA0CAP 0x20 // drive 0 is capable of DMA transfers
#define kPIIX_IO_BMISX_IDEINTS 0x04 // IDE device asserted its interrupt
#define kPIIX_IO_BMISX_ERROR 0x02 // DMA error (cleared by writing a 1)
#define kPIIX_IO_BMISX_BMIDEA 0x01 // bus master active bit
enum {
kChannelModePATA,
kChannelModeSATAPort0,
kChannelModeSATAPort1,
kChannelModeSATAPort01,
kChannelModeSATAPort10,
kChannelModeCount
};
enum {
kSerialATAPort0,
kSerialATAPort1,
kSerialATAPortX
};
#endif