root/usr/src/uts/sun/sys/dada/impl/identify.h
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef _SYS_DADA_IMPL_IDENTIFY_H
#define _SYS_DADA_IMPL_IDENTIFY_H

#pragma ident   "%Z%%M% %I%     %E% SMI"

#ifdef  __cplusplus
extern "C" {
#endif

/*
 * Implementation identify data.
 */
struct  dcd_identify {
        ushort_t dcd_config;    /*      0  general configuration bits */
        ushort_t dcd_fixcyls;   /*      1  # of fixed cylinders  */
        ushort_t dcd_remcyls;   /*   2  # of removable cylinders */
        ushort_t dcd_heads;     /*   3  # of heads */
        ushort_t dcd_trksiz;    /*   4  # of unformatted bytes/track  */
        ushort_t dcd_secsiz;    /*   5  # of unformatted bytes/sector */
        ushort_t dcd_sectors;   /*   6  # of sectors/track */
        ushort_t dcd_resv1[3];  /*   7  "Vendor Unique" */
        char     dcd_drvser[20];        /*  10  Serial number */
        ushort_t dcd_buftype;   /*  20  Buffer type */
        ushort_t dcd_bufsz;     /*  21  Buffer size in 512 byte incr */
        ushort_t dcd_ecc;       /*  22  # of ecc bytes avail on rd/wr */
        char     dcd_fw[8];     /*  23  Firmware revision */
        char     dcd_model[40]; /*  27  Model # */
        ushort_t dcd_mult1;     /*  47  Multiple command flags */
        ushort_t dcd_dwcap;     /*  48  Doubleword capabilities */
        ushort_t dcd_cap;       /*  49  Capabilities */
        ushort_t dcd_resv2;     /*  50  Reserved */
        ushort_t dcd_piomode;   /*  51  PIO timing mode */
        ushort_t dcd_dmamode;   /*  52  DMA timing mode */
        ushort_t dcd_validinfo; /*  53  bit0: wds 54-58, bit1: 64-70 */
        ushort_t dcd_curcyls;   /*  54  # of current cylinders */
        ushort_t dcd_curheads;  /*  55  # of current heads */
        ushort_t dcd_cursectrk; /*  56  # of current sectors/track */
        ushort_t dcd_cursccp[2];        /*  57  current sectors capacity */
        ushort_t dcd_mult2;     /*  59  multiple sectors info */
        ushort_t dcd_addrsec[2];        /*  60  LBA only: no of addr secs */
        ushort_t dcd_sworddma;  /*  62  single word dma modes */
        ushort_t dcd_dworddma;  /*  63  double word dma modes */
        ushort_t dcd_advpiomode;        /*  64  advanced PIO modes supported */
        ushort_t dcd_minmwdma;  /*  65  min multi-word dma cycle info    */
        ushort_t dcd_recmwdma;  /*  66  rec multi-word dma cycle info    */
        ushort_t dcd_minpio;    /*  67  min PIO cycle info */
        ushort_t dcd_minpioflow;        /*  68  min PIO cycle info w/flow ctl */
        ushort_t dcd_padding1[11];      /* 69 pad to 79 */
        ushort_t dcd_majvers;   /*  80  ATA major version supported */
        ushort_t dcd_padding2[4];       /* 81 pad to 84 */
        ushort_t dcd_features85;        /*  85  feature enabled bits */
        ushort_t dcd_padding3[2];       /* 86 pad to 87 */
        ushort_t dcd_ultra_dma; /*  88  Ultra dma capability */
        ushort_t dcd_padding4[37];      /* 89 pad to 125 */
        ushort_t dcd_lastlun;   /* 126 last logical unit number */
        ushort_t dcd_padding5[129];     /* pad to 255 */
};


/*
 * Indentify data size definition
 */

#define SUN_IDENTSIZE   (sizeof (struct dcd_identify))

/*
 * The following are the bit for dcd_config field
 */
#define ATAPI_DEVICE            (1 << 15)
#define ATANON_REMOVABLE        (1 << 6)

/*
 * The following are the bit defined  word 64
 */
#define PIO_MODE4_MASK          0x02
#define PIO_MODE3_MASK          0x01

/*
 * The following are bits for dcd_majvers, word 80
 */
#define IDENTIFY_80_ATAPI_4     0x0010

/*
 * The following are the bits for dcd_features85, word 85
 */
#define IDENTIFY_85_WCE         (1 << 5)

#ifdef  __cplusplus
}
#endif

#endif /* _SYS_DADA_IMPL_IDENTIFY_H */