blob: 36b0b0049756d7a0e45323248795300d3c43765a [file] [log] [blame]
/* 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__ */