/* IBM_PROLOG_BEGIN_TAG */ | |
/* This is an automatically generated prolog. */ | |
/* */ | |
/* $Source: src/usr/pnor/ffs.h $ */ | |
/* */ | |
/* IBM CONFIDENTIAL */ | |
/* */ | |
/* COPYRIGHT International Business Machines Corp. 2012,2013 */ | |
/* */ | |
/* p1 */ | |
/* */ | |
/* Object Code Only (OCO) source materials */ | |
/* Licensed Internal Code Source Materials */ | |
/* IBM HostBoot Licensed Internal Code */ | |
/* */ | |
/* The source code for this program is not published or otherwise */ | |
/* divested of its trade secrets, irrespective of what has been */ | |
/* deposited with the U.S. Copyright Office. */ | |
/* */ | |
/* Origin: 30 */ | |
/* */ | |
/* IBM_PROLOG_END_TAG */ | |
/* | |
* Copyright (c) International Business Machines Corp., 2012 | |
* | |
* FSP Flash Structure | |
* | |
* This header defines the layout for the FSP Flash Structure. | |
*/ | |
#ifndef __FFS_H__ | |
#define __FFS_H__ | |
/* Pull in the correct header depending on what is being built */ | |
#if defined(__KERNEL__) | |
#include <linux/types.h> | |
#else | |
#include <stdint.h> | |
#endif | |
/* The version of this partition implementation */ | |
#define FFS_VERSION_1 1 | |
/* Magic number for the partition header (ASCII 'PART') */ | |
#define FFS_MAGIC 0x50415254 | |
/* The maximum length of the partition name */ | |
#define PART_NAME_MAX 15 | |
/* | |
* Sizes of the data structures | |
*/ | |
#define FFS_HDR_SIZE sizeof(struct ffs_hdr) | |
#define FFS_ENTRY_SIZE sizeof(struct ffs_entry) | |
/* | |
* Sizes of the data structures w/o checksum | |
*/ | |
#define FFS_HDR_SIZE_CSUM (FFS_HDR_SIZE - sizeof(uint32_t)) | |
#define FFS_ENTRY_SIZE_CSUM (FFS_ENTRY_SIZE - sizeof(uint32_t)) | |
/* pid of logical partitions/containers */ | |
#define FFS_PID_TOPLEVEL 0xFFFFFFFF | |
/* | |
* Type of image contained w/in partition | |
*/ | |
enum type { | |
FFS_TYPE_DATA = 1, | |
FFS_TYPE_LOGICAL = 2, | |
FFS_TYPE_PARTITION = 3, | |
}; | |
/* | |
* Flag bit definitions | |
*/ | |
#define FFS_FLAGS_PROTECTED 0x0001 | |
#define FFS_FLAGS_U_BOOT_ENV 0x0002 | |
/* | |
* Number of user data words | |
*/ | |
#define FFS_USER_WORDS 16 | |
/** | |
* struct ffs_entry - Partition entry | |
* | |
* @name: Opaque null terminated string | |
* @base: Starting offset of partition in flash (in hdr.block_size) | |
* @size: Partition size (in hdr.block_size) | |
* @pid: Parent partition entry (FFS_PID_TOPLEVEL for toplevel) | |
* @id: Partition entry ID [1..65536] | |
* @type: Describe type of partition | |
* @flags: Partition attributes (optional) | |
* @actual: Actual partition size (in bytes) | |
* @resvd: Reserved words for future use | |
* @user: User data (optional) | |
* @checksum: Partition entry checksum (includes all above) | |
*/ | |
struct ffs_entry { | |
char name[PART_NAME_MAX + 1]; | |
uint32_t base; | |
uint32_t size; | |
uint32_t pid; | |
uint32_t id; | |
uint32_t type; | |
uint32_t flags; | |
uint32_t actual; | |
uint32_t resvd[4]; | |
struct { | |
uint32_t data[FFS_USER_WORDS]; | |
} user; | |
uint32_t checksum; | |
} __attribute__ ((packed)); | |
/** | |
* struct ffs_hdr - FSP Flash Structure header | |
* | |
* @magic: Eye catcher/corruption detector | |
* @version: Version of the structure | |
* @size: Size of partition table (in block_size) | |
* @entry_size: Size of struct ffs_entry element (in bytes) | |
* @entry_count: Number of struct ffs_entry elements in @entries array | |
* @block_size: Size of block on device (in bytes) | |
* @block_count: Number of blocks on device | |
* @resvd: Reserved words for future use | |
* @checksum: Header checksum | |
* @entries: Pointer to array of partition entries | |
*/ | |
struct ffs_hdr { | |
uint32_t magic; | |
uint32_t version; | |
uint32_t size; | |
uint32_t entry_size; | |
uint32_t entry_count; | |
uint32_t block_size; | |
uint32_t block_count; | |
uint32_t resvd[4]; | |
uint32_t checksum; | |
struct ffs_entry entries[]; | |
} __attribute__ ((packed)); | |
#endif /* __FFS_H__ */ |