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

📄 raw_rwblock.c

📁 阿基米德操作系统的源代码
💻 C
字号:
///////////////////////////////////////////////////////////////////////////////
#include "general.h"
#include "sti_cli.h"

#include "hd_info_struct.h"
#include "dir_entry.h"
#include "msdos_dir_entry.h"
#include "d_inode.h"
#include "m_inode.h"
#include "buffer_head.h"
#include "fat_cache.h"
#include "file.h"
#include "hd_request_struct.h"
#include "super_block.h"

#include "common_head.h"

struct buffer_head * raw_rblock(unsigned int temp_dev,unsigned int temp_cyl,
								unsigned int temp_head,unsigned int temp_sec)
{
	struct buffer_head		 *	bh;
	struct hd_request_struct *	temp_req;
	///////////////////////////////////////////////////////
	///////////////////////////////////////////////////////
	cli();
	bh = free_list;
	bh->b_prev_free->b_next_free = bh->b_next_free;
	bh->b_next_free->b_prev_free = bh->b_prev_free;
	free_list = bh->b_next_free;
	if (free_list == bh)
		free_list = NULL;
	sti();
	bh->b_prev_free = bh->b_next_free = bh;

	//bh->b_dev		= dev;
	//bh->b_blocknr	= block;
	bh->b_uptodate	= 0;
	bh->b_dirt		= 0;
	bh->b_count		= 1;
	bh->b_lock		= 1;
	///////////////////////////////////////////////////////
	///////////////////////////////////////////////////////
	temp_req			= hd_request;

	temp_req->hd		= temp_dev;
	temp_req->block		= 0;
	temp_req->cyl		= temp_cyl;
	temp_req->head		= temp_head;
	temp_req->sector	= temp_sec + 1;	
	temp_req->nsector	= 2;
	temp_req->cmd		= WIN_READ;
	temp_req->errors	= 0;
	temp_req->bh		= bh;
	temp_req->next		= NULL;
	///////////////////////////////////////////////////////
	///////////////////////////////////////////////////////
	cli();
	start_request_h = temp_req;
	end_request_h	= temp_req;		
	sti();
	do_request_1();	
	///////////////////////////////////////////////////////
	///////////////////////////////////////////////////////
	while(bh->b_lock);

	bh->b_count = 0;
	cli();
	bh->b_next_free = free_list;	
	bh->b_prev_free = free_list->b_prev_free;
	free_list->b_prev_free->b_next_free = bh;
	free_list->b_prev_free = bh;
	free_list = bh;
	sti();
	///////////////////////////////////////////////////////
	///////////////////////////////////////////////////////	if (bh->b_uptodate)
		return bh;
	else
		return NULL;
}
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
int raw_wblock(struct buffer_head * temp_bh,unsigned int temp_dev,
			   unsigned int temp_cyl,unsigned int temp_head,
			   unsigned int temp_sec)
{
	struct hd_request_struct *	temp_req;
	///////////////////////////////////////////////////////
	///////////////////////////////////////////////////////

	//temp_bh->b_dev	= dev;
	//temp_bh->b_blocknr= block;
	temp_bh->b_uptodate	= 1;
	temp_bh->b_dirt		= 1;
	temp_bh->b_count	= 1;
	temp_bh->b_lock		= 1;
	///////////////////////////////////////////////////////
	///////////////////////////////////////////////////////
	temp_req			= hd_request;

	temp_req->hd		= temp_dev;
	temp_req->block		= 0;
	temp_req->cyl		= temp_cyl;
	temp_req->head		= temp_head;
	temp_req->sector	= temp_sec + 1;	
	temp_req->nsector	= 2;
	temp_req->cmd		= WIN_WRITE;
	temp_req->errors	= 0;
	temp_req->bh		= temp_bh;
	temp_req->next		= NULL;
	///////////////////////////////////////////////////////
	///////////////////////////////////////////////////////
	cli();
	start_request_h = temp_req;
	end_request_h	= temp_req;		
	sti();
	do_request_1();	
	///////////////////////////////////////////////////////
	///////////////////////////////////////////////////////
	while(temp_bh->b_lock);

	temp_bh->b_count = 0;

	if (temp_bh->b_dirt)
		return 0;
	else
		return 1;
}

//////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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