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

📄 osi-blk.c

📁 BIOS Open Platform!
💻 C
字号:
/*  *   Creation Date: <2003/12/07 19:08:33 samuel> *   Time-stamp: <2004/01/07 19:38:36 samuel> *    *	<osi-blk.c> *	 *	OSI-block interface *    *   Copyright (C) 2003, 2004 Samuel Rydh (samuel@ibrium.se) *    *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   version 2 *    */#include "openbios/config.h"#include "openbios/bindings.h"#include "mol/mol.h"#include "osi_calls.h"typedef struct {	int	unit;	int	channel;} osiblk_data_t;DECLARE_NODE( osiblk, INSTALL_OPEN, sizeof(osiblk_data_t),	      "/pci/pci-bridge/mol-blk/disk", "/mol/mol-blk" );static voidosiblk_open( osiblk_data_t *pb ){	phandle_t ph;	fword("my-unit");	pb->unit = POP();	pb->channel = 0;	/* FIXME */	selfword("open-deblocker");	/* interpose disk-label */	ph = find_dev("/packages/disk-label");	fword("my-args");	PUSH_ph( ph );	fword("interpose");	/* printk("osi-blk: open %d\n", pb->unit ); */	PUSH( -1 );}static voidosiblk_close( osiblk_data_t *pb ){	selfword("close-deblocker");}/* ( buf blk nblks -- actual ) */static voidosiblk_read_blocks( osiblk_data_t *pb ){	int i, n = POP();	int blk = POP();	char *dest = (char*)POP();		/* printk("osiblk_read_blocks %x block=%d n=%d\n", (int)dest, blk, n ); */	for( i=0; i<n; ) {		char buf[4096];		int m = MIN( n-i, sizeof(buf)/512 );		if( OSI_ABlkSyncRead(pb->channel, pb->unit, blk+i, (int)buf, m*512) < 0 ) {			printk("SyncRead: error\n");			RET(0);		}		memcpy( dest, buf, m * 512 );		i += m;		dest += m * 512;	}	PUSH( n );}/* ( -- bs ) */static voidosiblk_block_size( osiblk_data_t *pb ){	PUSH( 512 );}/* ( -- maxbytes ) */static voidosiblk_max_transfer( osiblk_data_t *pb ){	PUSH( 1024*1024 );}static voidosiblk_initialize( osiblk_data_t *pb ){	fword("is-deblocker");}NODE_METHODS( osiblk ) = {	{ NULL,			osiblk_initialize	},	{ "open",		osiblk_open		},	{ "close",		osiblk_close		},	{ "read-blocks",	osiblk_read_blocks	},	{ "block-size",		osiblk_block_size	},	{ "max-transfer",	osiblk_max_transfer	},};voidosiblk_init( void ){	REGISTER_NODE( osiblk );}

⌨️ 快捷键说明

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