opnsense-src/sys/boot/common
Toomas Soome c12dbfe608 loader: Implement disk_ioctl() to support DIOCGSECTORSIZE and DIOCGMEDIASIZE.
Need interface to extract information about disk abstraction,
to read disk or partition size depending on the provided argument
and adjust disk size based on information in partition table.

The disk handle from disk_open() has d_offset field to point to
partition start. So we can use this fact to return either whole disk
size or partition size. For this we only need to record partition size
we get from disk_open() anyhow.

In addition, this will also make it possible to adjust the disk media size
based on information from partition table. The problem with disk size is
about some BIOS systems reporting bogus disk size for 2+TB disks, but
since such disks are using GPT partitioning, and GPT does have information
about disk size (alternate LBA + 1), we can use this fact to record disk
size based on partition table.

This patch does exactly this: implements DIOCGSECTORSIZE and DIOCGMEDIASIZE
ioctl, and DIOCGMEDIASIZE will report either disk media size or partition size.

Adds ptable_getsize() call to read partition size in bytes from ptable pointer.
Updates disk_open() to use ptable_getsize() to update mediasize value.

Implements GPT detection function to update ptable size (used by
ptable_getsize()) according to alternate lba (which is location of backup copy
of GPT header table).

Reviewed by:	allanjude
Approved by:	allanjude (mentor)
Differential Revision:	https://reviews.freebsd.org/D8594
2017-02-06 08:26:45 +00:00
..
bcache.c dosfs support in libstand is broken since r298230 2016-12-30 19:06:29 +00:00
boot.c loader is filling fixed length command_errbuf with sprintf() and is trusting 2016-08-20 16:23:19 +00:00
bootstrap.h dosfs support in libstand is broken since r298230 2016-12-30 19:06:29 +00:00
commands.c lsdev device name section headers should be printed by dv_print callback. 2016-11-19 08:54:21 +00:00
console.c Prevent loader.conf load failure due to unknown console entries 2016-01-21 15:27:44 +00:00
crc32.c Remove second consts in r233288 in order to appease C++ compilers. 2012-03-26 18:22:04 +00:00
crc32.h
dev_net.c lsdev device name section headers should be printed by dv_print callback. 2016-11-19 08:54:21 +00:00
dev_net.h Refactor net_getparams() to make it easier to get params from sources other 2015-05-18 15:46:43 +00:00
devopen.c
disk.c loader: Implement disk_ioctl() to support DIOCGSECTORSIZE and DIOCGMEDIASIZE. 2017-02-06 08:26:45 +00:00
disk.h loader: disk/part api needs to use uint64_t offsets 2017-02-01 20:10:56 +00:00
gpt.c Implement GELI (AES-XTS and AES-CBC only) in gptboot and gptzfsboot 2016-03-16 23:12:19 +00:00
gpt.h Implement GELI (AES-XTS and AES-CBC only) in gptboot and gptzfsboot 2016-03-16 23:12:19 +00:00
help.common
install.c Add support for LOADER_RC setting in the pkgfs manifest (defaults to 2016-11-11 17:41:17 +00:00
interp.c The file /boot/boot.conf existed for the 3.0 release (r38764). It was 2016-10-14 16:05:44 +00:00
interp_backslash.c sys/boot/common: use of spaces vs. TAB. 2016-05-12 01:19:11 +00:00
interp_forth.c Reduce boot loader version string duplication 2016-12-18 13:57:23 +00:00
interp_parse.c Improve boot loader quote parsing 2016-07-30 17:53:37 +00:00
isapnp.c sys/boot/common: use of spaces vs. TAB. 2016-05-12 01:19:11 +00:00
isapnp.h Remove pc98 support completely. 2017-01-28 02:22:15 +00:00
load_elf.c Don't set the offset when loading the kernel on the arm loader.efi. The 2016-02-09 09:39:30 +00:00
load_elf32.c Add support for FreeBSD/i386 guests under bhyve. 2014-02-05 04:39:03 +00:00
load_elf32_obj.c Add support for FreeBSD/i386 guests under bhyve. 2014-02-05 04:39:03 +00:00
load_elf64.c
load_elf64_obj.c
load_elf_obj.c Use the ABI-prescribed name for SHT_X86_64_UNWIND in the loader and 2016-04-08 10:23:48 +00:00
loader.8 The file /boot/boot.conf existed for the 3.0 release (r38764). It was 2016-10-14 16:05:44 +00:00
ls.c loader is filling fixed length command_errbuf with sprintf() and is trusting 2016-08-20 16:23:19 +00:00
Makefile Install loader(8) and zfsloader(8) only once 2015-06-19 05:42:24 +00:00
Makefile.depend META MODE: Update dependencies with 'the-lot' and add missing directories. 2015-12-01 05:23:19 +00:00
Makefile.inc Remove pc98 support completely. 2017-01-28 02:22:15 +00:00
md.c dosfs support in libstand is broken since r298230 2016-12-30 19:06:29 +00:00
merge_help.awk
misc.c Enable warnings in EFI boot code 2016-01-12 02:17:39 +00:00
module.c Loader paged/pageable data is not always paged. 2016-11-08 06:50:18 +00:00
newvers.sh Build loaders reproducibly when WITH_REPRODUCIBLE_BUILD 2016-12-19 14:45:59 +00:00
panic.c
part.c loader: Implement disk_ioctl() to support DIOCGSECTORSIZE and DIOCGMEDIASIZE. 2017-02-06 08:26:45 +00:00
part.h loader: Implement disk_ioctl() to support DIOCGSECTORSIZE and DIOCGMEDIASIZE. 2017-02-06 08:26:45 +00:00
paths.h Fix mistake when transitioning to the new defines with ZFS loader. I 2016-01-27 16:36:18 +00:00
pnp.c Really make WITHOUT_FORTH (MK_FORTH==no) work. The recent inclusion of 2016-10-25 17:31:57 +00:00
rbx.h RBX_ defines are in rbx.h, move it there. 2016-01-26 06:26:44 +00:00
reloc_elf.c Don't include <errno.h> in reloc_elf.c, as it includes <stand.h> just 2017-01-11 18:47:00 +00:00
reloc_elf32.c
reloc_elf64.c
self_reloc.c EFI loaders: parse rela relocations on amd64 2016-12-01 14:28:37 +00:00
ufsread.c ufsread: Do not cast struct direct from void * 2016-09-14 17:43:32 +00:00
util.c Loader paged/pageable data is not always paged. 2016-11-08 06:50:18 +00:00
util.h Loader paged/pageable data is not always paged. 2016-11-08 06:50:18 +00:00
zfsloader.8 Misc mdoc fixes: 2014-11-23 21:00:00 +00:00