1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2 /* 3 * Copyright (c) 2022 Rockchip Electronics Co., Ltd. 4 */ 5 6 #ifndef _UAPI__RK_PCIE_EP_H__ 7 #define _UAPI__RK_PCIE_EP_H__ 8 9 #include <linux/types.h> 10 11 /* rkep device mode status definition */ 12 #define RKEP_MODE_BOOTROM 1 13 #define RKEP_MODE_LOADER 2 14 #define RKEP_MODE_KERNEL 3 15 #define RKEP_MODE_FUN0 4 16 /* Common status */ 17 #define RKEP_SMODE_INIT 0 18 #define RKEP_SMODE_LNKRDY 1 19 #define RKEP_SMODE_LNKUP 2 20 #define RKEP_SMODE_ERR 0xff 21 /* Firmware download status */ 22 #define RKEP_SMODE_FWDLRDY 0x10 23 #define RKEP_SMODE_FWDLDONE 0x11 24 /* Application status*/ 25 #define RKEP_SMODE_APPRDY 0x20 26 27 /* 28 * rockchip pcie driver elbi ioctrl output data 29 */ 30 struct pcie_ep_user_data { 31 __u64 bar0_phys_addr; 32 __u32 elbi_app_user[11]; 33 }; 34 35 /* 36 * rockchip driver cache ioctrl input param 37 */ 38 struct pcie_ep_dma_cache_cfg { 39 __u64 addr; 40 __u32 size; 41 }; 42 43 #define PCIE_EP_OBJ_INFO_MAGIC 0x524B4550 44 45 enum pcie_ep_obj_irq_type { 46 OBJ_IRQ_UNKNOWN, 47 OBJ_IRQ_DMA, 48 OBJ_IRQ_USER, 49 OBJ_IRQ_ELBI, 50 }; 51 52 struct pcie_ep_obj_irq_dma_status { 53 __u32 wr; 54 __u32 rd; 55 }; 56 57 enum pcie_ep_mmap_resource { 58 PCIE_EP_MMAP_RESOURCE_DBI, 59 PCIE_EP_MMAP_RESOURCE_BAR0, 60 PCIE_EP_MMAP_RESOURCE_BAR2, 61 PCIE_EP_MMAP_RESOURCE_BAR4, 62 PCIE_EP_MMAP_RESOURCE_MAX, 63 }; 64 65 /* 66 * rockchip ep device information which is store in BAR0 67 */ 68 struct pcie_ep_obj_info { 69 __u32 magic; 70 __u32 version; 71 struct { 72 __u16 mode; 73 __u16 submode; 74 } devmode; 75 __u8 reserved[0x1F4]; 76 77 __u32 irq_type_rc; /* Generate in ep isr, valid only for rc, clear in rc */ 78 struct pcie_ep_obj_irq_dma_status dma_status_rc; /* Generate in ep isr, valid only for rc, clear in rc */ 79 __u32 irq_type_ep; /* Generate in ep isr, valid only for ep, clear in ep */ 80 struct pcie_ep_obj_irq_dma_status dma_status_ep; /* Generate in ep isr, valid only for ep, clear in ep */ 81 __u32 obj_irq_user_data; /* OBJ_IRQ_USER userspace data */ 82 }; 83 84 #define PCIE_BASE 'P' 85 #define PCIE_DMA_GET_ELBI_DATA _IOR(PCIE_BASE, 0, struct pcie_ep_user_data) 86 #define PCIE_DMA_CACHE_INVALIDE _IOW(PCIE_BASE, 1, struct pcie_ep_dma_cache_cfg) 87 #define PCIE_DMA_CACHE_FLUSH _IOW(PCIE_BASE, 2, struct pcie_ep_dma_cache_cfg) 88 #define PCIE_DMA_IRQ_MASK_ALL _IOW(PCIE_BASE, 3, int) 89 #define PCIE_DMA_RAISE_MSI_OBJ_IRQ_USER _IOW(PCIE_BASE, 4, int) 90 #define PCIE_EP_GET_USER_INFO _IOR(PCIE_BASE, 5, struct pcie_ep_user_data) 91 #define PCIE_EP_SET_MMAP_RESOURCE _IOW(PCIE_BASE, 6, enum pcie_ep_mmap_resource) 92 93 #endif 94