您需要更多的上下文來確定這些interrupts
屬性所代表的內容。以類似的東西到你的第一個例子,讓我們來看看arch/powerpc/boot/dts/bamboo.dts
,它具有以下內容:
UART1: [email protected] {
device_type = "serial";
compatible = "ns16550";
reg = <0xef600400 0x00000008>;
virtual-reg = <0xef600400>;
clock-frequency = <0>;
current-speed = <0>;
interrupt-parent = <&UIC0>;
interrupts = <0x1 0x4>;
};
的interrupts
屬性描述此設備的中斷控制器的連接。假設控制器有多個輸入(即中斷線),我們需要找出該設備將與哪個線路交互。
不同的控制器可能有不同的解複用他們的IRQ的方法,因此屬性類型的變化。在這種情況下,我們來看看中斷控制器。我們看到,[email protected]
節點具有以下屬性:
interrupt-parent = <&UIC0>;
的&UIC0
語法告訴我們,有一個能通過UiC0標籤在設備樹的其他地方。這是我們的中斷控制器。如果我們發現標籤,我們可以看到:
UIC0: interrupt-controller0 {
compatible = "ibm,uic-440ep","ibm,uic";
interrupt-controller;
cell-index = <0>;
dcr-reg = <0x0c0 0x009>;
#address-cells = <0>;
#size-cells = <0>;
#interrupt-cells = <2>;
};
首先,我們看到,#interrupt-cells
是2 - 這意味着每個中斷描述符佔據兩個單元。由於串口設備的interrupt
屬性有兩個單元(0x1和0x4),這告訴我們有一箇中斷線被描述。
compatible
屬性告訴我們這是一個IBM UIC中斷控制器。如果我們看一看司機爲控制器,我們可以看到:
static struct irq_domain_ops uic_host_ops = {
.map = uic_host_map,
.xlate = irq_domain_xlate_twocell,
};
這XLATE功能是什麼來的中斷源interrupts
屬性映射到一個硬件中斷號(也可能是它的IRQ型)。該irq_domain_xlate_twocell
功能是非常簡單的:
int irq_domain_xlate_twocell(struct irq_domain *d, struct device_node *ctrlr,
const u32 *intspec, unsigned int intsize,
irq_hw_number_t *out_hwirq, unsigned int *out_type)
{
if (WARN_ON(intsize < 2))
return -EINVAL;
*out_hwirq = intspec[0];
*out_type = intspec[1] & IRQ_TYPE_SENSE_MASK;
return 0;
}
所以(正如彼得·L的他的評論中提及),在這種情況下,兩個細胞<0x1 0x4>
表示斷線1,和電平高(爲0x4 == IRQ_TYPE_LEVEL_HIGH
)中斷類型。
你的第二個例子稍微複雜一些:它使用一個mpic中斷控制器,它有自己的xlate
函數。查看arch/powerpc/sysdev/mpic.c
的mpic_host_xlate
瞭解內部細節。
這裏有一些信息,但它看起來像這些值將硬件特定:http://www.devicetree.org/Device_Tree_Usage – 2014-10-29 20:58:34
@AmitSinghTomar你將不得不看看這個設備的設備樹綁定,但第一個數字通常表示中斷線,第二個通常指示是否是上升沿觸發,下降沿,電平觸發等。 – 2014-10-29 21:32:31