linux-bk/include/asm-m68k/swim_iop.h
<<
>>
Prefs
   1/*
   2 * SWIM access through the IOP
   3 * Written by Joshua M. Thompson
   4 */
   5
   6/* IOP number and channel number for the SWIM */
   7
   8#define SWIM_IOP        IOP_NUM_ISM
   9#define SWIM_CHAN       1
  10
  11/* Command code: */
  12
  13#define CMD_INIT                0x01    /* Initialize                  */
  14#define CMD_SHUTDOWN            0x02    /* Shutdown                    */
  15#define CMD_START_POLL          0x03    /* Start insert/eject polling  */
  16#define CMD_STOP_POLL           0x04    /* Stop insert/eject polling   */
  17#define CMD_SETHFSTAG           0x05    /* Set HFS tag buffer address  */
  18#define CMD_STATUS              0x06    /* Status                      */
  19#define CMD_EJECT               0x07    /* Eject                       */
  20#define CMD_FORMAT              0x08    /* Format                      */
  21#define CMD_FORMAT_VERIFY       0x09    /* Format and Verify           */
  22#define CMD_WRITE               0x0A    /* Write                       */
  23#define CMD_READ                0x0B    /* Read                        */
  24#define CMD_READ_VERIFY         0x0C    /* Read and Verify             */
  25#define CMD_CACHE_CTRL          0x0D    /* Cache control               */
  26#define CMD_TAGBUFF_CTRL        0x0E    /* Tag buffer control          */
  27#define CMD_GET_ICON            0x0F    /* Get Icon                    */
  28
  29/* Drive types: */
  30
  31/* note: apple sez DRV_FDHD is 4, but I get back a type */
  32/*       of 5 when I do a drive status check on my FDHD */
  33
  34#define DRV_NONE        0       /* No drive             */
  35#define DRV_UNKNOWN     1       /* Unspecified drive    */
  36#define DRV_400K        2       /* 400K                 */
  37#define DRV_800K        3       /* 400K/800K            */
  38#define DRV_FDHD        5       /* 400K/800K/720K/1440K */
  39#define DRV_HD20        7       /* Apple HD20           */
  40
  41/* Format types: */
  42
  43#define FMT_HD20        0x0001  /*  Apple HD20 */
  44#define FMT_400K        0x0002  /*  400K (GCR) */
  45#define FMT_800K        0x0004  /*  800K (GCR) */
  46#define FMT_720K        0x0008  /*  720K (MFM) */
  47#define FMT_1440K       0x0010  /* 1.44M (MFM) */
  48
  49#define FMD_KIND_400K   1
  50#define FMD_KIND_800K   2
  51#define FMD_KIND_720K   3
  52#define FMD_KIND_1440K  1
  53
  54/* Icon Flags: */
  55
  56#define ICON_MEDIA      0x01    /* Have IOP supply media icon */
  57#define ICON_DRIVE      0x01    /* Have IOP supply drive icon */
  58
  59/* Error codes: */
  60
  61#define gcrOnMFMErr     -400    /* GCR (400/800K) on HD media */
  62#define verErr          -84     /* verify failed */
  63#define fmt2Err         -83     /* cant get enough sync during format */
  64#define fmt1Err         -82     /* can't find sector 0 after track format */
  65#define sectNFErr       -81     /* can't find sector */
  66#define seekErr         -80     /* drive error during seek */
  67#define spdAdjErr       -79     /* can't set drive speed */
  68#define twoSideErr      -78     /* drive is single-sided */
  69#define initIWMErr      -77     /* error during initialization */
  70#define tk0badErr       -76     /* track zero is bad */
  71#define cantStepErr     -75     /* drive error during step */
  72#define wrUnderrun      -74     /* write underrun occurred */
  73#define badDBtSlp       -73     /* bad data bitslip marks */
  74#define badDCksum       -72     /* bad data checksum */
  75#define noDtaMkErr      -71     /* can't find data mark */
  76#define badBtSlpErr     -70     /* bad address bitslip marks */
  77#define badCksmErr      -69     /* bad address-mark checksum */
  78#define dataVerErr      -68     /* read-verify failed */
  79#define noAdrMkErr      -67     /* can't find an address mark */
  80#define noNybErr        -66     /* no nybbles? disk is probably degaussed */
  81#define offLinErr       -65     /* no disk in drive */
  82#define noDriveErr      -64     /* drive isn't connected */
  83#define nsDrvErr        -56     /* no such drive */
  84#define paramErr        -50     /* bad positioning information */
  85#define wPrErr          -44     /* write protected */
  86#define openErr         -23     /* already initialized */
  87
  88#ifndef __ASSEMBLY__
  89
  90struct swim_drvstatus {
  91        __u16   curr_track;     /* Current track number                   */
  92        __u8    write_prot;     /* 0x80 if disk is write protected        */
  93        __u8    disk_in_drive;  /* 0x01 or 0x02 if a disk is in the drive */
  94        __u8    installed;      /* 0x01 if drive installed, 0xFF if not   */
  95        __u8    num_sides;      /* 0x80 if two-sided format supported     */
  96        __u8    two_sided;      /* 0xff if two-sided format diskette      */
  97        __u8    new_interface;  /* 0x00 if old 400K drive, 0xFF if newer  */
  98        __u16   errors;         /* Disk error count                       */
  99        struct {                /* 32 bits */
 100                __u16   reserved;
 101                __u16   :4;
 102                __u16   external:1;     /* Drive is external        */
 103                __u16   scsi:1;         /* Drive is a SCSI drive    */
 104                __u16   fixed:1;        /* Drive has fixed media    */
 105                __u16   secondary:1;    /* Drive is secondary drive */
 106                __u8    type;           /* Drive type               */
 107        } info;
 108        __u8    mfm_drive;      /* 0xFF if this is an FDHD drive    */
 109        __u8    mfm_disk;       /* 0xFF if 720K/1440K (MFM) disk    */
 110        __u8    mfm_format;     /* 0x00 if 720K, 0xFF if 1440K      */
 111        __u8    ctlr_type;      /* 0x00 if IWM, 0xFF if SWIM        */
 112        __u16   curr_format;    /* Current format type              */
 113        __u16   allowed_fmt;    /* Allowed format types             */
 114        __u32   num_blocks;     /* Number of blocks on disk         */
 115        __u8    icon_flags;     /* Icon flags                       */
 116        __u8    unusued;
 117};
 118
 119/* Commands issued from the host to the IOP: */
 120
 121struct swimcmd_init {
 122        __u8    code;           /* CMD_INIT */
 123        __u8    unusued;
 124        __u16   error;
 125        __u8    drives[28];     /* drive type list */
 126};
 127
 128struct swimcmd_startpoll {
 129        __u8    code;           /* CMD_START_POLL */
 130        __u8    unusued;
 131        __u16   error;
 132};
 133
 134struct swimcmd_sethfstag {
 135        __u8    code;           /* CMD_SETHFSTAG */
 136        __u8    unusued;
 137        __u16   error;
 138        caddr_t tagbuf;         /* HFS tag buffer address */
 139};
 140
 141struct swimcmd_status {
 142        __u8    code;           /* CMD_STATUS */
 143        __u8    drive_num;
 144        __u16   error;
 145        struct swim_drvstatus status;
 146};
 147
 148struct swimcmd_eject {
 149        __u8    code;           /* CMD_EJECT */
 150        __u8    drive_num;
 151        __u16   error;
 152        struct swim_drvstatus status;
 153};
 154
 155struct swimcmd_format {
 156        __u8    code;           /* CMD_FORMAT */
 157        __u8    drive_num;
 158        __u16   error;
 159        union {
 160                struct {
 161                        __u16 fmt;         /* format kind                  */
 162                        __u8  hdrbyte;     /* fmt byte for hdr (0=default) */
 163                        __u8  interleave;  /* interleave (0 = default)     */
 164                        caddr_t databuf;   /* sector data buff (0=default  */
 165                        caddr_t tagbuf;    /* tag data buffer (0=default)  */
 166                } f;
 167                struct swim_drvstatus status;
 168        } p;
 169};
 170
 171struct swimcmd_fmtverify {
 172        __u8    code;           /* CMD_FORMAT_VERIFY */
 173        __u8    drive_num;
 174        __u16   error;
 175};
 176
 177struct swimcmd_rw {
 178        __u8    code;           /* CMD_READ, CMD_WRITE or CMD_READ_VERIFY */
 179        __u8    drive_num;
 180        __u16   error;
 181        caddr_t buffer;         /* R/W buffer address */
 182        __u32   first_block;    /* Starting block     */
 183        __u32   num_blocks;     /* Number of blocks   */
 184        __u8    tag[12];        /* tag data           */
 185};
 186
 187struct swimcmd_cachectl {
 188        __u8    code;           /* CMD_CACHE_CTRL */
 189        __u8    unused;
 190        __u16   error;
 191        __u8    enable;         /* Nonzero to enable cache                */
 192        __u8    install;        /* +1 = install, -1 = remove, 0 = neither */
 193};
 194
 195struct swimcmd_tagbufctl {
 196        __u8    code;           /* CMD_TAGBUFF_CTRL */
 197        __u8    unused;
 198        __u16   error;
 199        caddr_t buf;            /* buffer address or 0 to disable */
 200};
 201
 202struct swimcmd_geticon {
 203        __u8    code;           /* CMD_GET_ICON */
 204        __u8    drive_num;
 205        __u16   error;
 206        caddr_t buffer;         /* Nuffer address */
 207        __u16   kind;           /* 0 = media icon, 1 = drive icon */
 208        __u16   unused;
 209        __u16   max_bytes;      /* maximum  byte count */
 210};
 211
 212/* Messages from the SWIM IOP to the host CPU: */
 213
 214struct swimmsg_status {
 215        __u8    code;           /* 1 = insert, 2 = eject, 3 = status changed */
 216        __u8    drive_num;
 217        __u16   error;
 218        struct swim_drvstatus status;
 219};
 220
 221#endif /* __ASSEMBLY__ */
 222
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.