2012-11-03 01:14:04 +00:00
|
|
|
/***************************************************************************
|
|
|
|
* __________ __ ___.
|
|
|
|
* 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 <stdint.h>
|
|
|
|
#include <stdbool.h>
|
|
|
|
#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);
|
2012-11-03 13:04:27 +00:00
|
|
|
bool nvp_is_valid_node(int node);
|
2012-11-03 01:14:04 +00:00
|
|
|
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);
|
2012-11-03 13:04:27 +00:00
|
|
|
/* returns amount of read data or -1 */
|
2012-11-03 01:14:04 +00:00
|
|
|
int nvp_read_data(int shadow, int area, int zone, int offset, void *buffer, int size);
|
|
|
|
|
|
|
|
#endif /* __NVP_H__ */
|