150 lines
5.2 KiB
C
150 lines
5.2 KiB
C
/*
|
|
* c't-Bot
|
|
*
|
|
* 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 program is distributed in the hope that it will be
|
|
* useful, but WITHOUT ANY WARRANTY; without even the implied
|
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
* PURPOSE. See the GNU General Public License for more details.
|
|
* You should have received a copy of the GNU General Public
|
|
* License along with this program; if not, write to the Free
|
|
* Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
* MA 02111-1307, USA.
|
|
*
|
|
*/
|
|
|
|
/*!
|
|
* @file mmc_vm.h
|
|
* @brief Virtual Memory Management mit MMC / SD-Card
|
|
* @author Timo Sandmann (mail@timosandmann.de)
|
|
* @date 30.11.2006
|
|
* @see Documentation/mmc-vm.html
|
|
*/
|
|
|
|
#ifndef MMC_VM_H_
|
|
#define MMC_VM_H_
|
|
|
|
#include "ct-Bot.h"
|
|
|
|
#ifdef MMC_VM_AVAILABLE
|
|
|
|
//#define VM_STATS_AVAILABLE /*!< Schaltet die Leistungsdatensammlung ein und ermoeglicht die Ausgabe einer Statistik */
|
|
|
|
#ifdef VM_STATS_AVAILABLE
|
|
typedef struct{
|
|
uint32 page_access; /*!< Anzahl der Seitenzugriffe seit Systemstart */
|
|
uint32 swap_ins; /*!< Anzahl der Seiteneinlagerungen seit Systemstart */
|
|
uint32 swap_outs; /*!< Anzahl der Seitenauslagerungen seit Systemstart */
|
|
uint32 vm_used_bytes; /*!< Anzahl der vom VM belegten Bytes auf der MMC / SD-Card */
|
|
uint32 device_size; /*!< Groesse des Speichervolumes */
|
|
uint32 vm_size; /*!< Groesse des Virtuellen Speichers */
|
|
uint8 cache_size; /*!< Groesse des Caches */
|
|
int8 cache_load; /*!< Belegter Speicher des Caches */
|
|
uint16 page_access_s; /*!< Seitenzugriffe pro Sekunde */
|
|
uint16 swap_ins_s; /*!< Pagefaults pro Sekunde */
|
|
uint16 swap_outs_s; /*!< Seitenauslagerungen pro Sekunde */
|
|
uint16 delta_t; /*!< Sekunden seit Beginn der Messung */
|
|
} vm_extern_stats_t;
|
|
|
|
/*!
|
|
* Gibt die Anzahl der Pagefaults seit Systemstart bzw. Ueberlauf zurueck
|
|
* @return #Pagefaults
|
|
* @author Timo Sandmann (mail@timosandmann.de)
|
|
* @date 30.11.2006
|
|
*/
|
|
uint32 mmc_get_pagefaults(void);
|
|
|
|
/*!
|
|
* Erstellt eine kleine Statistik ueber den VM
|
|
* @return Zeiger auf Statistikdaten
|
|
* @date 01.01.2007
|
|
*/
|
|
vm_extern_stats_t* mmc_get_vm_stats(void);
|
|
|
|
/*!
|
|
* Gibt eine kleine Statistik ueber den VM aus (derzeit nur am PC)
|
|
* @date 01.01.2007
|
|
*/
|
|
void mmc_print_statistic(void);
|
|
#endif
|
|
|
|
/*!
|
|
* Fordert virtuellen Speicher an
|
|
* @param size Groesse des gewuenschten Speicherblocks
|
|
* @param aligned 0: egal, 1: 512 Byte ausgerichtet
|
|
* @return Virtuelle Anfangsadresse des angeforderten Speicherblocks, 0 falls Fehler
|
|
* @author Timo Sandmann (mail@timosandmann.de)
|
|
* @date 30.11.2006
|
|
*/
|
|
uint32 mmcalloc(uint32 size, uint8 aligned);
|
|
|
|
/*!
|
|
* Gibt einen Zeiger auf einen Speicherblock im RAM zurueck
|
|
* @param addr Eine virtuelle Adresse
|
|
* @return Zeiger auf uint8, NULL falls Fehler
|
|
* @author Timo Sandmann (mail@timosandmann.de)
|
|
* @date 30.11.2006
|
|
*/
|
|
uint8* mmc_get_data(uint32 addr);
|
|
|
|
/*!
|
|
* Gibt die letzte Adresse einer Seite zurueck
|
|
* @param addr Eine virtuelle Adresse
|
|
* @return Adresse
|
|
* @author Timo Sandmann (mail@timosandmann.de)
|
|
* @date 30.11.2006
|
|
*/
|
|
inline uint32 mmc_get_end_of_page(uint32 addr);
|
|
|
|
/*!
|
|
* Erzwingt das Zurueckschreiben einer eingelagerten Seite auf die MMC / SD-Card
|
|
* @param addr Eine virtuelle Adresse
|
|
* @return 0: ok, 1: Seite zurzeit nicht eingelagert, 2: Fehler beim Zurueckschreiben
|
|
* @author Timo Sandmann (mail@timosandmann.de)
|
|
* @date 15.12.2006
|
|
*/
|
|
uint8 mmc_page_write_back(uint32 addr);
|
|
|
|
/*!
|
|
* Schreibt alle eingelagerten Seiten auf die MMC / SD-Card zurueck
|
|
* @return 0: alles ok, sonst: Fehler beim Zurueckschreiben
|
|
* @author Timo Sandmann (mail@timosandmann.de)
|
|
* @date 21.12.2006
|
|
*/
|
|
uint8 mmc_flush_cache(void);
|
|
|
|
/*!
|
|
* Oeffnet eine Datei im FAT16-Dateisystem auf der MMC / SD-Card und gibt eine virtuelle Adresse zurueck,
|
|
* mit der man per mmc_get_data() einen Pointer auf die gewuenschten Daten bekommt. Das Ein- / Auslagern
|
|
* macht das VM-System automatisch. Der Dateiname muss derzeit am Amfang in der Datei stehen.
|
|
* Achtung: Irgendwann muss man die Daten per mmc_flush_cache() oder mmc_page_write_back() zurueckschreiben!
|
|
* @param filename Dateiname als 0-terminierter String
|
|
* @return Virtuelle Anfangsadresse der angeforderten Datei, 0 falls Fehler
|
|
* @author Timo Sandmann (mail@timosandmann.de)
|
|
* @date 21.12.2006
|
|
*/
|
|
uint32 mmc_fopen(const char *filename);
|
|
|
|
/*!
|
|
* Leert eine Datei im FAT16-Dateisystem auf der MMC / SD-Card, die zuvor mit mmc_fopen() geoeffnet wurde.
|
|
* @param file_start (virtuelle) Anfangsadresse der Datei
|
|
* @return 0: ok, 1: ungueltige Datei oder Laenge, 2: Fehler beim Schreiben
|
|
* @date 02.01.2007
|
|
*/
|
|
uint8 mmc_clear_file(uint32 file_start);
|
|
|
|
/*!
|
|
* Liest die Groesse einer Datei im FAT16-Dateisystem auf der MMC / SD-Card aus, die zu zuvor mit
|
|
* mmc_fopen() geoeffnet wurde.
|
|
* @param file_start (virtuelle Anfangsadresse der Datei)
|
|
* @return Groesse der Datei in Byte
|
|
* @date 12.01.2007
|
|
*/
|
|
uint32 mmc_get_filesize(uint32 file_start);
|
|
|
|
#endif // MMC_VM_AVAILABLE
|
|
#endif // MMC_VM_H_
|