⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ataio.h

📁 ~{S2EL~}wdm~{G}6/~}
💻 H
📖 第 1 页 / 共 2 页
字号:

extern unsigned char pio_inbyte( unsigned int addr );

extern void pio_outbyte( unsigned int addr, unsigned char data );

extern unsigned int pio_inword( unsigned int addr );

extern void pio_outword( unsigned int addr, unsigned int data );

extern void pio_rep_inbyte( unsigned int addrDataReg,
                            unsigned int bufSeg, unsigned int bufOff,
                            long byteCnt );

extern void pio_rep_outbyte( unsigned int addrDataReg,
                             unsigned int bufSeg, unsigned int bufOff,
                             long byteCnt );

extern void pio_rep_inword( unsigned int addrDataReg,
                            unsigned int bufSeg, unsigned int bufOff,
                            unsigned int wordCnt );

extern void pio_rep_outword( unsigned int addrDataReg,
                             unsigned int bufSeg, unsigned int bufOff,
                             unsigned int wordCnt );

extern void pio_rep_indword( unsigned int addrDataReg,
                             unsigned int bufSeg, unsigned int bufOff,
                             unsigned int dwordCnt );

extern void pio_rep_outdword( unsigned int addrDataReg,
                              unsigned int bufSeg, unsigned int bufOff,
                              unsigned int dwordCnt );

//**************************************************************

// Public data in ATAIOREG.C

// Extended error information returned by
// reg_reset(), reg_non_data(), reg_pio_data_in() and reg_pio_data_out().

struct REG_CMD_INFO
{
   unsigned char flg;         // see TRC_FLAG_xxx below
   unsigned char ct;          // see TRC_TYPE_xxx below
   unsigned char cmd;         // command code
   unsigned char fr1;         // feature reg before
   unsigned char sc1;         // sec cnt before
   unsigned char sn1;         // sec num before
   unsigned char cl1;         // cyl low before
   unsigned char ch1;         // cyl high before
   unsigned char dh1;         // device head before
   unsigned char dc1;         // device control before
   unsigned char ec;          // detailed error code
   unsigned char to;          // not zero if time out error
   unsigned char st2;         // status reg after
   unsigned char as2;         // alt status reg after
   unsigned char er2;         // error reg after
   unsigned char sc2;         // sec cnt after
   unsigned char sn2;         // sec num after
   unsigned char cl2;         // cyl low after
   unsigned char ch2;         // cyl high after
   unsigned char dh2;         // device head after
   long totalBytesXfer;       // total bytes transfered
   unsigned int failbits;     // failure bits (ATAPI protocol errors
      #define FAILBIT15 0x8000   // extra interrupts detected
      #define FAILBIT14 0x4000
      #define FAILBIT13 0x2000
      #define FAILBIT12 0x1000
      #define FAILBIT11 0x0800
      #define FAILBIT10 0x0400
      #define FAILBIT9  0x0200
      #define FAILBIT8  0x0100   // SC( CD/IO bits) wrong at end of cmd
      #define FAILBIT7  0x0080   // byte count odd at data packet xfer time
      #define FAILBIT6  0x0040   // byte count wrong at data packet xfer time
      #define FAILBIT5  0x0020   // SC (IO bit) wrong at data packet xfer time
      #define FAILBIT4  0x0010   // SC (CD bit) wrong at data packet xfer time
      #define FAILBIT3  0x0008   // byte count wrong at cmd packet xfer time
      #define FAILBIT2  0x0004   // SC wrong at cmd packet xfer time
      #define FAILBIT1  0x0002   // got interrupt before cmd packet xfer
      #define FAILBIT0  0x0001   // slow setting BSY=1 or DRQ=1 after AO cmd
   long drqPackets;           // number of PIO DRQ packets
} ;

extern struct REG_CMD_INFO reg_cmd_info;

// Configuration data for device 0 and 1
// returned by the reg_config() function.

extern int reg_config_info[2];

#define REG_CONFIG_TYPE_NONE  0
#define REG_CONFIG_TYPE_UNKN  1
#define REG_CONFIG_TYPE_ATA   2
#define REG_CONFIG_TYPE_ATAPI 3

// flag to control the ~110ms delay for ATAPI devices,
// no delay if the flag is zero.

extern int reg_atapi_delay_flag;

// flag to control the slow data transfer option:
// 0 = no slow data transfer
// !0= slow data transfer before this sector

extern unsigned char reg_atapi_reg_fr;
extern unsigned char reg_atapi_reg_sc;
extern unsigned char reg_atapi_reg_sn;
extern unsigned char reg_atapi_reg_dh;

