Blame lib/driver/MSWindows/aspi32.h

Packit dd8086
/* Win32 aspi specific */
Packit dd8086
/*
Packit dd8086
  $Id: aspi32.h,v 1.6 2008/04/21 18:30:21 karl Exp $
Packit dd8086
Packit dd8086
  Copyright (C) 2003, 2004, 2005, 2008 Rocky Bernstein <rocky@gnu.org>
Packit dd8086
Packit dd8086
  This program is free software: you can redistribute it and/or modify
Packit dd8086
  it under the terms of the GNU General Public License as published by
Packit dd8086
  the Free Software Foundation, either version 3 of the License, or
Packit dd8086
  (at your option) any later version.
Packit dd8086
Packit dd8086
  This program is distributed in the hope that it will be useful,
Packit dd8086
  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit dd8086
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit dd8086
  GNU General Public License for more details.
Packit dd8086
Packit dd8086
  You should have received a copy of the GNU General Public License
Packit dd8086
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit dd8086
*/
Packit dd8086
Packit dd8086
#define ASPI_HAID           0
Packit dd8086
#define ASPI_TARGET         0
Packit dd8086
#define DTYPE_CDROM         0x05
Packit dd8086
Packit dd8086
#define SENSE_LEN           0x0E
Packit dd8086
#define SC_HA_INQUIRY       0x00
Packit dd8086
#define SC_GET_DEV_TYPE     0x01
Packit dd8086
#define SC_EXEC_SCSI_CMD    0x02
Packit dd8086
#define SC_GET_DISK_INFO    0x06
Packit dd8086
Packit dd8086
//*****************************************************************************
Packit dd8086
//      %%% SRB Status %%%
Packit dd8086
//*****************************************************************************
Packit dd8086
Packit dd8086
#define SS_PENDING                0x00  // SRB being processed
Packit dd8086
#define SS_COMP                   0x01  // SRB completed without error
Packit dd8086
#define SS_ABORTED                0x02  // SRB aborted
Packit dd8086
#define SS_ABORT_FAIL             0x03  // Unable to abort SRB
Packit dd8086
#define SS_ERR                    0x04  // SRB completed with error
Packit dd8086
Packit dd8086
#define SS_INVALID_CMD            0x80  // Invalid ASPI command
Packit dd8086
#define SS_INVALID_HA             0x81  // Invalid host adapter number
Packit dd8086
#define SS_NO_DEVICE              0x82  // SCSI device not installed
Packit dd8086
Packit dd8086
#define SS_INVALID_SRB            0xE0  // Invalid parameter set in SRB
Packit dd8086
#define SS_OLD_MANAGER            0xE1  // ASPI manager doesn't support Windows
Packit dd8086
#define SS_BUFFER_ALIGN           0xE1  // Buffer not aligned (replaces 
Packit dd8086
                                        // OLD_MANAGER in Win32)
Packit dd8086
#define SS_ILLEGAL_MODE           0xE2  // Unsupported Windows mode
Packit dd8086
#define SS_NO_ASPI                0xE3  // No ASPI managers resident
Packit dd8086
#define SS_FAILED_INIT            0xE4  // ASPI for windows failed init
Packit dd8086
#define SS_ASPI_IS_BUSY           0xE5  // No resources available to execute 
Packit dd8086
                                        // cmd
Packit dd8086
#define SS_BUFFER_TOO_BIG         0xE6  // Buffer size to big to handle!
Packit dd8086
#define SS_MISMATCHED_COMPONENTS  0xE7  // The DLLs/EXEs of ASPI don't version 
Packit dd8086
                                        // check
Packit dd8086
#define SS_NO_ADAPTERS            0xE8  // No host adapters to manage
Packit dd8086
#define SS_INSUFFICIENT_RESOURCES 0xE9  // Couldn't allocate resources needed 
Packit dd8086
                                        // to init
Packit dd8086
#define SS_ASPI_IS_SHUTDOWN       0xEA  // Call came to ASPI after 
Packit dd8086
                                        // PROCESS_DETACH
Packit dd8086
#define SS_BAD_INSTALL            0xEB  // The DLL or other components are installed wrong
Packit dd8086
Packit dd8086
//*****************************************************************************
Packit dd8086
//      %%% Host Adapter Status %%%
Packit dd8086
//*****************************************************************************
Packit dd8086
Packit dd8086
#define HASTAT_OK                 0x00    // Host adapter did not detect an
Packit dd8086
                                          // error
Packit dd8086
#define HASTAT_SEL_TO             0x11    // Selection Timeout
Packit dd8086
#define HASTAT_DO_DU              0x12    // Data overrun data underrun
Packit dd8086
#define HASTAT_BUS_FREE           0x13    // Unexpected bus free
Packit dd8086
#define HASTAT_PHASE_ERR          0x14    // Target bus phase sequence
Packit dd8086
                                          // failure
