📄 raw_rwblock.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 + -