Initial Release
This commit is contained in:
30
src/common/pico_binary_info/CMakeLists.txt
Normal file
30
src/common/pico_binary_info/CMakeLists.txt
Normal file
@ -0,0 +1,30 @@
|
||||
add_library(pico_binary_info_headers INTERFACE)
|
||||
|
||||
target_include_directories(pico_binary_info_headers INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include)
|
||||
|
||||
add_library(pico_binary_info INTERFACE)
|
||||
|
||||
target_link_libraries(pico_binary_info INTERFACE pico_binary_info_headers)
|
||||
|
||||
function(pico_set_program_name TARGET name)
|
||||
# PICO_BUILD_DEFINE: PICO_PROGRAM_NAME, value passed to pico_set_program_name, type=string, default=none, group=pico_binary_info
|
||||
target_compile_definitions(${TARGET} PRIVATE -DPICO_PROGRAM_NAME="${name}")
|
||||
endfunction()
|
||||
|
||||
function(pico_set_program_description TARGET description)
|
||||
# since this is the command line, we will remove newlines
|
||||
string(REPLACE "\n" " " description ${description})
|
||||
string(REPLACE "\"" "\\\"" description ${description})
|
||||
# PICO_BUILD_DEFINE: PICO_PROGRAM_DESCRIPTION, value passed to pico_set_program_description, type=string, default=none, group=pico_binary_info
|
||||
target_compile_definitions(${TARGET} PRIVATE -DPICO_PROGRAM_DESCRIPTION="${description}")
|
||||
endfunction()
|
||||
|
||||
function(pico_set_program_url TARGET url)
|
||||
# PICO_BUILD_DEFINE: PICO_PROGRAM_URL, value passed to pico_set_program_url, type=string, default=none, group=pico_binary_info
|
||||
target_compile_definitions(${TARGET} PRIVATE -DPICO_PROGRAM_URL="${url}")
|
||||
endfunction()
|
||||
|
||||
function(pico_set_program_version TARGET version)
|
||||
# PICO_BUILD_DEFINE: PICO_PROGRAM_VERSION_STRING, value passed to pico_set_program_version, type=string, default=none, group=pico_binary_info
|
||||
target_compile_definitions(${TARGET} PRIVATE -DPICO_PROGRAM_VERSION_STRING="${version}")
|
||||
endfunction()
|
28
src/common/pico_binary_info/include/pico/binary_info.h
Normal file
28
src/common/pico_binary_info/include/pico/binary_info.h
Normal file
@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef _PICO_BINARY_INFO_H
|
||||
#define _PICO_BINARY_INFO_H
|
||||
|
||||
/**
|
||||
* Binary info is intended for embedding machine readable information with the binary in FLASH.
|
||||
*
|
||||
* Example uses include:
|
||||
*
|
||||
* - Program identification / information
|
||||
* - Pin layouts
|
||||
* - Included features
|
||||
* - Identifying flash regions used as block devices/storage
|
||||
*/
|
||||
|
||||
#include "pico/binary_info/defs.h"
|
||||
#include "pico/binary_info/structure.h"
|
||||
#if PICO_ON_DEVICE
|
||||
#include "pico/binary_info/code.h"
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
139
src/common/pico_binary_info/include/pico/binary_info/code.h
Normal file
139
src/common/pico_binary_info/include/pico/binary_info/code.h
Normal file
@ -0,0 +1,139 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef _PICO_BINARY_INFO_CODE_H
|
||||
#define _PICO_BINARY_INFO_CODE_H
|
||||
|
||||
#include "pico.h"
|
||||
#include "pico/binary_info/structure.h"
|
||||
|
||||
#if !PICO_NO_BINARY_INFO
|
||||
#define __bi_decl(name, bi, section_prefix, attr) static const attr __attribute__((section(section_prefix __STRING(name)))) struct _binary_info_core *name = bi
|
||||
#define __bi_lineno_var_name __CONCAT(__bi_, __LINE__)
|
||||
#define __bi_ptr_lineno_var_name __CONCAT(__bi_ptr, __LINE__)
|
||||
#define __bi_enclosure_check_lineno_var_name __CONCAT(_error_bi_is_missing_enclosing_decl_,__LINE__)
|
||||
#define __bi_mark_enclosure static const __unused int __bi_enclosure_check_lineno_var_name=0;
|
||||
#if !defined(__GNUC__) || __cplusplus || __GNUC__ >= 8
|
||||
#define __bi_enclosure_check(x) (x + __bi_enclosure_check_lineno_var_name)
|
||||
#else
|
||||
// skip the version check on older GCC non C++, as it doesn't compile.. this is only here to catch the
|
||||
// user accidentally forgetting to enclose the binary item with bi_decl
|
||||
#define __bi_enclosure_check(x) (x)
|
||||
#endif
|
||||
/**
|
||||
* Declare some binary information that will be included if the contain source file/line is compiled into the binary
|
||||
*/
|
||||
#define bi_decl(_decl) __bi_mark_enclosure _decl; __bi_decl(__bi_ptr_lineno_var_name, &__bi_lineno_var_name.core, ".binary_info.keep.", __used);
|
||||
/**
|
||||
* Declare some binary information that will be included if the function containing the decl is linked into the binary.
|
||||
* The SDK uses --gc-sections, so functions that are never called will be removed by the linker, and any associated
|
||||
* binary information declared this way will also be stripped
|
||||
*/
|
||||
#define bi_decl_if_func_used(_decl) ({__bi_mark_enclosure _decl; __bi_decl(__bi_ptr_lineno_var_name, &__bi_lineno_var_name.core, ".binary_info.", ); *(volatile uint8_t *)&__bi_ptr_lineno_var_name;});
|
||||
|
||||
#define bi_decl_with_attr(_decl, _attr) __bi_mark_enclosure _attr _decl; __bi_decl(__bi_ptr_lineno_var_name, &__bi_lineno_var_name.core, ".binary_info.keep.", __used);
|
||||
#define bi_decl_if_func_used_with_attr(_decl, _attr) ({__bi_mark_enclosure _attr _decl; __bi_decl(__bi_ptr_lineno_var_name, &__bi_lineno_var_name.core, ".binary_info.", ); *(volatile uint8_t *)&__bi_ptr_lineno_var_name;});
|
||||
#else
|
||||
#define __bi_decl(bi, name, attr)
|
||||
#define bi_decl_with_attr(_decl, _attr)
|
||||
#define bi_decl(_decl)
|
||||
#define bi_decl_if_func_used_with_attr(_decl, _attr) ((void)0);
|
||||
#define bi_decl_if_func_used(_decl) ((void)0);
|
||||
#endif
|
||||
|
||||
#define bi_int(_tag, _id, _value) \
|
||||
static const struct _binary_info_id_and_int __bi_lineno_var_name = { \
|
||||
.core = { \
|
||||
.type = __bi_enclosure_check(BINARY_INFO_TYPE_ID_AND_INT), \
|
||||
.tag = _tag, \
|
||||
},\
|
||||
.id = _id, \
|
||||
.value = _value \
|
||||
};
|
||||
|
||||
#define bi_string(_tag, _id, _value) \
|
||||
static const struct _binary_info_id_and_string __bi_lineno_var_name = { \
|
||||
.core = { \
|
||||
.type = __bi_enclosure_check(BINARY_INFO_TYPE_ID_AND_STRING), \
|
||||
.tag = _tag, \
|
||||
},\
|
||||
.id = _id, \
|
||||
.value = _value, \
|
||||
}
|
||||
|
||||
#define bi_block_device(_tag, _name, _address, _size, _extra, _flags) \
|
||||
static const struct _binary_info_block_device __bi_lineno_var_name = { \
|
||||
.core = { \
|
||||
.type = __bi_enclosure_check(BINARY_INFO_TYPE_BLOCK_DEVICE), \
|
||||
.tag = _tag, \
|
||||
},\
|
||||
.name = _name, \
|
||||
.address = _address, \
|
||||
.size = _size, \
|
||||
.extra = _extra, \
|
||||
.flags = _flags, \
|
||||
}
|
||||
|
||||
#define __bi_encoded_pins_with_func(_encoding) \
|
||||
static const struct _binary_info_pins_with_func __bi_lineno_var_name = { \
|
||||
.core = { \
|
||||
.type = __bi_enclosure_check(BINARY_INFO_TYPE_PINS_WITH_FUNC), \
|
||||
.tag = BINARY_INFO_TAG_RASPBERRY_PI, \
|
||||
},\
|
||||
.pin_encoding = _encoding \
|
||||
}
|
||||
|
||||
#define __bi_pins_with_name(_mask, _label) \
|
||||
static const struct _binary_info_pins_with_name __bi_lineno_var_name = { \
|
||||
.core = { \
|
||||
.type = __bi_enclosure_check(BINARY_INFO_TYPE_PINS_WITH_NAME), \
|
||||
.tag = BINARY_INFO_TAG_RASPBERRY_PI, \
|
||||
},\
|
||||
.pin_mask = _mask, \
|
||||
.label = _label \
|
||||
}
|
||||
|
||||
#define __bi_named_group(_parent_tag, _parent_id, _group_tag, _group_id, _label, _flags) \
|
||||
static const struct _binary_info_named_group __bi_lineno_var_name = { \
|
||||
.core = { \
|
||||
.type = __bi_enclosure_check(BINARY_INFO_TYPE_NAMED_GROUP), \
|
||||
.tag = _parent_tag, \
|
||||
},\
|
||||
.parent_id = _parent_id, \
|
||||
.group_tag = _group_tag, \
|
||||
.flags = _flags, \
|
||||
.group_id = _group_id, \
|
||||
.label = _label \
|
||||
}
|
||||
|
||||
#define bi_binary_end(end) bi_int(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_BINARY_END, end)
|
||||
#define bi_program_name(name) bi_string(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_PROGRAM_NAME, name)
|
||||
#define bi_program_description(description) bi_string(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_PROGRAM_DESCRIPTION, description)
|
||||
#define bi_program_version_string(version_string) bi_string(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_PROGRAM_VERSION_STRING, version_string)
|
||||
#define bi_program_build_date_string(date_string) bi_string(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_PROGRAM_BUILD_DATE_STRING, date_string)
|
||||
#define bi_program_url(url) bi_string(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_PROGRAM_URL, url)
|
||||
// multiple of these may be added
|
||||
#define bi_program_feature(feature) bi_string(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_PROGRAM_FEATURE, feature)
|
||||
#define bi_program_build_attribute(attr) bi_string(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_PROGRAM_BUILD_ATTRIBUTE, attr)
|
||||
#define bi_program_feature_group(tag, id, name) __bi_named_group(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_PROGRAM_FEATURE, tag, id, name, 0)
|
||||
#define bi_program_feature_group_with_flags(tag, id, name, flags) __bi_named_group(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_PROGRAM_FEATURE, tag, id, name, flags)
|
||||
|
||||
#define bi_1pin_with_func(p0, func) __bi_encoded_pins_with_func(BI_PINS_ENCODING_MULTI | ((func << 3)) | ((p0) << 7) | ((p0) << 12))
|
||||
#define bi_2pins_with_func(p0, p1, func) __bi_encoded_pins_with_func(BI_PINS_ENCODING_MULTI | ((func << 3)) | ((p0) << 7) | ((p1) << 12) | ((p1) << 17))
|
||||
#define bi_3pins_with_func(p0, p1, p2, func) __bi_encoded_pins_with_func(BI_PINS_ENCODING_MULTI | ((func << 3)) | ((p0) << 7) | ((p1) << 12) | ((p2) << 17) | ((p2) << 22))
|
||||
#define bi_4pins_with_func(p0, p1, p2, p3, func) __bi_encoded_pins_with_func(BI_PINS_ENCODING_MULTI | ((func << 3)) | ((p0) << 7) | ((p1) << 12) | ((p2) << 17) | ((p3) << 22) | ((p3) << 27))
|
||||
#define bi_5pins_with_func(p0, p1, p2, p3, p4, func) __bi_encoded_pins_with_func(BI_PINS_ENCODING_MULTI | ((func << 3)) | ((p0) << 7) | ((p1) << 12) | ((p2) << 17) | ((p3) << 22) | ((p4) << 27))
|
||||
#define bi_pin_range_with_func(plo, phi, func) __bi_encoded_pins_with_func(BI_PINS_ENCODING_RANGE | ((func << 3)) | ((plo) << 7) | ((phi) << 12))
|
||||
|
||||
#define bi_pin_mask_with_name(pmask, label) __bi_pins_with_name((pmask), (label))
|
||||
// names are sperated by | ... i.e. "name1|name2|name3"
|
||||
#define bi_pin_mask_with_names(pmask, label) __bi_pins_with_name((pmask), (label))
|
||||
#define bi_1pin_with_name(p0, name) bi_pin_mask_with_name(1u << (p0), name)
|
||||
#define bi_2pins_with_names(p0, name0, p1, name1) bi_pin_mask_with_names((1u << (p0)) | (1u << (p1)), name0 "|" name1)
|
||||
#define bi_3pins_with_names(p0, name0, p1, name1, p2, name2) bi_pin_mask_with_names((1u << (p0)) | (1u << (p1)) | (1u << (p2)), name0 "|" name1 "|" name2)
|
||||
#define bi_4pins_with_names(p0, name0, p1, name1, p2, name2, p3, name3) bi_pin_mask_with_names((1u << (p0)) | (1u << (p1)) | (1u << (p2)) | (1u << (p3)), name0 "|" name1 "|" name2 "|" name3)
|
||||
|
||||
#endif
|
43
src/common/pico_binary_info/include/pico/binary_info/defs.h
Normal file
43
src/common/pico_binary_info/include/pico/binary_info/defs.h
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef _PICO_BINARY_INFO_DEFS_H
|
||||
#define _PICO_BINARY_INFO_DEFS_H
|
||||
|
||||
// this file is for pre-processor definitions only
|
||||
|
||||
// should be found within the first 256 bytes of the real binary (i.e. after the flash second stage if a flash binary)
|
||||
//
|
||||
// Note the layout is:
|
||||
//
|
||||
// addr : BINARY_INFO_MARKER_START
|
||||
// addr+0x04 : __binary_info_start
|
||||
// addr+0x08 : __binary_info_end
|
||||
// addr+0x0c : __address_mapping_table
|
||||
// addr+0x10 | BINARY_INFO_MARKER_END
|
||||
//
|
||||
// __binary_info_start to __binary_info_end are the start, end (non inclusive) of an array
|
||||
// of pointers to binary_info_t structures
|
||||
//
|
||||
// __address_mapping_table is an array of the following items:
|
||||
//
|
||||
// uint32_t source_addr_start
|
||||
// uint32_t dest_addr_start
|
||||
// uint32_t dest_addr_end
|
||||
//
|
||||
// representing a mapping from the stored address in the binary/flash to addresses at runtime.
|
||||
// The linker will store pointers within the binary using their runtime values, however because of
|
||||
// "AT" mapping in the link script these addresses actually correspond to a different address in the binary
|
||||
// image. This mapping (which in the case of crt0.S is simply the data copy table used at initialization
|
||||
// to copy data into it's runtime location) can be used by picotool or others to reverse the mapping to find data
|
||||
// within the binary.
|
||||
//
|
||||
// Note the above array is terminated with a NULL source_addr_start
|
||||
|
||||
#define BINARY_INFO_MARKER_START 0x7188ebf2
|
||||
#define BINARY_INFO_MARKER_END 0xe71aa390
|
||||
|
||||
#endif
|
150
src/common/pico_binary_info/include/pico/binary_info/structure.h
Normal file
150
src/common/pico_binary_info/include/pico/binary_info/structure.h
Normal file
@ -0,0 +1,150 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef _PICO_BINARY_INFO_STRUCTURE_H
|
||||
#define _PICO_BINARY_INFO_STRUCTURE_H
|
||||
|
||||
// NOTE: This file may be included by non SDK code, so does not use SDK includes
|
||||
|
||||
// NOTE: ALL CHANGES MUST BE BACKWARDS COMPATIBLE
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifndef __packed
|
||||
#define __packed __attribute__((packed))
|
||||
#endif
|
||||
|
||||
typedef struct _binary_info_core binary_info_t;
|
||||
|
||||
#define BINARY_INFO_TYPE_RAW_DATA 1
|
||||
#define BINARY_INFO_TYPE_SIZED_DATA 2
|
||||
#define BINARY_INFO_TYPE_BINARY_INFO_LIST_ZERO_TERMINATED 3
|
||||
#define BINARY_INFO_TYPE_BSON 4
|
||||
#define BINARY_INFO_TYPE_ID_AND_INT 5
|
||||
#define BINARY_INFO_TYPE_ID_AND_STRING 6
|
||||
// traditional block device
|
||||
#define BINARY_INFO_TYPE_BLOCK_DEVICE 7
|
||||
#define BINARY_INFO_TYPE_PINS_WITH_FUNC 8
|
||||
#define BINARY_INFO_TYPE_PINS_WITH_NAME 9
|
||||
#define BINARY_INFO_TYPE_PINS_WITH_NAMES 9
|
||||
#define BINARY_INFO_TYPE_NAMED_GROUP 10
|
||||
|
||||
// note plan is to reserve c1 = 0->31 for "collision tags"; i.e.
|
||||
// for which you should always use random IDs with the binary_info,
|
||||
// giving you 4 + 8 + 32 = 44 bits to avoid collisions
|
||||
#define BINARY_INFO_MAKE_TAG(c1, c2) ((((uint)c2&0xffu)<<8u)|((uint)c1&0xffu))
|
||||
|
||||
// Raspberry Pi defined. do not use
|
||||
#define BINARY_INFO_TAG_RASPBERRY_PI BINARY_INFO_MAKE_TAG('R','P')
|
||||
|
||||
#define BINARY_INFO_ID_RP_PROGRAM_NAME 0x02031c86
|
||||
#define BINARY_INFO_ID_RP_PROGRAM_VERSION_STRING 0x11a9bc3a
|
||||
#define BINARY_INFO_ID_RP_PROGRAM_BUILD_DATE_STRING 0x9da22254
|
||||
#define BINARY_INFO_ID_RP_BINARY_END 0x68f465de
|
||||
#define BINARY_INFO_ID_RP_PROGRAM_URL 0x1856239a
|
||||
#define BINARY_INFO_ID_RP_PROGRAM_DESCRIPTION 0xb6a07c19
|
||||
#define BINARY_INFO_ID_RP_PROGRAM_FEATURE 0xa1f4b453
|
||||
#define BINARY_INFO_ID_RP_PROGRAM_BUILD_ATTRIBUTE 0x4275f0d3
|
||||
#define BINARY_INFO_ID_RP_SDK_VERSION 0x5360b3ab
|
||||
#define BINARY_INFO_ID_RP_PICO_BOARD 0xb63cffbb
|
||||
|
||||
#if PICO_ON_DEVICE
|
||||
#define bi_ptr_of(x) x *
|
||||
#else
|
||||
#define bi_ptr_of(x) uint32_t
|
||||
#endif
|
||||
typedef struct __packed _binary_info_core {
|
||||
uint16_t type;
|
||||
uint16_t tag;
|
||||
} binary_info_core_t;
|
||||
|
||||
typedef struct __packed _binary_info_raw_data {
|
||||
struct _binary_info_core core;
|
||||
uint8_t bytes[1];
|
||||
} binary_info_raw_data_t;
|
||||
|
||||
typedef struct __packed _binary_info_sized_data {
|
||||
struct _binary_info_core core;
|
||||
uint32_t length;
|
||||
uint8_t bytes[1];
|
||||
} binary_info_sized_data_t;
|
||||
|
||||
typedef struct __packed _binary_info_list_zero_terminated {
|
||||
struct _binary_info_core core;
|
||||
bi_ptr_of(binary_info_t) list;
|
||||
} binary_info_list_zero_terminated_t;
|
||||
|
||||
typedef struct __packed _binary_info_id_and_int {
|
||||
struct _binary_info_core core;
|
||||
uint32_t id;
|
||||
int32_t value;
|
||||
} binary_info_id_and_int_t;
|
||||
|
||||
typedef struct __packed _binary_info_id_and_string {
|
||||
struct _binary_info_core core;
|
||||
uint32_t id;
|
||||
bi_ptr_of(const char) value;
|
||||
} binary_info_id_and_string_t;
|
||||
|
||||
typedef struct __packed _binary_info_block_device {
|
||||
struct _binary_info_core core;
|
||||
bi_ptr_of(const char) name; // optional static name (independent of what is formatted)
|
||||
uint32_t address;
|
||||
uint32_t size;
|
||||
bi_ptr_of(binary_info_t) extra; // additional info
|
||||
uint16_t flags;
|
||||
} binary_info_block_device_t;
|
||||
|
||||
#define BI_PINS_ENCODING_RANGE 1
|
||||
#define BI_PINS_ENCODING_MULTI 2
|
||||
|
||||
typedef struct __packed _binary_info_pins_with_func {
|
||||
struct _binary_info_core core;
|
||||
// p4_5 : p3_5 : p2_5 : p1_5 : p0_5 : func_4 : 001_3 //individual pins p0,p1,p2,p3,p4 ... if fewer than 5 then duplicate p
|
||||
// phi_5 : plo_5 : func_4 : 010_3 // pin range plo-phi inclusive
|
||||
uint32_t pin_encoding;
|
||||
} binary_info_pins_with_func_t;
|
||||
|
||||
typedef struct __packed _binary_info_pins_with_name {
|
||||
struct _binary_info_core core;
|
||||
uint32_t pin_mask;
|
||||
bi_ptr_of(const char) label;
|
||||
} binary_info_pins_with_name_t;
|
||||
|
||||
#define BI_NAMED_GROUP_SHOW_IF_EMPTY 0x0001 // default is to hide
|
||||
#define BI_NAMED_GROUP_SEPARATE_COMMAS 0x0002 // default is newlines
|
||||
#define BI_NAMED_GROUP_SORT_ALPHA 0x0004 // default is no sort
|
||||
#define BI_NAMED_GROUP_ADVANCED 0x0008 // if set, then only shown in say info -a
|
||||
|
||||
typedef struct __packed _binary_info_named_group {
|
||||
struct _binary_info_core core;
|
||||
uint32_t parent_id;
|
||||
uint16_t flags;
|
||||
uint16_t group_tag;
|
||||
uint32_t group_id;
|
||||
bi_ptr_of(const char) label;
|
||||
} binary_info_named_group_t;
|
||||
|
||||
enum {
|
||||
BINARY_INFO_BLOCK_DEV_FLAG_READ =
|
||||
1 << 0, // if not readable, then it is basically hidden, but tools may choose to avoid overwriting it
|
||||
BINARY_INFO_BLOCK_DEV_FLAG_WRITE = 1 << 1,
|
||||
BINARY_INFO_BLOCK_DEV_FLAG_REFORMAT = 1 << 2, // may be reformatted..
|
||||
|
||||
BINARY_INFO_BLOCK_DEV_FLAG_PT_UNKNOWN = 0 << 4, // unknown free to look
|
||||
BINARY_INFO_BLOCK_DEV_FLAG_PT_MBR = 1 << 4, // expect MBR
|
||||
BINARY_INFO_BLOCK_DEV_FLAG_PT_GPT = 2 << 4, // expect GPT
|
||||
BINARY_INFO_BLOCK_DEV_FLAG_PT_NONE = 3 << 4, // no partition table
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
Reference in New Issue
Block a user