Mercurial > hg > Game > Cerium
view TaskManager/Fifo/FifoDmaManager.h @ 1483:f402f6444237 draft
create gpuTaskinit
author | Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 06 Aug 2012 19:55:47 +0900 |
parents | 70f461442b0f |
children | 7673e2ad2623 |
line wrap: on
line source
#ifndef INCLUDED_FIFO_DMA_MANAGER #define INCLUDED_FIFO_DMA_MANAGER #include "base.h" #include "DmaManager.h" #ifdef __CERIUM_PARALLEL__ #include "SynchronizedMailManager.h" #else #include "MailManager.h" #endif class FifoDmaManager : public DmaManager { protected: /* variables */ MailManagerPtr mail_queue1; MailManagerPtr mail_queue2; public: BASE_NEW_DELETE(FifoDmaManager); FifoDmaManager() { #ifdef __CERIUM_PARALLEL__ mail_queue1 = new SynchronizedMailManager(); mail_queue2 = new SynchronizedMailManager(); #else mail_queue1 = new MailManager(); mail_queue2 = new MailManager(); #endif start_dmawait_profile = &FifoDmaManager::null_start_dmawait_profile; end_dmawait_profile = &FifoDmaManager::null_end_dmawait_profile; } ~FifoDmaManager() { delete mail_queue1; delete mail_queue2; } /* variables */ protected: unsigned long long start_time, stop_time; unsigned long long global_busy_time, global_load_time, global_store_time, global_mail_time; unsigned long long dma_load_time, dma_store_time, dma_loadList_time, dma_storeList_time; unsigned long long mail_read_time, mail_write_time; unsigned long long mail_read_from_host_time, mail_write_from_host_time; /* functions */ public: virtual void *dma_load(Scheduler *s, memaddr addr, uint32 size, uint32 mask); virtual void *dma_load1(void *buf, memaddr addr, uint32 size, uint32 mask); virtual void *dma_store(void *buf, memaddr addr, uint32 size, uint32 mask); virtual void dma_wait(uint32 mask) ; virtual void *get_writebuf(Scheduler *s, memaddr addr, uint32 size) ; void (FifoDmaManager::*start_dmawait_profile)(); void (FifoDmaManager::*end_dmawait_profile)(unsigned long long *counter); void start_profile(); void stop_profile(); void show_dma_wait(Scheduler *s, int cpu); void mail_write(memaddr data); void mail_write_finish_list(memaddr data); memaddr mail_read(); memaddr task_list_mail_read(); void mail_write_from_host(memaddr data); memaddr mail_read_from_host(); int has_mail_from_host(); virtual void *dma_loadList(Scheduler *s, ListDataPtr list, uint32 mask); virtual void dma_storeList(ListDataPtr, void *buff, uint32 mask); uint32 get_tag(); virtual void bound(ListData *); private: void do_start_dmawait_profile(); void do_end_dmawait_profile(unsigned long long *counter); void null_start_dmawait_profile(); void null_end_dmawait_profile(unsigned long long *counter); }; #endif