/* $NetBSD: ebh_media.h,v 1.1 2011/11/24 15:51:32 ahoka Exp $ */ /*- * Copyright (c) 2010 Department of Software Engineering, * University of Szeged, Hungary * Copyright (C) 2009 Ferenc Havasi * Copyright (C) 2009 Zoltan Sogor * Copyright (C) 2009 David Tengeri * Copyright (C) 2010 Adam Hoka * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation * by the Department of Software Engineering, University of Szeged, Hungary * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #ifndef EBH_MEDIA_H_ #define EBH_MEDIA_H_ #ifndef _LE_TYPES #define _LE_TYPES typedef uint16_t le16; typedef uint32_t le32; typedef uint64_t le64; #endif /*****************************************************************************/ /* EBH specific structures */ /*****************************************************************************/ #define CHFS_MAGIC_BITMASK 0x53454452 #define CHFS_LID_NOT_DIRTY_BIT 0x80000000 #define CHFS_LID_DIRTY_BIT_MASK 0x7fffffff /* sizeof(crc) + sizeof(lid) */ #define CHFS_INVALIDATE_SIZE 8 /* Size of magic + crc_ec + erase_cnt */ #define CHFS_EB_EC_HDR_SIZE sizeof(struct chfs_eb_ec_hdr) /* Size of NOR eraseblock header */ #define CHFS_EB_HDR_NOR_SIZE sizeof(struct chfs_nor_eb_hdr) /* Size of NAND eraseblock header */ #define CHFS_EB_HDR_NAND_SIZE sizeof(struct chfs_nand_eb_hdr) /* * chfs_eb_ec_hdr - erase counter header of eraseblock * @magic: filesystem magic * @crc_ec: CRC32 sum of erase counter * @erase_cnt: erase counter * * This structure holds the erasablock description information. * This will be written to the beginning of the eraseblock. * */ struct chfs_eb_ec_hdr { le32 magic; le32 crc_ec; le32 erase_cnt; } __packed; /** * struct chfs_nor_eb_hdr - eraseblock header on NOR flash * @crc: CRC32 sum * @lid: logical identifier * * @lid contains the logical block reference but only the first 31 bit (0-30) is * used. The 32th bit is for marking a lid dirty (marked for recovery purposes). * If a new eraseblock is succesfully assigned with the same lid then the lid of * the old one is zeroed. If power failure happened during this operation then * the recovery detects that there is two eraseblock with the same lid, but one * of them is marked (the old one). * * Invalidated eraseblock header means that the @crc and @lid is set to 0. */ struct chfs_nor_eb_hdr { le32 crc; le32 lid; } __packed; /** * struct chfs_nand_eb_hdr - eraseblock header on NAND flash * @crc: CRC32 sum * @lid: logical identifier * @serial: layout of the lid * * @serial is an unique number. Every eraseblock header on NAND flash has its * own serial. If there are two eraseblock on the flash referencing to the same * logical eraseblock, the one with bigger serial is the newer. */ struct chfs_nand_eb_hdr { le32 crc; le32 lid; le64 serial; } __packed; #endif /* EBH_MEDIA_H_ */