14562236bSHarry Wentland /*
24562236bSHarry Wentland  * Copyright 2012-15 Advanced Micro Devices, Inc.
34562236bSHarry Wentland  *
44562236bSHarry Wentland  * Permission is hereby granted, free of charge, to any person obtaining a
54562236bSHarry Wentland  * copy of this software and associated documentation files (the "Software"),
64562236bSHarry Wentland  * to deal in the Software without restriction, including without limitation
74562236bSHarry Wentland  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
84562236bSHarry Wentland  * and/or sell copies of the Software, and to permit persons to whom the
94562236bSHarry Wentland  * Software is furnished to do so, subject to the following conditions:
104562236bSHarry Wentland  *
114562236bSHarry Wentland  * The above copyright notice and this permission notice shall be included in
124562236bSHarry Wentland  * all copies or substantial portions of the Software.
134562236bSHarry Wentland  *
144562236bSHarry Wentland  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
154562236bSHarry Wentland  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
164562236bSHarry Wentland  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
174562236bSHarry Wentland  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
184562236bSHarry Wentland  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
194562236bSHarry Wentland  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
204562236bSHarry Wentland  * OTHER DEALINGS IN THE SOFTWARE.
214562236bSHarry Wentland  *
224562236bSHarry Wentland  * Authors: AMD
234562236bSHarry Wentland  *
244562236bSHarry Wentland  */
254562236bSHarry Wentland 
264562236bSHarry Wentland #ifndef __DAL_IRQ_TYPES_H__
274562236bSHarry Wentland #define __DAL_IRQ_TYPES_H__
284562236bSHarry Wentland 
29eb0e5154SDmytro Laktyushkin #include "os_types.h"
30eb0e5154SDmytro Laktyushkin 
314562236bSHarry Wentland struct dc_context;
324562236bSHarry Wentland 
334562236bSHarry Wentland typedef void (*interrupt_handler)(void *);
344562236bSHarry Wentland 
354562236bSHarry Wentland typedef void *irq_handler_idx;
364562236bSHarry Wentland #define DAL_INVALID_IRQ_HANDLER_IDX NULL
374562236bSHarry Wentland 
384562236bSHarry Wentland /* The order of the IRQ sources is important and MUST match the one's
394562236bSHarry Wentland of base driver */
404562236bSHarry Wentland enum dc_irq_source {
414562236bSHarry Wentland 	/* Use as mask to specify invalid irq source */
424562236bSHarry Wentland 	DC_IRQ_SOURCE_INVALID = 0,
434562236bSHarry Wentland 
444562236bSHarry Wentland 	DC_IRQ_SOURCE_HPD1,
454562236bSHarry Wentland 	DC_IRQ_SOURCE_HPD2,
464562236bSHarry Wentland 	DC_IRQ_SOURCE_HPD3,
474562236bSHarry Wentland 	DC_IRQ_SOURCE_HPD4,
484562236bSHarry Wentland 	DC_IRQ_SOURCE_HPD5,
494562236bSHarry Wentland 	DC_IRQ_SOURCE_HPD6,
504562236bSHarry Wentland 
514562236bSHarry Wentland 	DC_IRQ_SOURCE_HPD1RX,
524562236bSHarry Wentland 	DC_IRQ_SOURCE_HPD2RX,
534562236bSHarry Wentland 	DC_IRQ_SOURCE_HPD3RX,
544562236bSHarry Wentland 	DC_IRQ_SOURCE_HPD4RX,
554562236bSHarry Wentland 	DC_IRQ_SOURCE_HPD5RX,
564562236bSHarry Wentland 	DC_IRQ_SOURCE_HPD6RX,
574562236bSHarry Wentland 
584562236bSHarry Wentland 	DC_IRQ_SOURCE_I2C_DDC1,
594562236bSHarry Wentland 	DC_IRQ_SOURCE_I2C_DDC2,
604562236bSHarry Wentland 	DC_IRQ_SOURCE_I2C_DDC3,
614562236bSHarry Wentland 	DC_IRQ_SOURCE_I2C_DDC4,
624562236bSHarry Wentland 	DC_IRQ_SOURCE_I2C_DDC5,
634562236bSHarry Wentland 	DC_IRQ_SOURCE_I2C_DDC6,
644562236bSHarry Wentland 
654562236bSHarry Wentland 	DC_IRQ_SOURCE_DPSINK1,
664562236bSHarry Wentland 	DC_IRQ_SOURCE_DPSINK2,
674562236bSHarry Wentland 	DC_IRQ_SOURCE_DPSINK3,
684562236bSHarry Wentland 	DC_IRQ_SOURCE_DPSINK4,
694562236bSHarry Wentland 	DC_IRQ_SOURCE_DPSINK5,
704562236bSHarry Wentland 	DC_IRQ_SOURCE_DPSINK6,
714562236bSHarry Wentland 
724562236bSHarry Wentland 	DC_IRQ_SOURCE_TIMER,
734562236bSHarry Wentland 
744562236bSHarry Wentland 	DC_IRQ_SOURCE_PFLIP_FIRST,
754562236bSHarry Wentland 	DC_IRQ_SOURCE_PFLIP1 = DC_IRQ_SOURCE_PFLIP_FIRST,
764562236bSHarry Wentland 	DC_IRQ_SOURCE_PFLIP2,
774562236bSHarry Wentland 	DC_IRQ_SOURCE_PFLIP3,
784562236bSHarry Wentland 	DC_IRQ_SOURCE_PFLIP4,
794562236bSHarry Wentland 	DC_IRQ_SOURCE_PFLIP5,
804562236bSHarry Wentland 	DC_IRQ_SOURCE_PFLIP6,
814562236bSHarry Wentland 	DC_IRQ_SOURCE_PFLIP_UNDERLAY0,
824562236bSHarry Wentland 	DC_IRQ_SOURCE_PFLIP_LAST = DC_IRQ_SOURCE_PFLIP_UNDERLAY0,
834562236bSHarry Wentland 
844562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD0,
854562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD1,
864562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD2,
874562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD3,
884562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD4,
894562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD5,
904562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD6,
914562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD7,
924562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD8,
934562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD9,
944562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD10,
954562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD11,
964562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD12,
974562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD13,
984562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD14,
994562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD15,
1004562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD16,
1014562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD17,
1024562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD18,
1034562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD19,
1044562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD20,
1054562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD21,
1064562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD22,
1074562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD23,
1084562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD24,
1094562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD25,
1104562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD26,
1114562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD27,
1124562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD28,
1134562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD29,
1144562236bSHarry Wentland 	DC_IRQ_SOURCE_GPIOPAD30,
1154562236bSHarry Wentland 
1164562236bSHarry Wentland 	DC_IRQ_SOURCE_DC1UNDERFLOW,
1174562236bSHarry Wentland 	DC_IRQ_SOURCE_DC2UNDERFLOW,
1184562236bSHarry Wentland 	DC_IRQ_SOURCE_DC3UNDERFLOW,
1194562236bSHarry Wentland 	DC_IRQ_SOURCE_DC4UNDERFLOW,
1204562236bSHarry Wentland 	DC_IRQ_SOURCE_DC5UNDERFLOW,
1214562236bSHarry Wentland 	DC_IRQ_SOURCE_DC6UNDERFLOW,
1224562236bSHarry Wentland 
1234562236bSHarry Wentland 	DC_IRQ_SOURCE_DMCU_SCP,
1244562236bSHarry Wentland 	DC_IRQ_SOURCE_VBIOS_SW,
1254562236bSHarry Wentland 
1264562236bSHarry Wentland 	DC_IRQ_SOURCE_VUPDATE1,
1274562236bSHarry Wentland 	DC_IRQ_SOURCE_VUPDATE2,
1284562236bSHarry Wentland 	DC_IRQ_SOURCE_VUPDATE3,
1294562236bSHarry Wentland 	DC_IRQ_SOURCE_VUPDATE4,
1304562236bSHarry Wentland 	DC_IRQ_SOURCE_VUPDATE5,
1314562236bSHarry Wentland 	DC_IRQ_SOURCE_VUPDATE6,
1324562236bSHarry Wentland 
133b10d51f8SAndrey Grodzovsky 	DC_IRQ_SOURCE_VBLANK1,
134b10d51f8SAndrey Grodzovsky 	DC_IRQ_SOURCE_VBLANK2,
135b10d51f8SAndrey Grodzovsky 	DC_IRQ_SOURCE_VBLANK3,
136b10d51f8SAndrey Grodzovsky 	DC_IRQ_SOURCE_VBLANK4,
137b10d51f8SAndrey Grodzovsky 	DC_IRQ_SOURCE_VBLANK5,
138b10d51f8SAndrey Grodzovsky 	DC_IRQ_SOURCE_VBLANK6,
139b10d51f8SAndrey Grodzovsky 
1406e5b3587SSivapiriyanKumarasamy 	DC_IRQ_SOURCE_DC1_VLINE0,
1416e5b3587SSivapiriyanKumarasamy 	DC_IRQ_SOURCE_DC2_VLINE0,
1426e5b3587SSivapiriyanKumarasamy 	DC_IRQ_SOURCE_DC3_VLINE0,
1436e5b3587SSivapiriyanKumarasamy 	DC_IRQ_SOURCE_DC4_VLINE0,
1446e5b3587SSivapiriyanKumarasamy 	DC_IRQ_SOURCE_DC5_VLINE0,
1456e5b3587SSivapiriyanKumarasamy 	DC_IRQ_SOURCE_DC6_VLINE0,
1466e5b3587SSivapiriyanKumarasamy 
1478fde60b7SFatemeh Darbehani 	DC_IRQ_SOURCE_DC1_VLINE1,
1488fde60b7SFatemeh Darbehani 	DC_IRQ_SOURCE_DC2_VLINE1,
1498fde60b7SFatemeh Darbehani 	DC_IRQ_SOURCE_DC3_VLINE1,
1508fde60b7SFatemeh Darbehani 	DC_IRQ_SOURCE_DC4_VLINE1,
1518fde60b7SFatemeh Darbehani 	DC_IRQ_SOURCE_DC5_VLINE1,
1528fde60b7SFatemeh Darbehani 	DC_IRQ_SOURCE_DC6_VLINE1,
15381927e28SJude Shih 	DC_IRQ_SOURCE_DMCUB_OUTBOX,
15470732504SYongqiang Sun 	DC_IRQ_SOURCE_DMCUB_OUTBOX0,
155*556a979dSChun-Liang Chang 	DC_IRQ_SOURCE_DMCUB_GENERAL_DATAOUT,
1564562236bSHarry Wentland 	DAL_IRQ_SOURCES_NUMBER
1574562236bSHarry Wentland };
1584562236bSHarry Wentland 
1594562236bSHarry Wentland enum irq_type
1604562236bSHarry Wentland {
1614562236bSHarry Wentland 	IRQ_TYPE_PFLIP = DC_IRQ_SOURCE_PFLIP1,
1624562236bSHarry Wentland 	IRQ_TYPE_VUPDATE = DC_IRQ_SOURCE_VUPDATE1,
163b10d51f8SAndrey Grodzovsky 	IRQ_TYPE_VBLANK = DC_IRQ_SOURCE_VBLANK1,
164320eca62SWayne Lin 	IRQ_TYPE_VLINE0 = DC_IRQ_SOURCE_DC1_VLINE0,
1654562236bSHarry Wentland };
1664562236bSHarry Wentland 
1674562236bSHarry Wentland #define DAL_VALID_IRQ_SRC_NUM(src) \
168e38ca7e4SGuchun Chen 	((src) < DAL_IRQ_SOURCES_NUMBER && (src) > DC_IRQ_SOURCE_INVALID)
1694562236bSHarry Wentland 
1704562236bSHarry Wentland /* Number of Page Flip IRQ Sources. */
1714562236bSHarry Wentland #define DAL_PFLIP_IRQ_SRC_NUM \
1724562236bSHarry Wentland 	(DC_IRQ_SOURCE_PFLIP_LAST - DC_IRQ_SOURCE_PFLIP_FIRST + 1)
1734562236bSHarry Wentland 
1744562236bSHarry Wentland /* the number of contexts may be expanded in the future based on needs */
1754562236bSHarry Wentland enum dc_interrupt_context {
1764562236bSHarry Wentland 	INTERRUPT_LOW_IRQ_CONTEXT = 0,
1774562236bSHarry Wentland 	INTERRUPT_HIGH_IRQ_CONTEXT,
1784562236bSHarry Wentland 	INTERRUPT_CONTEXT_NUMBER
1794562236bSHarry Wentland };
1804562236bSHarry Wentland 
1814562236bSHarry Wentland enum dc_interrupt_porlarity {
1824562236bSHarry Wentland 	INTERRUPT_POLARITY_DEFAULT = 0,
1834562236bSHarry Wentland 	INTERRUPT_POLARITY_LOW = INTERRUPT_POLARITY_DEFAULT,
1844562236bSHarry Wentland 	INTERRUPT_POLARITY_HIGH,
1854562236bSHarry Wentland 	INTERRUPT_POLARITY_BOTH
1864562236bSHarry Wentland };
1874562236bSHarry Wentland 
1884562236bSHarry Wentland #define DC_DECODE_INTERRUPT_POLARITY(int_polarity) \
1894562236bSHarry Wentland 	(int_polarity == INTERRUPT_POLARITY_LOW) ? "Low" : \
1904562236bSHarry Wentland 	(int_polarity == INTERRUPT_POLARITY_HIGH) ? "High" : \
1914562236bSHarry Wentland 	(int_polarity == INTERRUPT_POLARITY_BOTH) ? "Both" : "Invalid"
1924562236bSHarry Wentland 
1934562236bSHarry Wentland struct dc_timer_interrupt_params {
1944562236bSHarry Wentland 	uint32_t micro_sec_interval;
1954562236bSHarry Wentland 	enum dc_interrupt_context int_context;
1964562236bSHarry Wentland };
1974562236bSHarry Wentland 
1984562236bSHarry Wentland struct dc_interrupt_params {
1994562236bSHarry Wentland 	/* The polarity *change* which will trigger an interrupt.
2004562236bSHarry Wentland 	 * If 'requested_polarity == INTERRUPT_POLARITY_BOTH', then
2014562236bSHarry Wentland 	 * 'current_polarity' must be initialised. */
2024562236bSHarry Wentland 	enum dc_interrupt_porlarity requested_polarity;
2034562236bSHarry Wentland 	/* If 'requested_polarity == INTERRUPT_POLARITY_BOTH',
2044562236bSHarry Wentland 	 * 'current_polarity' should contain the current state, which means
2054562236bSHarry Wentland 	 * the interrupt will be triggered when state changes from what is,
2064562236bSHarry Wentland 	 * in 'current_polarity'. */
2074562236bSHarry Wentland 	enum dc_interrupt_porlarity current_polarity;
2084562236bSHarry Wentland 	enum dc_irq_source irq_source;
2094562236bSHarry Wentland 	enum dc_interrupt_context int_context;
2104562236bSHarry Wentland };
2114562236bSHarry Wentland 
2124562236bSHarry Wentland #endif
213