| /* |
| * (C) Copyright Advanced Micro Devices, Inc. 2002, 2007 |
| * Copyright (c) 2008-2009 QUALCOMM USA, INC. |
| * |
| * All source code in this file is licensed under the following license |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU General Public License |
| * version 2 as published by the Free Software Foundation. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| * See the GNU General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, you can find it at http://www.fsf.org |
| */ |
| #ifndef _KGSL_DEVICE_H |
| #define _KGSL_DEVICE_H |
| |
| #include <asm/atomic.h> |
| |
| #include <linux/types.h> |
| #include <linux/irqreturn.h> |
| #include <linux/wait.h> |
| #include <linux/msm_kgsl.h> |
| |
| #include "kgsl_drawctxt.h" |
| #include "kgsl_mmu.h" |
| #include "kgsl_ringbuffer.h" |
| |
| #define KGSL_CONTEXT_MAX 8 |
| |
| #define KGSL_TIMEOUT_NONE 0 |
| #define KGSL_TIMEOUT_DEFAULT 0xFFFFFFFF |
| |
| #define KGSL_DEV_FLAGS_INITIALIZED0 0x00000001 |
| #define KGSL_DEV_FLAGS_INITIALIZED 0x00000002 |
| #define KGSL_DEV_FLAGS_STARTED 0x00000004 |
| #define KGSL_DEV_FLAGS_ACTIVE 0x00000008 |
| |
| #define KGSL_CHIPID_YAMATODX_REV21 0x20100 |
| #define KGSL_CHIPID_YAMATODX_REV211 0x20101 |
| |
| /* Private memory flags for use with memdesc->priv feild */ |
| #define KGSL_MEMFLAGS_MEM_REQUIRES_FLUSH 0x00000001 |
| #define KGSL_MEMFLAGS_VMALLOC_MEM 0x00000002 |
| |
| #define KGSL_GRAPHICS_MEMORY_LOW_WATERMARK 0x1000000 |
| #define KGSL_IS_PAGE_ALIGNED(addr) (!((addr) & (~PAGE_MASK))) |
| |
| struct kgsl_device; |
| struct platform_device; |
| |
| |
| struct kgsl_memregion { |
| unsigned char *mmio_virt_base; |
| unsigned int mmio_phys_base; |
| uint32_t gpu_base; |
| unsigned int sizebytes; |
| }; |
| |
| struct kgsl_device { |
| |
| unsigned int refcnt; |
| uint32_t flags; |
| enum kgsl_deviceid id; |
| unsigned int chip_id; |
| struct kgsl_memregion regspace; |
| struct kgsl_memdesc memstore; |
| |
| struct kgsl_mmu mmu; |
| struct kgsl_memregion gmemspace; |
| struct kgsl_ringbuffer ringbuffer; |
| unsigned int drawctxt_count; |
| struct kgsl_drawctxt *drawctxt_active; |
| struct kgsl_drawctxt drawctxt[KGSL_CONTEXT_MAX]; |
| |
| wait_queue_head_t ib1_wq; |
| }; |
| |
| struct kgsl_devconfig { |
| struct kgsl_memregion regspace; |
| |
| unsigned int mmu_config; |
| uint32_t mpu_base; |
| int mpu_range; |
| uint32_t va_base; |
| unsigned int va_range; |
| |
| struct kgsl_memregion gmemspace; |
| }; |
| |
| int kgsl_yamato_start(struct kgsl_device *device, uint32_t flags); |
| |
| int kgsl_yamato_stop(struct kgsl_device *device); |
| |
| bool kgsl_yamato_is_idle(struct kgsl_device *device); |
| |
| int kgsl_yamato_idle(struct kgsl_device *device, unsigned int timeout); |
| |
| int kgsl_yamato_getproperty(struct kgsl_device *device, |
| enum kgsl_property_type type, void *value, |
| unsigned int sizebytes); |
| |
| int kgsl_yamato_regread(struct kgsl_device *device, unsigned int offsetwords, |
| unsigned int *value); |
| |
| int kgsl_yamato_regwrite(struct kgsl_device *device, unsigned int offsetwords, |
| unsigned int value); |
| |
| int kgsl_yamato_waittimestamp(struct kgsl_device *device, |
| unsigned int timestamp, unsigned int timeout); |
| |
| |
| int kgsl_yamato_init(struct kgsl_device *, struct kgsl_devconfig *); |
| |
| int kgsl_yamato_close(struct kgsl_device *device); |
| |
| int kgsl_yamato_runpending(struct kgsl_device *device); |
| |
| int __init kgsl_yamato_config(struct kgsl_devconfig *, |
| struct platform_device *pdev); |
| |
| void kgsl_register_dump(struct kgsl_device *device); |
| |
| int kgsl_yamato_setup_pt(struct kgsl_device *device, |
| struct kgsl_pagetable *pagetable); |
| int kgsl_yamato_cleanup_pt(struct kgsl_device *device, |
| struct kgsl_pagetable *pagetable); |
| #ifdef CONFIG_MSM_KGSL_MMU |
| int kgsl_yamato_setstate(struct kgsl_device *device, uint32_t flags); |
| #else |
| static inline int kgsl_yamato_setstate(struct kgsl_device *device, uint32_t flags) |
| { return 0; } |
| #endif |
| |
| irqreturn_t kgsl_yamato_isr(int irq, void *data); |
| |
| #endif /* _KGSL_DEVICE_H */ |