📄 ataio.h
字号:
long bufSize );
extern int dma_pci_chs( int dev, int cmd,
unsigned int fr, unsigned int sc,
unsigned int cyl, unsigned int head, unsigned int sect,
unsigned int seg, unsigned int off,
long numSect );
extern int dma_pci_lba28( int dev, int cmd,
unsigned int fr, unsigned int sc,
unsigned long lba,
unsigned int seg, unsigned int off,
long numSect );
extern int dma_pci_lba48( int dev, int cmd,
unsigned int fr, unsigned int sc,
unsigned long lbahi, unsigned long lbalo,
unsigned int seg, unsigned int off,
long numSect );
extern int dma_pci_packet( int dev,
unsigned int cpbc,
unsigned int cpseg, unsigned int cpoff,
int dir,
long dpbc,
unsigned int dpseg, unsigned int dpoff,
unsigned long lba );
//**************************************************************
//
// Public data in ATAIOPIO.C
//
//**************************************************************
extern unsigned int pio_base_addr1;
extern unsigned int pio_base_addr2;
extern unsigned int pio_memory_seg;
extern int pio_memory_dt_opt;
#define PIO_MEMORY_DT_OPT0 0 // use Data reg at offset 0H
#define PIO_MEMORY_DT_OPT8 1 // use Data reg at offset 8H
#define PIO_MEMORY_DT_OPTB 2 // use Data reg at offsets 400-7ffH
#define PIO_MEMORY_DT_OPTR 3 // randomly select these options
extern unsigned int pio_bmcr_base_addr;
extern unsigned int pio_reg_addrs[10];
extern unsigned char pio_last_write[10];
extern unsigned char pio_last_read[10];
extern int pio_xfer_width;
//**************************************************************
//
// Public functions in ATAIOPIO.C
//
//**************************************************************
// configuration functions
extern void pio_set_iobase_addr( unsigned int base1,
unsigned int base2,
unsigned int base3 );
extern void pio_set_memory_addr( unsigned int seg );
// normal register read/write functions
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 );
// Normal PIO DRQ block transfer functions. These functions
// handle both PCMCIA memory mode and all I/O mode transfers.
extern void pio_drq_block_in( unsigned int addrDataReg,
unsigned int bufSeg, unsigned int bufOff,
long wordCnt );
extern void pio_drq_block_out( unsigned int addrDataReg,
unsigned int bufSeg, unsigned int bufOff,
long wordCnt );
// These functions can be called directly but are normally
// called by the pio_drq_block_in() and pio_drq_block_out()
// functions. These functions handle only I/O mode transfers.
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,
long wordCnt );
extern void pio_rep_outword( unsigned int addrDataReg,
unsigned int bufSeg, unsigned int bufOff,
long wordCnt );
extern void pio_rep_indword( unsigned int addrDataReg,
unsigned int bufSeg, unsigned int bufOff,
long dwordCnt );
extern void pio_rep_outdword( unsigned int addrDataReg,
unsigned int bufSeg, unsigned int bufOff,
long dwordCnt );
//**************************************************************
//
// Public data in ATAIOREG.C
//
//**************************************************************
// last ATAPI command packet size and data
extern int reg_atapi_cp_size;
extern unsigned char reg_atapi_cp_data[16];
// flag to control the ~110ms delay for ATAPI devices,
// no delay if the flag is zero.
extern int reg_atapi_delay_flag;
// 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 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;
extern long reg_buffer_size;
// Extended error information returned by
// reg_reset(), reg_non_data_*(), reg_pio_data_in_*(),
// reg_pio_data_out_*(), reg_packet(), dma_isa_*()
// and dma_pci_*() functions.
struct REG_CMD_INFO
{
// entry type, flag and command code
unsigned char flg; // see TRC_FLAG_xxx in ataio.h
unsigned char ct; // see TRC_TYPE_xxx in ataio.h
unsigned char cmd; // command code
// before regs
unsigned int fr1; // feature (8 or 16 bits)
unsigned int sc1; // sec cnt (8 or 16 bits)
unsigned char sn1; // sec num
unsigned char cl1; // cyl low
unsigned char ch1; // cyl high
unsigned char dh1; // device head
unsigned char dc1; // device control
// after regs
unsigned char st2; // status reg
unsigned char as2; // alt status reg
unsigned char er2; // error reg
unsigned int sc2; // sec cnt (8 or 16 bits)
unsigned char sn2; // sec num
unsigned char cl2; // cyl low
unsigned char ch2; // cyl high
unsigned char dh2; // device head
// driver error codes
unsigned char ec; // detailed error code
unsigned char to; // not zero if time out error
// additional result info
long totalBytesXfer; // total bytes transfered
long drqPackets; // number of PIO DRQ packets
long drqPacketSize; // number of bytes in current DRQ block
unsigned int failbits; // failure bits (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
// sector count, multiple count, and CHS/LBA info
long ns; // number of sectors (sector count)
int mc; // multiple count
unsigned char lbaSize; // size of LBA used
#define LBACHS 0 // last command used CHS
#define LBA28 28 // last command used 28-bit LBA
#define LBA32 32 // last command used 32-bit LBA (Packet)
#define LBA48 48 // last command used 48-bit LBA
#define LBA64 64 // future use?
unsigned long lbaLow1; // lower 32-bits of LBA before
unsigned long lbaHigh1; // upper 32-bits of LBA before
unsigned long lbaLow2; // lower 32-bits of LBA after
unsigned long lbaHigh2; // upper 32-bits of LBA after
} ;
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 slow data transfer option:
// 0 = no slow data transfer
// !0= slow data transfer before this DRQ packet
extern long reg_slow_xfer_flag;
// flag bits for 'incompatible' controllers and devices
extern int reg_incompat_flags; // see #defines...
#define REG_INCOMPAT_DMA_DELAY 0x0001 // set to 1 for delay before
// and after stopping the
// DMA engine
#define REG_INCOMPAT_DMA_POLL 0x0002 // set to 1 for no polling
// of Alt Status during
// DMA transfers
//**************************************************************
//
// Public functions in ATAIOREG.C
//
//**************************************************************
// config and reset funcitons
extern int reg_config( void );
extern int reg_reset( int skipFlag, int devRtrn );
// ATA Non-Data command funnctions (for CHS, LBA28 and LBA48)
extern int reg_non_data_chs( int dev, int cmd,
unsigned int fr, unsigned int sc,
unsigned int cyl, unsigned int head, unsigned int sect );
extern int reg_non_data_lba28( int dev, int cmd,
unsigned int fr, unsigned int sc,
unsigned long lba );
extern int reg_non_data_lba48( int dev, int cmd,
unsigned int fr, unsigned int sc,
unsigned long lbahi, unsigned long lbalo );
// PIO Data In/Out data transfer call back function
extern void ( * reg_drq_block_call_back ) ( struct REG_CMD_INFO * );
// ATA PIO Data In command functions (for CHS, LBA28 and LBA48)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -