diff options
author | Dale Rahn <drahn@cvs.openbsd.org> | 2001-03-14 08:02:13 +0000 |
---|---|---|
committer | Dale Rahn <drahn@cvs.openbsd.org> | 2001-03-14 08:02:13 +0000 |
commit | 1b02ad742026c364f306e51bf6c0569a1eb9aa20 (patch) | |
tree | 62f6d1d92f4dd934fc2dd42060d9ec9e6a6ec5f0 /sys/arch/powerpc/include | |
parent | 4f84f4d31232004b002699c4918bd5dfede599f9 (diff) |
Support shared disks with MacOS. This is only one of the pieces of
the task. The kernel now support a BSD disklabel located inside
a HFS(DPME) partition of type "OpenBSD". It will use this disklabel
for OpenBSD. If no OpenBSD DPME partition exists it will fake HFS
partitions for apple HFS partitions of the disk.
The tool to change the DPME partition type to OpenBSD and booting
support in ofwboot are not yet ready.
Diffstat (limited to 'sys/arch/powerpc/include')
-rw-r--r-- | sys/arch/powerpc/include/disklabel.h | 68 |
1 files changed, 61 insertions, 7 deletions
diff --git a/sys/arch/powerpc/include/disklabel.h b/sys/arch/powerpc/include/disklabel.h index 1e76f9d9725..c1db665f39a 100644 --- a/sys/arch/powerpc/include/disklabel.h +++ b/sys/arch/powerpc/include/disklabel.h @@ -1,4 +1,4 @@ -/* $OpenBSD: disklabel.h,v 1.13 1999/12/04 03:35:57 deraadt Exp $ */ +/* $OpenBSD: disklabel.h,v 1.14 2001/03/14 08:02:11 drahn Exp $ */ /* * Copyright (c) 1994 Christopher G. Demetriou @@ -79,12 +79,6 @@ struct dos_partition { #define DOSPTYP_NETBSD 0xa9 /* NetBSD partition type */ #include <sys/dkbad.h> -struct cpu_disklabel { - struct dos_partition dosparts[NDOSPART]; - struct dkbad bad; -}; - -#define DKBAD(x) ((x)->bad) /* Isolate the relevant bits to get sector and cylinder. */ #define DPSECT(s) ((s) & 0x3f) @@ -110,4 +104,64 @@ get_le(p) return x; } +/* HFS/DPME */ + +/* partition map structure from Inside Macintosh: Devices, SCSI Manager + * pp. 13-14. The partition map always begins on physical block 1. + * + * With the exception of block 0, all blocks on the disk must belong to + * exactly one partition. The partition map itself belongs to a partition + * of type `APPLE_PARTITION_MAP', and is not limited in size by anything + * other than available disk space. The partition map is not necessarily + * the first partition listed. + */ +struct part_map_entry { +#define PART_ENTRY_MAGIC 0x504d + u_int16_t pmSig; /* partition signature */ + u_int16_t pmSigPad; /* (reserved) */ + u_int32_t pmMapBlkCnt; /* number of blocks in partition map */ + u_int32_t pmPyPartStart; /* first physical block of partition */ + u_int32_t pmPartBlkCnt; /* number of blocks in partition */ + char pmPartName[32]; /* partition name */ + char pmPartType[32]; /* partition type */ + u_int32_t pmLgDataStart; /* first logical block of data area */ + u_int32_t pmDataCnt; /* number of blocks in data area */ + u_int32_t pmPartStatus; /* partition status information */ + u_int32_t pmLgBootStart; /* first logical block of boot code */ + u_int32_t pmBootSize; /* size of boot code, in bytes */ + u_int32_t pmBootLoad; /* boot code load address */ + u_int32_t pmBootLoad2; /* (reserved) */ + u_int32_t pmBootEntry; /* boot code entry point */ + u_int32_t pmBootEntry2; /* (reserved) */ + u_int32_t pmBootCksum; /* boot code checksum */ + char pmProcessor[16]; /* processor type (e.g. "68020") */ + u_int8_t pmBootArgs[128]; /* A/UX boot arguments */ + /* we do not index the disk image as an array, + * leave out the on disk padding + */ +#if 0 + u_int8_t pad[248]; /* pad to end of block */ +#endif +}; + +#define PART_TYPE_DRIVER "APPLE_DRIVER" +#define PART_TYPE_DRIVER43 "APPLE_DRIVER43" +#define PART_TYPE_DRIVERATA "APPLE_DRIVER_ATA" +#define PART_TYPE_DRIVERIOKIT "APPLE_DRIVER_IOKIT" +#define PART_TYPE_FWDRIVER "APPLE_FWDRIVER" +#define PART_TYPE_FWB_COMPONENT "FWB DRIVER COMPONENTS" +#define PART_TYPE_FREE "APPLE_FREE" +#define PART_TYPE_MAC "APPLE_HFS" +#define PART_TYPE_OPENBSD "OPENBSD" + + +struct cpu_disklabel { + struct dos_partition dosparts[NDOSPART]; + /* only store first entry and openbsd partition */ + struct part_map_entry macparts[2]; + struct dkbad bad; +}; + +#define DKBAD(x) ((x)->bad) + #endif /* _MACHINE_DISKLABEL_H_ */ |