/* * 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_