@@ -73,6 +73,10 @@ enum si_intf_state {
7373/* 'invalid' to allow a firmware-specified interface to be disabled */
7474const char * const si_to_str [] = { "invalid" , "kcs" , "smic" , "bt" , NULL };
7575
76+ const struct ipmi_match_info ipmi_kcs_si_info = { .type = SI_KCS };
77+ const struct ipmi_match_info ipmi_smic_si_info = { .type = SI_SMIC };
78+ const struct ipmi_match_info ipmi_bt_si_info = { .type = SI_BT };
79+
7680static bool initialized ;
7781
7882/*
@@ -692,7 +696,7 @@ static void handle_transaction_done(struct smi_info *smi_info)
692696 break ;
693697 }
694698 enables = current_global_enables (smi_info , 0 , & irq_on );
695- if (smi_info -> io .si_type == SI_BT )
699+ if (smi_info -> io .si_info -> type == SI_BT )
696700 /* BT has its own interrupt enable bit. */
697701 check_bt_irq (smi_info , irq_on );
698702 if (enables != (msg [3 ] & GLOBAL_ENABLES_MASK )) {
@@ -1119,7 +1123,7 @@ irqreturn_t ipmi_si_irq_handler(int irq, void *data)
11191123 struct smi_info * smi_info = data ;
11201124 unsigned long flags ;
11211125
1122- if (smi_info -> io .si_type == SI_BT )
1126+ if (smi_info -> io .si_info -> type == SI_BT )
11231127 /* We need to clear the IRQ flag for the BT interface. */
11241128 smi_info -> io .outputb (& smi_info -> io , IPMI_BT_INTMASK_REG ,
11251129 IPMI_BT_INTMASK_CLEAR_IRQ_BIT
@@ -1164,7 +1168,7 @@ static int smi_start_processing(void *send_info,
11641168 * The BT interface is efficient enough to not need a thread,
11651169 * and there is no need for a thread if we have interrupts.
11661170 */
1167- else if (( new_smi -> io .si_type != SI_BT ) && ( !new_smi -> io .irq ) )
1171+ else if (new_smi -> io .si_info -> type != SI_BT && !new_smi -> io .irq )
11681172 enable = 1 ;
11691173
11701174 if (enable ) {
@@ -1235,15 +1239,15 @@ MODULE_PARM_DESC(kipmid_max_busy_us,
12351239
12361240void ipmi_irq_finish_setup (struct si_sm_io * io )
12371241{
1238- if (io -> si_type == SI_BT )
1242+ if (io -> si_info -> type == SI_BT )
12391243 /* Enable the interrupt in the BT interface. */
12401244 io -> outputb (io , IPMI_BT_INTMASK_REG ,
12411245 IPMI_BT_INTMASK_ENABLE_IRQ_BIT );
12421246}
12431247
12441248void ipmi_irq_start_cleanup (struct si_sm_io * io )
12451249{
1246- if (io -> si_type == SI_BT )
1250+ if (io -> si_info -> type == SI_BT )
12471251 /* Disable the interrupt in the BT interface. */
12481252 io -> outputb (io , IPMI_BT_INTMASK_REG , 0 );
12491253}
@@ -1614,7 +1618,7 @@ static ssize_t type_show(struct device *dev,
16141618{
16151619 struct smi_info * smi_info = dev_get_drvdata (dev );
16161620
1617- return sysfs_emit (buf , "%s\n" , si_to_str [smi_info -> io .si_type ]);
1621+ return sysfs_emit (buf , "%s\n" , si_to_str [smi_info -> io .si_info -> type ]);
16181622}
16191623static DEVICE_ATTR_RO (type );
16201624
@@ -1649,7 +1653,7 @@ static ssize_t params_show(struct device *dev,
16491653
16501654 return sysfs_emit (buf ,
16511655 "%s,%s,0x%lx,rsp=%d,rsi=%d,rsh=%d,irq=%d,ipmb=%d\n" ,
1652- si_to_str [smi_info -> io .si_type ],
1656+ si_to_str [smi_info -> io .si_info -> type ],
16531657 addr_space_to_str [smi_info -> io .addr_space ],
16541658 smi_info -> io .addr_data ,
16551659 smi_info -> io .regspacing ,
@@ -1803,7 +1807,7 @@ setup_dell_poweredge_bt_xaction_handler(struct smi_info *smi_info)
18031807{
18041808 struct ipmi_device_id * id = & smi_info -> device_id ;
18051809 if (id -> manufacturer_id == DELL_IANA_MFR_ID &&
1806- smi_info -> io .si_type == SI_BT )
1810+ smi_info -> io .si_info -> type == SI_BT )
18071811 register_xaction_notifier (& dell_poweredge_bt_xaction_notifier );
18081812}
18091813
@@ -1907,13 +1911,13 @@ int ipmi_si_add_smi(struct si_sm_io *io)
19071911 /* We prefer ACPI over SMBIOS. */
19081912 dev_info (dup -> io .dev ,
19091913 "Removing SMBIOS-specified %s state machine in favor of ACPI\n" ,
1910- si_to_str [new_smi -> io .si_type ]);
1914+ si_to_str [new_smi -> io .si_info -> type ]);
19111915 cleanup_one_si (dup );
19121916 } else {
19131917 dev_info (new_smi -> io .dev ,
19141918 "%s-specified %s state machine: duplicate\n" ,
19151919 ipmi_addr_src_to_str (new_smi -> io .addr_source ),
1916- si_to_str [new_smi -> io .si_type ]);
1920+ si_to_str [new_smi -> io .si_info -> type ]);
19171921 rv = - EBUSY ;
19181922 kfree (new_smi );
19191923 goto out_err ;
@@ -1922,7 +1926,7 @@ int ipmi_si_add_smi(struct si_sm_io *io)
19221926
19231927 pr_info ("Adding %s-specified %s state machine\n" ,
19241928 ipmi_addr_src_to_str (new_smi -> io .addr_source ),
1925- si_to_str [new_smi -> io .si_type ]);
1929+ si_to_str [new_smi -> io .si_info -> type ]);
19261930
19271931 list_add_tail (& new_smi -> link , & smi_infos );
19281932
@@ -1945,12 +1949,12 @@ static int try_smi_init(struct smi_info *new_smi)
19451949
19461950 pr_info ("Trying %s-specified %s state machine at %s address 0x%lx, slave address 0x%x, irq %d\n" ,
19471951 ipmi_addr_src_to_str (new_smi -> io .addr_source ),
1948- si_to_str [new_smi -> io .si_type ],
1952+ si_to_str [new_smi -> io .si_info -> type ],
19491953 addr_space_to_str [new_smi -> io .addr_space ],
19501954 new_smi -> io .addr_data ,
19511955 new_smi -> io .slave_addr , new_smi -> io .irq );
19521956
1953- switch (new_smi -> io .si_type ) {
1957+ switch (new_smi -> io .si_info -> type ) {
19541958 case SI_KCS :
19551959 new_smi -> handlers = & kcs_smi_handlers ;
19561960 break ;
@@ -2073,7 +2077,7 @@ static int try_smi_init(struct smi_info *new_smi)
20732077 smi_num ++ ;
20742078
20752079 dev_info (new_smi -> io .dev , "IPMI %s interface initialized\n" ,
2076- si_to_str [new_smi -> io .si_type ]);
2080+ si_to_str [new_smi -> io .si_info -> type ]);
20772081
20782082 WARN_ON (new_smi -> io .dev -> init_name != NULL );
20792083
@@ -2267,7 +2271,7 @@ struct device *ipmi_si_remove_by_data(int addr_space, enum si_type si_type,
22672271 list_for_each_entry_safe (e , tmp_e , & smi_infos , link ) {
22682272 if (e -> io .addr_space != addr_space )
22692273 continue ;
2270- if (e -> io .si_type != si_type )
2274+ if (e -> io .si_info -> type != si_type )
22712275 continue ;
22722276 if (e -> io .addr_data == addr ) {
22732277 dev = get_device (e -> io .dev );
0 commit comments