16a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu/*
2cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Copyright (c) 2014 Intel Corporation 
3cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika//
4cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Licensed under the Apache License, Version 2.0 (the "License");
5cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// you may not use this file except in compliance with the License.
6cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// You may obtain a copy of the License at
7cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika//
8cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika//      http://www.apache.org/licenses/LICENSE-2.0
9cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika//
10cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// Unless required by applicable law or agreed to in writing, software
11cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// distributed under the License is distributed on an "AS IS" BASIS,
12cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// See the License for the specific language governing permissions and
14cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika// limitations under the License.
15cd727f537d5085eec7f1b8f9c1d33922d4de75d4Prodyut Hazarika*/
166a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#ifndef TTMBUFFERMAPPER_H_
176a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#define TTMBUFFERMAPPER_H_
186a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
196a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#include <DataBuffer.h>
206a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#include <BufferMapper.h>
210594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel#include <ips/common/Wsbm.h>
226a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
236a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace android {
246a6081a46a83da606cf21548879b37695adc7e1fAndy Qiunamespace intel {
256a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
266a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuclass TTMBufferMapper : public BufferMapper {
276a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic:
286a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    TTMBufferMapper(Wsbm& wsbm, DataBuffer& buffer);
29eb726af21649d79ed720bdf329e0849270995c45Andy Qiu    virtual ~TTMBufferMapper();
306a6081a46a83da606cf21548879b37695adc7e1fAndy Qiupublic:
316a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    bool map();
326a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    bool unmap();
336a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
340594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel    uint32_t getGttOffsetInPage(int /* subIndex */) const {
356a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu        return mGttOffsetInPage;
366a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    }
370594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel    void* getCpuAddress(int /* subIndex */) const {
386a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu        return mCpuAddress;
396a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    }
400594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel    uint32_t getSize(int /* subIndex */) const {
416a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu        return mSize;
426a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    }
430594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel    uint32_t getKHandle(int /* subIndex */) {
4430c19aca49c615368ae3bce961c431fa901e90b9Andy Qiu        return 0;
4530c19aca49c615368ae3bce961c431fa901e90b9Andy Qiu    }
460594c42af26255fd8d3d7d39c0cb0e2da5b8841bThierry Strudel    uint32_t getFbHandle(int /* subIndex */) {
473555e1ff071400446170ddc209bbb9fa0e40c502fu jin        return 0;
483555e1ff071400446170ddc209bbb9fa0e40c502fu jin    }
493555e1ff071400446170ddc209bbb9fa0e40c502fu jin    void putFbHandle() {
503555e1ff071400446170ddc209bbb9fa0e40c502fu jin        return;
513555e1ff071400446170ddc209bbb9fa0e40c502fu jin    }
526a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
536a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    // wait idle
546a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    bool waitIdle();
556a6081a46a83da606cf21548879b37695adc7e1fAndy Qiuprivate:
566a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    int mRefCount;
576a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    Wsbm& mWsbm;
586a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    void* mBufferObject;
596a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
606a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    // mapped info
616a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    uint32_t mGttOffsetInPage;
626a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    void* mCpuAddress;
636a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu    uint32_t mSize;
646a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu};
656a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
666a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} //namespace intel
676a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu} //namespace android
686a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
696a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu
706a6081a46a83da606cf21548879b37695adc7e1fAndy Qiu#endif /* TTMBUFFERMAPPER_H_ */
71