[BACK]Return to pciide_sii3112_reg.h CVS log [TXT][DIR] Up to [local] / sys / dev / pci

Annotation of sys/dev/pci/pciide_sii3112_reg.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: pciide_sii3112_reg.h,v 1.5 2006/02/10 21:45:41 kettenis Exp $ */
                      2: /*     $NetBSD: pciide_sii3112_reg.h,v 1.1 2003/03/20 04:22:50 thorpej Exp $   */
                      3:
                      4: /*
                      5:  * Copyright (c) 2003 Wasabi Systems, Inc.
                      6:  * All rights reserved.
                      7:  *
                      8:  * Written by Jason R. Thorpe for Wasabi Systems, Inc.
                      9:  *
                     10:  * Redistribution and use in source and binary forms, with or without
                     11:  * modification, are permitted provided that the following conditions
                     12:  * are met:
                     13:  * 1. Redistributions of source code must retain the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer.
                     15:  * 2. Redistributions in binary form must reproduce the above copyright
                     16:  *    notice, this list of conditions and the following disclaimer in the
                     17:  *    documentation and/or other materials provided with the distribution.
                     18:  * 3. All advertising materials mentioning features or use of this software
                     19:  *    must display the following acknowledgement:
                     20:  *     This product includes software developed for the NetBSD Project by
                     21:  *     Wasabi Systems, Inc.
                     22:  * 4. The name of Wasabi Systems, Inc. may not be used to endorse
                     23:  *    or promote products derived from this software without specific prior
                     24:  *    written permission.
                     25:  *
                     26:  * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
                     27:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
                     28:  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
                     29:  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
                     30:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
                     31:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     32:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     33:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     34:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     35:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     36:  * POSSIBILITY OF SUCH DAMAGE.
                     37:  */
                     38:
                     39: #ifndef _DEV_PCI_PCIIDE_SII3112_REG_H_
                     40: #define        _DEV_PCI_PCIIDE_SII3112_REG_H_
                     41:
                     42: /*
                     43:  * PCI configuration space registers.
                     44:  */
                     45:
                     46: #define        SII3112_PCI_CFGCTL      0x40
                     47: #define        CFGCTL_CFGWREN          (1U << 0)       /* enable cfg writes */
                     48: #define        CFGCTL_BA5INDEN         (1U << 1)       /* BA5 indirect access enable */
                     49:
                     50: #define        SII3112_PCI_SWDATA      0x44
                     51:
                     52: #define        SII3112_PCI_BM_IDE0     0x70
                     53:        /* == BAR4+0x00 */
                     54:
                     55: #define        SII3112_PCI_PRD_IDE0    0x74
                     56:        /* == BAR4+0x04 */
                     57:
                     58: #define        SII3112_PCI_BM_IDE1     0x78
                     59:        /* == BAR4+0x08 */
                     60:
                     61: #define        SII3112_PCI_PRD_IDE1    0x7c
                     62:        /* == BAR4+0x0c */
                     63:
                     64: #define        SII3112_DTM_IDE0        0x80    /* Data Transfer Mode - IDE0 */
                     65: #define        SII3112_DTM_IDE1        0x84    /* Data Transfer Mode - IDE1 */
                     66: #define        DTM_IDEx_PIO            0x00000000      /* PCI DMA, IDE PIO (or 1) */
                     67: #define        DTM_IDEx_DMA            0x00000002      /* PCI DMA, IDE DMA (or 3) */
                     68:
                     69:
                     70: #define        SII3112_SCS_CMD         0x88    /* System Config Status */
                     71: #define        SCS_CMD_PBM_RESET       (1U << 0)       /* PBM module reset */
                     72: #define        SCS_CMD_ARB_RESET       (1U << 1)       /* ARB module reset */
                     73: #define        SCS_CMD_FF1_RESET       (1U << 4)       /* IDE1 FIFO reset */
                     74: #define        SCS_CMD_FF0_RESET       (1U << 5)       /* IDE0 FIFO reset */
                     75: #define        SCS_CMD_IDE1_RESET      (1U << 6)       /* IDE1 module reset */
                     76: #define        SCS_CMD_IDE0_RESET      (1U << 7)       /* IDE0 module reset */
                     77: #define        SCS_CMD_FF3_RESET       (1U << 8)       /* IDE3 FIFO reset (3114) */
                     78: #define        SCS_CMD_FF2_RESET       (1U << 9)       /* IDE2 FIFO reset (3114) */
                     79: #define        SCS_CMD_IDE3_RESET      (1U << 10)      /* IDE3 module reset (3114) */
                     80: #define        SCS_CMD_IDE2_RESET      (1U << 11)      /* IDE2 module reset (3114) */
                     81: #define        SCS_CMD_BA5_EN          (1U << 16)      /* BA5 is enabled (3112) */
                     82: #define        SCS_CMD_M66EN           (1U << 16)      /* 1=66MHz, 0=33MHz (3114) */
                     83: #define        SCS_CMD_IDE0_INT_BLOCK  (1U << 22)      /* IDE0 interrupt block */
                     84: #define        SCS_CMD_IDE1_INT_BLOCK  (1U << 23)      /* IDE1 interrupt block */
                     85: #define        SCS_CMD_IDE2_INT_BLOCK  (1U << 24)      /* IDE2 interrupt block */
                     86: #define        SCS_CMD_IDE3_INT_BLOCK  (1U << 25)      /* IDE3 interrupt block */
                     87:
                     88: #define        SII3112_SSDR            0x8c    /* System SW Data Register */
                     89:
                     90: #define        SII3112_FMA_CSR         0x90    /* Flash Memory Addr - CSR */
                     91:
                     92: #define        SII3112_FM_DATA         0x94    /* Flash Memory Data */
                     93:
                     94: #define        SII3112_EEA_CSR         0x98    /* EEPROM Memory Addr - CSR */
                     95:
                     96: #define        SII3112_EE_DATA         0x9c    /* EEPROM Data */
                     97:
                     98: #define        SII3112_TCS_IDE0        0xa0    /* IDEx config, status */
                     99: #define        SII3112_TCS_IDE1        0xb0
                    100: #define        TCS_IDEx_BCA            (1U << 1)       /* buffered command active */
                    101: #define        TCS_IDEx_CH_RESET       (1U << 2)       /* channel reset */
                    102: #define        TCS_IDEx_VDMA_INT       (1U << 10)      /* virtual DMA interrupt */
                    103: #define        TCS_IDEx_INT            (1U << 11)      /* interrupt status */
                    104: #define        TCS_IDEx_WTT            (1U << 12)      /* watchdog timer timeout */
                    105: #define        TCS_IDEx_WTEN           (1U << 13)      /* watchdog timer enable */
                    106: #define        TCS_IDEx_WTINTEN        (1U << 14)      /* watchdog timer int. enable */
                    107:
                    108: #define        SII3112_BA5_IND_ADDR    0xc0    /* BA5 indirect address */
                    109:
                    110: #define        SII3112_BA5_IND_DATA    0xc4    /* BA5 indirect data */
                    111:
                    112: /*
                    113:  * Register map for BA5 register space, indexed by channel.
                    114:  */
                    115: static const struct {
                    116:        bus_addr_t      ba5_IDEDMA_CMD;
                    117:        bus_addr_t      ba5_IDEDMA_CTL;
                    118:        bus_addr_t      ba5_IDEDMA_TBL;
                    119:        bus_addr_t      ba5_IDEDMA_CMD2;
                    120:        bus_addr_t      ba5_IDEDMA_CTL2;
                    121:        bus_addr_t      ba5_IDE_TF0;
                    122:        bus_addr_t      ba5_IDE_TF1;
                    123:        bus_addr_t      ba5_IDE_TF2;
                    124:        bus_addr_t      ba5_IDE_TF3;
                    125:        bus_addr_t      ba5_IDE_TF4;
                    126:        bus_addr_t      ba5_IDE_TF5;
                    127:        bus_addr_t      ba5_IDE_TF6;
                    128:        bus_addr_t      ba5_IDE_TF7;
                    129:        bus_addr_t      ba5_IDE_TF8;
                    130:        bus_addr_t      ba5_IDE_RAD;
                    131:        bus_addr_t      ba5_IDE_TF9;
                    132:        bus_addr_t      ba5_IDE_TF10;
                    133:        bus_addr_t      ba5_IDE_TF11;
                    134:        bus_addr_t      ba5_IDE_TF12;
                    135:        bus_addr_t      ba5_IDE_TF13;
                    136:        bus_addr_t      ba5_IDE_TF14;
                    137:        bus_addr_t      ba5_IDE_TF15;
                    138:        bus_addr_t      ba5_IDE_TF16;
                    139:        bus_addr_t      ba5_IDE_TF17;
                    140:        bus_addr_t      ba5_IDE_TF18;
                    141:        bus_addr_t      ba5_IDE_TF19;
                    142:        bus_addr_t      ba5_IDE_RABC;
                    143:        bus_addr_t      ba5_IDE_CMD_STS;
                    144:        bus_addr_t      ba5_IDE_CFG_STS;
                    145:        bus_addr_t      ba5_IDE_DTM;
                    146:        bus_addr_t      ba5_SControl;
                    147:        bus_addr_t      ba5_SStatus;
                    148:        bus_addr_t      ba5_SError;
                    149:        bus_addr_t      ba5_SActive;            /* 3114 */
                    150:        bus_addr_t      ba5_SMisc;
                    151:        bus_addr_t      ba5_PHY_CONFIG;
                    152:        bus_addr_t      ba5_SIEN;
                    153:        bus_addr_t      ba5_SFISCfg;
                    154: } satalink_ba5_regmap[] = {
                    155:        {       /* Channel 0 */
                    156:                .ba5_IDEDMA_CMD         =       0x000,
                    157:                .ba5_IDEDMA_CTL         =       0x002,
                    158:                .ba5_IDEDMA_TBL         =       0x004,
                    159:                .ba5_IDEDMA_CMD2        =       0x010,
                    160:                .ba5_IDEDMA_CTL2        =       0x012,
                    161:                .ba5_IDE_TF0            =       0x080,  /* wd_data */
                    162:                .ba5_IDE_TF1            =       0x081,  /* wd_error */
                    163:                .ba5_IDE_TF2            =       0x082,  /* wd_seccnt */
                    164:                .ba5_IDE_TF3            =       0x083,  /* wd_sector */
                    165:                .ba5_IDE_TF4            =       0x084,  /* wd_cyl_lo */
                    166:                .ba5_IDE_TF5            =       0x085,  /* wd_cyl_hi */
                    167:                .ba5_IDE_TF6            =       0x086,  /* wd_sdh */
                    168:                .ba5_IDE_TF7            =       0x087,  /* wd_command */
                    169:                .ba5_IDE_TF8            =       0x08a,  /* wd_altsts */
                    170:                .ba5_IDE_RAD            =       0x08c,
                    171:                .ba5_IDE_TF9            =       0x091,  /* Features 2 */
                    172:                .ba5_IDE_TF10           =       0x092,  /* Sector Count 2 */
                    173:                .ba5_IDE_TF11           =       0x093,  /* Start Sector 2 */
                    174:                .ba5_IDE_TF12           =       0x094,  /* Cylinder Low 2 */
                    175:                .ba5_IDE_TF13           =       0x095,  /* Cylinder High 2 */
                    176:                .ba5_IDE_TF14           =       0x096,  /* Device/Head 2 */
                    177:                .ba5_IDE_TF15           =       0x097,  /* Cmd Sts 2 */
                    178:                .ba5_IDE_TF16           =       0x098,  /* Sector Count 2 ext */
                    179:                .ba5_IDE_TF17           =       0x099,  /* Start Sector 2 ext */
                    180:                .ba5_IDE_TF18           =       0x09a,  /* Cyl Low 2 ext */
                    181:                .ba5_IDE_TF19           =       0x09b,  /* Cyl High 2 ext */
                    182:                .ba5_IDE_RABC           =       0x09c,
                    183:                .ba5_IDE_CMD_STS        =       0x0a0,
                    184:                .ba5_IDE_CFG_STS        =       0x0a1,
                    185:                .ba5_IDE_DTM            =       0x0b4,
                    186:                .ba5_SControl           =       0x100,
                    187:                .ba5_SStatus            =       0x104,
                    188:                .ba5_SError             =       0x108,
                    189:                .ba5_SActive            =       0x10c,
                    190:                .ba5_SMisc              =       0x140,
                    191:                .ba5_PHY_CONFIG         =       0x144,
                    192:                .ba5_SIEN               =       0x148,
                    193:                .ba5_SFISCfg            =       0x14c,
                    194:        },
                    195:        {       /* Channel 1 */
                    196:                .ba5_IDEDMA_CMD         =       0x008,
                    197:                .ba5_IDEDMA_CTL         =       0x00a,
                    198:                .ba5_IDEDMA_TBL         =       0x00c,
                    199:                .ba5_IDEDMA_CMD2        =       0x018,
                    200:                .ba5_IDEDMA_CTL2        =       0x01a,
                    201:                .ba5_IDE_TF0            =       0x0c0,  /* wd_data */
                    202:                .ba5_IDE_TF1            =       0x0c1,  /* wd_error */
                    203:                .ba5_IDE_TF2            =       0x0c2,  /* wd_seccnt */
                    204:                .ba5_IDE_TF3            =       0x0c3,  /* wd_sector */
                    205:                .ba5_IDE_TF4            =       0x0c4,  /* wd_cyl_lo */
                    206:                .ba5_IDE_TF5            =       0x0c5,  /* wd_cyl_hi */
                    207:                .ba5_IDE_TF6            =       0x0c6,  /* wd_sdh */
                    208:                .ba5_IDE_TF7            =       0x0c7,  /* wd_command */
                    209:                .ba5_IDE_TF8            =       0x0ca,  /* wd_altsts */
                    210:                .ba5_IDE_RAD            =       0x0cc,
                    211:                .ba5_IDE_TF9            =       0x0d1,  /* Features 2 */
                    212:                .ba5_IDE_TF10           =       0x0d2,  /* Sector Count 2 */
                    213:                .ba5_IDE_TF11           =       0x0d3,  /* Start Sector 2 */
                    214:                .ba5_IDE_TF12           =       0x0d4,  /* Cylinder Low 2 */
                    215:                .ba5_IDE_TF13           =       0x0d5,  /* Cylinder High 2 */
                    216:                .ba5_IDE_TF14           =       0x0d6,  /* Device/Head 2 */
                    217:                .ba5_IDE_TF15           =       0x0d7,  /* Cmd Sts 2 */
                    218:                .ba5_IDE_TF16           =       0x0d8,  /* Sector Count 2 ext */
                    219:                .ba5_IDE_TF17           =       0x0d9,  /* Start Sector 2 ext */
                    220:                .ba5_IDE_TF18           =       0x0da,  /* Cyl Low 2 ext */
                    221:                .ba5_IDE_TF19           =       0x0db,  /* Cyl High 2 ext */
                    222:                .ba5_IDE_RABC           =       0x0dc,
                    223:                .ba5_IDE_CMD_STS        =       0x0e0,
                    224:                .ba5_IDE_CFG_STS        =       0x0e1,
                    225:                .ba5_IDE_DTM            =       0x0f4,
                    226:                .ba5_SControl           =       0x180,
                    227:                .ba5_SStatus            =       0x184,
                    228:                .ba5_SError             =       0x188,
                    229:                .ba5_SActive            =       0x18c,
                    230:                .ba5_SMisc              =       0x1c0,
                    231:                .ba5_PHY_CONFIG         =       0x1c4,
                    232:                .ba5_SIEN               =       0x1c8,
                    233:                .ba5_SFISCfg            =       0x1cc,
                    234:        },
                    235:        {       /* Channel 2 (3114) */
                    236:                .ba5_IDEDMA_CMD         =       0x200,
                    237:                .ba5_IDEDMA_CTL         =       0x202,
                    238:                .ba5_IDEDMA_TBL         =       0x204,
                    239:                .ba5_IDEDMA_CMD2        =       0x210,
                    240:                .ba5_IDEDMA_CTL2        =       0x212,
                    241:                .ba5_IDE_TF0            =       0x280,  /* wd_data */
                    242:                .ba5_IDE_TF1            =       0x281,  /* wd_error */
                    243:                .ba5_IDE_TF2            =       0x282,  /* wd_seccnt */
                    244:                .ba5_IDE_TF3            =       0x283,  /* wd_sector */
                    245:                .ba5_IDE_TF4            =       0x284,  /* wd_cyl_lo */
                    246:                .ba5_IDE_TF5            =       0x285,  /* wd_cyl_hi */
                    247:                .ba5_IDE_TF6            =       0x286,  /* wd_sdh */
                    248:                .ba5_IDE_TF7            =       0x287,  /* wd_command */
                    249:                .ba5_IDE_TF8            =       0x28a,  /* wd_altsts */
                    250:                .ba5_IDE_RAD            =       0x28c,
                    251:                .ba5_IDE_TF9            =       0x291,  /* Features 2 */
                    252:                .ba5_IDE_TF10           =       0x292,  /* Sector Count 2 */
                    253:                .ba5_IDE_TF11           =       0x293,  /* Start Sector 2 */
                    254:                .ba5_IDE_TF12           =       0x294,  /* Cylinder Low 2 */
                    255:                .ba5_IDE_TF13           =       0x295,  /* Cylinder High 2 */
                    256:                .ba5_IDE_TF14           =       0x296,  /* Device/Head 2 */
                    257:                .ba5_IDE_TF15           =       0x297,  /* Cmd Sts 2 */
                    258:                .ba5_IDE_TF16           =       0x298,  /* Sector Count 2 ext */
                    259:                .ba5_IDE_TF17           =       0x299,  /* Start Sector 2 ext */
                    260:                .ba5_IDE_TF18           =       0x29a,  /* Cyl Low 2 ext */
                    261:                .ba5_IDE_TF19           =       0x29b,  /* Cyl High 2 ext */
                    262:                .ba5_IDE_RABC           =       0x29c,
                    263:                .ba5_IDE_CMD_STS        =       0x2a0,
                    264:                .ba5_IDE_CFG_STS        =       0x2a1,
                    265:                .ba5_IDE_DTM            =       0x2b4,
                    266:                .ba5_SControl           =       0x300,
                    267:                .ba5_SStatus            =       0x304,
                    268:                .ba5_SError             =       0x308,
                    269:                .ba5_SActive            =       0x30c,
                    270:                .ba5_SMisc              =       0x340,
                    271:                .ba5_PHY_CONFIG         =       0x344,
                    272:                .ba5_SIEN               =       0x348,
                    273:                .ba5_SFISCfg            =       0x34c,
                    274:        },
                    275:        {       /* Channel 3 (3114) */
                    276:                .ba5_IDEDMA_CMD         =       0x208,
                    277:                .ba5_IDEDMA_CTL         =       0x20a,
                    278:                .ba5_IDEDMA_TBL         =       0x20c,
                    279:                .ba5_IDEDMA_CMD2        =       0x218,
                    280:                .ba5_IDEDMA_CTL2        =       0x21a,
                    281:                .ba5_IDE_TF0            =       0x2c0,  /* wd_data */
                    282:                .ba5_IDE_TF1            =       0x2c1,  /* wd_error */
                    283:                .ba5_IDE_TF2            =       0x2c2,  /* wd_seccnt */
                    284:                .ba5_IDE_TF3            =       0x2c3,  /* wd_sector */
                    285:                .ba5_IDE_TF4            =       0x2c4,  /* wd_cyl_lo */
                    286:                .ba5_IDE_TF5            =       0x2c5,  /* wd_cyl_hi */
                    287:                .ba5_IDE_TF6            =       0x2c6,  /* wd_sdh */
                    288:                .ba5_IDE_TF7            =       0x2c7,  /* wd_command */
                    289:                .ba5_IDE_TF8            =       0x2ca,  /* wd_altsts */
                    290:                .ba5_IDE_RAD            =       0x2cc,
                    291:                .ba5_IDE_TF9            =       0x2d1,  /* Features 2 */
                    292:                .ba5_IDE_TF10           =       0x2d2,  /* Sector Count 2 */
                    293:                .ba5_IDE_TF11           =       0x2d3,  /* Start Sector 2 */
                    294:                .ba5_IDE_TF12           =       0x2d4,  /* Cylinder Low 2 */
                    295:                .ba5_IDE_TF13           =       0x2d5,  /* Cylinder High 2 */
                    296:                .ba5_IDE_TF14           =       0x2d6,  /* Device/Head 2 */
                    297:                .ba5_IDE_TF15           =       0x2d7,  /* Cmd Sts 2 */
                    298:                .ba5_IDE_TF16           =       0x2d8,  /* Sector Count 2 ext */
                    299:                .ba5_IDE_TF17           =       0x2d9,  /* Start Sector 2 ext */
                    300:                .ba5_IDE_TF18           =       0x2da,  /* Cyl Low 2 ext */
                    301:                .ba5_IDE_TF19           =       0x2db,  /* Cyl High 2 ext */
                    302:                .ba5_IDE_RABC           =       0x2dc,
                    303:                .ba5_IDE_CMD_STS        =       0x2e0,
                    304:                .ba5_IDE_CFG_STS        =       0x2e1,
                    305:                .ba5_IDE_DTM            =       0x2f4,
                    306:                .ba5_SControl           =       0x380,
                    307:                .ba5_SStatus            =       0x384,
                    308:                .ba5_SError             =       0x388,
                    309:                .ba5_SActive            =       0x38c,
                    310:                .ba5_SMisc              =       0x3c0,
                    311:                .ba5_PHY_CONFIG         =       0x3c4,
                    312:                .ba5_SIEN               =       0x3c8,
                    313:                .ba5_SFISCfg            =       0x3cc,
                    314:        },
                    315: };
                    316:
                    317: #define        ba5_SIS         0x214           /* summary interrupt status */
                    318:
                    319: /* Interrupt steering bit in BA5[0x200]. */
                    320: #define        IDEDMA_CMD_INT_STEER    (1U << 1)
                    321:
                    322: /* Private data */
                    323: struct pciide_satalink {
                    324:        bus_space_tag_t                 ba5_st;
                    325:        bus_space_handle_t              ba5_sh;
                    326:        int                             ba5_en;
                    327:
                    328:        struct {
                    329:                bus_space_tag_t         cmd_iot;
                    330:                bus_space_handle_t      cmd_baseioh;
                    331:                bus_space_handle_t      cmd_iohs[WDC_NREG+WDC_NSHADOWREG];
                    332:
                    333:                bus_space_tag_t         ctl_iot;
                    334:                bus_space_handle_t      ctl_ioh;
                    335:
                    336:                bus_space_handle_t      dma_iohs[IDEDMA_NREGS];
                    337:        } regs[4];
                    338: };
                    339:
                    340: static INLINE uint32_t
                    341: ba5_read_4_ind(struct pciide_softc *sc, pcireg_t reg)
                    342: {
                    343:        uint32_t rv;
                    344:        int s;
                    345:
                    346:        s = splbio();
                    347:        pci_conf_write(sc->sc_pc, sc->sc_tag, SII3112_BA5_IND_ADDR, reg);
                    348:        rv = pci_conf_read(sc->sc_pc, sc->sc_tag, SII3112_BA5_IND_DATA);
                    349:        splx(s);
                    350:
                    351:        return (rv);
                    352: }
                    353:
                    354: static INLINE uint32_t
                    355: ba5_read_4(struct pciide_softc *sc, bus_size_t reg)
                    356: {
                    357:        struct pciide_satalink *sl = sc->sc_cookie;
                    358:
                    359:        if (__predict_true(sl->ba5_en != 0))
                    360:                return (bus_space_read_4(sl->ba5_st, sl->ba5_sh, reg));
                    361:
                    362:        return (ba5_read_4_ind(sc, reg));
                    363: }
                    364:
                    365: #define        BA5_READ_4(sc, chan, reg)                                       \
                    366:        ba5_read_4((sc), satalink_ba5_regmap[(chan)].reg)
                    367:
                    368: static INLINE void
                    369: ba5_write_4_ind(struct pciide_softc *sc, pcireg_t reg, uint32_t val)
                    370: {
                    371:        int s;
                    372:
                    373:        s = splbio();
                    374:        pci_conf_write(sc->sc_pc, sc->sc_tag, SII3112_BA5_IND_ADDR, reg);
                    375:        pci_conf_write(sc->sc_pc, sc->sc_tag, SII3112_BA5_IND_DATA, val);
                    376:        splx(s);
                    377: }
                    378:
                    379: static INLINE void
                    380: ba5_write_4(struct pciide_softc *sc, bus_size_t reg, uint32_t val)
                    381: {
                    382:        struct pciide_satalink *sl = sc->sc_cookie;
                    383:
                    384:        if (__predict_true(sl->ba5_en != 0))
                    385:                bus_space_write_4(sl->ba5_st, sl->ba5_sh, reg, val);
                    386:        else
                    387:                ba5_write_4_ind(sc, reg, val);
                    388: }
                    389:
                    390: #define        BA5_WRITE_4(sc, chan, reg, val)                                 \
                    391:        ba5_write_4((sc), satalink_ba5_regmap[(chan)].reg, (val))
                    392:
                    393: u_int8_t sii3114_read_reg(struct channel_softc *, enum wdc_regs);
                    394: void     sii3114_write_reg(struct channel_softc *, enum wdc_regs, u_int8_t);
                    395:
                    396: struct channel_softc_vtbl wdc_sii3114_vtbl = {
                    397:        sii3114_read_reg,
                    398:        sii3114_write_reg,
                    399:        wdc_default_lba48_write_reg,
                    400:        wdc_default_read_raw_multi_2,
                    401:        wdc_default_write_raw_multi_2,
                    402:        wdc_default_read_raw_multi_4,
                    403:        wdc_default_write_raw_multi_4
                    404: };
                    405:
                    406: #endif /* _DEV_PCI_PCIIDE_SII3112_REG_H_ */

CVSweb