#ifndef __KGSL_CMDSTREAM_H #define __KGSL_CMDSTREAM_H #include #include "kgsl_device.h" #include "kgsl_log.h" #ifdef KGSL_DEVICE_SHADOW_MEMSTORE_TO_USER #define KGSL_CMDSTREAM_USE_MEM_TIMESTAMP #endif /* KGSL_DEVICE_SHADOW_MEMSTORE_TO_USER */ #ifdef KGSL_CMDSTREAM_USE_MEM_TIMESTAMP #define KGSL_CMDSTREAM_GET_SOP_TIMESTAMP(device, data) \ kgsl_sharedmem_read(&device->memstore, (data), \ KGSL_DEVICE_MEMSTORE_OFFSET(soptimestamp), 4) #else #define KGSL_CMDSTREAM_GET_SOP_TIMESTAMP(device, data) \ kgsl_yamato_regread(device, REG_CP_TIMESTAMP, (data)) #endif /* KGSL_CMDSTREAM_USE_MEM_TIMESTAMP */ #define KGSL_CMDSTREAM_GET_EOP_TIMESTAMP(device, data) \ kgsl_sharedmem_read(&device->memstore, (data), \ KGSL_DEVICE_MEMSTORE_OFFSET(eoptimestamp), 4) /* Flags to control command packet settings */ #define KGSL_CMD_FLAGS_PMODE 0x00000001 #define KGSL_CMD_FLAGS_NO_TS_CMP 0x00000002 int kgsl_cmdstream_init(struct kgsl_device *device); int kgsl_cmdstream_close(struct kgsl_device *device); void kgsl_cmdstream_memqueue_drain(struct kgsl_device *device); uint32_t kgsl_cmdstream_readtimestamp(struct kgsl_device *device, enum kgsl_timestamp_type type); int kgsl_cmdstream_check_timestamp(struct kgsl_device *device, unsigned int timestamp); int kgsl_cmdstream_freememontimestamp(struct kgsl_device *device, struct kgsl_mem_entry *entry, uint32_t timestamp, enum kgsl_timestamp_type type); static inline bool timestamp_cmp(unsigned int new, unsigned int old) { int ts_diff = new - old; return (ts_diff >= 0) || (ts_diff < -20000); } #endif /* __KGSL_CMDSTREAM_H */