1 /* 2 * Copyright (c) 2011 The Chromium OS Authors. All rights reserved. 3 * Use of this source code is governed by a BSD-style license that can be 4 * found in the LICENSE file. 5 */ 6 7 #ifndef __FMAP_H__ 8 #define __FMAP_H__ 9 10 #include <inttypes.h> 11 #include <stddef.h> 12 13 /* FMAP structs. See http://code.google.com/p/flashmap/wiki/FmapSpec */ 14 #define FMAP_NAMELEN 32 15 #define FMAP_SIGNATURE "__FMAP__" 16 #define FMAP_SIGNATURE_SIZE 8 17 #define FMAP_SEARCH_STRIDE 4 18 #define FMAP_VER_MAJOR 1 19 typedef struct _FmapHeader { 20 char fmap_signature[FMAP_SIGNATURE_SIZE]; /* avoiding endian issues */ 21 uint8_t fmap_ver_major; 22 uint8_t fmap_ver_minor; 23 uint64_t fmap_base; 24 uint32_t fmap_size; 25 char fmap_name[FMAP_NAMELEN]; 26 uint16_t fmap_nareas; 27 } __attribute__((packed)) FmapHeader; 28 29 typedef struct _FmapAreaHeader { 30 uint32_t area_offset; 31 uint32_t area_size; 32 char area_name[FMAP_NAMELEN]; 33 uint16_t area_flags; 34 } __attribute__((packed)) FmapAreaHeader; 35 36 37 /* Find and point to the FMAP header within the buffer */ 38 FmapHeader *fmap_find(uint8_t *ptr, size_t size); 39 40 /* Search for an area by name, return pointer to its beginning */ 41 uint8_t *fmap_find_by_name(uint8_t *ptr, size_t size, 42 /* optional, will call fmap_find() if NULL */ 43 FmapHeader *fmap, 44 /* The area name to search for */ 45 const char *name, 46 /* optional, return pointer to entry if not NULL */ 47 FmapAreaHeader **ah); 48 49 #endif /* __FMAP_H__ */ 50