LCOV - code coverage report
Current view: top level - dev/pci - pciide_sii3112_reg.h (source / functions) Hit Total Coverage
Test: 6.4 Lines: 0 24 0.0 %
Date: 2018-10-19 03:25:38 Functions: 0 4 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*      $OpenBSD: pciide_sii3112_reg.h,v 1.6 2008/02/05 20:22:22 blambert 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 uint32_t
     341           0 : ba5_read_4_ind(struct pciide_softc *sc, pcireg_t reg)
     342             : {
     343             :         uint32_t rv;
     344             :         int s;
     345             : 
     346           0 :         s = splbio();
     347           0 :         pci_conf_write(sc->sc_pc, sc->sc_tag, SII3112_BA5_IND_ADDR, reg);
     348           0 :         rv = pci_conf_read(sc->sc_pc, sc->sc_tag, SII3112_BA5_IND_DATA);
     349           0 :         splx(s);
     350             : 
     351           0 :         return (rv);
     352             : }
     353             : 
     354             : static uint32_t
     355           0 : ba5_read_4(struct pciide_softc *sc, bus_size_t reg)
     356             : {
     357           0 :         struct pciide_satalink *sl = sc->sc_cookie;
     358             : 
     359           0 :         if (__predict_true(sl->ba5_en != 0))
     360           0 :                 return (bus_space_read_4(sl->ba5_st, sl->ba5_sh, reg));
     361             : 
     362           0 :         return (ba5_read_4_ind(sc, reg));
     363           0 : }
     364             : 
     365             : #define BA5_READ_4(sc, chan, reg)                                       \
     366             :         ba5_read_4((sc), satalink_ba5_regmap[(chan)].reg)
     367             : 
     368             : static void
     369           0 : ba5_write_4_ind(struct pciide_softc *sc, pcireg_t reg, uint32_t val)
     370             : {
     371             :         int s;
     372             : 
     373           0 :         s = splbio();
     374           0 :         pci_conf_write(sc->sc_pc, sc->sc_tag, SII3112_BA5_IND_ADDR, reg);
     375           0 :         pci_conf_write(sc->sc_pc, sc->sc_tag, SII3112_BA5_IND_DATA, val);
     376           0 :         splx(s);
     377           0 : }
     378             : 
     379             : static void
     380           0 : ba5_write_4(struct pciide_softc *sc, bus_size_t reg, uint32_t val)
     381             : {
     382           0 :         struct pciide_satalink *sl = sc->sc_cookie;
     383             : 
     384           0 :         if (__predict_true(sl->ba5_en != 0))
     385           0 :                 bus_space_write_4(sl->ba5_st, sl->ba5_sh, reg, val);
     386             :         else
     387           0 :                 ba5_write_4_ind(sc, reg, val);
     388           0 : }
     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_ */

Generated by: LCOV version 1.13