/*************************************************************************** * __________ __ ___. * Open \______ \ ____ ____ | | _\_ |__ _______ ___ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ * \/ \/ \/ \/ \/ * $Id$ * * Copyright (C) 2012 Amaury Pouly * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ****************************************************************************/ #ifndef __NVP_H__ #define __NVP_H__ #include #include #include "misc.h" #define NVP_AREA_LARGE_KIND 1 #define NVP_AREA_SMALL_KIND 2 #define NVP_SMALL_AREA_MAX_CLUSTER 128 #define NVP_LARGE_AREA_MAX_CLUSTER 256 #define NVP_AREA_TABLE_SIZE 512 #define NVP_SECTOR_SIZE 512 #define NVP_TABLE_SECTOR 16 #define NVP_DATA_SECTOR_MIN 64 #define NVP_DATA_SECTOR_MAX 32767 #define NVP_SECTOR_PER_CLUSTER 16 #define NVP_CLUSTER_SIZE (NVP_SECTOR_SIZE * NVP_SECTOR_PER_CLUSTER) #define NVP_LARGE_AREA_SIZE NVP_CLUSTER_SIZE #define NVP_SMALL_AREA_SIZE NVP_SECTOR_SIZE struct nvp_zone_info_entry_t { int node; int start; // in 4 unit int count; // in 512 unit for kind 2 and in 8192 for kind 1 int size; int res0, res1, res2, res3; const char *name; }; struct nvp_area_info_entry_t { int kind; struct nvp_zone_info_entry_t *zone_info; int nr_zones; int res0, res1, res2, res3; const char *name; }; struct nvp_node_info_t { int area; int zone; }; #define NVP_NR_AREAS 16 extern struct nvp_area_info_entry_t nvp_area_info[NVP_NR_AREAS]; typedef int (*nvp_read_fn_t)(uint32_t offset, uint32_t size, void *buf); int nvp_init(int nvp_size, nvp_read_fn_t read, bool debug); bool nvp_is_valid_node(int node); struct nvp_node_info_t nvp_get_node_info(int node); int nvp_get_node_size(int node); const char *nvp_get_node_name(int node); const char *nvp_get_area_name(int node); int nvp_read_node(int node, int offset, void *buffer, int size); int nvp_info(void); int nvp_get_cluster_status(int cluster); int nvp_set_cluster_status(int cluster, int status); int nvp_get_sector_status(int sector); int nvp_set_sector_status(int sector, int status); int nvp_get_cluster_number(int shadow, int area, int zone, int index); int nvp_get_sector_number(int shadow, int area, int zone, int index); /* returns amount of read data or -1 */ int nvp_read_data(int shadow, int area, int zone, int offset, void *buffer, int size); #endif /* __NVP_H__ */