    /*
     *  F i l e N a m e  :  l e o a p p l i . h
     *
     ****************************************************************************
     *                   (C) Copyright ALPS Electric Co., Ltd. 1995-1997
     ****************************************************************************
     *  Version
     *
     *  ver     Date
     *  ----  --------
     *  1.01  '97-11-18  Add MOTOR BRAKE definition for control bit.
     ****************************************************************************
    */
    /*-----------------------------------*/
    /*   DRIVE PARAMETER                 */
    /*-----------------------------------*/
    #define  LEO_DISK_TYPE_MIN    0
    #define  LEO_DISK_TYPE_MAX    6

    #define  LEO_LBA_MIN          0
    #define  LEO_LBA_MAX          4291

    #define  LEO_LBA_ROM_TOP      LEO_LBA_MIN
    #define  LEO_LBA_ROM_END0     1417
    #define  LEO_LBA_ROM_END1     1965
    #define  LEO_LBA_ROM_END2     2513
    #define  LEO_LBA_ROM_END3     3061
    #define  LEO_LBA_ROM_END4     3609
    #define  LEO_LBA_ROM_END5     4087
    #define  LEO_LBA_ROM_END6     LEO_LBA_MAX
    #define  LEO_LBA_RAM_TOP0     (LEO_LBA_ROM_END0+1)
    #define  LEO_LBA_RAM_TOP1     (LEO_LBA_ROM_END1+1)
    #define  LEO_LBA_RAM_TOP2     (LEO_LBA_ROM_END2+1)
    #define  LEO_LBA_RAM_TOP3     (LEO_LBA_ROM_END3+1)
    #define  LEO_LBA_RAM_TOP4     (LEO_LBA_ROM_END4+1)
    #define  LEO_LBA_RAM_TOP5     (LEO_LBA_ROM_END5+1)
    #define  LEO_LBA_RAM_TOP6     (LEO_LBA_ROM_END6+1)
    #define  LEO_LBA_RAM_END6     LEO_LBA_MAX

    /*-----------------------------------*/
    /*   LEO FUNCTION DEFINITIONS        */
    /*-----------------------------------*/
    extern void leoInitialize(OSPri PRI_WRK, OSPri PRI_INT, OSMesg *command_que_buf, u32 cmd_buff_size);
    extern void leoCommand(void *CDB);
    extern void LeoReset(void);
    extern s32  LeoResetClear(void);

    /*-----------------------------------*/
    /*   THREAD PRIORITY                 */
    /*-----------------------------------*/
    #define  LEO_PRIORITY_WRK   (OS_PRIORITY_PIMGR-1)
    #define  LEO_PRIORITY_INT   OS_PRIORITY_PIMGR

    /*-----------------------------------*/
    /*   COMMAND CODE                    */
    /*-----------------------------------*/
    #define LEO_COMMAND_CLEAR_QUE         0x01
    #define LEO_COMMAND_INQUIRY           0x02
    #define LEO_COMMAND_TEST_UNIT_READY   0x03
    #define LEO_COMMAND_REZERO            0x04
    #define LEO_COMMAND_READ              0x05
    #define LEO_COMMAND_WRITE             0x06
    #define LEO_COMMAND_SEEK              0x07
    #define LEO_COMMAND_START_STOP        0x08
    #define LEO_COMMAND_READ_CAPACITY     0x09
    #define LEO_COMMAND_TRANSLATE         0x0a
    #define LEO_COMMAND_MODE_SELECT       0x0b
    #define LEO_COMMAND_READ_DISK_ID      0x0c
    #define LEO_COMMAND_READ_TIMER        0x0d
    #define LEO_COMMAND_SET_TIMER         0x0e

    /*-----------------------------------*/
    /* CONTROL BIT                       */
    /*-----------------------------------*/
    #define LEO_CONTROL_POST              0x80   /* ENABLE POST QUEUE */
    #define LEO_CONTROL_START             0x01   /* START COMMAND */
    #define LEO_CONTROL_STBY              0x02   /* STAND-BY MODE(NOT SLEEP MODE) */
    #define LEO_CONTROL_WRT               0x01   /* READ RE-WRITE-ABLE CAPACITY */
    #define LEO_CONTROL_TBL               0x01   /* TRANSLATE BYTE TO LBA */
    #define LEO_CONTROL_BRAKE             0x04   /* SLEEP MODE(BRAKE ON) */

    /*-----------------------------------*/
    /* BIT FIELD PARAMETER               */
    /*-----------------------------------*/
    #define LEO_TEST_UNIT_MR              0x01   /* MEDIUM REMOVED */
    #define LEO_TEST_UNIT_RE              0x02   /* HEAD RETRACTED */
    #define LEO_TEST_UNIT_SS              0x04   /* SPINDLE STOPPED */

    /*-----------------------------------*/
    /* STATUS                            */
    /*-----------------------------------*/
    #define LEO_STATUS_GOOD               0x00
    #define LEO_STATUS_CHECK_CONDITION    0x02
    #define LEO_STATUS_BUSY               0x08

    /*-----------------------------------*/
    /* SENSE CODE                        */
    /*-----------------------------------*/
    #define LEO_SENSE_NO_ADDITIONAL_SENSE_INFOMATION   00
    #define LEO_SENSE_DRIVE_NOT_READY                  01
    #define LEO_SENSE_DIAGNOSTIC_FAILURE               02
    #define LEO_SENSE_COMMAND_PHASE_ERROR              03
    #define LEO_SENSE_DATA_PHASE_ERROR                 04
    #define LEO_SENSE_REAL_TIME_CLOCK_FAILURE          05
    #define LEO_SENSE_INCOMPATIBLE_MEDIUM_INSTALLED    11
    #define LEO_SENSE_UNKNOWN_FORMAT                   11
    #define LEO_SENSE_NO_SEEK_COMPLETE                 21
    #define LEO_SENSE_WRITE_FAULT                      22
    #define LEO_SENSE_UNRECOVERED_READ_ERROR           23
    #define LEO_SENSE_NO_REFERENCE_POSITION_FOUND      24
    #define LEO_SENSE_TRACK_FOLLOWING_ERROR            25
    #define LEO_SENSE_TRACKING_OR_SPDL_SERVO_FAILURE   25
    #define LEO_SENSE_INVALID_COMMAND_OPERATION_CODE   31
    #define LEO_SENSE_LBA_OUT_OF_RANGE                 32
    #define LEO_SENSE_WRITE_PROTECT_ERROR              33
    #define LEO_SENSE_COMMAND_TERMINATED               34
    #define LEO_SENSE_QUEUE_FULL                       35
    #define LEO_SENSE_ILLEGAL_TIMER_VALUE              36
    #define LEO_SENSE_WAITING_NMI                      37
    #define LEO_SENSE_DEVICE_COMMUNICATION_FAILURE     41
    #define LEO_SENSE_MEDIUM_NOT_PRESENT               42
    #define LEO_SENSE_POWERONRESET_DEVICERESET_OCCURED 43
    #define LEO_SENSE_MEDIUM_MAY_HAVE_CHANGED          47
    #define LEO_SENSE_EJECTED_ILLEGALLY_RESUME         49

    /*-----------------------------------*/
    /* Command Block Header              */
    /*-----------------------------------*/
    typedef struct{
        u8    command;
        u8    reserve1;
        u8    control;
        u8    reserve3;
        u8    status;
        u8    sense;
        u8    reserve6;
        u8    reserve7;
        OSMesgQueue  *post;
    } LEOCmdHeader;

    /*-----------------------------------*/
    /* CLEAR QUEUE(01H) command          */
    /*-----------------------------------*/
    typedef struct {
        LEOCmdHeader  header;
    } LEOCmdClearQue;

    /*-----------------------------------*/
    /* INQUIRY(02H) command              */
    /*-----------------------------------*/
    typedef struct {
        LEOCmdHeader  header;
        u8            dev_type;
        u8            version;
        u8            dev_num;
        u8            leo_bios_ver;
        u32           reserve5;
    } LEOCmdInquiry;

    /*-----------------------------------*/
    /* TEST UNIT READY(03H) command      */
    /*-----------------------------------*/
    typedef struct {
        LEOCmdHeader  header;
        u8            test;
        u8            reserve2;
        u8            reserve3;
        u8            reserve4;
    } LEOCmdTestUnitReady;

    /*-----------------------------------*/
    /* REZERO(04H) command               */
    /*-----------------------------------*/
    typedef struct {
        LEOCmdHeader  header;
    } LEOCmdRezero;

    /*-----------------------------------*/
    /* READ(05H) command                 */
    /*-----------------------------------*/
    typedef struct {
        LEOCmdHeader  header;
        u32           lba;
        u32           xfer_blks;
        void         *buff_ptr;
        u32           rw_bytes;
    } LEOCmdRead;

    /*-----------------------------------*/
    /* WRITE(06H) command                */
    /*-----------------------------------*/
    typedef LEOCmdRead LEOCmdWrite;

    /*-----------------------------------*/
    /* SEEK(07H) command                 */
    /*-----------------------------------*/
    typedef struct {
        LEOCmdHeader  header;
        u32           lba;
    } LEOCmdSeek;

    /*-----------------------------------*/
    /* START/STOP(08H) command           */
    /*-----------------------------------*/
    typedef struct {
        LEOCmdHeader  header;
    } LEOCmdStartStop;

    /*-----------------------------------*/
    /* READ CAPACITY(09H) command        */
    /*-----------------------------------*/
    typedef struct {
        LEOCmdHeader  header;
        u32           start_lba;
        u32           end_lba;
        u32           capa_bytes;
    } LEOCmdReadCapacity;

    /*-----------------------------------*/
    /* TRANSLATE(0AH) command            */
    /*-----------------------------------*/
    typedef struct {
        LEOCmdHeader  header;
        u32           start_lba;
        u32           in_param;
        u32           out_param;
    } LEOCmdTranslate;

    /*-----------------------------------*/
    /* MODE SELECT(0BH) command          */
    /*-----------------------------------*/
    typedef struct {
        LEOCmdHeader  header;
        u8            page_code;
        u8            reserve1;
        u8            standby_time;
        u8            sleep_time;
        u8            led_on_time;
        u8            led_off_time;
        u8            reserve18;
        u8            reserve19;
    } LEOCmdModeSelect;

    /*-----------------------------------*/
    /* READ DISK ID(0CH) command         */
    /*-----------------------------------*/
    typedef struct {
        LEOCmdHeader  header;
        void         *buffer_pointer;
    } LEOCmdReadDiskId;

    /*-----------------------------------*/
    /* READ TIMER(0DH) command           */
    /*-----------------------------------*/
    typedef struct {
        LEOCmdHeader  header;
        u8            reserve12;
        u8            reserve13;
        u8            year;
        u8            month;
        u8            day;
        u8            hour;
        u8            minute;
        u8            second;
    } LEOCmdReadTimer;

    /*-----------------------------------*/
    /* SET TIMER(0EH) command            */
    /*-----------------------------------*/
    typedef LEOCmdReadTimer LEOCmdSetTimer;

    /*-------end of leoappli.h--------------------------*/