Coherent4.2.10/include/sys/hdioctl.h
/* (-lgl
* Coherent 386 release 4.2
* Copyright (c) 1982, 1993 by Mark Williams Company.
* All rights reserved. May not be copied without permission.
* For copying permission and licensing info, write licensing@mwc.com
-lgl) */
#ifndef __SYS_HDIOCTL_H__
#define __SYS_HDIOCTL_H__
#include <common/feature.h>
/*
* Ioctl support for hard disk devices.
*/
#define HDIOC ('H' << 8)
#define HDGETA (HDIOC|1) /* get drive attributes */
#define HDSETA (HDIOC|2) /* set drive attributes */
#define HDGETIDEINFO (HDIOC|4) /* get result of IDE info command */
/*
* Configuration word (ii_config) meanings by bit number
* 0: ?
* 1: Hard sectored
* 2: Soft sectored
* 3: Not MFM encoded
* 4: Head Switch Time > 15 usec
* 5: Spindled Motor Control Option Implemented
* 6: Fixed Drive
* 7: ?
* 8: Disk Transfer Rate <= 5Mbs
* 9: Disk Transfer Rate > 5Mbs but <= 10 Mbs
* 10: Disk Transfer Rate > 10Mbs
* 11: Rotational Speed Tolerance > 0.5%
* 12: Data Strobe Offset Option Available
* 13: Track Offset Option Available
* 14: Format Speed Tolerance Gap Required
* 15: ?
*/
typedef struct ide_info {
unsigned short ii_config; /* Configuration */
unsigned short ii_cyl; /* Cylinders (default xlat mode) */
unsigned short ii_reserved; /* reserved */
unsigned short ii_heads; /* heads (default xlat mode */
unsigned short ii_bpt; /* bytes per track (unformatted) */
unsigned short ii_bps; /* bytes per sector (unformatted) */
unsigned short ii_spt; /* sectors per track (default xlat mode) */
unsigned short ii_vendor1[3]; /* vendor unique data */
unsigned short ii_serialnum[10]; /* serial number in ASCII */
unsigned short ii_buffertype; /* buffer type */
unsigned short ii_buffersize; /* buffer size in 512 byte sectors */
unsigned short ii_eccbyteslong; /* ecc bytes for r/w long */
unsigned short ii_firmrev[4]; /* firmware revision in ascii */
unsigned short ii_modelnum[20]; /* model number in ascii */
unsigned short ii_doublewordio; /* double word transfer flag */
unsigned short ii_capabilities; /* capabilities */
unsigned short ii_reserved2; /* reserved */
unsigned short ii_piomode; /* PIO data xfer timing mode */
unsigned short ii_dmamode; /* DMA data xfer timing mode */
unsigned short ii_reserved3[75]; /* reserved */
unsigned short ii_vendor2[32]; /* vendor unique data */
unsigned short ii_reserved4[96]; /* reserved */
} ide_info_t;
/*
* Drive attributes
* Note: all fields defined as bytes to prevent compiler arith probs.
* All multi-byte fields are stored low-byte first.
* This struct is configured for binary compatibility with ROM data!
*/
typedef struct hdparm_s {
unsigned char ncyl[2]; /* number of cylinders */
unsigned char nhead; /* number heads */
unsigned char rwccp[2]; /* reduced write curr cyl */
unsigned char wpcc[2]; /* write pre-compensation cyl */
unsigned char eccl; /* max ecc data length */
unsigned char ctrl; /* control byte */
unsigned char fill2[3];
unsigned char landc[2]; /* landing zone cylinder */
unsigned char nspt; /* number of sectors per track */
unsigned char hdfill3;
} hdparm_t;
/* Macro for initializing drive parameter tables. */
#define _HDPARMS(cyl,hd,spt,ctl,pcomp) { \
{ (cyl) & 0xFF, (cyl) >> 8 }, hd, { 0, 0 }, \
{ (pcomp) & 0xFF, (pcomp) >> 8 }, 0, ctl, \
{ 0, 0, 0 }, { 0 , 0 }, spt, 0 }
/* Convert from a 2-element unsigned char array to unsigned short. */
/* Copy number into a 2-element unsigned char array. */
#if _I386
#define _CHAR2_TO_USHORT(c_array) (* (unsigned short *) (c_array))
#define _NUM_TO_CHAR2(c_array, num) (* (unsigned short *) (c_array) = (num))
#else
#define _CHAR2_TO_USHORT(c_array) \
((unsigned short) ((c_array)[1] << 8) | (c_array)[0])
/#define _NUM_TO_CHAR2(c_array, num) \
(((c_array)[0] = (num) & 0xFF), ((c_array)[1] = (num) >> 8))
#endif
#if _KERNEL
#define N_ATDRV 2U /* only two drives supported */
#endif
#endif /* ! defined (__SYS_HDIOCTL_H__) */