1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
/*
* 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_
|