summaryrefslogtreecommitdiffstats
path: root/fdisks/fdisksgilabel.h
diff options
context:
space:
mode:
Diffstat (limited to 'fdisks/fdisksgilabel.h')
-rw-r--r--fdisks/fdisksgilabel.h137
1 files changed, 137 insertions, 0 deletions
diff --git a/fdisks/fdisksgilabel.h b/fdisks/fdisksgilabel.h
new file mode 100644
index 000000000..0c76edb91
--- /dev/null
+++ b/fdisks/fdisksgilabel.h
@@ -0,0 +1,137 @@
+#ifndef FDISK_SGI_LABEL_H
+#define FDISK_SGI_LABEL_H
+
+#include <stdint.h>
+
+#include "bitops.h"
+
+/*
+ * Copyright (C) Andreas Neuper, Sep 1998.
+ * This file may be modified and redistributed under
+ * the terms of the GNU Public License.
+ */
+
+struct device_parameter { /* 48 bytes */
+ unsigned char skew;
+ unsigned char gap1;
+ unsigned char gap2;
+ unsigned char sparecyl;
+ unsigned short pcylcount;
+ unsigned short head_vol0;
+ unsigned short ntrks; /* tracks in cyl 0 or vol 0 */
+ unsigned char cmd_tag_queue_depth;
+ unsigned char unused0;
+ unsigned short unused1;
+ unsigned short nsect; /* sectors/tracks in cyl 0 or vol 0 */
+ unsigned short bytes;
+ unsigned short ilfact;
+ unsigned int flags; /* controller flags */
+ unsigned int datarate;
+ unsigned int retries_on_error;
+ unsigned int ms_per_word;
+ unsigned short xylogics_gap1;
+ unsigned short xylogics_syncdelay;
+ unsigned short xylogics_readdelay;
+ unsigned short xylogics_gap2;
+ unsigned short xylogics_readgate;
+ unsigned short xylogics_writecont;
+};
+
+#define SGI_VOLHDR 0x00
+/* 1 and 2 were used for drive types no longer supported by SGI */
+#define SGI_SWAP 0x03
+/* 4 and 5 were for filesystem types SGI haven't ever supported on MIPS CPUs */
+#define SGI_VOLUME 0x06
+#define SGI_EFS 0x07
+#define SGI_LVOL 0x08
+#define SGI_RLVOL 0x09
+#define SGI_XFS 0x0a
+#define SGI_XFSLOG 0x0b
+#define SGI_XLV 0x0c
+#define SGI_XVM 0x0d
+#define ENTIRE_DISK SGI_VOLUME
+/*
+ * controller flags
+ */
+#define SECTOR_SLIP 0x01
+#define SECTOR_FWD 0x02
+#define TRACK_FWD 0x04
+#define TRACK_MULTIVOL 0x08
+#define IGNORE_ERRORS 0x10
+#define RESEEK 0x20
+#define CMDTAGQ_ENABLE 0x40
+
+typedef struct {
+ unsigned int magic; /* expect SGI_LABEL_MAGIC */
+ short boot_part; /* active boot partition */
+ short swap_part; /* active swap partition */
+ unsigned char boot_file[16]; /* name of the bootfile */
+ struct device_parameter devparam; /* 1 * 48 bytes */
+ struct volume_directory { /* 15 * 16 bytes */
+ unsigned char vol_file_name[8]; /* a character array */
+ unsigned int vol_file_start; /* number of logical block */
+ unsigned int vol_file_size; /* number of bytes */
+ } directory[15];
+ struct sgi_partition { /* 16 * 12 bytes */
+ unsigned int num_sectors; /* number of blocks */
+ unsigned int start_sector; /* must be cylinder aligned */
+ unsigned int id;
+ } partitions[16];
+ unsigned int csum;
+ unsigned int fillbytes;
+} sgi_partition;
+
+typedef struct {
+ unsigned int magic; /* looks like a magic number */
+ unsigned int a2;
+ unsigned int a3;
+ unsigned int a4;
+ unsigned int b1;
+ unsigned short b2;
+ unsigned short b3;
+ unsigned int c[16];
+ unsigned short d[3];
+ unsigned char scsi_string[50];
+ unsigned char serial[137];
+ unsigned short check1816;
+ unsigned char installer[225];
+} sgiinfo;
+
+#define SGI_LABEL_MAGIC 0x0be5a941
+#define SGI_LABEL_MAGIC_SWAPPED 0x41a9e50b
+#define SGI_INFO_MAGIC 0x00072959
+#define SGI_INFO_MAGIC_SWAPPED 0x59290700
+
+#define SSWAP16(x) (other_endian ? swab16(x) : (uint16_t)(x))
+#define SSWAP32(x) (other_endian ? swab32(x) : (uint32_t)(x))
+
+/* fdisk.c */
+#define sgilabel ((sgi_partition *)cxt->mbr)
+#define sgiparam (sgilabel->devparam)
+
+/* fdisksgilabel.c */
+extern struct systypes sgi_sys_types[];
+extern int check_sgi_label(struct fdisk_context *cxt);
+extern void sgi_list_table( struct fdisk_context *cxt, int xtra );
+extern int sgi_change_sysid(struct fdisk_context *cxt, int i, int sys);
+extern unsigned int sgi_get_start_sector(struct fdisk_context *cxt, int i );
+extern unsigned int sgi_get_num_sectors(struct fdisk_context *cxt, int i );
+extern int sgi_get_sysid(struct fdisk_context *cxt, int i );
+extern void sgi_delete_partition( struct fdisk_context *cxt, int i );
+extern void sgi_add_partition( struct fdisk_context *cxt, int n, int sys );
+extern void create_sgilabel( struct fdisk_context *cxt );
+extern void create_sgiinfo(struct fdisk_context *cxt);
+extern int verify_sgi(struct fdisk_context *cxt, int verbose );
+extern void sgi_write_table( struct fdisk_context *cxt );
+extern void sgi_set_ilfact( void );
+extern void sgi_set_rspeed( void );
+extern void sgi_set_pcylcount( void );
+extern void sgi_set_xcyl( void );
+extern void sgi_set_ncyl( void );
+extern void sgi_set_bootpartition(struct fdisk_context *cxt, int i );
+extern void sgi_set_swappartition(struct fdisk_context *cxt, int i );
+extern int sgi_get_bootpartition(struct fdisk_context *cxt);
+extern int sgi_get_swappartition(struct fdisk_context *cxt);
+extern void sgi_set_bootfile(struct fdisk_context *cxt);
+
+#endif /* FDISK_SGI_LABEL_H */