ultrix.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:1k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  fs/partitions/ultrix.c
  3.  *
  4.  *  Code extracted from drivers/block/genhd.c
  5.  *
  6.  *  Re-organised Jul 1999 Russell King
  7.  */
  8. #include <linux/fs.h>
  9. #include <linux/genhd.h>
  10. #include <linux/kernel.h>
  11. #include <linux/major.h>
  12. #include <linux/blk.h>
  13. #include "check.h"
  14. int ultrix_partition(struct gendisk *hd, struct block_device *bdev,
  15.                             unsigned long first_sector, int first_part_minor)
  16. {
  17. int i;
  18. Sector sect;
  19. unsigned char *data;
  20. struct ultrix_disklabel {
  21. s32 pt_magic; /* magic no. indicating part. info exits */
  22. s32 pt_valid; /* set by driver if pt is current */
  23. struct  pt_info {
  24. s32 pi_nblocks; /* no. of sectors */
  25. u32 pi_blkoff;  /* block offset for start */
  26. } pt_part[8];
  27. } *label;
  28. #define PT_MAGIC 0x032957 /* Partition magic number */
  29. #define PT_VALID 1 /* Indicates if struct is valid */
  30. data = read_dev_sector(bdev, (16384 - sizeof(*label))/512, &sect);
  31. if (!data)
  32. return -1;
  33. label = (struct ultrix_disklabel *)(data + 512 - sizeof(*label));
  34. if (label->pt_magic == PT_MAGIC && label->pt_valid == PT_VALID) {
  35. for (i=0; i<8; i++, first_part_minor++)
  36. if (label->pt_part[i].pi_nblocks)
  37. add_gd_partition(hd, first_part_minor, 
  38.       label->pt_part[i].pi_blkoff,
  39.       label->pt_part[i].pi_nblocks);
  40. put_dev_sector(sect);
  41. printk ("n");
  42. return 1;
  43. } else {
  44. put_dev_sector(sect);
  45. return 0;
  46. }
  47. }