[BACK]Return to wdvar.h CVS log [TXT][DIR] Up to [local] / sys / arch / armish / stand / boot

Annotation of sys/arch/armish/stand/boot/wdvar.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: wdvar.h,v 1.2 2006/07/29 15:01:49 kettenis Exp $      */
                      2: /*     $NetBSD: wdvar.h,v 1.6 2005/12/11 12:17:06 christos Exp $       */
                      3:
                      4: /*-
                      5:  * Copyright (c) 2003 The NetBSD Foundation, Inc.
                      6:  * Copyright (c) 2001 Dynarc AB, Sweden. All rights reserved.
                      7:  *
                      8:  * This code is derived from software written by Anders Magnusson,
                      9:  * ragge@ludd.luth.se
                     10:  *
                     11:  * Redistribution and use in source and binary forms, with or without
                     12:  * modification, are permitted provided that the following conditions
                     13:  * are met:
                     14:  * 1. Redistributions of source code must retain the above copyright
                     15:  *    notice, this list of conditions and the following disclaimer.
                     16:  * 2. Redistributions in binary form must reproduce the above copyright
                     17:  *    notice, this list of conditions and the following disclaimer in the
                     18:  *    documentation and/or other materials provided with the distribution.
                     19:  * 3. The name of the author may not be used to endorse or promote products
                     20:  *    derived from this software 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: #ifndef _STAND_WDVAR_H
                     35: #define _STAND_WDVAR_H
                     36:
                     37: #include <sys/disklabel.h>
                     38:
                     39: #include <dev/ic/wdcreg.h>
                     40: #include <dev/ata/atareg.h>
                     41: #include <dev/pci/pciidereg.h>
                     42:
                     43: /*
                     44:  * WD1003 / ATA Disk Controller register definitions.
                     45:  */
                     46:
                     47: /* offsets of registers in the 'regular' register region */
                     48: #define wd_data                 0       /* data register (R/W - 16 bits) */
                     49: #define wd_error                1       /* error register (R) */
                     50: #define wd_precomp              1       /* write precompensation (W) */
                     51: #define wd_seccnt               2       /* sector count (R/W) */
                     52: #define wd_ireason              2       /* interrupt reason (R/W) (for atapi) */
                     53: #define wd_sector               3       /* first sector number (R/W) */
                     54: #define wd_cyl_lo               4       /* cylinder address, low byte (R/W) */
                     55: #define wd_cyl_hi               5       /* cylinder address, high byte (R/W) */
                     56: #define wd_sdh                  6       /* sector size/drive/head (R/W) */
                     57: #define wd_command              7       /* command register (W) */
                     58: #define wd_lba_lo               3       /* lba address, low byte (RW) */
                     59: #define wd_lba_mi               4       /* lba address, middle byte (RW) */
                     60: #define wd_lba_hi               5       /* lba address, high byte (RW) */
                     61:
                     62: /* "shadow" registers; these may or may not overlap regular registers */
                     63: #define wd_status               8       /* immediate status (R) */
                     64: #define wd_features             9       /* features (W) */
                     65:
                     66: /* offsets of registers in the auxiliary register region */
                     67: #define wd_aux_altsts           0       /* alternate fixed disk status (R) */
                     68: #define wd_aux_ctlr             0       /* fixed disk controller control (W) */
                     69: #define  WDCTL_4BIT              0x08   /* use four head bits (wd1003) */
                     70: #define  WDCTL_RST               0x04   /* reset the controller */
                     71: #define  WDCTL_IDS               0x02   /* disable controller interrupts */
                     72:
                     73: #define WDC_TIMEOUT            2000000
                     74: #define PCIIDE_CHANNEL_NDEV    2
                     75: #define NUNITS                 (PCIIDE_CHANNEL_NDEV * PCIIDE_NUM_CHANNELS)
                     76: #define WDC_NPORTS             8       /* XXX */
                     77: #define WDC_NSHADOWREG         2       /* XXX */
                     78:
                     79: struct wdc_channel {
                     80:        volatile u_int8_t *c_cmdbase;
                     81:        volatile u_int8_t *c_ctlbase;
                     82:        volatile u_int8_t *c_cmdreg[WDC_NPORTS + WDC_NSHADOWREG];
                     83:        volatile u_int16_t *c_data;
                     84:
                     85:        u_int8_t ndrives;
                     86: };
                     87:
                     88: #define WDC_READ_REG(chp, reg)         *(chp)->c_cmdreg[(reg)]
                     89: #define WDC_WRITE_REG(chp, reg, val)   *(chp)->c_cmdreg[(reg)] = (val)
                     90: #define WDC_READ_CTLREG(chp, reg)      (chp)->c_ctlbase[(reg)]
                     91: #define WDC_WRITE_CTLREG(chp, reg, val)        (chp)->c_ctlbase[(reg)] = (val)
                     92: #define WDC_READ_DATA(chp)             *(chp)->c_data
                     93:
                     94: struct wd_softc {
                     95: #define WDF_LBA                0x0001
                     96: #define WDF_LBA48      0x0002
                     97:        u_int16_t sc_flags;
                     98:
                     99:        u_int sc_part;
                    100:        u_int sc_unit;
                    101:
                    102:        u_int64_t sc_capacity;
                    103:
                    104:        struct ataparams sc_params;
                    105:        struct disklabel sc_label;
                    106:        struct wdc_channel sc_channel;
                    107:        u_int sc_drive;
                    108: };
                    109:
                    110: struct wdc_command {
                    111:        u_int8_t drive;         /* drive id */
                    112:
                    113:        u_int8_t r_command;     /* Parameters to upload to registers */
                    114:        u_int8_t r_head;
                    115:        u_int16_t r_cyl;
                    116:        u_int8_t r_sector;
                    117:        u_int8_t r_count;
                    118:        u_int8_t r_precomp;
                    119:
                    120:        u_int16_t bcount;
                    121:        void *data;
                    122:
                    123:        u_int64_t r_blkno;
                    124: };
                    125:
                    126: int    wdc_init                (struct wd_softc*, u_int);
                    127: int    wdccommand              (struct wd_softc*, struct wdc_command*);
                    128: int    wdccommandext           (struct wd_softc*, struct wdc_command*);
                    129: int    wdc_exec_read           (struct wd_softc*, u_int8_t, daddr_t, void*);
                    130: int    wdc_exec_identify       (struct wd_softc*, void*);
                    131:
                    132: int    pciide_init             (struct wdc_channel*, u_int);
                    133:
                    134: #endif /* _STAND_WDVAR_H */

CVSweb