Packit dd8086
#define HASTAT_TIMEOUT            0x09    // Timed out while SRB was
Packit dd8086
                                          // waiting to beprocessed.
Packit dd8086
#define HASTAT_COMMAND_TIMEOUT    0x0B    // Adapter timed out processing SRB.
Packit dd8086
#define HASTAT_MESSAGE_REJECT     0x0D    // While processing SRB, the
Packit dd8086
                                          // adapter received a MESSAGE
Packit dd8086
#define HASTAT_BUS_RESET            0x0E  // A bus reset was detected.
Packit dd8086
#define HASTAT_PARITY_ERROR         0x0F  // A parity error was detected.
Packit dd8086
#define HASTAT_REQUEST_SENSE_FAILED 0x10  // The adapter failed in issuing
Packit dd8086
#define SS_NO_ADAPTERS      0xE8
Packit dd8086
#define SRB_DIR_IN          0x08
Packit dd8086
#define SRB_DIR_OUT         0x10
Packit dd8086
#define SRB_EVENT_NOTIFY    0x40
Packit dd8086
Packit dd8086
#define SECTOR_TYPE_MODE2 0x14
Packit dd8086
#define READ_CD_USERDATA_MODE2 0x10
Packit dd8086
Packit dd8086
#define READ_TOC 0x43
Packit dd8086
#define READ_TOC_FORMAT_TOC 0x0
Packit dd8086
Packit dd8086
#pragma pack(1)
Packit dd8086
Packit dd8086
struct SRB_GetDiskInfo
Packit dd8086
{
Packit dd8086
    unsigned char   SRB_Cmd;
Packit dd8086
    unsigned char   SRB_Status;
Packit dd8086
    unsigned char   SRB_HaId;
Packit dd8086
    unsigned char   SRB_Flags;
Packit dd8086
    unsigned long   SRB_Hdr_Rsvd;
Packit dd8086
    unsigned char   SRB_Target;
Packit dd8086
    unsigned char   SRB_Lun;
Packit dd8086
    unsigned char   SRB_DriveFlags;
Packit dd8086
    unsigned char   SRB_Int13HDriveInfo;
Packit dd8086
    unsigned char   SRB_Heads;
Packit dd8086
    unsigned char   SRB_Sectors;
Packit dd8086
    unsigned char   SRB_Rsvd1[22];
Packit dd8086
};
Packit dd8086
Packit dd8086
struct SRB_GDEVBlock
Packit dd8086
{
Packit dd8086
    unsigned char SRB_Cmd;
Packit dd8086
    unsigned char SRB_Status;
Packit dd8086
    unsigned char SRB_HaId;
Packit dd8086
    unsigned char SRB_Flags;
Packit dd8086
    unsigned long SRB_Hdr_Rsvd;
Packit dd8086
    unsigned char SRB_Target;
Packit dd8086
    unsigned char SRB_Lun;
Packit dd8086
    unsigned char SRB_DeviceType;
Packit dd8086
    unsigned char SRB_Rsvd1;
Packit dd8086
};
Packit dd8086
Packit dd8086
struct SRB_ExecSCSICmd
Packit dd8086
{
Packit dd8086
    unsigned char   SRB_Cmd;
Packit dd8086
    unsigned char   SRB_Status;
Packit dd8086
    unsigned char   SRB_HaId;
Packit dd8086
    unsigned char   SRB_Flags;
Packit dd8086
    unsigned long   SRB_Hdr_Rsvd;
Packit dd8086
    unsigned char   SRB_Target;
Packit dd8086
    unsigned char   SRB_Lun;
Packit dd8086
    unsigned short  SRB_Rsvd1;
Packit dd8086
    unsigned long   SRB_BufLen;
Packit dd8086
    unsigned char   *SRB_BufPointer;
Packit dd8086
    unsigned char   SRB_SenseLen;
Packit dd8086
    unsigned char   SRB_CDBLen;
Packit dd8086
    unsigned char   SRB_HaStat;
Packit dd8086
    unsigned char   SRB_TargStat;
Packit dd8086
    unsigned long   *SRB_PostProc;
Packit dd8086
    unsigned char   SRB_Rsvd2[20];
Packit dd8086
    unsigned char   CDBByte[16];
Packit dd8086
    unsigned char   SenseArea[SENSE_LEN+2];
Packit dd8086
};
Packit dd8086
Packit dd8086
/*****************************************************************************
Packit dd8086
          %%% SRB - HOST ADAPTER INQUIRY - SC_HA_INQUIRY (0) %%%
Packit dd8086
*****************************************************************************/
Packit dd8086
Packit dd8086
typedef struct                     // Offset
Packit dd8086
{                                  // HX/DEC
Packit dd8086
    BYTE        SRB_Cmd;           // 00/000 ASPI command code = SC_HA_INQUIRY
Packit dd8086
    BYTE        SRB_Status;        // 01/001 ASPI command status byte
Packit dd8086
    BYTE        SRB_HaId;          // 02/002 ASPI host adapter number
Packit dd8086
    BYTE        SRB_Flags;         // 03/003 ASPI request flags
Packit dd8086
    DWORD       SRB_Hdr_Rsvd;      // 04/004 Reserved, MUST = 0
Packit dd8086
    BYTE        HA_Count;          // 08/008 Number of host adapters present
Packit dd8086
    BYTE        HA_SCSI_ID;        // 09/009 SCSI ID of host adapter
Packit dd8086
    BYTE        HA_ManagerId[16];  // 0A/010 String describing the manager
Packit dd8086
    BYTE        HA_Identifier[16]; // 1A/026 String describing the host adapter
Packit dd8086
    BYTE        HA_Unique[16];     // 2A/042 Host Adapter Unique parameters
Packit dd8086
    WORD        HA_Rsvd1;          // 3A/058 Reserved, MUST = 0
Packit dd8086
}
Packit dd8086
SRB_HAInquiry;
Packit dd8086
Packit dd8086
/*! 
Packit dd8086
  Get disc type associated with cd object.
Packit dd8086
*/
Packit dd8086
discmode_t get_discmode_aspi (_img_private_t *p_env);
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Return the the kind of drive capabilities of device.
Packit dd8086
Packit dd8086
  Note: string is malloc'd so caller should free() then returned