// the values in these variables are placed into the Feature,
// Sector Count, Sector Number and Device/Head register by
// reg_packet() before the A0H command is issued.  reg_packet()
// sets these variables to zero before returning.  These variables
// are initialized to zero.  Only bits 3,2,1,0 of reg_atapi_reg_dh
// are used.

extern int reg_slow_xfer_flag;

// the maximum number of bytes that the reg_packet() function
// will transfer on the next packet command.  the caller
// can set this to the caller's buffer size minus the
// maximum DRQ packet size so that the packet command
// does not overrun the caller's buffer in memory.
// this is set to 32768 at the end of each packet command.

extern long reg_atapi_max_bytes;

// last ATAPI command packet size and data

extern int reg_atapi_cp_size;
extern unsigned char reg_atapi_cp_data[16];

//**************************************************************

// Public functions in ATAIOREG.C

extern int reg_config( void );

extern int reg_reset( int skipFlag, int devRtrn );

extern int reg_non_data_lba( int dev, int cmd,
                             int fr, int sc,
                             long lba );

extern int reg_non_data( int dev, int cmd,
                           int fr, int sc,
                           unsigned int cyl, int head, int sect );

extern int reg_pio_data_in_lba( int dev, int cmd,
                                int fr, int sc,
                                long lba,
                                unsigned seg, unsigned off,
                                int numSect, int multiCnt );

extern int reg_pio_data_in( int dev, int cmd,
                            int fr, int sc,
                            unsigned int cyl, int head, int sect,
                            unsigned seg, unsigned off,
                            int numSect, int multiCnt );

extern int reg_pio_data_out_lba( int dev, int cmd,
                                 int fr, int sc,
                                 long lba,
                                 unsigned seg, unsigned off,
                                 int numSect, int multiCnt );

extern int reg_pio_data_out( int dev, int cmd,
                             int fr, int sc,
                             unsigned int cyl, int head, int sect,
                             unsigned seg, unsigned off,
                             int numSect, int multiCnt );

extern int reg_packet( int dev,
                       unsigned int cpbc,
                       unsigned int cpseg, unsigned int cpoff,
                       int dir,
                       long dpbc,
                       unsigned int dpseg, unsigned int dpoff );

//**************************************************************

// Public data in ATAIOTMR.C

extern long tmr_time_out;     // command time out in seconds

//**************************************************************

// Public functions in ATAIOTMR.C

extern long tmr_read_bios_timer( void );

extern void tmr_set_timeout( void );

extern int tmr_chk_timeout( void );

//**************************************************************

// Public functions in ATAIOTRC.C

// command history trace entry types used by reg_cmd_info.flg,
// trc_get_cmd_name(), etc.
#define TRC_FLAG_EMPTY 0
#define TRC_FLAG_SRST  1
#define TRC_FLAG_CMD   2
#define TRC_FLAG_CDB   3

// command types (protocol types) used by reg_cmd_info.ct,
// trc_cht_types(), etc.  this is a bit shift value.
#define TRC_TYPE_ALL    16    // trace all cmd types
#define TRC_TYPE_NONE    0    // don't trace any cmd types
#define TRC_TYPE_ADMAI   1    // ATA DMA In
#define TRC_TYPE_ADMAO   2    // ATA DMA Out
#define TRC_TYPE_AND     3    // ATA PIO Non-Data
#define TRC_TYPE_APDI    4    // ATA PIO Data In
#define TRC_TYPE_APDO    5    // ATA PIO Data Out
#define TRC_TYPE_ASR     6    // ATA Soft Reset
#define TRC_TYPE_PDMAI   7    // ATAPI DMA In
#define TRC_TYPE_PDMAO   8    // ATAPI DMA Out
#define TRC_TYPE_PND     9    // ATAPI PIO Non-Data
#define TRC_TYPE_PPDI   10    // ATAPI PIO Data In
#define TRC_TYPE_PPDO   11    // ATAPI PIO Data Out

extern unsigned char * trc_get_cmd_name( unsigned char flg, unsigned char cc );

extern unsigned char * trc_get_st_bit_name( unsigned char st );

extern unsigned char * trc_get_er_bit_name( unsigned char er );

extern unsigned char * trc_get_err_name( int ec );

extern void trc_err_dump1( void );
extern unsigned char * trc_err_dump2( void );

extern void trc_cht_types( int type );
extern void trc_cht_dump0( void );
extern void trc_cht_dump1( void );
extern unsigned char * trc_cht_dump2( void );

extern void trc_llt_dump0( void );
extern void trc_llt_dump1( void );
extern unsigned char * trc_llt_dump2( void );

// end ataio.h

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -