📄 ataio.h
字号:
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 + -