Annotation of sys/dev/pci/pciide_piix_reg.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: pciide_piix_reg.h,v 1.11 2006/04/25 09:09:42 jsg Exp $ */
2: /* $NetBSD: pciide_piix_reg.h,v 1.5 2001/01/05 15:29:40 bouyer Exp $ */
3:
4: /*
5: * Copyright (c) 1998 Manuel Bouyer.
6: *
7: * Redistribution and use in source and binary forms, with or without
8: * modification, are permitted provided that the following conditions
9: * are met:
10: * 1. Redistributions of source code must retain the above copyright
11: * notice, this list of conditions and the following disclaimer.
12: * 2. Redistributions in binary form must reproduce the above copyright
13: * notice, this list of conditions and the following disclaimer in the
14: * documentation and/or other materials provided with the distribution.
15: * 3. All advertising materials mentioning features or use of this software
16: * must display the following acknowledgement:
17: * This product includes software developed by Manuel Bouyer.
18: * 4. Neither the name of the University nor the names of its contributors
19: * may be used to endorse or promote products derived from this software
20: * without specific prior written permission.
21: *
22: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
23: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
26: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
27: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
31: * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32: *
33: */
34:
35: #ifndef _DEV_PCI_PCIIDE_PIIX_REG_H_
36: #define _DEV_PCI_PCIIDE_PIIX_REG_H_
37:
38: /*
39: * Registers definitions for Intel's PIIX series PCI IDE controllers.
40: * See Intel's
41: * "82371FB (PIIX) and 82371SB (PIIX3) PCI ISA IDE XCELERATOR"
42: * "82371AB PCI-TO-ISA / IDE XCELERATOR (PIIX4)" and
43: * "Intel 82801AA (ICH) and Intel 82801AB (ICH0) I/O Controller Hub"
44: * available from http://developer.intel.com/
45: */
46:
47: /*
48: * Bus master interface base address register
49: */
50: #define PIIX_BMIBA 0x20
51: #define PIIX_BMIBA_ADDR(x) (x & 0x0000FFFF0)
52: #define PIIX_BMIBA_RTE(x) (x & 0x000000001)
53: #define PIIX_BMIBA_RTE_IO 0x000000001 /* base addr maps to I/O space */
54:
55: /*
56: * IDE timing register
57: * 0x40/0x41 is for primary, 0x42/0x43 for secondary channel
58: */
59: #define PIIX_IDETIM 0x40
60: #define PIIX_IDETIM_READ(x, channel) (((x) >> (16 * (channel))) & 0x0000FFFF)
61: #define PIIX_IDETIM_SET(x, bytes, channel) \
62: ((x) | ((bytes) << (16 * (channel))))
63: #define PIIX_IDETIM_CLEAR(x, bytes, channel) \
64: ((x) & ~((bytes) << (16 * (channel))))
65:
66: #define PIIX_IDETIM_IDE 0x8000 /* PIIX decode IDE registers */
67: #define PIIX_IDETIM_SITRE 0x4000 /* slaves IDE timing registers
68: enabled (PIIX3/4 only) */
69: #define PIIX_IDETIM_ISP_MASK 0x3000 /* IOrdy sample point */
70: #define PIIX_IDETIM_ISP_SHIFT 12
71: #define PIIX_IDETIM_ISP_SET(x) ((x) << PIIX_IDETIM_ISP_SHIFT)
72: #define PIIX_IDETIM_RTC_MASK 0x0300 /* recovery time */
73: #define PIIX_IDETIM_RTC_SHIFT 8
74: #define PIIX_IDETIM_RTC_SET(x) ((x) << PIIX_IDETIM_RTC_SHIFT)
75: #define PIIX_IDETIM_DTE(d) (0x0008 << (4 * (d))) /* DMA timing only */
76: #define PIIX_IDETIM_PPE(d) (0x0004 << (4 * (d))) /* prefetch/posting */
77: #define PIIX_IDETIM_IE(d) (0x0002 << (4 * (d))) /* IORDY enable */
78: #define PIIX_IDETIM_TIME(d) (0x0001 << (4 * (d))) /* Fast timing enable */
79: /*
80: * Slave IDE timing register (PIIX3/4 only)
81: * This register must be enabled via the PIIX_IDETIM_SITRE bit
82: */
83: #define PIIX_SIDETIM 0x44
84: #define PIIX_SIDETIM_ISP_MASK(channel) (0x0c << ((channel) * 4))
85: #define PIIX_SIDETIM_ISP_SHIFT 2
86: #define PIIX_SIDETIM_ISP_SET(x, channel) \
87: (x << (PIIX_SIDETIM_ISP_SHIFT + ((channel) * 4)))
88: #define PIIX_SIDETIM_RTC_MASK(channel) (0x03 << ((channel) * 4))
89: #define PIIX_SIDETIM_RTC_SHIFT 0
90: #define PIIX_SIDETIM_RTC_SET(x, channel) \
91: (x << (PIIX_SIDETIM_RTC_SHIFT + ((channel) * 4)))
92:
93: /*
94: * Ultra DMA/33 register (PIIX4 only)
95: */
96: #define PIIX_UDMAREG 0x48
97: /* Control register */
98: #define PIIX_UDMACTL_DRV_EN(channel, drive) (0x01 << ((channel) * 2 + (drive)))
99: /* Ultra DMA/33 timing register (PIIX4 only) */
100: #define PIIX_UDMATIM_SHIFT 16
101: #define PIIX_UDMATIM_SET(x, channel, drive) \
102: (((x) << ((channel * 8) + (drive * 4))) << PIIX_UDMATIM_SHIFT)
103:
104: /*
105: * IDE config register (ICH/ICH0/ICH2 only)
106: */
107: #define PIIX_CONFIG 0x54
108: #define PIIX_CONFIG_PINGPONG 0x0400
109: /* The following are only for the 82801AA (ICH) and 82801BA (ICH2) */
110: #define PIIX_CONFIG_CR(channel, drive) (0x0010 << ((channel) * 2 + (drive)))
111: #define PIIX_CONFIG_UDMA66(channel, drive) (0x0001 << ((channel) * 2 + (drive)))
112: /* The following are only for the 82801BA (ICH2) */
113: #define PIIX_CONFIG_UDMA100(channel, drive) (0x1000 << ((channel) * 2 + (drive)))
114:
115: /*
116: * these tables define the differents values to upload to the
117: * ISP and RTC registers for the various PIO and DMA mode
118: * (from the PIIX4 doc).
119: */
120: static int8_t piix_isp_pio[] = {0x00, 0x00, 0x01, 0x02, 0x02};
121: static int8_t piix_rtc_pio[] = {0x00, 0x00, 0x00, 0x01, 0x03};
122: static int8_t piix_isp_dma[] = {0x00, 0x02, 0x02};
123: static int8_t piix_rtc_dma[] = {0x00, 0x02, 0x03};
124: static int8_t piix4_sct_udma[] = {0x00, 0x01, 0x02, 0x01, 0x02, 0x01};
125:
126: /*
127: * ICH5/ICH5R SATA registers definitions
128: */
129: #define ICH5_SATA_MAP 0x90 /* Address Map Register */
130: #define ICH5_SATA_MAP_MV_MASK 0x07 /* Map Value mask */
131: #define ICH5_SATA_MAP_COMBINED 0x04 /* Combined mode */
132:
133: #define ICH5_SATA_PI 0x09 /* Program Interface register */
134: #define ICH5_SATA_PI_PRI_NATIVE 0x01 /* Put Pri IDE channel in native mode */
135: #define ICH5_SATA_PI_SEC_NATIVE 0x04 /* Put Sec IDE channel in native mode */
136:
137: #define ICH_SATA_PCS 0x92 /* Port Control and Status Register */
138: #define ICH_SATA_PCS_P0E 0x01 /* Port 0 enabled */
139: #define ICH_SATA_PCS_P1E 0x02 /* Port 1 enabled */
140: #define ICH_SATA_PCS_P0P 0x10 /* Port 0 present */
141: #define ICH_SATA_PCS_P1P 0x20 /* Port 1 present */
142:
143: /*
144: * ICH6/ICH7 SATA registers definitions
145: */
146: #define ICH6_SATA_MAP_CMB_MASK 0x03 /* Combined mode bits */
147: #define ICH6_SATA_MAP_CMB_PRI 0x01 /* Combined mode, IDE Primary */
148: #define ICH6_SATA_MAP_CMB_SEC 0x02 /* Combined mode, IDE Secondary */
149: #define ICH7_SATA_MAP_SMS_MASK 0xc0 /* SATA Mode Select */
150: #define ICH7_SATA_MAP_SMS_IDE 0x00
151: #define ICH7_SATA_MAP_SMS_AHCI 0x40
152: #define ICH7_SATA_MAP_SMS_RAID 0x80
153:
154:
155: #endif /* !_DEV_PCI_PCIIDE_PIIX_REG_H_ */
CVSweb