Packit dd8086
  string when done with it.
Packit dd8086
Packit dd8086
 */
Packit dd8086
char * get_mcn_aspi (const _img_private_t *env);
Packit dd8086
Packit dd8086
/*!  
Packit dd8086
  Get the format (XA, DATA, AUDIO) of a track. 
Packit dd8086
*/
Packit dd8086
track_format_t get_track_format_aspi(const _img_private_t *env, 
Packit dd8086
				     track_t i_track); 
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Initialize internal structures for CD device.
Packit dd8086
 */
Packit dd8086
bool init_aspi (_img_private_t *env);
Packit dd8086
Packit dd8086
const char *is_cdrom_aspi(const char drive_letter);
Packit dd8086
Packit dd8086
/*!
Packit dd8086
   Reads an audio device using the DeviceIoControl method into data
Packit dd8086
   starting from lsn.  Returns 0 if no error.
Packit dd8086
 */
Packit dd8086
int read_audio_sectors_aspi (_img_private_t *obj, void *data, lsn_t lsn, 
Packit dd8086
			     unsigned int nblocks);
Packit dd8086
/*!
Packit dd8086
   Reads a single mode1 sector using the DeviceIoControl method into
Packit dd8086
   data starting from lsn. Returns 0 if no error.
Packit dd8086
 */
Packit dd8086
int read_mode1_sector_aspi (_img_private_t *env, void *data, 
Packit dd8086
			    lsn_t lsn, bool b_form2);
Packit dd8086
/*!
Packit dd8086
   Reads a single mode2 sector from cd device into data starting
Packit dd8086
   from lsn. Returns 0 if no error. 
Packit dd8086
 */
Packit dd8086
int read_mode2_sector_aspi (_img_private_t *env, void *data, lsn_t lsn, 
Packit dd8086
			    bool b_form2);
Packit dd8086
Packit dd8086
/*! 
Packit dd8086
  Read and cache the CD's Track Table of Contents and track info.
Packit dd8086
  Return true if successful or false if an error.
Packit dd8086
*/
Packit dd8086
bool read_toc_aspi (_img_private_t *env);
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Run a SCSI MMC command. 
Packit dd8086
 
Packit dd8086
  env	        private CD structure 
Packit dd8086
  i_timeout     time in milliseconds we will wait for the command
Packit dd8086
                to complete. If this value is -1, use the default 
Packit dd8086
		time-out value.
Packit dd8086
  p_buf	        Buffer for data, both sending and receiving
Packit dd8086
  i_buf	        Size of buffer
Packit dd8086
  e_direction	direction the transfer is to go.
Packit dd8086
  cdb	        CDB bytes. All values that are needed should be set on 
Packit dd8086
                input. We'll figure out what the right CDB length should be.
Packit dd8086
Packit dd8086
  Return 0 if command completed successfully.
Packit dd8086
 */
Packit dd8086
int run_mmc_cmd_aspi( void *p_user_data, 
Packit dd8086
		      unsigned int i_timeout,
Packit dd8086
		      unsigned int i_cdb, 
Packit dd8086
		      const mmc_cdb_t * p_cdb,
Packit dd8086
		      cdio_mmc_direction_t e_direction, 
Packit dd8086
		      unsigned int i_buf, /*in/out*/ void *p_buf );
Packit dd8086