diff options
Diffstat (limited to 'inc')
-rw-r--r-- | inc/cache.h | 10 | ||||
-rw-r--r-- | inc/dram.h | 12 | ||||
-rw-r--r-- | inc/storage.h | 18 |
3 files changed, 20 insertions, 20 deletions
diff --git a/inc/cache.h b/inc/cache.h index 3177f59..7409c02 100644 --- a/inc/cache.h +++ b/inc/cache.h @@ -44,15 +44,7 @@ nn * Constructor. int read_word(void *, int, signed int &) override; private: - /** - * Helper for all access methods. - * Calls `request_handler` when `id` is allowed to complete its - * request cycle. - * @param the source making the request - * @param the address to write to - * @param the function to call when an access should be completed - */ - int process(void *id, int address, std::function<void(int index, int offset)> request_handler); + int process(void *id, int address, std::function<void(int index, int offset)> request_handler) override; /** * Helper for process. * Fetches `address` from a lower level of storage if it is not already @@ -36,17 +36,7 @@ class Dram : public Storage void load(std::vector<signed int> program); private: - /** - * Helper for all access methods. - * Calls `request_handler` when `id` is allowed to complete its - * request cycle. - * Handles wait times and setting the current id this storage is serving. - * @param the source making the request - * @param the address to write to - * @param the function to call when an access should be completed - * @return 1 if the access completed successfully, 0 otherwise - */ - int process(void *id, int address, std::function<void(int line, int word)> request_handler); + int process(void *id, int address, std::function<void(int line, int word)> request_handler) override; /** * Given `address`, returns the line and word it is in. * @param an address diff --git a/inc/storage.h b/inc/storage.h index 972e24a..1bf5805 100644 --- a/inc/storage.h +++ b/inc/storage.h @@ -3,6 +3,7 @@ #include "definitions.h" #include <algorithm> #include <array> +#include <functional> #include <map> #include <vector> @@ -48,6 +49,23 @@ class Storage protected: /** + * Helper for all access methods. + * Calls `request_handler` when `id` is allowed to complete its + * request cycle. + * May include extra checks depending on storage device. + * @param the source making the request + * @param the address to write to + * @param the function to call when an access should be completed + */ + virtual int + process(void *id, int address, std::function<void(int index, int offset)> request_handler) = 0; + /** + * Helper for process. Given `id`, returns 0 if the request should trivially be ignored. + * @param the source making the request + * @return 0 if the request should not be completed, 1 if it should be evaluated further. + */ + int preprocess(void *id); + /** * Returns OK if `id` should complete its request this cycle. In the case it can, automatically * clears the current requester. * @param the id asking for a resource |