Symbol: ssif_info
drivers/char/ipmi/ipmi_ssif.c
1000
if (ssif_info->data_len > 32) {
drivers/char/ipmi/ipmi_ssif.c
1002
ssif_info->multi_data = ssif_info->data;
drivers/char/ipmi/ipmi_ssif.c
1003
ssif_info->multi_len = ssif_info->data_len;
drivers/char/ipmi/ipmi_ssif.c
1009
ssif_info->multi_pos = 32;
drivers/char/ipmi/ipmi_ssif.c
1010
ssif_info->data[0] = 32;
drivers/char/ipmi/ipmi_ssif.c
1012
ssif_info->multi_data = NULL;
drivers/char/ipmi/ipmi_ssif.c
1014
ssif_info->data[0] = ssif_info->data_len;
drivers/char/ipmi/ipmi_ssif.c
1017
ssif_i2c_send(ssif_info, msg_written_handler, I2C_SMBUS_WRITE,
drivers/char/ipmi/ipmi_ssif.c
1018
command, ssif_info->data, I2C_SMBUS_BLOCK_DATA);
drivers/char/ipmi/ipmi_ssif.c
1021
static int start_send(struct ssif_info *ssif_info,
drivers/char/ipmi/ipmi_ssif.c
1027
if (len > ssif_info->max_xmit_msg_size)
drivers/char/ipmi/ipmi_ssif.c
1030
ssif_info->retries_left = SSIF_SEND_RETRIES;
drivers/char/ipmi/ipmi_ssif.c
1031
memcpy(ssif_info->data + 1, data, len);
drivers/char/ipmi/ipmi_ssif.c
1032
ssif_info->data_len = len;
drivers/char/ipmi/ipmi_ssif.c
1033
start_resend(ssif_info);
drivers/char/ipmi/ipmi_ssif.c
1038
static void start_next_msg(struct ssif_info *ssif_info, unsigned long *flags)
drivers/char/ipmi/ipmi_ssif.c
1044
if (!IS_SSIF_IDLE(ssif_info)) {
drivers/char/ipmi/ipmi_ssif.c
1045
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
1049
if (!ssif_info->waiting_msg) {
drivers/char/ipmi/ipmi_ssif.c
1050
ssif_info->curr_msg = NULL;
drivers/char/ipmi/ipmi_ssif.c
1051
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
1055
ssif_info->curr_msg = ssif_info->waiting_msg;
drivers/char/ipmi/ipmi_ssif.c
1056
ssif_info->waiting_msg = NULL;
drivers/char/ipmi/ipmi_ssif.c
1057
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
1058
rv = start_send(ssif_info,
drivers/char/ipmi/ipmi_ssif.c
1059
ssif_info->curr_msg->data,
drivers/char/ipmi/ipmi_ssif.c
1060
ssif_info->curr_msg->data_size);
drivers/char/ipmi/ipmi_ssif.c
1062
msg = ssif_info->curr_msg;
drivers/char/ipmi/ipmi_ssif.c
1063
ssif_info->curr_msg = NULL;
drivers/char/ipmi/ipmi_ssif.c
1064
return_hosed_msg(ssif_info, msg);
drivers/char/ipmi/ipmi_ssif.c
1065
flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
drivers/char/ipmi/ipmi_ssif.c
1073
struct ssif_info *ssif_info = send_info;
drivers/char/ipmi/ipmi_ssif.c
1076
BUG_ON(ssif_info->waiting_msg);
drivers/char/ipmi/ipmi_ssif.c
1077
ssif_info->waiting_msg = msg;
drivers/char/ipmi/ipmi_ssif.c
1079
flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
drivers/char/ipmi/ipmi_ssif.c
1080
start_next_msg(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
1082
if (ssif_info->ssif_debug & SSIF_DEBUG_TIMING) {
drivers/char/ipmi/ipmi_ssif.c
1086
dev_dbg(&ssif_info->client->dev, "**Enqueue %02x %02x: %ptSp\n",
drivers/char/ipmi/ipmi_ssif.c
1094
struct ssif_info *ssif_info = send_info;
drivers/char/ipmi/ipmi_ssif.c
1096
data->addr_src = ssif_info->addr_source;
drivers/char/ipmi/ipmi_ssif.c
1097
data->dev = &ssif_info->client->dev;
drivers/char/ipmi/ipmi_ssif.c
1098
data->addr_info = ssif_info->addr_info;
drivers/char/ipmi/ipmi_ssif.c
1109
struct ssif_info *ssif_info = send_info;
drivers/char/ipmi/ipmi_ssif.c
1112
if (!ssif_info->has_event_buffer)
drivers/char/ipmi/ipmi_ssif.c
1115
flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
drivers/char/ipmi/ipmi_ssif.c
1116
ssif_info->req_events = true;
drivers/char/ipmi/ipmi_ssif.c
1117
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
1126
struct ssif_info *ssif_info = send_info;
drivers/char/ipmi/ipmi_ssif.c
1135
flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
drivers/char/ipmi/ipmi_ssif.c
1136
if (timeout != ssif_info->watch_timeout) {
drivers/char/ipmi/ipmi_ssif.c
1137
ssif_info->watch_timeout = timeout;
drivers/char/ipmi/ipmi_ssif.c
1138
if (ssif_info->watch_timeout)
drivers/char/ipmi/ipmi_ssif.c
1139
mod_timer(&ssif_info->watch_timer,
drivers/char/ipmi/ipmi_ssif.c
1140
jiffies + ssif_info->watch_timeout);
drivers/char/ipmi/ipmi_ssif.c
1142
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
1148
struct ssif_info *ssif_info = send_info;
drivers/char/ipmi/ipmi_ssif.c
1150
ssif_info->intf = intf;
drivers/char/ipmi/ipmi_ssif.c
1207
struct ssif_info *ssif_info = dev_get_drvdata(dev); \
drivers/char/ipmi/ipmi_ssif.c
1209
return sysfs_emit(buf, "%u\n", ssif_get_stat(ssif_info, name));\
drivers/char/ipmi/ipmi_ssif.c
1259
struct ssif_info *ssif_info = send_info;
drivers/char/ipmi/ipmi_ssif.c
1261
device_remove_group(&ssif_info->client->dev, &ipmi_ssif_dev_attr_group);
drivers/char/ipmi/ipmi_ssif.c
1262
dev_set_drvdata(&ssif_info->client->dev, NULL);
drivers/char/ipmi/ipmi_ssif.c
1265
while (ssif_info->ssif_state != SSIF_IDLE)
drivers/char/ipmi/ipmi_ssif.c
1268
ssif_info->stopping = true;
drivers/char/ipmi/ipmi_ssif.c
1269
timer_delete_sync(&ssif_info->watch_timer);
drivers/char/ipmi/ipmi_ssif.c
1270
timer_delete_sync(&ssif_info->retry_timer);
drivers/char/ipmi/ipmi_ssif.c
1271
if (ssif_info->thread)
drivers/char/ipmi/ipmi_ssif.c
1272
kthread_stop(ssif_info->thread);
drivers/char/ipmi/ipmi_ssif.c
1277
struct ssif_info *ssif_info = i2c_get_clientdata(client);
drivers/char/ipmi/ipmi_ssif.c
1284
ipmi_unregister_smi(ssif_info->intf);
drivers/char/ipmi/ipmi_ssif.c
1293
kfree(ssif_info);
drivers/char/ipmi/ipmi_ssif.c
1441
static bool check_acpi(struct ssif_info *ssif_info, struct device *dev)
drivers/char/ipmi/ipmi_ssif.c
1448
ssif_info->addr_source = SI_ACPI;
drivers/char/ipmi/ipmi_ssif.c
1449
ssif_info->addr_info.acpi_info.acpi_handle = acpi_handle;
drivers/char/ipmi/ipmi_ssif.c
1504
struct ssif_info *ssif_info,
drivers/char/ipmi/ipmi_ssif.c
1511
if (ssif_info->max_xmit_msg_size <= 32)
drivers/char/ipmi/ipmi_ssif.c
1514
do_middle = ssif_info->max_xmit_msg_size > 63;
drivers/char/ipmi/ipmi_ssif.c
1558
ssif_info->cmd8_works = true;
drivers/char/ipmi/ipmi_ssif.c
1578
if (ssif_info->max_xmit_msg_size > 63)
drivers/char/ipmi/ipmi_ssif.c
1579
ssif_info->max_xmit_msg_size = 63;
drivers/char/ipmi/ipmi_ssif.c
1583
ssif_info->max_xmit_msg_size = 32;
drivers/char/ipmi/ipmi_ssif.c
1595
struct ssif_info *ssif_info = i2c_get_clientdata(client);
drivers/char/ipmi/ipmi_ssif.c
1597
ipmi_unregister_smi(ssif_info->intf);
drivers/char/ipmi/ipmi_ssif.c
1598
kfree(ssif_info);
drivers/char/ipmi/ipmi_ssif.c
1627
struct ssif_info *ssif_info)
drivers/char/ipmi/ipmi_ssif.c
1639
if (ssif_info->addr_source == SI_ACPI &&
drivers/char/ipmi/ipmi_ssif.c
1656
struct ssif_info *ssif_info;
drivers/char/ipmi/ipmi_ssif.c
1670
ssif_info = kzalloc_obj(*ssif_info);
drivers/char/ipmi/ipmi_ssif.c
1671
if (!ssif_info) {
drivers/char/ipmi/ipmi_ssif.c
1677
if (!check_acpi(ssif_info, &client->dev)) {
drivers/char/ipmi/ipmi_ssif.c
1682
ssif_info->addr_source = SI_HOTMOD;
drivers/char/ipmi/ipmi_ssif.c
1684
ssif_info->addr_source = addr_info->addr_src;
drivers/char/ipmi/ipmi_ssif.c
1685
ssif_info->ssif_debug = addr_info->debug;
drivers/char/ipmi/ipmi_ssif.c
1686
ssif_info->addr_info = addr_info->addr_info;
drivers/char/ipmi/ipmi_ssif.c
1692
ssif_info->client = client;
drivers/char/ipmi/ipmi_ssif.c
1693
i2c_set_clientdata(client, ssif_info);
drivers/char/ipmi/ipmi_ssif.c
1695
rv = ssif_check_and_remove(client, ssif_info);
drivers/char/ipmi/ipmi_ssif.c
1697
if (!rv && ssif_info->addr_source == SI_ACPI) {
drivers/char/ipmi/ipmi_ssif.c
1712
ipmi_addr_src_to_str(ssif_info->addr_source),
drivers/char/ipmi/ipmi_ssif.c
1733
dev_dbg(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
1739
ssif_info->max_xmit_msg_size = resp[5];
drivers/char/ipmi/ipmi_ssif.c
1740
ssif_info->max_recv_msg_size = resp[6];
drivers/char/ipmi/ipmi_ssif.c
1741
ssif_info->multi_support = (resp[4] >> 6) & 0x3;
drivers/char/ipmi/ipmi_ssif.c
1742
ssif_info->supports_pec = (resp[4] >> 3) & 0x1;
drivers/char/ipmi/ipmi_ssif.c
1745
switch (ssif_info->multi_support) {
drivers/char/ipmi/ipmi_ssif.c
1747
if (ssif_info->max_xmit_msg_size > 32)
drivers/char/ipmi/ipmi_ssif.c
1748
ssif_info->max_xmit_msg_size = 32;
drivers/char/ipmi/ipmi_ssif.c
1749
if (ssif_info->max_recv_msg_size > 32)
drivers/char/ipmi/ipmi_ssif.c
1750
ssif_info->max_recv_msg_size = 32;
drivers/char/ipmi/ipmi_ssif.c
1754
if (ssif_info->max_xmit_msg_size > 63)
drivers/char/ipmi/ipmi_ssif.c
1755
ssif_info->max_xmit_msg_size = 63;
drivers/char/ipmi/ipmi_ssif.c
1756
if (ssif_info->max_recv_msg_size > 62)
drivers/char/ipmi/ipmi_ssif.c
1757
ssif_info->max_recv_msg_size = 62;
drivers/char/ipmi/ipmi_ssif.c
1771
dev_info(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
1775
ssif_info->max_xmit_msg_size = 32;
drivers/char/ipmi/ipmi_ssif.c
1776
ssif_info->max_recv_msg_size = 32;
drivers/char/ipmi/ipmi_ssif.c
1777
ssif_info->multi_support = SSIF_NO_MULTI;
drivers/char/ipmi/ipmi_ssif.c
1778
ssif_info->supports_pec = 0;
drivers/char/ipmi/ipmi_ssif.c
1781
test_multipart_messages(client, ssif_info, resp);
drivers/char/ipmi/ipmi_ssif.c
1789
dev_warn(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
1798
dev_warn(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
1805
ssif_info->global_enables = resp[3];
drivers/char/ipmi/ipmi_ssif.c
1808
ssif_info->has_event_buffer = true;
drivers/char/ipmi/ipmi_ssif.c
1815
msg[2] = ssif_info->global_enables | IPMI_BMC_EVT_MSG_BUFF;
drivers/char/ipmi/ipmi_ssif.c
1818
dev_warn(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
1827
ssif_info->has_event_buffer = true;
drivers/char/ipmi/ipmi_ssif.c
1828
ssif_info->global_enables |= IPMI_BMC_EVT_MSG_BUFF;
drivers/char/ipmi/ipmi_ssif.c
1837
msg[2] = ssif_info->global_enables | IPMI_BMC_RCV_MSG_INTR;
drivers/char/ipmi/ipmi_ssif.c
1840
dev_warn(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
1849
ssif_info->supports_alert = true;
drivers/char/ipmi/ipmi_ssif.c
1850
ssif_info->global_enables |= IPMI_BMC_RCV_MSG_INTR;
drivers/char/ipmi/ipmi_ssif.c
1855
dev_dbg(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
1860
spin_lock_init(&ssif_info->lock);
drivers/char/ipmi/ipmi_ssif.c
1861
ssif_info->ssif_state = SSIF_IDLE;
drivers/char/ipmi/ipmi_ssif.c
1862
timer_setup(&ssif_info->retry_timer, retry_timeout, 0);
drivers/char/ipmi/ipmi_ssif.c
1863
timer_setup(&ssif_info->watch_timer, watch_timeout, 0);
drivers/char/ipmi/ipmi_ssif.c
1866
atomic_set(&ssif_info->stats[i], 0);
drivers/char/ipmi/ipmi_ssif.c
1868
if (ssif_info->supports_pec)
drivers/char/ipmi/ipmi_ssif.c
1869
ssif_info->client->flags |= I2C_CLIENT_PEC;
drivers/char/ipmi/ipmi_ssif.c
1871
ssif_info->handlers.owner = THIS_MODULE;
drivers/char/ipmi/ipmi_ssif.c
1872
ssif_info->handlers.start_processing = ssif_start_processing;
drivers/char/ipmi/ipmi_ssif.c
1873
ssif_info->handlers.shutdown = shutdown_ssif;
drivers/char/ipmi/ipmi_ssif.c
1874
ssif_info->handlers.get_smi_info = get_smi_info;
drivers/char/ipmi/ipmi_ssif.c
1875
ssif_info->handlers.sender = sender;
drivers/char/ipmi/ipmi_ssif.c
1876
ssif_info->handlers.request_events = request_events;
drivers/char/ipmi/ipmi_ssif.c
1877
ssif_info->handlers.set_need_watch = ssif_set_need_watch;
drivers/char/ipmi/ipmi_ssif.c
1882
thread_num = ((i2c_adapter_id(ssif_info->client->adapter)
drivers/char/ipmi/ipmi_ssif.c
1884
ssif_info->client->addr);
drivers/char/ipmi/ipmi_ssif.c
1885
init_completion(&ssif_info->wake_thread);
drivers/char/ipmi/ipmi_ssif.c
1886
ssif_info->thread = kthread_run(ipmi_ssif_thread, ssif_info,
drivers/char/ipmi/ipmi_ssif.c
1888
if (IS_ERR(ssif_info->thread)) {
drivers/char/ipmi/ipmi_ssif.c
1889
rv = PTR_ERR(ssif_info->thread);
drivers/char/ipmi/ipmi_ssif.c
1890
dev_notice(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
1897
dev_set_drvdata(&ssif_info->client->dev, ssif_info);
drivers/char/ipmi/ipmi_ssif.c
1898
rv = device_add_group(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
1901
dev_err(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
1907
rv = ipmi_register_smi(&ssif_info->handlers,
drivers/char/ipmi/ipmi_ssif.c
1908
ssif_info,
drivers/char/ipmi/ipmi_ssif.c
1909
&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
1912
dev_err(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
1922
dev_err(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
1925
kfree(ssif_info);
drivers/char/ipmi/ipmi_ssif.c
1932
device_remove_group(&ssif_info->client->dev, &ipmi_ssif_dev_attr_group);
drivers/char/ipmi/ipmi_ssif.c
1933
dev_set_drvdata(&ssif_info->client->dev, NULL);
drivers/char/ipmi/ipmi_ssif.c
196
struct ssif_info;
drivers/char/ipmi/ipmi_ssif.c
198
typedef void (*ssif_i2c_done)(struct ssif_info *ssif_info, int result,
drivers/char/ipmi/ipmi_ssif.c
300
static void return_hosed_msg(struct ssif_info *ssif_info,
drivers/char/ipmi/ipmi_ssif.c
302
static void start_next_msg(struct ssif_info *ssif_info, unsigned long *flags);
drivers/char/ipmi/ipmi_ssif.c
303
static int start_send(struct ssif_info *ssif_info,
drivers/char/ipmi/ipmi_ssif.c
307
static unsigned long *ipmi_ssif_lock_cond(struct ssif_info *ssif_info,
drivers/char/ipmi/ipmi_ssif.c
309
__acquires(&ssif_info->lock)
drivers/char/ipmi/ipmi_ssif.c
311
spin_lock_irqsave(&ssif_info->lock, *flags);
drivers/char/ipmi/ipmi_ssif.c
315
static void ipmi_ssif_unlock_cond(struct ssif_info *ssif_info,
drivers/char/ipmi/ipmi_ssif.c
317
__releases(&ssif_info->lock)
drivers/char/ipmi/ipmi_ssif.c
319
spin_unlock_irqrestore(&ssif_info->lock, *flags);
drivers/char/ipmi/ipmi_ssif.c
322
static void deliver_recv_msg(struct ssif_info *ssif_info,
drivers/char/ipmi/ipmi_ssif.c
326
return_hosed_msg(ssif_info, msg);
drivers/char/ipmi/ipmi_ssif.c
327
dev_err(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
331
ipmi_smi_msg_received(ssif_info->intf, msg);
drivers/char/ipmi/ipmi_ssif.c
335
static void return_hosed_msg(struct ssif_info *ssif_info,
drivers/char/ipmi/ipmi_ssif.c
338
ssif_inc_stat(ssif_info, hosed);
drivers/char/ipmi/ipmi_ssif.c
346
deliver_recv_msg(ssif_info, msg);
drivers/char/ipmi/ipmi_ssif.c
355
static void start_clear_flags(struct ssif_info *ssif_info, unsigned long *flags)
drivers/char/ipmi/ipmi_ssif.c
359
ssif_info->msg_flags &= ~WDT_PRE_TIMEOUT_INT;
drivers/char/ipmi/ipmi_ssif.c
360
ssif_info->ssif_state = SSIF_CLEARING_FLAGS;
drivers/char/ipmi/ipmi_ssif.c
361
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
368
if (start_send(ssif_info, msg, 3) != 0) {
drivers/char/ipmi/ipmi_ssif.c
370
ssif_info->ssif_state = SSIF_IDLE;
drivers/char/ipmi/ipmi_ssif.c
374
static void start_flag_fetch(struct ssif_info *ssif_info, unsigned long *flags)
drivers/char/ipmi/ipmi_ssif.c
378
ssif_info->req_flags = false;
drivers/char/ipmi/ipmi_ssif.c
379
ssif_info->ssif_state = SSIF_GETTING_FLAGS;
drivers/char/ipmi/ipmi_ssif.c
380
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
384
if (start_send(ssif_info, mb, 2) != 0)
drivers/char/ipmi/ipmi_ssif.c
385
ssif_info->ssif_state = SSIF_IDLE;
drivers/char/ipmi/ipmi_ssif.c
388
static void check_start_send(struct ssif_info *ssif_info, unsigned long *flags,
drivers/char/ipmi/ipmi_ssif.c
391
if (start_send(ssif_info, msg->data, msg->data_size) != 0) {
drivers/char/ipmi/ipmi_ssif.c
394
flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
drivers/char/ipmi/ipmi_ssif.c
395
ssif_info->curr_msg = NULL;
drivers/char/ipmi/ipmi_ssif.c
396
ssif_info->ssif_state = SSIF_IDLE;
drivers/char/ipmi/ipmi_ssif.c
397
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
402
static void start_event_fetch(struct ssif_info *ssif_info, unsigned long *flags)
drivers/char/ipmi/ipmi_ssif.c
406
ssif_info->req_events = false;
drivers/char/ipmi/ipmi_ssif.c
410
ssif_info->ssif_state = SSIF_IDLE;
drivers/char/ipmi/ipmi_ssif.c
411
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
415
ssif_info->curr_msg = msg;
drivers/char/ipmi/ipmi_ssif.c
416
ssif_info->ssif_state = SSIF_GETTING_EVENTS;
drivers/char/ipmi/ipmi_ssif.c
417
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
423
check_start_send(ssif_info, flags, msg);
drivers/char/ipmi/ipmi_ssif.c
426
static void start_recv_msg_fetch(struct ssif_info *ssif_info,
drivers/char/ipmi/ipmi_ssif.c
433
ssif_info->ssif_state = SSIF_IDLE;
drivers/char/ipmi/ipmi_ssif.c
434
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
438
ssif_info->curr_msg = msg;
drivers/char/ipmi/ipmi_ssif.c
439
ssif_info->ssif_state = SSIF_GETTING_MESSAGES;
drivers/char/ipmi/ipmi_ssif.c
440
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
446
check_start_send(ssif_info, flags, msg);
drivers/char/ipmi/ipmi_ssif.c
455
static void handle_flags(struct ssif_info *ssif_info, unsigned long *flags)
drivers/char/ipmi/ipmi_ssif.c
457
if (ssif_info->msg_flags & WDT_PRE_TIMEOUT_INT) {
drivers/char/ipmi/ipmi_ssif.c
459
ssif_inc_stat(ssif_info, watchdog_pretimeouts);
drivers/char/ipmi/ipmi_ssif.c
460
start_clear_flags(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
461
ipmi_smi_watchdog_pretimeout(ssif_info->intf);
drivers/char/ipmi/ipmi_ssif.c
462
} else if (ssif_info->msg_flags & RECEIVE_MSG_AVAIL)
drivers/char/ipmi/ipmi_ssif.c
464
start_recv_msg_fetch(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
465
else if (ssif_info->msg_flags & EVENT_MSG_BUFFER_FULL)
drivers/char/ipmi/ipmi_ssif.c
467
start_event_fetch(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
469
ssif_info->ssif_state = SSIF_IDLE;
drivers/char/ipmi/ipmi_ssif.c
470
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
476
struct ssif_info *ssif_info = data;
drivers/char/ipmi/ipmi_ssif.c
483
&ssif_info->wake_thread);
drivers/char/ipmi/ipmi_ssif.c
486
init_completion(&ssif_info->wake_thread);
drivers/char/ipmi/ipmi_ssif.c
488
if (ssif_info->i2c_read_write == I2C_SMBUS_WRITE) {
drivers/char/ipmi/ipmi_ssif.c
490
ssif_info->client, ssif_info->i2c_command,
drivers/char/ipmi/ipmi_ssif.c
491
ssif_info->i2c_data[0],
drivers/char/ipmi/ipmi_ssif.c
492
ssif_info->i2c_data + 1);
drivers/char/ipmi/ipmi_ssif.c
493
ssif_info->done_handler(ssif_info, result, NULL, 0);
drivers/char/ipmi/ipmi_ssif.c
496
ssif_info->client, ssif_info->i2c_command,
drivers/char/ipmi/ipmi_ssif.c
497
ssif_info->i2c_data);
drivers/char/ipmi/ipmi_ssif.c
499
ssif_info->done_handler(ssif_info, result,
drivers/char/ipmi/ipmi_ssif.c
502
ssif_info->done_handler(ssif_info, 0,
drivers/char/ipmi/ipmi_ssif.c
503
ssif_info->i2c_data,
drivers/char/ipmi/ipmi_ssif.c
511
static void ssif_i2c_send(struct ssif_info *ssif_info,
drivers/char/ipmi/ipmi_ssif.c
516
ssif_info->done_handler = handler;
drivers/char/ipmi/ipmi_ssif.c
518
ssif_info->i2c_read_write = read_write;
drivers/char/ipmi/ipmi_ssif.c
519
ssif_info->i2c_command = command;
drivers/char/ipmi/ipmi_ssif.c
520
ssif_info->i2c_data = data;
drivers/char/ipmi/ipmi_ssif.c
521
ssif_info->i2c_size = size;
drivers/char/ipmi/ipmi_ssif.c
522
complete(&ssif_info->wake_thread);
drivers/char/ipmi/ipmi_ssif.c
526
static void msg_done_handler(struct ssif_info *ssif_info, int result,
drivers/char/ipmi/ipmi_ssif.c
529
static void start_get(struct ssif_info *ssif_info)
drivers/char/ipmi/ipmi_ssif.c
531
ssif_info->multi_pos = 0;
drivers/char/ipmi/ipmi_ssif.c
533
ssif_i2c_send(ssif_info, msg_done_handler, I2C_SMBUS_READ,
drivers/char/ipmi/ipmi_ssif.c
535
ssif_info->recv, I2C_SMBUS_BLOCK_DATA);
drivers/char/ipmi/ipmi_ssif.c
538
static void start_resend(struct ssif_info *ssif_info);
drivers/char/ipmi/ipmi_ssif.c
542
struct ssif_info *ssif_info = timer_container_of(ssif_info, t,
drivers/char/ipmi/ipmi_ssif.c
547
if (ssif_info->stopping)
drivers/char/ipmi/ipmi_ssif.c
550
flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
drivers/char/ipmi/ipmi_ssif.c
551
resend = ssif_info->do_resend;
drivers/char/ipmi/ipmi_ssif.c
552
ssif_info->do_resend = false;
drivers/char/ipmi/ipmi_ssif.c
553
waiting = ssif_info->waiting_alert;
drivers/char/ipmi/ipmi_ssif.c
554
ssif_info->waiting_alert = false;
drivers/char/ipmi/ipmi_ssif.c
555
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
558
start_get(ssif_info);
drivers/char/ipmi/ipmi_ssif.c
560
start_resend(ssif_info);
drivers/char/ipmi/ipmi_ssif.c
561
ssif_inc_stat(ssif_info, send_retries);
drivers/char/ipmi/ipmi_ssif.c
567
struct ssif_info *ssif_info = timer_container_of(ssif_info, t,
drivers/char/ipmi/ipmi_ssif.c
571
if (ssif_info->stopping)
drivers/char/ipmi/ipmi_ssif.c
574
flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
drivers/char/ipmi/ipmi_ssif.c
575
if (ssif_info->watch_timeout) {
drivers/char/ipmi/ipmi_ssif.c
576
mod_timer(&ssif_info->watch_timer,
drivers/char/ipmi/ipmi_ssif.c
577
jiffies + ssif_info->watch_timeout);
drivers/char/ipmi/ipmi_ssif.c
578
if (IS_SSIF_IDLE(ssif_info)) {
drivers/char/ipmi/ipmi_ssif.c
579
start_flag_fetch(ssif_info, flags); /* Releases lock */
drivers/char/ipmi/ipmi_ssif.c
582
ssif_info->req_flags = true;
drivers/char/ipmi/ipmi_ssif.c
584
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
590
struct ssif_info *ssif_info = i2c_get_clientdata(client);
drivers/char/ipmi/ipmi_ssif.c
597
ssif_inc_stat(ssif_info, alerts);
drivers/char/ipmi/ipmi_ssif.c
599
flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
drivers/char/ipmi/ipmi_ssif.c
600
if (ssif_info->waiting_alert) {
drivers/char/ipmi/ipmi_ssif.c
601
ssif_info->waiting_alert = false;
drivers/char/ipmi/ipmi_ssif.c
602
timer_delete(&ssif_info->retry_timer);
drivers/char/ipmi/ipmi_ssif.c
604
} else if (ssif_info->curr_msg) {
drivers/char/ipmi/ipmi_ssif.c
605
ssif_info->got_alert = true;
drivers/char/ipmi/ipmi_ssif.c
607
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
609
start_get(ssif_info);
drivers/char/ipmi/ipmi_ssif.c
612
static void msg_done_handler(struct ssif_info *ssif_info, int result,
drivers/char/ipmi/ipmi_ssif.c
624
ssif_info->retries_left--;
drivers/char/ipmi/ipmi_ssif.c
625
if (ssif_info->retries_left > 0) {
drivers/char/ipmi/ipmi_ssif.c
626
ssif_inc_stat(ssif_info, receive_retries);
drivers/char/ipmi/ipmi_ssif.c
628
flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
drivers/char/ipmi/ipmi_ssif.c
629
ssif_info->waiting_alert = true;
drivers/char/ipmi/ipmi_ssif.c
630
if (!ssif_info->stopping)
drivers/char/ipmi/ipmi_ssif.c
631
mod_timer(&ssif_info->retry_timer,
drivers/char/ipmi/ipmi_ssif.c
633
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
637
ssif_inc_stat(ssif_info, receive_errors);
drivers/char/ipmi/ipmi_ssif.c
639
if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
drivers/char/ipmi/ipmi_ssif.c
640
dev_dbg(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
646
if ((len > 1) && (ssif_info->multi_pos == 0)
drivers/char/ipmi/ipmi_ssif.c
651
ssif_inc_stat(ssif_info, received_message_parts);
drivers/char/ipmi/ipmi_ssif.c
657
ssif_info->data[i] = data[i];
drivers/char/ipmi/ipmi_ssif.c
658
ssif_info->multi_len = len;
drivers/char/ipmi/ipmi_ssif.c
659
ssif_info->multi_pos = 1;
drivers/char/ipmi/ipmi_ssif.c
661
ssif_i2c_send(ssif_info, msg_done_handler, I2C_SMBUS_READ,
drivers/char/ipmi/ipmi_ssif.c
663
ssif_info->recv, I2C_SMBUS_BLOCK_DATA);
drivers/char/ipmi/ipmi_ssif.c
665
} else if (ssif_info->multi_pos) {
drivers/char/ipmi/ipmi_ssif.c
672
if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
drivers/char/ipmi/ipmi_ssif.c
673
dev_dbg(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
686
if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
drivers/char/ipmi/ipmi_ssif.c
687
dev_dbg(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
693
if (ssif_info->multi_len + len > IPMI_MAX_MSG_LENGTH) {
drivers/char/ipmi/ipmi_ssif.c
696
if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
drivers/char/ipmi/ipmi_ssif.c
697
dev_dbg(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
704
ssif_info->data[i + ssif_info->multi_len] = data[i];
drivers/char/ipmi/ipmi_ssif.c
705
ssif_info->multi_len += len;
drivers/char/ipmi/ipmi_ssif.c
708
len = ssif_info->multi_len;
drivers/char/ipmi/ipmi_ssif.c
709
data = ssif_info->data;
drivers/char/ipmi/ipmi_ssif.c
710
} else if (blocknum + 1 != ssif_info->multi_pos) {
drivers/char/ipmi/ipmi_ssif.c
716
if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
drivers/char/ipmi/ipmi_ssif.c
717
dev_dbg(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
719
ssif_info->multi_pos - 1, blocknum);
drivers/char/ipmi/ipmi_ssif.c
722
ssif_inc_stat(ssif_info, received_message_parts);
drivers/char/ipmi/ipmi_ssif.c
724
ssif_info->multi_pos++;
drivers/char/ipmi/ipmi_ssif.c
726
ssif_i2c_send(ssif_info, msg_done_handler,
drivers/char/ipmi/ipmi_ssif.c
729
ssif_info->recv,
drivers/char/ipmi/ipmi_ssif.c
737
ssif_inc_stat(ssif_info, receive_errors);
drivers/char/ipmi/ipmi_ssif.c
739
ssif_inc_stat(ssif_info, received_messages);
drivers/char/ipmi/ipmi_ssif.c
740
ssif_inc_stat(ssif_info, received_message_parts);
drivers/char/ipmi/ipmi_ssif.c
743
if (ssif_info->ssif_debug & SSIF_DEBUG_STATE)
drivers/char/ipmi/ipmi_ssif.c
744
dev_dbg(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
746
ssif_info->ssif_state, result);
drivers/char/ipmi/ipmi_ssif.c
748
flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
drivers/char/ipmi/ipmi_ssif.c
749
msg = ssif_info->curr_msg;
drivers/char/ipmi/ipmi_ssif.c
759
ssif_info->curr_msg = NULL;
drivers/char/ipmi/ipmi_ssif.c
762
switch (ssif_info->ssif_state) {
drivers/char/ipmi/ipmi_ssif.c
764
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
769
return_hosed_msg(ssif_info, msg);
drivers/char/ipmi/ipmi_ssif.c
771
deliver_recv_msg(ssif_info, msg);
drivers/char/ipmi/ipmi_ssif.c
781
ssif_info->ssif_state = SSIF_IDLE;
drivers/char/ipmi/ipmi_ssif.c
782
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
783
dev_warn(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
791
ssif_info->ssif_state = SSIF_IDLE;
drivers/char/ipmi/ipmi_ssif.c
792
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
793
dev_warn(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
797
ssif_inc_stat(ssif_info, flag_fetches);
drivers/char/ipmi/ipmi_ssif.c
798
ssif_info->msg_flags = data[3];
drivers/char/ipmi/ipmi_ssif.c
799
handle_flags(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
807
dev_warn(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
812
dev_warn(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
816
ssif_info->ssif_state = SSIF_IDLE;
drivers/char/ipmi/ipmi_ssif.c
817
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
823
dev_warn(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
825
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
834
ssif_info->msg_flags &= ~EVENT_MSG_BUFFER_FULL;
drivers/char/ipmi/ipmi_ssif.c
835
handle_flags(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
838
dev_warn(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
843
ssif_info->msg_flags &= ~EVENT_MSG_BUFFER_FULL;
drivers/char/ipmi/ipmi_ssif.c
844
handle_flags(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
846
handle_flags(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
847
ssif_inc_stat(ssif_info, events);
drivers/char/ipmi/ipmi_ssif.c
848
deliver_recv_msg(ssif_info, msg);
drivers/char/ipmi/ipmi_ssif.c
855
dev_warn(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
857
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
866
ssif_info->msg_flags &= ~RECEIVE_MSG_AVAIL;
drivers/char/ipmi/ipmi_ssif.c
867
handle_flags(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
870
dev_warn(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
876
ssif_info->msg_flags &= ~RECEIVE_MSG_AVAIL;
drivers/char/ipmi/ipmi_ssif.c
877
handle_flags(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
879
ssif_inc_stat(ssif_info, incoming_messages);
drivers/char/ipmi/ipmi_ssif.c
880
handle_flags(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
881
deliver_recv_msg(ssif_info, msg);
drivers/char/ipmi/ipmi_ssif.c
887
dev_warn(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
889
ssif_info->ssif_state);
drivers/char/ipmi/ipmi_ssif.c
890
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
893
flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
drivers/char/ipmi/ipmi_ssif.c
894
if (IS_SSIF_IDLE(ssif_info) && !ssif_info->stopping) {
drivers/char/ipmi/ipmi_ssif.c
895
if (ssif_info->req_events)
drivers/char/ipmi/ipmi_ssif.c
896
start_event_fetch(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
897
else if (ssif_info->req_flags)
drivers/char/ipmi/ipmi_ssif.c
898
start_flag_fetch(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
900
start_next_msg(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
902
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
904
if (ssif_info->ssif_debug & SSIF_DEBUG_STATE)
drivers/char/ipmi/ipmi_ssif.c
905
dev_dbg(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
906
"DONE 2: state = %d.\n", ssif_info->ssif_state);
drivers/char/ipmi/ipmi_ssif.c
909
static void msg_written_handler(struct ssif_info *ssif_info, int result,
drivers/char/ipmi/ipmi_ssif.c
914
ssif_info->retries_left--;
drivers/char/ipmi/ipmi_ssif.c
915
if (ssif_info->retries_left > 0) {
drivers/char/ipmi/ipmi_ssif.c
920
ssif_info->do_resend = true;
drivers/char/ipmi/ipmi_ssif.c
921
mod_timer(&ssif_info->retry_timer,
drivers/char/ipmi/ipmi_ssif.c
926
ssif_inc_stat(ssif_info, send_errors);
drivers/char/ipmi/ipmi_ssif.c
928
if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
drivers/char/ipmi/ipmi_ssif.c
929
dev_dbg(&ssif_info->client->dev,
drivers/char/ipmi/ipmi_ssif.c
932
msg_done_handler(ssif_info, -EIO, NULL, 0);
drivers/char/ipmi/ipmi_ssif.c
936
if (ssif_info->multi_data) {
drivers/char/ipmi/ipmi_ssif.c
946
ssif_inc_stat(ssif_info, sent_messages_parts);
drivers/char/ipmi/ipmi_ssif.c
948
left = ssif_info->multi_len - ssif_info->multi_pos;
drivers/char/ipmi/ipmi_ssif.c
953
ssif_info->multi_data[ssif_info->multi_pos] = to_write;
drivers/char/ipmi/ipmi_ssif.c
954
data_to_send = ssif_info->multi_data + ssif_info->multi_pos;
drivers/char/ipmi/ipmi_ssif.c
955
ssif_info->multi_pos += to_write;
drivers/char/ipmi/ipmi_ssif.c
957
if (ssif_info->cmd8_works) {
drivers/char/ipmi/ipmi_ssif.c
960
ssif_info->multi_data = NULL;
drivers/char/ipmi/ipmi_ssif.c
963
ssif_info->multi_data = NULL;
drivers/char/ipmi/ipmi_ssif.c
966
ssif_i2c_send(ssif_info, msg_written_handler,
drivers/char/ipmi/ipmi_ssif.c
973
ssif_inc_stat(ssif_info, sent_messages);
drivers/char/ipmi/ipmi_ssif.c
974
ssif_inc_stat(ssif_info, sent_messages_parts);
drivers/char/ipmi/ipmi_ssif.c
976
flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
drivers/char/ipmi/ipmi_ssif.c
977
if (ssif_info->got_alert) {
drivers/char/ipmi/ipmi_ssif.c
979
ssif_info->got_alert = false;
drivers/char/ipmi/ipmi_ssif.c
980
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
981
start_get(ssif_info);
drivers/char/ipmi/ipmi_ssif.c
984
ssif_info->waiting_alert = true;
drivers/char/ipmi/ipmi_ssif.c
985
ssif_info->retries_left = SSIF_RECV_RETRIES;
drivers/char/ipmi/ipmi_ssif.c
986
if (!ssif_info->stopping)
drivers/char/ipmi/ipmi_ssif.c
987
mod_timer(&ssif_info->retry_timer,
drivers/char/ipmi/ipmi_ssif.c
989
ipmi_ssif_unlock_cond(ssif_info, flags);
drivers/char/ipmi/ipmi_ssif.c
994
static void start_resend(struct ssif_info *ssif_info)
drivers/char/ipmi/ipmi_ssif.c
998
ssif_info->got_alert = false;