1202a77d28ac251545f6f998a974690212309b927Iliyan Malchev/*
2a43fb8fce6d9be5577de1e0f49c99bd4fe2f6d44Duy Truong * Copyright (c) 2011-2012, The Linux Foundation. All rights reserved.
3202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
4202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * Redistribution and use in source and binary forms, with or without
5202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * modification, are permitted provided that the following conditions are
6202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * met:
7202a77d28ac251545f6f998a974690212309b927Iliyan Malchev *   * Redistributions of source code must retain the above copyright
8202a77d28ac251545f6f998a974690212309b927Iliyan Malchev *     notice, this list of conditions and the following disclaimer.
9202a77d28ac251545f6f998a974690212309b927Iliyan Malchev *   * Redistributions in binary form must reproduce the above
10202a77d28ac251545f6f998a974690212309b927Iliyan Malchev *     copyright notice, this list of conditions and the following
11202a77d28ac251545f6f998a974690212309b927Iliyan Malchev *     disclaimer in the documentation and/or other materials provided
12202a77d28ac251545f6f998a974690212309b927Iliyan Malchev *     with the distribution.
13a43fb8fce6d9be5577de1e0f49c99bd4fe2f6d44Duy Truong *   * Neither the name of The Linux Foundation nor the names of its
14202a77d28ac251545f6f998a974690212309b927Iliyan Malchev *     contributors may be used to endorse or promote products derived
15202a77d28ac251545f6f998a974690212309b927Iliyan Malchev *     from this software without specific prior written permission.
16202a77d28ac251545f6f998a974690212309b927Iliyan Malchev *
17202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27202a77d28ac251545f6f998a974690212309b927Iliyan Malchev * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28202a77d28ac251545f6f998a974690212309b927Iliyan Malchev */
29202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
30202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#ifndef GRALLOC_IONALLOC_H
31202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#define GRALLOC_IONALLOC_H
32202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
33a4f41fae325499e6dcde7b6be4984bd9c28d96d3Naseer Ahmed#include <linux/msm_ion.h>
34202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#include "memalloc.h"
3529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include "gr.h"
36202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
37202a77d28ac251545f6f998a974690212309b927Iliyan Malchevnamespace gralloc {
38202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
3929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedclass IonAlloc : public IMemAlloc  {
40202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
4129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    public:
4229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    virtual int alloc_buffer(alloc_data& data);
43202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
4429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    virtual int free_buffer(void *base, size_t size,
4529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                            int offset, int fd);
46202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
4729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    virtual int map_buffer(void **pBase, size_t size,
4829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                           int offset, int fd);
49202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
5029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    virtual int unmap_buffer(void *base, size_t size,
5129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed                             int offset);
52202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
5329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    virtual int clean_buffer(void*base, size_t size,
540b5054e40d055687b036b626538e79bf160beebbNaseer Ahmed                             int offset, int fd, int op);
55202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
5629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    IonAlloc() { mIonFd = FD_INIT; }
57202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
5829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    ~IonAlloc() { close_device(); }
59202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
6029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    private:
6129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int mIonFd;
62202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
6329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    int open_device();
64202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
6529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    void close_device();
66202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
6729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed    mutable Locker mLock;
6829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed
6929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed};
70202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
71202a77d28ac251545f6f998a974690212309b927Iliyan Malchev}
72202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
73202a77d28ac251545f6f998a974690212309b927Iliyan Malchev#endif /* GRALLOC_IONALLOC_H */
74202a77d28ac251545f6f998a974690212309b927Iliyan Malchev
75