~thopiekar/arm-mali/libump-sunxi

« back to all changes in this revision

Viewing changes to src/ump_ref_drv.c

  • Committer: Luc Verhaegen
  • Date: 2014-03-25 21:04:12 UTC
  • Revision ID: git-v1:3211f0135d0fb8f2f263979bdcb7ff043886af80
import r3p0 source

Signed-off-by: Luc Verhaegen <libv@skynet.be>

Show diffs side-by-side

added added

removed removed

Lines of Context:
45
45
 
46
46
UMP_API_EXPORT int ump_cpu_msync_now(ump_handle memh, ump_cpu_msync_op op, void* address, int size)
47
47
{
 
48
        int offset;
48
49
        ump_mem * mem = (ump_mem*)memh;
49
50
        UMP_DEBUG_ASSERT(UMP_INVALID_MEMORY_HANDLE != memh, ("Handle is invalid"));
50
51
 
52
53
           Else we skip flushing if the userspace handle says that it is uncached */
53
54
        if ((UMP_MSYNC_READOUT_CACHE_ENABLED!=op) && (0 == mem->is_cached) ) return 0;
54
55
 
 
56
        if ( NULL == address )
 
57
        {
 
58
                address = ((ump_mem*)mem)->mapped_mem;
 
59
        }
 
60
        offset = (int) ((unsigned long)address - (unsigned long)((ump_mem*)mem)->mapped_mem);
 
61
 
 
62
        if ( 0 == size )
 
63
        {
 
64
                size = (int)((ump_mem*)mem)->size;
 
65
        }
 
66
 
55
67
        UMP_DEBUG_ASSERT(0 < (((ump_mem*)mem)->ref_count), ("Reference count too low"));
56
68
        UMP_DEBUG_ASSERT((size>=0) && (size <= (int)((ump_mem*)mem)->size), ("Memory size of passed handle too low"));
57
69
        UMP_DEBUG_ASSERT(NULL != ((ump_mem*)mem)->mapped_mem, ("Error in mapping pointer (not mapped)"));
58
70
 
59
 
        if (size > (int)mem->size) size = mem->size;
 
71
        if ( (offset+size) > (int)mem->size)
 
72
        {
 
73
                size = mem->size - offset;
 
74
        }
60
75
 
61
76
        mem->is_cached = ump_arch_msync(mem->secure_id, mem->mapped_mem, mem->cookie, address, size, op);
62
77
        return mem->is_cached ;
63
78
}
64
79
 
 
80
#if UNIFIED_MEMORY_PROVIDER_VERSION > 2
 
81
UMP_API_EXPORT int ump_cache_operations_control(ump_cache_op_control op)
 
82
{
 
83
        return ump_arch_cache_operations_control(op);
 
84
}
 
85
 
 
86
UMP_API_EXPORT int ump_switch_hw_usage( ump_handle memh, ump_hw_usage new_user )
 
87
{
 
88
        ump_mem * mem = (ump_mem*)memh;
 
89
        UMP_DEBUG_ASSERT(UMP_INVALID_MEMORY_HANDLE != memh, ("Handle is invalid"));
 
90
        return ump_arch_switch_hw_usage(mem->secure_id, new_user);
 
91
}
 
92
 
 
93
UMP_API_EXPORT int ump_lock( ump_handle memh, ump_lock_usage lock_usage)
 
94
{
 
95
        ump_mem * mem = (ump_mem*)memh;
 
96
        UMP_DEBUG_ASSERT(UMP_INVALID_MEMORY_HANDLE != memh, ("Handle is invalid"));
 
97
        return ump_arch_lock(mem->secure_id, lock_usage);
 
98
}
 
99
 
 
100
UMP_API_EXPORT int ump_unlock( ump_handle memh )
 
101
{
 
102
        ump_mem * mem = (ump_mem*)memh;
 
103
        UMP_DEBUG_ASSERT(UMP_INVALID_MEMORY_HANDLE != memh, ("Handle is invalid"));
 
104
        return ump_arch_unlock(mem->secure_id);
 
105
}
 
106
 
 
107
UMP_API_EXPORT int ump_switch_hw_usage_secure_id( ump_secure_id ump_id, ump_hw_usage new_user )
 
108
{
 
109
        return ump_arch_switch_hw_usage(ump_id, new_user);
 
110
}
 
111
 
 
112
/** Locking buffer. Blocking call if the buffer is already locked. */
 
113
UMP_API_EXPORT int ump_lock_secure_id( ump_secure_id ump_id, ump_lock_usage lock_usage )
 
114
{
 
115
        return ump_arch_lock(ump_id, lock_usage);
 
116
}
 
117
 
 
118
/** Unlocking buffer. Let other users lock the buffer for their usage */
 
119
UMP_API_EXPORT int ump_unlock_secure_id( ump_secure_id ump_id )
 
120
{
 
121
        return ump_arch_unlock(ump_id);
 
122
}
 
123
#endif /* UNIFIED_MEMORY_PROVIDER_VERSION */
 
124
 
65
125
/* Allocate a buffer which can be used directly by hardware, 4kb aligned */
66
126
static ump_handle ump_ref_drv_allocate_internal(unsigned long size, ump_alloc_constraints constraints, ump_cache_enabled cache)
67
127
{