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

📄 ide.h

📁 Jazmyn is a 32-bit, protected mode, multitasking OS which runs on i386 & above CPU`s. Its complete
💻 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 + -