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

📄 ibm.c

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 C
字号:
/* * File...........: linux/fs/partitions/ibm.c * Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com> * Bugreports.to..: <Linux390@de.ibm.com> * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2000 */#include <linux/fs.h>#include <linux/genhd.h>#include <linux/kernel.h>#include <linux/major.h>#include <linux/string.h>#include <linux/blk.h>#include <asm/ebcdic.h>#include "../../drivers/s390/block/dasd_types.h"typedef enum {  ibm_partition_none = 0,  ibm_partition_lnx1 = 1,  ibm_partition_vol1 = 3,  ibm_partition_cms1 = 4} ibm_partition_t;static ibm_partition_tget_partition_type ( char * type ){  static char lnx[5]="LNX1";  static char vol[5]="VOL1";  static char cms[5]="CMS1";  if ( ! strncmp ( lnx, "LNX1",4 ) ) {    ASCEBC(lnx,4);    ASCEBC(vol,4);    ASCEBC(cms,4);  }  if ( ! strncmp (type,lnx,4) ||        ! strncmp (type,"LNX1",4) )    return ibm_partition_lnx1;  if ( ! strncmp (type,vol,4) )    return ibm_partition_vol1;  if ( ! strncmp (type,cms,4) )    return ibm_partition_cms1;  return ibm_partition_none;}voidibm_partition (struct gendisk *hd, kdev_t dev){	struct buffer_head *bh;	ibm_partition_t partition_type;	int di = MINOR(dev) >> PARTN_BITS;	char type[5] = {0,};	char name[7] = {0,};	if ( bh = bread( dev, 			 dasd_info[di]->sizes.label_block, 			 get_ptable_blocksize(dev) ) ) {		strncpy ( type,bh -> b_data, 4);		strncpy ( name,bh -> b_data + 4, 6);        } else {		return;	}	if ( (*(char *)bh -> b_data) & 0x80 ) {		EBCASC(name,6);	}	switch ( partition_type = get_partition_type(type) ) {	case ibm_partition_lnx1:		printk ( "(LNX1)/%6s:",name);		add_gd_partition( hd, MINOR(dev) + 1, 				  (dasd_info [di]->sizes.label_block + 1) <<				  dasd_info [di]->sizes.s2b_shift,				  (dasd_info [di]->sizes.blocks -				   dasd_info [di]->sizes.label_block - 1) <<				  dasd_info [di]->sizes.s2b_shift );		break;	case ibm_partition_vol1:		printk ( "(VOL1)/%6s:",name);		break;	case ibm_partition_cms1:		printk ( "(CMS1)/%6s:",name);		if (* (((long *)bh->b_data) + 13) == 0) {		  /* disk holds a CMS filesystem */		  add_gd_partition( hd, MINOR(dev) + 1, 				    (dasd_info [di]->sizes.label_block + 1) <<				    dasd_info [di]->sizes.s2b_shift,				    (dasd_info [di]->sizes.blocks -				     dasd_info [di]->sizes.label_block) <<				    dasd_info [di]->sizes.s2b_shift );		  printk ("(CMS)");		} else {		  /* disk is reserved minidisk */		  int offset = (*(((long *)bh->b_data) + 13));		  int size = (*(((long *)bh->b_data) + 7)) - 1 - 		    (*(((long *)bh->b_data) + 13)) *		    ((*(((long *)bh->b_data) + 3)) >> 9);		  add_gd_partition( hd, MINOR(dev) + 1, 				    offset << dasd_info [di]->sizes.s2b_shift,				    size << dasd_info [di]->sizes.s2b_shift );		  printk ("(MDSK)");		}		break;	case ibm_partition_none:		printk ( "(nonl)/      :");/*		printk ( "%d %d %d ", MINOR(dev) + 1, 			 (dasd_info [di]->sizes.label_block + 1) <<			 dasd_info [di]->sizes.s2b_shift,			 (dasd_info [di]->sizes.blocks -			  dasd_info [di]->sizes.label_block - 1) <<			 dasd_info [di]->sizes.s2b_shift );*/		add_gd_partition( hd, MINOR(dev) + 1, 				  (dasd_info [di]->sizes.label_block + 1) <<				  dasd_info [di]->sizes.s2b_shift,				  (dasd_info [di]->sizes.blocks -				   dasd_info [di]->sizes.label_block - 1) <<				  dasd_info [di]->sizes.s2b_shift );		break;	}	printk ( "\n" );	bforget(bh);}

⌨️ 快捷键说明

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