1 /* $NetBSD: README.md_defs,v 1.8 2023/01/06 15:05:52 martin Exp $ */ 2 3 The following is trying to document the most important machine dependent 4 defines used in the sysinst code. 5 6 7 If HAVE_GPT is true, the MD code may limit the space used for the 8 GPT at the beginning of the disk to allow e.g. a bootloader 9 being added after it (see evbarm on allwinner SoCs, u-boot is 10 copied at 8k into the image). 11 12 /* Size limit for the initial GPT part, in bytes */ 13 #define MD_GPT_INITIAL_SIZE (8*1024) 14 15 16 The default installation description is created as a static array using 17 lots of conditionals. It may be overridden / replaced in the MD code 18 (see below), an example for that is arch/i386/md.c when we have been 19 booted from UEFI firmware. 20 21 Name Value / example Description 22 PART_BOOT (8*MEG) (undefined) if defined, a boot partition 23 of this size (in bytes, rounded) 24 will be part of the default partition 25 suggestions. Must be compile time 26 const! Use MD_PART_DEFAULTS if 27 runtime adjustment is needed. 28 PART_BOOT_MOUNT "/boot" (undefined) Add boot partition to fstab for 29 this mount point 30 PART_BOOT_TYPE FS_BSDFS Kind of filesystem used 31 PART_BOOT_SUBT MBR_PTYPE_FAT12 File system specific sub type 32 33 34 The boot partition is always inserted at the front of the suggested default 35 partitions, to cope with firmwares that may not be able to load from the 36 whole disk. 37 38 If multiple boot partitions are required (see ofppc, where various schemes 39 are supported, depending on exact model), the variables above can all be 40 repeated with _BOOT1_ or _BOOT2_ name instead of _BOOT_. 41 42 43 ATTENTION: 44 PART_BOOT is in BYTE (not MB), while most other sizes 45 (DEFROOTSIZE, DEFSWAP, ...) are in MB! 46 47 48 The following macros provide optional MD hooks: 49 50 MD_PART_DEFAULTS may be undefined 51 52 used like: 53 54 void MD_PART_DEFAULTS(struct pm_dev*, struct part_usage_info*, 55 size_t num_usage_infos), 56 57 Called before any of the partition usage defaults is ever used, can be used 58 to adjust e.g. partition sizes to actual system requirements (align boot 59 partition with cylindersize), or (since it is a macro and all params are 60 by references) to completely swap the defaults (e.g. EFI vs. biosboot). 61 If swapping, make sure allocation and num_usage_infos stays consistent, 62 old allocation is done by calloc(3), use free(3) to release. 63 64 65 MD_NEED_BOOTBLOCK may be undefined 66 67 used like: 68 69 bool MD_NEED_BOOTBLOCK(struct install_partition_desc *install) 70 71 returns true if this setup needs boot blocks. Used for example on x86 72 when UEFI installs do not need any bootblocks, but BIOS ones do. 73 74 MD_MAY_SWAP_TO may be undefined 75 76 used like: 77 78 bool MD_MAY_SWAP_TO(const char *disk_name) 79 80 returns true if the disk is usable as a swap device. Typical implementation 81 in utils.c:may_swap_if_not_sdmmc. 82 83 MD_SET_EXTRACT_FINALIZE may be undefined 84 85 used like: 86 87 int MD_SET_EXTRACT_FINALIZE(int update) 88 89 extracts any additional parts of the distribution. Returns an error code 90 if something fails. 91 92 93 HAVE_PLAIN_DISKLABEL_BOOT may be undefined, only used on architectures 94 that have MBR as primary with disklabel as 95 secondary partitioning scheme (RAW_PART == 3) 96 97 used like: 98 99 bool HAVE_PLAIN_DISKLABEL_BOOT(const char *disk) 100 101 returns true if the disk could be made bootable with only a disklabel 102 (and no MBR). 103 104 105 DISKLABEL_NO_ONDISK_VERIFY usually undefined 106 107 If defined, do not verify the presence of on-disk disklabels before 108 offering the disklabel partitioning scheme. This allows ports to use 109 kernel translation for the disklabel ioctls (e.g. x68k uses Human68k 110 partitions this way). 111 112 113 HAVE_GPT_BOOT defined if the architecture can boot from GPT 114 115 HAVE_EFI_BOOT defined if the architecture may be able 116 to boot from an EFI partition 117 118 NO_DISKLABEL_BOOT defined if the architecture can NOT boot 119 from a disklabel partitioned disk 120 121 MD_DISKLABEL_PART_INDEX_CHECK usually undefined 122 123 if defined evaluates to a boolean attribute 124 which is passed a struct disklabel, an integer 125 index and a const struct disk_part_info*. 126 The result qualifies the given new partition 127 to take the disklabel l_partition entry 128 with the given index. Used for example 129 in luna68k to move the FFSv1 boot partition 130 (which would otherwise end up as partition 'a') 131 to a partition past RAW_PART (so 'd' on luna68k) 132