# hd.h

Go to the documentation of this file.

    00001 /*****************************************************************************************
    00002  Copyright (c) 2002-2004 The UbixOS Project
    00003  All rights reserved.
    00004
    00005  Redistribution and use in source and binary forms, with or without modification, are
    00006  permitted provided that the following conditions are met:
    00007
    00008  Redistributions of source code must retain the above copyright notice, this list of
    00009  conditions, the following disclaimer and the list of authors.  Redistributions in binary
    00010  form must reproduce the above copyright notice, this list of conditions, the following
    00011  disclaimer and the list of authors in the documentation and/or other materials provided
    00012  with the distribution. Neither the name of the UbixOS Project nor the names of its
    00013  contributors may be used to endorse or promote products derived from this software
    00014  without specific prior written permission.
    00015
    00016  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
    00017  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    00018  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
    00019  THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    00020  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
    00021  OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    00022  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
    00023  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    00024  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    00025
    00026  $Id: hd_8h-source.html 88 2016-01-12 00:11:29Z reddawg $
    00027
    00028 *****************************************************************************************/
    00029
    00030 #ifndef _HD_H
    00031 #define _HD_H
    00032
    00033 #include <ubixfs/ubixfs.h>
    00034
    00035 #define hdData     0x0
    00036 #define hdError    0x1
    00037 #define hdSecCount 0x2
    00038 #define hdSecNum   0x3
    00039 #define hdCylLow   0x4
    00040 #define hdCylHi    0x5
    00041 #define hdHead     0x6
    00042 #define hdStat     0x7
    00043 #define hdCmd      0x7
    00044
    00045
    00046 struct driveInfo {
    00047   struct driveDiskLabel *diskLabel;
    00048   char hdSector[512];
    00049   char hdEnable;
    00050   char hdDev;
    00051   char hdFlags;
    00052   char hdShift;
    00053   long hdMask;
    00054   long hdMulti;
    00055   long hdPort;
    00056   long hdSize;
    00057   long hdCalc;
    00058   long parOffset;
    00059   };
    00060
    00061 int initHardDisk();
    00062 void hdWrite(struct driveInfo *hdd,void *,uInt32,uInt32);
    00063 void hdRead(struct driveInfo *hdd,void *,uInt32,uInt32);
    00064 int hdReset();
    00065 int hdIoctl();
    00066 int hdStart();
    00067 int hdStop();
    00068 int hdStandby();
    00069 int hdInit(struct device_node *dev);
    00070
    00071 struct dos_partition {
    00072   unsigned char   dp_flag;        /* bootstrap flags */
    00073   unsigned char   dp_shd;         /* starting head */
    00074   unsigned char   dp_ssect;       /* starting sector */
    00075   unsigned char   dp_scyl;        /* starting cylinder */
    00076   unsigned char   dp_type;         /* partition type */
    00077   unsigned char   dp_ehd;         /* end head */
    00078   unsigned char   dp_esect;       /* end sector */
    00079   unsigned char   dp_ecyl;        /* end cylinder */
    00080   uInt32       dp_start;       /* absolute starting sector number */
    00081   uInt32       dp_size;        /* partition size in sectors */
    00082   };
    00083
    00084 #define MAXPARTITIONS   8
    00085
    00086 struct bsd_disklabel {
    00087         u_int32_t d_magic;              /* the magic number */
    00088         u_int16_t d_type;               /* drive type */
    00089         u_int16_t d_subtype;            /* controller/d_type specific */
    00090         char      d_typename[16];       /* type name, e.g. "eagle" */
    00091
    00092         char      d_packname[16];       /* pack identifier */
    00093
    00094                         /* disk geometry: */
    00095         u_int32_t d_secsize;            /* # of bytes per sector */
    00096         u_int32_t d_nsectors;           /* # of data sectors per track */
    00097         u_int32_t d_ntracks;            /* # of tracks per cylinder */
    00098         u_int32_t d_ncylinders;         /* # of data cylinders per unit */
    00099         u_int32_t d_secpercyl;          /* # of data sectors per cylinder */
    00100         u_int32_t d_secperunit;         /* # of data sectors per unit */
    00101
    00102         /*
    00103          * Spares (bad sector replacements) below are not counted in
    00104          * d_nsectors or d_secpercyl.  Spare sectors are assumed to
    00105          * be physical sectors which occupy space at the end of each
    00106          * track and/or cylinder.
    00107          */
    00108         u_int16_t d_sparespertrack;     /* # of spare sectors per track */
    00109         u_int16_t d_sparespercyl;       /* # of spare sectors per cylinder */
    00110         /*
    00111          * Alternate cylinders include maintenance, replacement, configuration
    00112          * description areas, etc.
    00113          */
    00114         u_int32_t d_acylinders;         /* # of alt. cylinders per unit */
    00115
    00116                         /* hardware characteristics: */
    00117         /*
    00118          * d_interleave, d_trackskew and d_cylskew describe perturbations
    00119          * in the media format used to compensate for a slow controller.
    00120          * Interleave is physical sector interleave, set up by the
    00121          * formatter or controller when formatting.  When interleaving is
    00122          * in use, logically adjacent sectors are not physically
    00123          * contiguous, but instead are separated by some number of
    00124          * sectors.  It is specified as the ratio of physical sectors
    00125          * traversed per logical sector.  Thus an interleave of 1:1
    00126          * implies contiguous layout, while 2:1 implies that logical
    00127          * sector 0 is separated by one sector from logical sector 1.
    00128          * d_trackskew is the offset of sector 0 on track N relative to
    00129          * sector 0 on track N-1 on the same cylinder.  Finally, d_cylskew
    00130          * is the offset of sector 0 on cylinder N relative to sector 0
    00131          * on cylinder N-1.
    00132          */
    00133         u_int16_t d_rpm;                /* rotational speed */
    00134         u_int16_t d_interleave;         /* hardware sector interleave */
    00135         u_int16_t d_trackskew;          /* sector 0 skew, per track */
    00136         u_int16_t d_cylskew;            /* sector 0 skew, per cylinder */
    00137         u_int32_t d_headswitch;         /* head switch time, usec */
    00138         u_int32_t d_trkseek;            /* track-to-track seek, usec */
    00139         u_int32_t d_flags;              /* generic flags */
    00140 #define NDDATA 5
    00141         u_int32_t d_drivedata[NDDATA];  /* drive-type specific information */
    00142 #define NSPARE 5
    00143         u_int32_t d_spare[NSPARE];      /* reserved for future use */
    00144         u_int32_t d_magic2;             /* the magic number (again) */
    00145         u_int16_t d_checksum;           /* xor of data incl. partitions */
    00146
    00147                         /* filesystem and partition information: */
    00148         u_int16_t d_npartitions;        /* number of partitions in following */
    00149         u_int32_t d_bbsize;             /* size of boot area at sn0, bytes */
    00150         u_int32_t d_sbsize;             /* max size of fs superblock, bytes */
    00151         struct partition {              /* the partition table */
    00152                 u_int32_t p_size;       /* number of sectors in partition */
    00153                 u_int32_t p_offset;     /* starting sector */
    00154                 u_int32_t p_fsize;      /* filesystem basic fragment size */
    00155                 u_int8_t p_fstype;      /* filesystem type, see below */
    00156                 u_int8_t p_frag;        /* filesystem fragments per block */
    00157                 u_int16_t p_cpg;        /* filesystem cylinders per group */
    00158         } d_partitions[MAXPARTITIONS];  /* actually may be more */
    00159 };
    00160
    00161 static const char *fstypenames[] = {
    00162         "unused",
    00163         "swap",
    00164         "Version 6",
    00165         "Version 7",
    00166         "System V",
    00167         "4.1BSD",
    00168         "Eighth Edition",
    00169         "4.2BSD",
    00170         "MSDOS",
    00171         "4.4LFS",
    00172         "unknown",
    00173         "HPFS",
    00174         "ISO9660",
    00175         "boot",
    00176         "vinum",
    00177         "raid",
    00178         "?",
    00179         "?",
    00180         "?",
    00181         "?",
    00182         "jfs",
    00183         NULL
    00184 };
    00185
    00186 #endif
    00187
    00188 /***
    00189  $Log: hd_8h-source.html,v $
    00189  Revision 1.7  2006/12/15 17:47:05  reddawg
    00189  Updates
    00189
    00190  Revision 1.2  2006/10/09 02:58:05  reddawg
    00191  Fixing UFS
    00192
    00193  Revision 1.1.1.1  2006/06/01 12:46:14  reddawg
    00194  ubix2
    00195
    00196  Revision 1.2  2005/10/12 00:13:37  reddawg
    00197  Removed
    00198
    00199  Revision 1.1.1.1  2005/09/26 17:23:50  reddawg
    00200  no message
    00201
    00202  Revision 1.7  2004/08/15 00:33:02  reddawg
    00203  Wow the ide driver works again
    00204
    00205  Revision 1.6  2004/07/21 10:02:09  reddawg
    00206  devfs: renamed functions
    00207  device system: renamed functions
    00208  fdc: fixed a few potential bugs and cleaned up some unused variables
    00209  strol: fixed definition
    00210  endtask: made it print out freepage debug info
    00211  kmalloc: fixed a huge memory leak we had some unhandled descriptor insertion so some descriptors were lost
    00212  ld: fixed a pointer conversion
    00213  file: cleaned up a few unused variables
    00214  sched: broke task deletion
    00215  kprintf: fixed ogPrintf definition
    00216
    00217  Revision 1.5  2004/05/21 15:05:07  reddawg
    00218  Cleaned up
    00219
    00220
    00221  END
    00222  ***/