📄 ide.h
字号:
#ifndef _IDE_H
#define _IDE_H
#include "driver.h"
#include "drvreq.h"
#define IDE_DR 0x1F0 //data register 16-bits r/w
#define IDE_ER 0x1F1 //error register r
#define IDE_PRECOMP 0x1F1 //precompensation w
#define IDE_SECCNT 0x1F2 //sector count r/w
#define IDE_SECNUM 0x1F3 //sector number r/w
#define IDE_CYLLSB 0x1F4 //cylinder LSB r/w
#define IDE_CYLMSB 0x1F5 //cylinder MSB r/w
#define IDE_DRHD 0x1F6 //drive/head r/w
#define IDE_SR 0x1F7 //status register r
#define IDE_CR 0x1F7 //command register w
#define IDE_ASR 0x3F6 //alternate status register r
#define IDE_DOR 0x3F6 //digital output register w
#define IDE_DA 0x3F7 //drive address
#define ERR 0x01
#define INDEX 0x02
#define ECC 0x04
#define DATA 0x08
#define SEEK 0x10
#define WRERR 0x20
#define READY 0x40
#define BUSY 0x80
#define MAX_LOG_SEC 255
#define IDE_READ 0x20
#define IDE_WRITE 0x30
#define LBABIT 0x100
typedef union
{
unsigned l :32;
struct
{
unsigned ll :8;
unsigned lh :8;
unsigned hl :8;
unsigned hh :8;
}b;
}long2byte;
typedef struct
{
WORD configuration; //0
WORD cyl; //1
WORD res1; //2
WORD heads; //3
WORD u_bpt; //4
WORD u_bps; //5
WORD spt; //6
WORD res2[3]; //7-9
WORD serialnr[10]; //10-19
WORD buffer_type; //20
WORD bufsz; //21
WORD ECC_bytes; //22
WORD ctrl_id[4]; //23-26
WORD modelnr[20]; //27-46
WORD secbwint; //47
WORD io_32bit; //48
WORD dma_lba; //49
WORD res3; //50
WORD pio_time; //51
WORD dma_time; //52
WORD res4; //53
WORD log_cyl; //54
WORD log_heads; //55
WORD log_spt; //56
DWORD log_bps; //57-58
WORD secbw2int; //59
DWORD lba_capacity; //60-61
WORD single_dma; //62
WORD multiple_dma; //63
WORD res5[64]; //64-127
WORD man[32]; //128-159
WORD res6[96]; //160-255
}drive_id;
class ide : public disk_driver
{
private:
drive_id d_id[2];
int num_drives;
int no_media;
public:
static __queue<hdreq> hdr_queue;
static int serviced;
ide(char *name,int type);
~ide();
int get_num_drives();
int get_drive_param(byte drive,drive_id &id);
void service(int opcode,uint start,uint num,void *buf,int dev,int *fin);
int issue_rw_req(hdreq &r);
void rw_data(void *buf,unsigned int lcount,int dev,int opcode);
int waitdata();
};
void service_req();
void ide_handler();
int ide_main(void *arg);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -