Merge remote-tracking branch 'origin/master' into drm-next
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / drm / amd / include / kgd_kfd_interface.h
index 96a512208fade6825da6aa8e2645f2a088d485d2..239bc16a1ddd61c9fd65d3d1f1284025fd69df2c 100644 (file)
@@ -110,17 +110,10 @@ struct kgd2kfd_calls {
 /**
  * struct kfd2kgd_calls
  *
- * @init_sa_manager: Initialize an instance of the sa manager, used by
- * amdkfd for all system memory allocations that are mapped to the GART
- * address space
+ * @init_gtt_mem_allocation: Allocate a buffer on the gart aperture.
+ * The buffer can be used for mqds, hpds, kernel queue, fence and runlists
  *
- * @fini_sa_manager: Releases all memory allocations for amdkfd that are
- * handled by kgd sa manager
- *
- * @allocate_mem: Allocate a buffer from amdkfd's sa manager. The buffer can
- * be used for mqds, hpds, kernel queue, fence and runlists
- *
- * @free_mem: Frees a buffer that was allocated by amdkfd's sa manager
+ * @free_gtt_mem: Frees a buffer that was allocated on the gart aperture
  *
  * @get_vmem_size: Retrieves (physical) size of VRAM
  *
@@ -136,18 +129,23 @@ struct kgd2kfd_calls {
  * @set_pasid_vmid_mapping: Exposes pasid/vmid pair to the H/W for no cp
  * scheduling mode. Only used for no cp scheduling mode.
  *
- * @init_memory: Initializes memory apertures to fixed base/limit address
- * and non cached memory types.
- *
  * @init_pipeline: Initialized the compute pipelines.
  *
  * @hqd_load: Loads the mqd structure to a H/W hqd slot. used only for no cp
  * sceduling mode.
  *
+ * @hqd_sdma_load: Loads the SDMA mqd structure to a H/W SDMA hqd slot.
+ * used only for no HWS mode.
+ *
  * @hqd_is_occupies: Checks if a hqd slot is occupied.
  *
  * @hqd_destroy: Destructs and preempts the queue assigned to that hqd slot.
  *
+ * @hqd_sdma_is_occupied: Checks if an SDMA hqd slot is occupied.
+ *
+ * @hqd_sdma_destroy: Destructs and preempts the SDMA queue assigned to that
+ * SDMA hqd slot.
+ *
  * @get_fw_version: Returns FW versions from the header
  *
  * This structure contains function pointers to services that the kgd driver
@@ -155,13 +153,11 @@ struct kgd2kfd_calls {
  *
  */
 struct kfd2kgd_calls {
-       /* Memory management. */
-       int (*init_sa_manager)(struct kgd_dev *kgd, unsigned int size);
-       void (*fini_sa_manager)(struct kgd_dev *kgd);
-       int (*allocate_mem)(struct kgd_dev *kgd, size_t size, size_t alignment,
-                       enum kgd_memory_pool pool, struct kgd_mem **mem);
+       int (*init_gtt_mem_allocation)(struct kgd_dev *kgd, size_t size,
+                                       void **mem_obj, uint64_t *gpu_addr,
+                                       void **cpu_ptr);
 
-       void (*free_mem)(struct kgd_dev *kgd, struct kgd_mem *mem);
+       void (*free_gtt_mem)(struct kgd_dev *kgd, void *mem_obj);
 
        uint64_t (*get_vmem_size)(struct kgd_dev *kgd);
        uint64_t (*get_gpu_clock_counter)(struct kgd_dev *kgd);
@@ -176,25 +172,32 @@ struct kfd2kgd_calls {
        int (*set_pasid_vmid_mapping)(struct kgd_dev *kgd, unsigned int pasid,
                                        unsigned int vmid);
 
-       int (*init_memory)(struct kgd_dev *kgd);
        int (*init_pipeline)(struct kgd_dev *kgd, uint32_t pipe_id,
                                uint32_t hpd_size, uint64_t hpd_gpu_addr);
 
        int (*hqd_load)(struct kgd_dev *kgd, void *mqd, uint32_t pipe_id,
                        uint32_t queue_id, uint32_t __user *wptr);
 
+       int (*hqd_sdma_load)(struct kgd_dev *kgd, void *mqd);
+
        bool (*hqd_is_occupied)(struct kgd_dev *kgd, uint64_t queue_address,
                                uint32_t pipe_id, uint32_t queue_id);
 
        int (*hqd_destroy)(struct kgd_dev *kgd, uint32_t reset_type,
                                unsigned int timeout, uint32_t pipe_id,
                                uint32_t queue_id);
+
+       bool (*hqd_sdma_is_occupied)(struct kgd_dev *kgd, void *mqd);
+
+       int (*hqd_sdma_destroy)(struct kgd_dev *kgd, void *mqd,
+                               unsigned int timeout);
+
        uint16_t (*get_fw_version)(struct kgd_dev *kgd,
                                enum kgd_engine_type type);
 };
 
 bool kgd2kfd_init(unsigned interface_version,
-                 const struct kfd2kgd_calls *f2g,
-                 const struct kgd2kfd_calls **g2f);
+               const struct kfd2kgd_calls *f2g,
+               const struct kgd2kfd_calls **g2f);
 
-#endif /* KGD_KFD_INTERFACE_H_INCLUDED */
+#endif /* KGD_KFD_INTERFACE_H_INCLUDED */