xref: /openbmc/linux/drivers/bus/fsl-mc/fsl-mc-private.h (revision 03ab8e6297acd1bc0eedaa050e2a1635c576fd11)
16bd067c4SBogdan Purcareata /* SPDX-License-Identifier: GPL-2.0 */
26bd067c4SBogdan Purcareata /*
36bd067c4SBogdan Purcareata  * Freescale Management Complex (MC) bus private declarations
46bd067c4SBogdan Purcareata  *
56bd067c4SBogdan Purcareata  * Copyright (C) 2016 Freescale Semiconductor, Inc.
66bd067c4SBogdan Purcareata  *
76bd067c4SBogdan Purcareata  */
86bd067c4SBogdan Purcareata #ifndef _FSL_MC_PRIVATE_H_
96bd067c4SBogdan Purcareata #define _FSL_MC_PRIVATE_H_
106bd067c4SBogdan Purcareata 
116bd067c4SBogdan Purcareata #include <linux/fsl/mc.h>
126bd067c4SBogdan Purcareata #include <linux/mutex.h>
132cf1e703SIoana Ciornei #include <linux/ioctl.h>
142cf1e703SIoana Ciornei #include <linux/miscdevice.h>
156bd067c4SBogdan Purcareata 
166bd067c4SBogdan Purcareata /*
176bd067c4SBogdan Purcareata  * Data Path Management Complex (DPMNG) General API
186bd067c4SBogdan Purcareata  */
196bd067c4SBogdan Purcareata 
206bd067c4SBogdan Purcareata /* DPMNG command versioning */
216bd067c4SBogdan Purcareata #define DPMNG_CMD_BASE_VERSION		1
226bd067c4SBogdan Purcareata #define DPMNG_CMD_ID_OFFSET		4
236bd067c4SBogdan Purcareata 
246bd067c4SBogdan Purcareata #define DPMNG_CMD(id)	(((id) << DPMNG_CMD_ID_OFFSET) | DPMNG_CMD_BASE_VERSION)
256bd067c4SBogdan Purcareata 
266bd067c4SBogdan Purcareata /* DPMNG command IDs */
276bd067c4SBogdan Purcareata #define DPMNG_CMDID_GET_VERSION		DPMNG_CMD(0x831)
286bd067c4SBogdan Purcareata 
296bd067c4SBogdan Purcareata struct dpmng_rsp_get_version {
306bd067c4SBogdan Purcareata 	__le32 revision;
316bd067c4SBogdan Purcareata 	__le32 version_major;
326bd067c4SBogdan Purcareata 	__le32 version_minor;
336bd067c4SBogdan Purcareata };
346bd067c4SBogdan Purcareata 
356bd067c4SBogdan Purcareata /*
366bd067c4SBogdan Purcareata  * Data Path Management Command Portal (DPMCP) API
376bd067c4SBogdan Purcareata  */
386bd067c4SBogdan Purcareata 
396bd067c4SBogdan Purcareata /* Minimal supported DPMCP Version */
406bd067c4SBogdan Purcareata #define DPMCP_MIN_VER_MAJOR		3
416bd067c4SBogdan Purcareata #define DPMCP_MIN_VER_MINOR		0
426bd067c4SBogdan Purcareata 
436bd067c4SBogdan Purcareata /* DPMCP command versioning */
446bd067c4SBogdan Purcareata #define DPMCP_CMD_BASE_VERSION		1
456bd067c4SBogdan Purcareata #define DPMCP_CMD_ID_OFFSET		4
466bd067c4SBogdan Purcareata 
476bd067c4SBogdan Purcareata #define DPMCP_CMD(id)	(((id) << DPMCP_CMD_ID_OFFSET) | DPMCP_CMD_BASE_VERSION)
486bd067c4SBogdan Purcareata 
496bd067c4SBogdan Purcareata /* DPMCP command IDs */
506bd067c4SBogdan Purcareata #define DPMCP_CMDID_CLOSE		DPMCP_CMD(0x800)
516bd067c4SBogdan Purcareata #define DPMCP_CMDID_RESET		DPMCP_CMD(0x005)
526bd067c4SBogdan Purcareata 
536bd067c4SBogdan Purcareata struct dpmcp_cmd_open {
546bd067c4SBogdan Purcareata 	__le32 dpmcp_id;
556bd067c4SBogdan Purcareata };
566bd067c4SBogdan Purcareata 
576bd067c4SBogdan Purcareata /*
586bd067c4SBogdan Purcareata  * Initialization and runtime control APIs for DPMCP
596bd067c4SBogdan Purcareata  */
606bd067c4SBogdan Purcareata int dpmcp_open(struct fsl_mc_io *mc_io,
616bd067c4SBogdan Purcareata 	       u32 cmd_flags,
626bd067c4SBogdan Purcareata 	       int dpmcp_id,
636bd067c4SBogdan Purcareata 	       u16 *token);
646bd067c4SBogdan Purcareata 
656bd067c4SBogdan Purcareata int dpmcp_close(struct fsl_mc_io *mc_io,
666bd067c4SBogdan Purcareata 		u32 cmd_flags,
676bd067c4SBogdan Purcareata 		u16 token);
686bd067c4SBogdan Purcareata 
696bd067c4SBogdan Purcareata int dpmcp_reset(struct fsl_mc_io *mc_io,
706bd067c4SBogdan Purcareata 		u32 cmd_flags,
716bd067c4SBogdan Purcareata 		u16 token);
726bd067c4SBogdan Purcareata 
736bd067c4SBogdan Purcareata /*
746bd067c4SBogdan Purcareata  * Data Path Resource Container (DPRC) API
756bd067c4SBogdan Purcareata  */
766bd067c4SBogdan Purcareata 
776bd067c4SBogdan Purcareata /* Minimal supported DPRC Version */
786bd067c4SBogdan Purcareata #define DPRC_MIN_VER_MAJOR			6
796bd067c4SBogdan Purcareata #define DPRC_MIN_VER_MINOR			0
806bd067c4SBogdan Purcareata 
816bd067c4SBogdan Purcareata /* DPRC command versioning */
826bd067c4SBogdan Purcareata #define DPRC_CMD_BASE_VERSION			1
83dde2137dSRoy Pledge #define DPRC_CMD_2ND_VERSION			2
84d8ccb6d8SDiana Craciun #define DPRC_CMD_3RD_VERSION			3
856bd067c4SBogdan Purcareata #define DPRC_CMD_ID_OFFSET			4
866bd067c4SBogdan Purcareata 
876bd067c4SBogdan Purcareata #define DPRC_CMD(id)	(((id) << DPRC_CMD_ID_OFFSET) | DPRC_CMD_BASE_VERSION)
88dde2137dSRoy Pledge #define DPRC_CMD_V2(id)	(((id) << DPRC_CMD_ID_OFFSET) | DPRC_CMD_2ND_VERSION)
89d8ccb6d8SDiana Craciun #define DPRC_CMD_V3(id)	(((id) << DPRC_CMD_ID_OFFSET) | DPRC_CMD_3RD_VERSION)
906bd067c4SBogdan Purcareata 
916bd067c4SBogdan Purcareata /* DPRC command IDs */
926bd067c4SBogdan Purcareata #define DPRC_CMDID_CLOSE                        DPRC_CMD(0x800)
936bd067c4SBogdan Purcareata #define DPRC_CMDID_GET_API_VERSION              DPRC_CMD(0xa05)
946bd067c4SBogdan Purcareata 
956bd067c4SBogdan Purcareata #define DPRC_CMDID_GET_ATTR                     DPRC_CMD(0x004)
96715b02ceSBharat Bhushan #define DPRC_CMDID_RESET_CONT                   DPRC_CMD(0x005)
97715b02ceSBharat Bhushan #define DPRC_CMDID_RESET_CONT_V2                DPRC_CMD_V2(0x005)
986bd067c4SBogdan Purcareata 
996bd067c4SBogdan Purcareata #define DPRC_CMDID_SET_IRQ                      DPRC_CMD(0x010)
1006bd067c4SBogdan Purcareata #define DPRC_CMDID_SET_IRQ_ENABLE               DPRC_CMD(0x012)
1016bd067c4SBogdan Purcareata #define DPRC_CMDID_SET_IRQ_MASK                 DPRC_CMD(0x014)
1026bd067c4SBogdan Purcareata #define DPRC_CMDID_GET_IRQ_STATUS               DPRC_CMD(0x016)
1036bd067c4SBogdan Purcareata #define DPRC_CMDID_CLEAR_IRQ_STATUS             DPRC_CMD(0x017)
1046bd067c4SBogdan Purcareata 
1056bd067c4SBogdan Purcareata #define DPRC_CMDID_GET_CONT_ID                  DPRC_CMD(0x830)
1066bd067c4SBogdan Purcareata #define DPRC_CMDID_GET_OBJ_COUNT                DPRC_CMD(0x159)
1076bd067c4SBogdan Purcareata #define DPRC_CMDID_GET_OBJ                      DPRC_CMD(0x15A)
1086bd067c4SBogdan Purcareata #define DPRC_CMDID_GET_OBJ_REG                  DPRC_CMD(0x15E)
109dde2137dSRoy Pledge #define DPRC_CMDID_GET_OBJ_REG_V2               DPRC_CMD_V2(0x15E)
110d8ccb6d8SDiana Craciun #define DPRC_CMDID_GET_OBJ_REG_V3               DPRC_CMD_V3(0x15E)
1116bd067c4SBogdan Purcareata #define DPRC_CMDID_SET_OBJ_IRQ                  DPRC_CMD(0x15F)
1126bd067c4SBogdan Purcareata 
1131ac210d1SIoana Ciornei #define DPRC_CMDID_GET_CONNECTION               DPRC_CMD(0x16C)
1141ac210d1SIoana Ciornei 
1156bd067c4SBogdan Purcareata struct dprc_cmd_open {
1166bd067c4SBogdan Purcareata 	__le32 container_id;
1176bd067c4SBogdan Purcareata };
1186bd067c4SBogdan Purcareata 
119715b02ceSBharat Bhushan struct dprc_cmd_reset_container {
120715b02ceSBharat Bhushan 	__le32 child_container_id;
121715b02ceSBharat Bhushan 	__le32 options;
122715b02ceSBharat Bhushan };
123715b02ceSBharat Bhushan 
1246bd067c4SBogdan Purcareata struct dprc_cmd_set_irq {
1256bd067c4SBogdan Purcareata 	/* cmd word 0 */
1266bd067c4SBogdan Purcareata 	__le32 irq_val;
1276bd067c4SBogdan Purcareata 	u8 irq_index;
1286bd067c4SBogdan Purcareata 	u8 pad[3];
1296bd067c4SBogdan Purcareata 	/* cmd word 1 */
1306bd067c4SBogdan Purcareata 	__le64 irq_addr;
1316bd067c4SBogdan Purcareata 	/* cmd word 2 */
1326bd067c4SBogdan Purcareata 	__le32 irq_num;
1336bd067c4SBogdan Purcareata };
1346bd067c4SBogdan Purcareata 
1356bd067c4SBogdan Purcareata #define DPRC_ENABLE		0x1
1366bd067c4SBogdan Purcareata 
1376bd067c4SBogdan Purcareata struct dprc_cmd_set_irq_enable {
1386bd067c4SBogdan Purcareata 	u8 enable;
1396bd067c4SBogdan Purcareata 	u8 pad[3];
1406bd067c4SBogdan Purcareata 	u8 irq_index;
1416bd067c4SBogdan Purcareata };
1426bd067c4SBogdan Purcareata 
1436bd067c4SBogdan Purcareata struct dprc_cmd_set_irq_mask {
1446bd067c4SBogdan Purcareata 	__le32 mask;
1456bd067c4SBogdan Purcareata 	u8 irq_index;
1466bd067c4SBogdan Purcareata };
1476bd067c4SBogdan Purcareata 
1486bd067c4SBogdan Purcareata struct dprc_cmd_get_irq_status {
1496bd067c4SBogdan Purcareata 	__le32 status;
1506bd067c4SBogdan Purcareata 	u8 irq_index;
1516bd067c4SBogdan Purcareata };
1526bd067c4SBogdan Purcareata 
1536bd067c4SBogdan Purcareata struct dprc_rsp_get_irq_status {
1546bd067c4SBogdan Purcareata 	__le32 status;
1556bd067c4SBogdan Purcareata };
1566bd067c4SBogdan Purcareata 
1576bd067c4SBogdan Purcareata struct dprc_cmd_clear_irq_status {
1586bd067c4SBogdan Purcareata 	__le32 status;
1596bd067c4SBogdan Purcareata 	u8 irq_index;
1606bd067c4SBogdan Purcareata };
1616bd067c4SBogdan Purcareata 
1626bd067c4SBogdan Purcareata struct dprc_rsp_get_attributes {
1636bd067c4SBogdan Purcareata 	/* response word 0 */
1646bd067c4SBogdan Purcareata 	__le32 container_id;
165273ee53dSBharat Bhushan 	__le32 icid;
1666bd067c4SBogdan Purcareata 	/* response word 1 */
1676bd067c4SBogdan Purcareata 	__le32 options;
1686bd067c4SBogdan Purcareata 	__le32 portal_id;
1696bd067c4SBogdan Purcareata };
1706bd067c4SBogdan Purcareata 
1716bd067c4SBogdan Purcareata struct dprc_rsp_get_obj_count {
1726bd067c4SBogdan Purcareata 	__le32 pad;
1736bd067c4SBogdan Purcareata 	__le32 obj_count;
1746bd067c4SBogdan Purcareata };
1756bd067c4SBogdan Purcareata 
1766bd067c4SBogdan Purcareata struct dprc_cmd_get_obj {
1776bd067c4SBogdan Purcareata 	__le32 obj_index;
1786bd067c4SBogdan Purcareata };
1796bd067c4SBogdan Purcareata 
1806bd067c4SBogdan Purcareata struct dprc_rsp_get_obj {
1816bd067c4SBogdan Purcareata 	/* response word 0 */
1826bd067c4SBogdan Purcareata 	__le32 pad0;
1836bd067c4SBogdan Purcareata 	__le32 id;
1846bd067c4SBogdan Purcareata 	/* response word 1 */
1856bd067c4SBogdan Purcareata 	__le16 vendor;
1866bd067c4SBogdan Purcareata 	u8 irq_count;
1876bd067c4SBogdan Purcareata 	u8 region_count;
1886bd067c4SBogdan Purcareata 	__le32 state;
1896bd067c4SBogdan Purcareata 	/* response word 2 */
1906bd067c4SBogdan Purcareata 	__le16 version_major;
1916bd067c4SBogdan Purcareata 	__le16 version_minor;
1926bd067c4SBogdan Purcareata 	__le16 flags;
1936bd067c4SBogdan Purcareata 	__le16 pad1;
1946bd067c4SBogdan Purcareata 	/* response word 3-4 */
1956bd067c4SBogdan Purcareata 	u8 type[16];
1966bd067c4SBogdan Purcareata 	/* response word 5-6 */
1976bd067c4SBogdan Purcareata 	u8 label[16];
1986bd067c4SBogdan Purcareata };
1996bd067c4SBogdan Purcareata 
2006bd067c4SBogdan Purcareata struct dprc_cmd_get_obj_region {
2016bd067c4SBogdan Purcareata 	/* cmd word 0 */
2026bd067c4SBogdan Purcareata 	__le32 obj_id;
2036bd067c4SBogdan Purcareata 	__le16 pad0;
2046bd067c4SBogdan Purcareata 	u8 region_index;
2056bd067c4SBogdan Purcareata 	u8 pad1;
2066bd067c4SBogdan Purcareata 	/* cmd word 1-2 */
2076bd067c4SBogdan Purcareata 	__le64 pad2[2];
2086bd067c4SBogdan Purcareata 	/* cmd word 3-4 */
2096bd067c4SBogdan Purcareata 	u8 obj_type[16];
2106bd067c4SBogdan Purcareata };
2116bd067c4SBogdan Purcareata 
2126bd067c4SBogdan Purcareata struct dprc_rsp_get_obj_region {
2136bd067c4SBogdan Purcareata 	/* response word 0 */
214ca43fec9SLaurentiu Tudor 	__le64 pad0;
2156bd067c4SBogdan Purcareata 	/* response word 1 */
216dde2137dSRoy Pledge 	__le64 base_offset;
2176bd067c4SBogdan Purcareata 	/* response word 2 */
2186bd067c4SBogdan Purcareata 	__le32 size;
219ca43fec9SLaurentiu Tudor 	u8 type;
220ca43fec9SLaurentiu Tudor 	u8 pad2[3];
221dde2137dSRoy Pledge 	/* response word 3 */
222dde2137dSRoy Pledge 	__le32 flags;
223dde2137dSRoy Pledge 	__le32 pad3;
224dde2137dSRoy Pledge 	/* response word 4 */
225dde2137dSRoy Pledge 	/* base_addr may be zero if older MC firmware is used */
226dde2137dSRoy Pledge 	__le64 base_addr;
2276bd067c4SBogdan Purcareata };
2286bd067c4SBogdan Purcareata 
2296bd067c4SBogdan Purcareata struct dprc_cmd_set_obj_irq {
2306bd067c4SBogdan Purcareata 	/* cmd word 0 */
2316bd067c4SBogdan Purcareata 	__le32 irq_val;
2326bd067c4SBogdan Purcareata 	u8 irq_index;
2336bd067c4SBogdan Purcareata 	u8 pad[3];
2346bd067c4SBogdan Purcareata 	/* cmd word 1 */
2356bd067c4SBogdan Purcareata 	__le64 irq_addr;
2366bd067c4SBogdan Purcareata 	/* cmd word 2 */
2376bd067c4SBogdan Purcareata 	__le32 irq_num;
2386bd067c4SBogdan Purcareata 	__le32 obj_id;
2396bd067c4SBogdan Purcareata 	/* cmd word 3-4 */
2406bd067c4SBogdan Purcareata 	u8 obj_type[16];
2416bd067c4SBogdan Purcareata };
2426bd067c4SBogdan Purcareata 
2431ac210d1SIoana Ciornei struct dprc_cmd_get_connection {
2441ac210d1SIoana Ciornei 	__le32 ep1_id;
2451ac210d1SIoana Ciornei 	__le16 ep1_interface_id;
2461ac210d1SIoana Ciornei 	u8 pad[2];
2471ac210d1SIoana Ciornei 	u8 ep1_type[16];
2481ac210d1SIoana Ciornei };
2491ac210d1SIoana Ciornei 
2501ac210d1SIoana Ciornei struct dprc_rsp_get_connection {
2511ac210d1SIoana Ciornei 	__le64 pad[3];
2521ac210d1SIoana Ciornei 	__le32 ep2_id;
2531ac210d1SIoana Ciornei 	__le16 ep2_interface_id;
2541ac210d1SIoana Ciornei 	__le16 pad1;
2551ac210d1SIoana Ciornei 	u8 ep2_type[16];
2561ac210d1SIoana Ciornei 	__le32 state;
2571ac210d1SIoana Ciornei };
2581ac210d1SIoana Ciornei 
2596bd067c4SBogdan Purcareata /*
2606bd067c4SBogdan Purcareata  * DPRC API for managing and querying DPAA resources
2616bd067c4SBogdan Purcareata  */
2626bd067c4SBogdan Purcareata int dprc_open(struct fsl_mc_io *mc_io,
2636bd067c4SBogdan Purcareata 	      u32 cmd_flags,
2646bd067c4SBogdan Purcareata 	      int container_id,
2656bd067c4SBogdan Purcareata 	      u16 *token);
2666bd067c4SBogdan Purcareata 
2676bd067c4SBogdan Purcareata int dprc_close(struct fsl_mc_io *mc_io,
2686bd067c4SBogdan Purcareata 	       u32 cmd_flags,
2696bd067c4SBogdan Purcareata 	       u16 token);
2706bd067c4SBogdan Purcareata 
2716bd067c4SBogdan Purcareata /* DPRC IRQ events */
2726bd067c4SBogdan Purcareata 
2736bd067c4SBogdan Purcareata /* IRQ event - Indicates that a new object added to the container */
2746bd067c4SBogdan Purcareata #define DPRC_IRQ_EVENT_OBJ_ADDED		0x00000001
2756bd067c4SBogdan Purcareata /* IRQ event - Indicates that an object was removed from the container */
2766bd067c4SBogdan Purcareata #define DPRC_IRQ_EVENT_OBJ_REMOVED		0x00000002
2776bd067c4SBogdan Purcareata /*
2786bd067c4SBogdan Purcareata  * IRQ event - Indicates that one of the descendant containers that opened by
2796bd067c4SBogdan Purcareata  * this container is destroyed
2806bd067c4SBogdan Purcareata  */
2816bd067c4SBogdan Purcareata #define DPRC_IRQ_EVENT_CONTAINER_DESTROYED	0x00000010
2826bd067c4SBogdan Purcareata 
2836bd067c4SBogdan Purcareata /*
2846bd067c4SBogdan Purcareata  * IRQ event - Indicates that on one of the container's opened object is
2856bd067c4SBogdan Purcareata  * destroyed
2866bd067c4SBogdan Purcareata  */
2876bd067c4SBogdan Purcareata #define DPRC_IRQ_EVENT_OBJ_DESTROYED		0x00000020
2886bd067c4SBogdan Purcareata 
2896bd067c4SBogdan Purcareata /* Irq event - Indicates that object is created at the container */
2906bd067c4SBogdan Purcareata #define DPRC_IRQ_EVENT_OBJ_CREATED		0x00000040
2916bd067c4SBogdan Purcareata 
2926bd067c4SBogdan Purcareata /**
2936bd067c4SBogdan Purcareata  * struct dprc_irq_cfg - IRQ configuration
2946bd067c4SBogdan Purcareata  * @paddr:	Address that must be written to signal a message-based interrupt
2956bd067c4SBogdan Purcareata  * @val:	Value to write into irq_addr address
2966bd067c4SBogdan Purcareata  * @irq_num:	A user defined number associated with this IRQ
2976bd067c4SBogdan Purcareata  */
2986bd067c4SBogdan Purcareata struct dprc_irq_cfg {
2996bd067c4SBogdan Purcareata 	     phys_addr_t paddr;
3006bd067c4SBogdan Purcareata 	     u32 val;
3016bd067c4SBogdan Purcareata 	     int irq_num;
3026bd067c4SBogdan Purcareata };
3036bd067c4SBogdan Purcareata 
3046bd067c4SBogdan Purcareata int dprc_set_irq(struct fsl_mc_io *mc_io,
3056bd067c4SBogdan Purcareata 		 u32 cmd_flags,
3066bd067c4SBogdan Purcareata 		 u16 token,
3076bd067c4SBogdan Purcareata 		 u8 irq_index,
3086bd067c4SBogdan Purcareata 		 struct dprc_irq_cfg *irq_cfg);
3096bd067c4SBogdan Purcareata 
3106bd067c4SBogdan Purcareata int dprc_set_irq_enable(struct fsl_mc_io *mc_io,
3116bd067c4SBogdan Purcareata 			u32 cmd_flags,
3126bd067c4SBogdan Purcareata 			u16 token,
3136bd067c4SBogdan Purcareata 			u8 irq_index,
3146bd067c4SBogdan Purcareata 			u8 en);
3156bd067c4SBogdan Purcareata 
3166bd067c4SBogdan Purcareata int dprc_set_irq_mask(struct fsl_mc_io *mc_io,
3176bd067c4SBogdan Purcareata 		      u32 cmd_flags,
3186bd067c4SBogdan Purcareata 		      u16 token,
3196bd067c4SBogdan Purcareata 		      u8 irq_index,
3206bd067c4SBogdan Purcareata 		      u32 mask);
3216bd067c4SBogdan Purcareata 
3226bd067c4SBogdan Purcareata int dprc_get_irq_status(struct fsl_mc_io *mc_io,
3236bd067c4SBogdan Purcareata 			u32 cmd_flags,
3246bd067c4SBogdan Purcareata 			u16 token,
3256bd067c4SBogdan Purcareata 			u8 irq_index,
3266bd067c4SBogdan Purcareata 			u32 *status);
3276bd067c4SBogdan Purcareata 
3286bd067c4SBogdan Purcareata int dprc_clear_irq_status(struct fsl_mc_io *mc_io,
3296bd067c4SBogdan Purcareata 			  u32 cmd_flags,
3306bd067c4SBogdan Purcareata 			  u16 token,
3316bd067c4SBogdan Purcareata 			  u8 irq_index,
3326bd067c4SBogdan Purcareata 			  u32 status);
3336bd067c4SBogdan Purcareata 
3346bd067c4SBogdan Purcareata /**
3356bd067c4SBogdan Purcareata  * struct dprc_attributes - Container attributes
3366bd067c4SBogdan Purcareata  * @container_id: Container's ID
3376bd067c4SBogdan Purcareata  * @icid: Container's ICID
3386bd067c4SBogdan Purcareata  * @portal_id: Container's portal ID
3396bd067c4SBogdan Purcareata  * @options: Container's options as set at container's creation
3406bd067c4SBogdan Purcareata  */
3416bd067c4SBogdan Purcareata struct dprc_attributes {
3426bd067c4SBogdan Purcareata 	int container_id;
343273ee53dSBharat Bhushan 	u32 icid;
3446bd067c4SBogdan Purcareata 	int portal_id;
3456bd067c4SBogdan Purcareata 	u64 options;
3466bd067c4SBogdan Purcareata };
3476bd067c4SBogdan Purcareata 
3486bd067c4SBogdan Purcareata int dprc_get_attributes(struct fsl_mc_io *mc_io,
3496bd067c4SBogdan Purcareata 			u32 cmd_flags,
3506bd067c4SBogdan Purcareata 			u16 token,
3516bd067c4SBogdan Purcareata 			struct dprc_attributes *attributes);
3526bd067c4SBogdan Purcareata 
3536bd067c4SBogdan Purcareata int dprc_get_obj_count(struct fsl_mc_io *mc_io,
3546bd067c4SBogdan Purcareata 		       u32 cmd_flags,
3556bd067c4SBogdan Purcareata 		       u16 token,
3566bd067c4SBogdan Purcareata 		       int *obj_count);
3576bd067c4SBogdan Purcareata 
3586bd067c4SBogdan Purcareata int dprc_get_obj(struct fsl_mc_io *mc_io,
3596bd067c4SBogdan Purcareata 		 u32 cmd_flags,
3606bd067c4SBogdan Purcareata 		 u16 token,
3616bd067c4SBogdan Purcareata 		 int obj_index,
3626bd067c4SBogdan Purcareata 		 struct fsl_mc_obj_desc *obj_desc);
3636bd067c4SBogdan Purcareata 
3646bd067c4SBogdan Purcareata int dprc_set_obj_irq(struct fsl_mc_io *mc_io,
3656bd067c4SBogdan Purcareata 		     u32 cmd_flags,
3666bd067c4SBogdan Purcareata 		     u16 token,
3676bd067c4SBogdan Purcareata 		     char *obj_type,
3686bd067c4SBogdan Purcareata 		     int obj_id,
3696bd067c4SBogdan Purcareata 		     u8 irq_index,
3706bd067c4SBogdan Purcareata 		     struct dprc_irq_cfg *irq_cfg);
3716bd067c4SBogdan Purcareata /**
3726bd067c4SBogdan Purcareata  * enum dprc_region_type - Region type
3736bd067c4SBogdan Purcareata  * @DPRC_REGION_TYPE_MC_PORTAL: MC portal region
3746bd067c4SBogdan Purcareata  * @DPRC_REGION_TYPE_QBMAN_PORTAL: Qbman portal region
3756bd067c4SBogdan Purcareata  */
3766bd067c4SBogdan Purcareata enum dprc_region_type {
3776bd067c4SBogdan Purcareata 	DPRC_REGION_TYPE_MC_PORTAL,
378dde2137dSRoy Pledge 	DPRC_REGION_TYPE_QBMAN_PORTAL,
379dde2137dSRoy Pledge 	DPRC_REGION_TYPE_QBMAN_MEM_BACKED_PORTAL
3806bd067c4SBogdan Purcareata };
3816bd067c4SBogdan Purcareata 
3826bd067c4SBogdan Purcareata /**
3836bd067c4SBogdan Purcareata  * struct dprc_region_desc - Mappable region descriptor
3846bd067c4SBogdan Purcareata  * @base_offset: Region offset from region's base address.
3856bd067c4SBogdan Purcareata  *	For DPMCP and DPRC objects, region base is offset from SoC MC portals
3866bd067c4SBogdan Purcareata  *	base address; For DPIO, region base is offset from SoC QMan portals
3876bd067c4SBogdan Purcareata  *	base address
3886bd067c4SBogdan Purcareata  * @size: Region size (in bytes)
3896bd067c4SBogdan Purcareata  * @flags: Region attributes
3906bd067c4SBogdan Purcareata  * @type: Portal region type
3916bd067c4SBogdan Purcareata  */
3926bd067c4SBogdan Purcareata struct dprc_region_desc {
3936bd067c4SBogdan Purcareata 	u32 base_offset;
3946bd067c4SBogdan Purcareata 	u32 size;
3956bd067c4SBogdan Purcareata 	u32 flags;
3966bd067c4SBogdan Purcareata 	enum dprc_region_type type;
397dde2137dSRoy Pledge 	u64 base_address;
3986bd067c4SBogdan Purcareata };
3996bd067c4SBogdan Purcareata 
4006bd067c4SBogdan Purcareata int dprc_get_obj_region(struct fsl_mc_io *mc_io,
4016bd067c4SBogdan Purcareata 			u32 cmd_flags,
4026bd067c4SBogdan Purcareata 			u16 token,
4036bd067c4SBogdan Purcareata 			char *obj_type,
4046bd067c4SBogdan Purcareata 			int obj_id,
4056bd067c4SBogdan Purcareata 			u8 region_index,
4066bd067c4SBogdan Purcareata 			struct dprc_region_desc *region_desc);
4076bd067c4SBogdan Purcareata 
4086bd067c4SBogdan Purcareata int dprc_get_api_version(struct fsl_mc_io *mc_io,
4096bd067c4SBogdan Purcareata 			 u32 cmd_flags,
4106bd067c4SBogdan Purcareata 			 u16 *major_ver,
4116bd067c4SBogdan Purcareata 			 u16 *minor_ver);
4126bd067c4SBogdan Purcareata 
4136bd067c4SBogdan Purcareata int dprc_get_container_id(struct fsl_mc_io *mc_io,
4146bd067c4SBogdan Purcareata 			  u32 cmd_flags,
4156bd067c4SBogdan Purcareata 			  int *container_id);
4166bd067c4SBogdan Purcareata 
4171ac210d1SIoana Ciornei /**
4181ac210d1SIoana Ciornei  * struct dprc_endpoint - Endpoint description for link connect/disconnect
4191ac210d1SIoana Ciornei  *			operations
4201ac210d1SIoana Ciornei  * @type:	Endpoint object type: NULL terminated string
4211ac210d1SIoana Ciornei  * @id:		Endpoint object ID
4221ac210d1SIoana Ciornei  * @if_id:	Interface ID; should be set for endpoints with multiple
4231ac210d1SIoana Ciornei  *		interfaces ("dpsw", "dpdmux"); for others, always set to 0
4241ac210d1SIoana Ciornei  */
4251ac210d1SIoana Ciornei struct dprc_endpoint {
4261ac210d1SIoana Ciornei 	char type[16];
4271ac210d1SIoana Ciornei 	int id;
4281ac210d1SIoana Ciornei 	u16 if_id;
4291ac210d1SIoana Ciornei };
4301ac210d1SIoana Ciornei 
4311ac210d1SIoana Ciornei int dprc_get_connection(struct fsl_mc_io *mc_io,
4321ac210d1SIoana Ciornei 			u32 cmd_flags,
4331ac210d1SIoana Ciornei 			u16 token,
4341ac210d1SIoana Ciornei 			const struct dprc_endpoint *endpoint1,
4351ac210d1SIoana Ciornei 			struct dprc_endpoint *endpoint2,
4361ac210d1SIoana Ciornei 			int *state);
4371ac210d1SIoana Ciornei 
4389c692d5aSBogdan Purcareata /*
4399c692d5aSBogdan Purcareata  * Data Path Buffer Pool (DPBP) API
4409c692d5aSBogdan Purcareata  */
4419c692d5aSBogdan Purcareata 
4429c692d5aSBogdan Purcareata /* DPBP Version */
4439c692d5aSBogdan Purcareata #define DPBP_VER_MAJOR				3
4449c692d5aSBogdan Purcareata #define DPBP_VER_MINOR				2
4459c692d5aSBogdan Purcareata 
4469c692d5aSBogdan Purcareata /* Command versioning */
4479c692d5aSBogdan Purcareata #define DPBP_CMD_BASE_VERSION			1
4489c692d5aSBogdan Purcareata #define DPBP_CMD_ID_OFFSET			4
4499c692d5aSBogdan Purcareata 
4509c692d5aSBogdan Purcareata #define DPBP_CMD(id)	(((id) << DPBP_CMD_ID_OFFSET) | DPBP_CMD_BASE_VERSION)
4519c692d5aSBogdan Purcareata 
4529c692d5aSBogdan Purcareata /* Command IDs */
4539c692d5aSBogdan Purcareata #define DPBP_CMDID_CLOSE		DPBP_CMD(0x800)
4549c692d5aSBogdan Purcareata 
4559c692d5aSBogdan Purcareata #define DPBP_CMDID_ENABLE		DPBP_CMD(0x002)
4569c692d5aSBogdan Purcareata #define DPBP_CMDID_DISABLE		DPBP_CMD(0x003)
4579c692d5aSBogdan Purcareata #define DPBP_CMDID_GET_ATTR		DPBP_CMD(0x004)
4589c692d5aSBogdan Purcareata #define DPBP_CMDID_RESET		DPBP_CMD(0x005)
4599c692d5aSBogdan Purcareata 
4609c692d5aSBogdan Purcareata struct dpbp_cmd_open {
4619c692d5aSBogdan Purcareata 	__le32 dpbp_id;
4629c692d5aSBogdan Purcareata };
4639c692d5aSBogdan Purcareata 
4649c692d5aSBogdan Purcareata #define DPBP_ENABLE			0x1
4659c692d5aSBogdan Purcareata 
4669c692d5aSBogdan Purcareata struct dpbp_rsp_get_attributes {
4679c692d5aSBogdan Purcareata 	/* response word 0 */
4689c692d5aSBogdan Purcareata 	__le16 pad;
4699c692d5aSBogdan Purcareata 	__le16 bpid;
4709c692d5aSBogdan Purcareata 	__le32 id;
4719c692d5aSBogdan Purcareata 	/* response word 1 */
4729c692d5aSBogdan Purcareata 	__le16 version_major;
4739c692d5aSBogdan Purcareata 	__le16 version_minor;
4749c692d5aSBogdan Purcareata };
4759c692d5aSBogdan Purcareata 
47670ae9cf0SBogdan Purcareata /*
47770ae9cf0SBogdan Purcareata  * Data Path Concentrator (DPCON) API
47870ae9cf0SBogdan Purcareata  */
47970ae9cf0SBogdan Purcareata 
48070ae9cf0SBogdan Purcareata /* DPCON Version */
48170ae9cf0SBogdan Purcareata #define DPCON_VER_MAJOR				3
48270ae9cf0SBogdan Purcareata #define DPCON_VER_MINOR				2
48370ae9cf0SBogdan Purcareata 
48470ae9cf0SBogdan Purcareata /* Command versioning */
48570ae9cf0SBogdan Purcareata #define DPCON_CMD_BASE_VERSION			1
48670ae9cf0SBogdan Purcareata #define DPCON_CMD_ID_OFFSET			4
48770ae9cf0SBogdan Purcareata 
48870ae9cf0SBogdan Purcareata #define DPCON_CMD(id)	(((id) << DPCON_CMD_ID_OFFSET) | DPCON_CMD_BASE_VERSION)
48970ae9cf0SBogdan Purcareata 
49070ae9cf0SBogdan Purcareata /* Command IDs */
49170ae9cf0SBogdan Purcareata #define DPCON_CMDID_CLOSE			DPCON_CMD(0x800)
49270ae9cf0SBogdan Purcareata 
49370ae9cf0SBogdan Purcareata #define DPCON_CMDID_ENABLE			DPCON_CMD(0x002)
49470ae9cf0SBogdan Purcareata #define DPCON_CMDID_DISABLE			DPCON_CMD(0x003)
49570ae9cf0SBogdan Purcareata #define DPCON_CMDID_GET_ATTR			DPCON_CMD(0x004)
49670ae9cf0SBogdan Purcareata #define DPCON_CMDID_RESET			DPCON_CMD(0x005)
49770ae9cf0SBogdan Purcareata 
49870ae9cf0SBogdan Purcareata #define DPCON_CMDID_SET_NOTIFICATION		DPCON_CMD(0x100)
49970ae9cf0SBogdan Purcareata 
50070ae9cf0SBogdan Purcareata struct dpcon_cmd_open {
50170ae9cf0SBogdan Purcareata 	__le32 dpcon_id;
50270ae9cf0SBogdan Purcareata };
50370ae9cf0SBogdan Purcareata 
50470ae9cf0SBogdan Purcareata #define DPCON_ENABLE			1
50570ae9cf0SBogdan Purcareata 
50670ae9cf0SBogdan Purcareata struct dpcon_rsp_get_attr {
50770ae9cf0SBogdan Purcareata 	/* response word 0 */
50870ae9cf0SBogdan Purcareata 	__le32 id;
50970ae9cf0SBogdan Purcareata 	__le16 qbman_ch_id;
51070ae9cf0SBogdan Purcareata 	u8 num_priorities;
51170ae9cf0SBogdan Purcareata 	u8 pad;
51270ae9cf0SBogdan Purcareata };
51370ae9cf0SBogdan Purcareata 
51470ae9cf0SBogdan Purcareata struct dpcon_cmd_set_notification {
51570ae9cf0SBogdan Purcareata 	/* cmd word 0 */
51670ae9cf0SBogdan Purcareata 	__le32 dpio_id;
51770ae9cf0SBogdan Purcareata 	u8 priority;
51870ae9cf0SBogdan Purcareata 	u8 pad[3];
51970ae9cf0SBogdan Purcareata 	/* cmd word 1 */
52070ae9cf0SBogdan Purcareata 	__le64 user_ctx;
52170ae9cf0SBogdan Purcareata };
52270ae9cf0SBogdan Purcareata 
523*fec2432cSDiana Craciun /*
524*fec2432cSDiana Craciun  * Generic FSL MC API
525*fec2432cSDiana Craciun  */
526*fec2432cSDiana Craciun 
527*fec2432cSDiana Craciun /* generic command versioning */
528*fec2432cSDiana Craciun #define OBJ_CMD_BASE_VERSION		1
529*fec2432cSDiana Craciun #define OBJ_CMD_ID_OFFSET		4
530*fec2432cSDiana Craciun 
531*fec2432cSDiana Craciun #define OBJ_CMD(id)	(((id) << OBJ_CMD_ID_OFFSET) | OBJ_CMD_BASE_VERSION)
532*fec2432cSDiana Craciun 
533*fec2432cSDiana Craciun /* open command codes */
534*fec2432cSDiana Craciun #define DPRTC_CMDID_OPEN		OBJ_CMD(0x810)
535*fec2432cSDiana Craciun #define DPNI_CMDID_OPEN		OBJ_CMD(0x801)
536*fec2432cSDiana Craciun #define DPSW_CMDID_OPEN		OBJ_CMD(0x802)
537*fec2432cSDiana Craciun #define DPIO_CMDID_OPEN		OBJ_CMD(0x803)
538*fec2432cSDiana Craciun #define DPBP_CMDID_OPEN		OBJ_CMD(0x804)
539*fec2432cSDiana Craciun #define DPRC_CMDID_OPEN		OBJ_CMD(0x805)
540*fec2432cSDiana Craciun #define DPDMUX_CMDID_OPEN		OBJ_CMD(0x806)
541*fec2432cSDiana Craciun #define DPCI_CMDID_OPEN		OBJ_CMD(0x807)
542*fec2432cSDiana Craciun #define DPCON_CMDID_OPEN		OBJ_CMD(0x808)
543*fec2432cSDiana Craciun #define DPSECI_CMDID_OPEN		OBJ_CMD(0x809)
544*fec2432cSDiana Craciun #define DPAIOP_CMDID_OPEN		OBJ_CMD(0x80a)
545*fec2432cSDiana Craciun #define DPMCP_CMDID_OPEN		OBJ_CMD(0x80b)
546*fec2432cSDiana Craciun #define DPMAC_CMDID_OPEN		OBJ_CMD(0x80c)
547*fec2432cSDiana Craciun #define DPDCEI_CMDID_OPEN		OBJ_CMD(0x80d)
548*fec2432cSDiana Craciun #define DPDMAI_CMDID_OPEN		OBJ_CMD(0x80e)
549*fec2432cSDiana Craciun #define DPDBG_CMDID_OPEN		OBJ_CMD(0x80f)
550*fec2432cSDiana Craciun 
551*fec2432cSDiana Craciun /* Generic object command IDs */
552*fec2432cSDiana Craciun #define OBJ_CMDID_CLOSE		OBJ_CMD(0x800)
553*fec2432cSDiana Craciun #define OBJ_CMDID_RESET		OBJ_CMD(0x005)
554*fec2432cSDiana Craciun 
555*fec2432cSDiana Craciun struct fsl_mc_obj_cmd_open {
556*fec2432cSDiana Craciun 	__le32 obj_id;
557*fec2432cSDiana Craciun };
5586bd067c4SBogdan Purcareata 
5596bd067c4SBogdan Purcareata /**
5606bd067c4SBogdan Purcareata  * struct fsl_mc_resource_pool - Pool of MC resources of a given
5616bd067c4SBogdan Purcareata  * type
5626bd067c4SBogdan Purcareata  * @type: type of resources in the pool
5636bd067c4SBogdan Purcareata  * @max_count: maximum number of resources in the pool
5646bd067c4SBogdan Purcareata  * @free_count: number of free resources in the pool
5656bd067c4SBogdan Purcareata  * @mutex: mutex to serialize access to the pool's free list
5666bd067c4SBogdan Purcareata  * @free_list: anchor node of list of free resources in the pool
5676bd067c4SBogdan Purcareata  * @mc_bus: pointer to the MC bus that owns this resource pool
5686bd067c4SBogdan Purcareata  */
5696bd067c4SBogdan Purcareata struct fsl_mc_resource_pool {
5706bd067c4SBogdan Purcareata 	enum fsl_mc_pool_type type;
5716bd067c4SBogdan Purcareata 	int max_count;
5726bd067c4SBogdan Purcareata 	int free_count;
5736bd067c4SBogdan Purcareata 	struct mutex mutex;	/* serializes access to free_list */
5746bd067c4SBogdan Purcareata 	struct list_head free_list;
5756bd067c4SBogdan Purcareata 	struct fsl_mc_bus *mc_bus;
5766bd067c4SBogdan Purcareata };
5776bd067c4SBogdan Purcareata 
5786bd067c4SBogdan Purcareata /**
5792cf1e703SIoana Ciornei  * struct fsl_mc_uapi - information associated with a device file
5802cf1e703SIoana Ciornei  * @misc: struct miscdevice linked to the root dprc
5812cf1e703SIoana Ciornei  * @device: newly created device in /dev
5822cf1e703SIoana Ciornei  * @mutex: mutex lock to serialize the open/release operations
5832cf1e703SIoana Ciornei  * @local_instance_in_use: local MC I/O instance in use or not
5842cf1e703SIoana Ciornei  * @static_mc_io: pointer to the static MC I/O object
5852cf1e703SIoana Ciornei  */
5862cf1e703SIoana Ciornei struct fsl_mc_uapi {
5872cf1e703SIoana Ciornei 	struct miscdevice misc;
5882cf1e703SIoana Ciornei 	struct device *device;
5892cf1e703SIoana Ciornei 	struct mutex mutex; /* serialize open/release operations */
5902cf1e703SIoana Ciornei 	u32 local_instance_in_use;
5912cf1e703SIoana Ciornei 	struct fsl_mc_io *static_mc_io;
5922cf1e703SIoana Ciornei };
5932cf1e703SIoana Ciornei 
5942cf1e703SIoana Ciornei /**
5956bd067c4SBogdan Purcareata  * struct fsl_mc_bus - logical bus that corresponds to a physical DPRC
5966bd067c4SBogdan Purcareata  * @mc_dev: fsl-mc device for the bus device itself.
5976bd067c4SBogdan Purcareata  * @resource_pools: array of resource pools (one pool per resource type)
5986bd067c4SBogdan Purcareata  * for this MC bus. These resources represent allocatable entities
5996bd067c4SBogdan Purcareata  * from the physical DPRC.
6006bd067c4SBogdan Purcareata  * @irq_resources: Pointer to array of IRQ objects for the IRQ pool
6016bd067c4SBogdan Purcareata  * @scan_mutex: Serializes bus scanning
6026bd067c4SBogdan Purcareata  * @dprc_attr: DPRC attributes
6032cf1e703SIoana Ciornei  * @uapi_misc: struct that abstracts the interaction with userspace
6046bd067c4SBogdan Purcareata  */
6056bd067c4SBogdan Purcareata struct fsl_mc_bus {
6066bd067c4SBogdan Purcareata 	struct fsl_mc_device mc_dev;
6076bd067c4SBogdan Purcareata 	struct fsl_mc_resource_pool resource_pools[FSL_MC_NUM_POOL_TYPES];
6086bd067c4SBogdan Purcareata 	struct fsl_mc_device_irq *irq_resources;
6096bd067c4SBogdan Purcareata 	struct mutex scan_mutex;    /* serializes bus scanning */
6106bd067c4SBogdan Purcareata 	struct dprc_attributes dprc_attr;
6112cf1e703SIoana Ciornei 	struct fsl_mc_uapi uapi_misc;
612296c6264SIoana Ciornei 	int irq_enabled;
6136bd067c4SBogdan Purcareata };
6146bd067c4SBogdan Purcareata 
6156bd067c4SBogdan Purcareata #define to_fsl_mc_bus(_mc_dev) \
6166bd067c4SBogdan Purcareata 	container_of(_mc_dev, struct fsl_mc_bus, mc_dev)
6176bd067c4SBogdan Purcareata 
6186bd067c4SBogdan Purcareata int __must_check fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc,
6196bd067c4SBogdan Purcareata 				   struct fsl_mc_io *mc_io,
6206bd067c4SBogdan Purcareata 				   struct device *parent_dev,
6216bd067c4SBogdan Purcareata 				   struct fsl_mc_device **new_mc_dev);
6226bd067c4SBogdan Purcareata 
6236bd067c4SBogdan Purcareata void fsl_mc_device_remove(struct fsl_mc_device *mc_dev);
6246bd067c4SBogdan Purcareata 
6256bd067c4SBogdan Purcareata int __init dprc_driver_init(void);
6266bd067c4SBogdan Purcareata 
6276bd067c4SBogdan Purcareata void dprc_driver_exit(void);
6286bd067c4SBogdan Purcareata 
6293f609943SIoana Ciornei int dprc_scan_objects(struct fsl_mc_device *mc_bus_dev,
6303f609943SIoana Ciornei 		      bool alloc_interrupts);
6313f609943SIoana Ciornei 
6326bd067c4SBogdan Purcareata int __init fsl_mc_allocator_driver_init(void);
6336bd067c4SBogdan Purcareata 
6341e8ac83bSIoana Ciornei void fsl_mc_allocator_driver_exit(void);
6351e8ac83bSIoana Ciornei 
6366bd067c4SBogdan Purcareata void fsl_mc_init_all_resource_pools(struct fsl_mc_device *mc_bus_dev);
6376bd067c4SBogdan Purcareata 
6386bd067c4SBogdan Purcareata void fsl_mc_cleanup_all_resource_pools(struct fsl_mc_device *mc_bus_dev);
6396bd067c4SBogdan Purcareata 
6406bd067c4SBogdan Purcareata int __must_check fsl_mc_resource_allocate(struct fsl_mc_bus *mc_bus,
6416bd067c4SBogdan Purcareata 					  enum fsl_mc_pool_type pool_type,
6426bd067c4SBogdan Purcareata 					  struct fsl_mc_resource
6436bd067c4SBogdan Purcareata 							  **new_resource);
6446bd067c4SBogdan Purcareata 
6456bd067c4SBogdan Purcareata void fsl_mc_resource_free(struct fsl_mc_resource *resource);
6466bd067c4SBogdan Purcareata 
6476bd067c4SBogdan Purcareata int fsl_mc_msi_domain_alloc_irqs(struct device *dev,
6486bd067c4SBogdan Purcareata 				 unsigned int irq_count);
6496bd067c4SBogdan Purcareata 
6506bd067c4SBogdan Purcareata void fsl_mc_msi_domain_free_irqs(struct device *dev);
6516bd067c4SBogdan Purcareata 
652998fb7baSDiana Craciun struct irq_domain *fsl_mc_find_msi_domain(struct device *dev);
6536bd067c4SBogdan Purcareata 
6546bd067c4SBogdan Purcareata int __must_check fsl_create_mc_io(struct device *dev,
6556bd067c4SBogdan Purcareata 				  phys_addr_t mc_portal_phys_addr,
6566bd067c4SBogdan Purcareata 				  u32 mc_portal_size,
6576bd067c4SBogdan Purcareata 				  struct fsl_mc_device *dpmcp_dev,
6586bd067c4SBogdan Purcareata 				  u32 flags, struct fsl_mc_io **new_mc_io);
6596bd067c4SBogdan Purcareata 
6606bd067c4SBogdan Purcareata void fsl_destroy_mc_io(struct fsl_mc_io *mc_io);
6616bd067c4SBogdan Purcareata 
6626bd067c4SBogdan Purcareata bool fsl_mc_is_root_dprc(struct device *dev);
6636bd067c4SBogdan Purcareata 
664998fb7baSDiana Craciun void fsl_mc_get_root_dprc(struct device *dev,
665998fb7baSDiana Craciun 			 struct device **root_dprc_dev);
666998fb7baSDiana Craciun 
6671ac210d1SIoana Ciornei struct fsl_mc_device *fsl_mc_device_lookup(struct fsl_mc_obj_desc *obj_desc,
6681ac210d1SIoana Ciornei 					   struct fsl_mc_device *mc_bus_dev);
6691ac210d1SIoana Ciornei 
67046707989SIoana Ciornei u16 mc_cmd_hdr_read_cmdid(struct fsl_mc_command *cmd);
67146707989SIoana Ciornei 
6722cf1e703SIoana Ciornei #ifdef CONFIG_FSL_MC_UAPI_SUPPORT
6732cf1e703SIoana Ciornei 
6742cf1e703SIoana Ciornei int fsl_mc_uapi_create_device_file(struct fsl_mc_bus *mc_bus);
6752cf1e703SIoana Ciornei 
6762cf1e703SIoana Ciornei void fsl_mc_uapi_remove_device_file(struct fsl_mc_bus *mc_bus);
6772cf1e703SIoana Ciornei 
6782cf1e703SIoana Ciornei #else
6792cf1e703SIoana Ciornei 
fsl_mc_uapi_create_device_file(struct fsl_mc_bus * mc_bus)6802cf1e703SIoana Ciornei static inline int fsl_mc_uapi_create_device_file(struct fsl_mc_bus *mc_bus)
6812cf1e703SIoana Ciornei {
6822cf1e703SIoana Ciornei 	return 0;
6832cf1e703SIoana Ciornei }
6842cf1e703SIoana Ciornei 
fsl_mc_uapi_remove_device_file(struct fsl_mc_bus * mc_bus)6852cf1e703SIoana Ciornei static inline void fsl_mc_uapi_remove_device_file(struct fsl_mc_bus *mc_bus)
6862cf1e703SIoana Ciornei {
6872cf1e703SIoana Ciornei }
6882cf1e703SIoana Ciornei 
6892cf1e703SIoana Ciornei #endif
6902cf1e703SIoana Ciornei 
691296c6264SIoana Ciornei int disable_dprc_irq(struct fsl_mc_device *mc_dev);
692296c6264SIoana Ciornei int enable_dprc_irq(struct fsl_mc_device *mc_dev);
693296c6264SIoana Ciornei int get_dprc_irq_state(struct fsl_mc_device *mc_dev);
694296c6264SIoana Ciornei 
6956bd067c4SBogdan Purcareata #endif /* _FSL_MC_PRIVATE_H_ */
696