• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/char/ipmi/

Lines Matching refs:msg

402 	void (*null_user_handler)(ipmi_smi_t intf, struct ipmi_recv_msg *msg);
471 struct ipmi_recv_msg *msg, *msg2;
473 list_for_each_entry_safe(msg, msg2, q, link) {
474 list_del(&msg->link);
475 ipmi_free_recv_msg(msg);
481 struct ipmi_smi_msg *msg, *msg2;
483 list_for_each_entry_safe(msg, msg2, q, link) {
484 list_del(&msg->link);
485 ipmi_free_smi_msg(msg);
698 static void deliver_response(struct ipmi_recv_msg *msg)
700 if (!msg->user) {
701 ipmi_smi_t intf = msg->user_msg_data;
705 intf->null_user_handler(intf, msg);
711 ipmi_free_recv_msg(msg);
713 ipmi_user_t user = msg->user;
714 user->handler->ipmi_recv_hndl(msg, user->handler_data);
719 deliver_err_response(struct ipmi_recv_msg *msg, int err)
721 msg->recv_type = IPMI_RESPONSE_RECV_TYPE;
722 msg->msg_data[0] = err;
723 msg->msg.netfn |= 1; /* Convert to a response. */
724 msg->msg.data_len = 1;
725 msg->msg.data = msg->msg_data;
726 deliver_response(msg);
797 struct ipmi_recv_msg *msg = intf->seq_table[seq].recv_msg;
799 if ((msg->addr.channel == channel) && (msg->msg.cmd == cmd)
800 && (msg->msg.netfn == netfn)
801 && (ipmi_addr_equal(addr, &(msg->addr)))) {
802 *recv_msg = msg;
850 struct ipmi_recv_msg *msg = NULL;
865 msg = ent->recv_msg;
870 if (msg)
871 deliver_err_response(msg, err);
1156 struct ipmi_recv_msg *msg, *msg2;
1173 list_for_each_entry_safe(msg, msg2, &intf->waiting_events, link)
1174 list_move_tail(&msg->link, &msgs);
1185 list_for_each_entry_safe(msg, msg2, &msgs, link) {
1186 msg->user = user;
1188 deliver_response(msg);
1318 struct kernel_ipmi_msg *msg,
1335 smi_msg->data[i+4] = (msg->netfn << 2) | (ipmb_addr->lun & 0x3);
1339 smi_msg->data[i+8] = msg->cmd;
1342 if (msg->data_len > 0)
1343 memcpy(&(smi_msg->data[i+9]), msg->data,
1344 msg->data_len);
1345 smi_msg->data_size = msg->data_len + 9;
1362 struct kernel_ipmi_msg *msg,
1374 smi_msg->data[5] = (msg->netfn << 2) | (lan_addr->lun & 0x3);
1378 smi_msg->data[9] = msg->cmd;
1381 if (msg->data_len > 0)
1382 memcpy(&(smi_msg->data[10]), msg->data,
1383 msg->data_len);
1384 smi_msg->data_size = msg->data_len + 10;
1410 struct kernel_ipmi_msg *msg,
1461 recv_msg->msg = *msg;
1466 if (msg->netfn & 1) {
1481 if ((msg->netfn == IPMI_NETFN_APP_REQUEST)
1482 && ((msg->cmd == IPMI_SEND_MSG_CMD)
1483 || (msg->cmd == IPMI_GET_MSG_CMD)
1484 || (msg->cmd == IPMI_READ_EVENT_MSG_BUFFER_CMD))) {
1494 if (((msg->netfn == IPMI_NETFN_APP_REQUEST)
1495 && ((msg->cmd == IPMI_COLD_RESET_CMD)
1496 || (msg->cmd == IPMI_WARM_RESET_CMD)))
1497 || (msg->netfn == IPMI_NETFN_FIRMWARE_REQUEST)) {
1510 if ((msg->data_len + 2) > IPMI_MAX_MSG_LENGTH) {
1516 smi_msg->data[0] = (msg->netfn << 2) | (smi_addr->lun & 0x3);
1517 smi_msg->data[1] = msg->cmd;
1520 if (msg->data_len > 0)
1521 memcpy(&(smi_msg->data[2]), msg->data, msg->data_len);
1522 smi_msg->data_size = msg->data_len + 2;
1568 if ((msg->data_len + 10 + broadcast) > IPMI_MAX_MSG_LENGTH) {
1583 if (recv_msg->msg.netfn & 0x1) {
1589 format_ipmb_msg(smi_msg, msg, ipmb_addr, msgid,
1631 format_ipmb_msg(smi_msg, msg, ipmb_addr,
1642 recv_msg->msg.data = recv_msg->msg_data;
1643 recv_msg->msg.data_len = smi_msg->data_size;
1682 if ((msg->data_len + 12) > IPMI_MAX_MSG_LENGTH) {
1697 if (recv_msg->msg.netfn & 0x1) {
1703 format_lan_msg(smi_msg, msg, lan_addr, msgid,
1744 format_lan_msg(smi_msg, msg, lan_addr,
1754 recv_msg->msg.data = recv_msg->msg_data;
1755 recv_msg->msg.data_len = smi_msg->data_size;
1810 struct kernel_ipmi_msg *msg,
1828 msg,
1842 struct kernel_ipmi_msg *msg,
1860 msg,
2576 struct kernel_ipmi_msg msg;
2583 msg.netfn = IPMI_NETFN_APP_REQUEST;
2584 msg.cmd = IPMI_GET_DEVICE_GUID_CMD;
2585 msg.data = NULL;
2586 msg.data_len = 0;
2591 &msg,
2602 guid_handler(ipmi_smi_t intf, struct ipmi_recv_msg *msg)
2604 if ((msg->addr.addr_type != IPMI_SYSTEM_INTERFACE_ADDR_TYPE)
2605 || (msg->msg.netfn != IPMI_NETFN_APP_RESPONSE)
2606 || (msg->msg.cmd != IPMI_GET_DEVICE_GUID_CMD))
2610 if (msg->msg.data[0] != 0) {
2616 if (msg->msg.data_len < 17) {
2622 msg->msg.data_len);
2626 memcpy(intf->bmc->guid, msg->msg.data, 16);
2650 struct kernel_ipmi_msg msg;
2658 msg.netfn = IPMI_NETFN_APP_REQUEST;
2659 msg.cmd = IPMI_GET_CHANNEL_INFO_CMD;
2660 msg.data = data;
2661 msg.data_len = 1;
2667 &msg,
2678 channel_handler(ipmi_smi_t intf, struct ipmi_recv_msg *msg)
2683 if ((msg->addr.addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE)
2684 && (msg->msg.netfn == IPMI_NETFN_APP_RESPONSE)
2685 && (msg->msg.cmd == IPMI_GET_CHANNEL_INFO_CMD)) {
2687 if (msg->msg.data[0] != 0) {
2690 if (msg->msg.data[0] == IPMI_INVALID_COMMAND_ERR) {
2709 if (msg->msg.data_len < 4) {
2714 intf->channels[chan].medium = msg->msg.data[2] & 0x7f;
2715 intf->channels[chan].protocol = msg->msg.data[3] & 0x1f;
2952 struct ipmi_smi_msg *msg)
2961 if (msg->rsp_size < 11) {
2967 if (msg->rsp[2] != 0) {
2973 ipmb_addr.slave_addr = msg->rsp[6];
2974 ipmb_addr.channel = msg->rsp[3] & 0x0f;
2975 ipmb_addr.lun = msg->rsp[7] & 3;
2982 msg->rsp[7] >> 2,
2983 msg->rsp[3] & 0x0f,
2984 msg->rsp[8],
2985 (msg->rsp[4] >> 2) & (~1),
2997 &(msg->rsp[9]),
2998 msg->rsp_size - 9);
3004 recv_msg->msg.netfn = msg->rsp[4] >> 2;
3005 recv_msg->msg.data = recv_msg->msg_data;
3006 recv_msg->msg.data_len = msg->rsp_size - 10;
3015 struct ipmi_smi_msg *msg)
3027 if (msg->rsp_size < 10) {
3033 if (msg->rsp[2] != 0) {
3038 netfn = msg->rsp[4] >> 2;
3039 cmd = msg->rsp[8];
3040 chan = msg->rsp[3] & 0xf;
3055 msg->data[0] = (IPMI_NETFN_APP_REQUEST << 2);
3056 msg->data[1] = IPMI_SEND_MSG_CMD;
3057 msg->data[2] = msg->rsp[3];
3058 msg->data[3] = msg->rsp[6];
3059 msg->data[4] = ((netfn + 1) << 2) | (msg->rsp[7] & 0x3);
3060 msg->data[5] = ipmb_checksum(&(msg->data[3]), 2);
3061 msg->data[6] = intf->channels[msg->rsp[3] & 0xf].address;
3063 msg->data[7] = (msg->rsp[7] & 0xfc) | (msg->rsp[4] & 0x3);
3064 msg->data[8] = msg->rsp[8]; /* cmd */
3065 msg->data[9] = IPMI_INVALID_CMD_COMPLETION_CODE;
3066 msg->data[10] = ipmb_checksum(&(msg->data[6]), 4);
3067 msg->data_size = 11;
3073 for (m = 0; m < msg->data_size; m++)
3074 printk(" %2.2x", msg->data[m]);
3081 handlers->sender(intf->send_info, msg, 0);
3107 ipmb_addr->slave_addr = msg->rsp[6];
3108 ipmb_addr->lun = msg->rsp[7] & 3;
3109 ipmb_addr->channel = msg->rsp[3] & 0xf;
3117 recv_msg->msgid = msg->rsp[7] >> 2;
3118 recv_msg->msg.netfn = msg->rsp[4] >> 2;
3119 recv_msg->msg.cmd = msg->rsp[8];
3120 recv_msg->msg.data = recv_msg->msg_data;
3126 recv_msg->msg.data_len = msg->rsp_size - 10;
3128 &(msg->rsp[9]),
3129 msg->rsp_size - 10);
3138 struct ipmi_smi_msg *msg)
3148 if (msg->rsp_size < 13) {
3154 if (msg->rsp[2] != 0) {
3160 lan_addr.session_handle = msg->rsp[4];
3161 lan_addr.remote_SWID = msg->rsp[8];
3162 lan_addr.local_SWID = msg->rsp[5];
3163 lan_addr.channel = msg->rsp[3] & 0x0f;
3164 lan_addr.privilege = msg->rsp[3] >> 4;
3165 lan_addr.lun = msg->rsp[9] & 3;
3172 msg->rsp[9] >> 2,
3173 msg->rsp[3] & 0x0f,
3174 msg->rsp[10],
3175 (msg->rsp[6] >> 2) & (~1),
3187 &(msg->rsp[11]),
3188 msg->rsp_size - 11);
3194 recv_msg->msg.netfn = msg->rsp[6] >> 2;
3195 recv_msg->msg.data = recv_msg->msg_data;
3196 recv_msg->msg.data_len = msg->rsp_size - 12;
3205 struct ipmi_smi_msg *msg)
3216 if (msg->rsp_size < 12) {
3222 if (msg->rsp[2] != 0) {
3227 netfn = msg->rsp[6] >> 2;
3228 cmd = msg->rsp[10];
3229 chan = msg->rsp[3] & 0xf;
3265 lan_addr->session_handle = msg->rsp[4];
3266 lan_addr->remote_SWID = msg->rsp[8];
3267 lan_addr->local_SWID = msg->rsp[5];
3268 lan_addr->lun = msg->rsp[9] & 3;
3269 lan_addr->channel = msg->rsp[3] & 0xf;
3270 lan_addr->privilege = msg->rsp[3] >> 4;
3278 recv_msg->msgid = msg->rsp[9] >> 2;
3279 recv_msg->msg.netfn = msg->rsp[6] >> 2;
3280 recv_msg->msg.cmd = msg->rsp[10];
3281 recv_msg->msg.data = recv_msg->msg_data;
3287 recv_msg->msg.data_len = msg->rsp_size - 12;
3289 &(msg->rsp[11]),
3290 msg->rsp_size - 12);
3305 struct ipmi_smi_msg *msg)
3320 if (msg->rsp_size < 4) {
3326 if (msg->rsp[2] != 0) {
3335 netfn = msg->rsp[0] >> 2;
3336 cmd = msg->rsp[1];
3337 chan = msg->rsp[3] & 0xf;
3382 smi_addr->lun = msg->rsp[0] & 3;
3387 recv_msg->msg.netfn = msg->rsp[0] >> 2;
3388 recv_msg->msg.cmd = msg->rsp[1];
3389 recv_msg->msg.data = recv_msg->msg_data;
3395 recv_msg->msg.data_len = msg->rsp_size - 4;
3397 &(msg->rsp[4]),
3398 msg->rsp_size - 4);
3407 struct ipmi_smi_msg *msg)
3415 smi_addr->lun = msg->rsp[0] & 3;
3417 recv_msg->msg.netfn = msg->rsp[0] >> 2;
3418 recv_msg->msg.cmd = msg->rsp[1];
3419 memcpy(recv_msg->msg_data, &(msg->rsp[3]), msg->rsp_size - 3);
3420 recv_msg->msg.data = recv_msg->msg_data;
3421 recv_msg->msg.data_len = msg->rsp_size - 3;
3425 struct ipmi_smi_msg *msg)
3434 if (msg->rsp_size < 19) {
3440 if (msg->rsp[2] != 0) {
3479 copy_event_into_recv_msg(recv_msg, msg);
3508 copy_event_into_recv_msg(recv_msg, msg);
3528 struct ipmi_smi_msg *msg)
3533 recv_msg = (struct ipmi_recv_msg *) msg->user_data;
3554 recv_msg->msgid = msg->msgid;
3559 smi_addr->lun = msg->rsp[0] & 3;
3560 recv_msg->msg.netfn = msg->rsp[0] >> 2;
3561 recv_msg->msg.cmd = msg->rsp[1];
3563 &(msg->rsp[2]),
3564 msg->rsp_size - 2);
3565 recv_msg->msg.data = recv_msg->msg_data;
3566 recv_msg->msg.data_len = msg->rsp_size - 2;
3579 struct ipmi_smi_msg *msg)
3587 for (m = 0; m < msg->rsp_size; m++)
3588 printk(" %2.2x", msg->rsp[m]);
3591 if (msg->rsp_size < 2) {
3595 (msg->data[0] >> 2) | 1, msg->data[1], msg->rsp_size);
3598 msg->rsp[0] = msg->data[0] | (1 << 2);
3599 msg->rsp[1] = msg->data[1];
3600 msg->rsp[2] = IPMI_ERR_UNSPECIFIED;
3601 msg->rsp_size = 3;
3602 } else if (((msg->rsp[0] >> 2) != ((msg->data[0] >> 2) | 1))
3603 || (msg->rsp[1] != msg->data[1])) {
3610 (msg->data[0] >> 2) | 1, msg->data[1],
3611 msg->rsp[0] >> 2, msg->rsp[1]);
3614 msg->rsp[0] = msg->data[0] | (1 << 2);
3615 msg->rsp[1] = msg->data[1];
3616 msg->rsp[2] = IPMI_ERR_UNSPECIFIED;
3617 msg->rsp_size = 3;
3620 if ((msg->rsp[0] == ((IPMI_NETFN_APP_REQUEST|1) << 2))
3621 && (msg->rsp[1] == IPMI_SEND_MSG_CMD)
3622 && (msg->user_data != NULL)) {
3627 struct ipmi_recv_msg *recv_msg = msg->user_data;
3630 if (msg->rsp_size < 2)
3634 chan = msg->data[2] & 0x0f;
3647 recv_msg->msg.data = recv_msg->msg_data;
3648 recv_msg->msg.data_len = 1;
3649 recv_msg->msg_data[0] = msg->rsp[2];
3651 } else if ((msg->rsp[0] == ((IPMI_NETFN_APP_REQUEST|1) << 2))
3652 && (msg->rsp[1] == IPMI_GET_MSG_CMD)) {
3654 chan = msg->rsp[3] & 0xf;
3674 if (msg->rsp[4] & 0x04) {
3679 requeue = handle_ipmb_get_msg_rsp(intf, msg);
3685 requeue = handle_ipmb_get_msg_cmd(intf, msg);
3691 if (msg->rsp[6] & 0x04) {
3696 requeue = handle_lan_get_msg_rsp(intf, msg);
3702 requeue = handle_lan_get_msg_cmd(intf, msg);
3713 requeue = handle_oem_get_msg_cmd(intf, msg);
3723 } else if ((msg->rsp[0] == ((IPMI_NETFN_APP_REQUEST|1) << 2))
3724 && (msg->rsp[1] == IPMI_READ_EVENT_MSG_BUFFER_CMD)) {
3726 requeue = handle_read_event_rsp(intf, msg);
3729 requeue = handle_bmc_rsp(intf, msg);
3738 struct ipmi_smi_msg *msg)
3745 if ((msg->data_size >= 2)
3746 && (msg->data[0] == (IPMI_NETFN_APP_REQUEST << 2))
3747 && (msg->data[1] == IPMI_SEND_MSG_CMD)
3748 && (msg->user_data == NULL)) {
3762 if ((msg->rsp_size >= 3) && (msg->rsp[2] != 0)
3763 && (msg->rsp[2] != IPMI_NODE_BUSY_ERR)
3764 && (msg->rsp[2] != IPMI_LOST_ARBITRATION_ERR)
3765 && (msg->rsp[2] != IPMI_BUS_ERR)
3766 && (msg->rsp[2] != IPMI_NAK_ON_WRITE_ERR)) {
3767 int chan = msg->rsp[3] & 0xf;
3779 intf_err_seq(intf, msg->msgid, msg->rsp[2]);
3782 intf_start_seq_timer(intf, msg->msgid);
3784 ipmi_free_smi_msg(msg);
3796 list_add_tail(&msg->link, &intf->waiting_msgs);
3804 rv = handle_new_recv_msg(intf, msg);
3813 list_add_tail(&msg->link, &intf->waiting_msgs);
3817 ipmi_free_smi_msg(msg);
3852 memcpy(smi_msg->data, recv_msg->msg.data, recv_msg->msg.data_len);
3853 smi_msg->data_size = recv_msg->msg.data_len;
3872 struct ipmi_recv_msg *msg;
3888 msg = ent->recv_msg;
3889 list_add_tail(&msg->link, timeouts);
3949 struct ipmi_recv_msg *msg, *msg2;
3986 list_for_each_entry_safe(msg, msg2, &timeouts, link)
3987 deliver_err_response(msg, IPMI_TIMEOUT_COMPLETION_CODE);
4076 static void free_smi_msg(struct ipmi_smi_msg *msg)
4079 kfree(msg);
4095 static void free_recv_msg(struct ipmi_recv_msg *msg)
4098 kfree(msg);
4114 void ipmi_free_recv_msg(struct ipmi_recv_msg *msg)
4116 if (msg->user)
4117 kref_put(&msg->user->refcount, free_user);
4118 msg->done(msg);
4124 static void dummy_smi_done_handler(struct ipmi_smi_msg *msg)
4128 static void dummy_recv_done_handler(struct ipmi_recv_msg *msg)
4133 static void event_receiver_fetcher(ipmi_smi_t intf, struct ipmi_recv_msg *msg)
4135 if ((msg->addr.addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE)
4136 && (msg->msg.netfn == IPMI_NETFN_SENSOR_EVENT_RESPONSE)
4137 && (msg->msg.cmd == IPMI_GET_EVENT_RECEIVER_CMD)
4138 && (msg->msg.data[0] == IPMI_CC_NO_ERROR)) {
4140 intf->event_receiver = msg->msg.data[1];
4141 intf->event_receiver_lun = msg->msg.data[2] & 0x3;
4145 static void device_id_fetcher(ipmi_smi_t intf, struct ipmi_recv_msg *msg)
4147 if ((msg->addr.addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE)
4148 && (msg->msg.netfn == IPMI_NETFN_APP_RESPONSE)
4149 && (msg->msg.cmd == IPMI_GET_DEVICE_ID_CMD)
4150 && (msg->msg.data[0] == IPMI_CC_NO_ERROR)) {
4155 intf->local_sel_device = (msg->msg.data[6] >> 2) & 1;
4156 intf->local_event_generator = (msg->msg.data[6] >> 5) & 1;
4163 struct kernel_ipmi_msg msg;
4177 msg.netfn = 0x04; /* Sensor or Event. */
4178 msg.cmd = 2; /* Platform event command. */
4179 msg.data = data;
4180 msg.data_len = 8;
4213 &msg,
4263 msg.netfn = IPMI_NETFN_APP_REQUEST;
4264 msg.cmd = IPMI_GET_DEVICE_ID_CMD;
4265 msg.data = NULL;
4266 msg.data_len = 0;
4272 &msg,
4283 msg.netfn = IPMI_NETFN_SENSOR_EVENT_REQUEST;
4284 msg.cmd = IPMI_GET_EVENT_RECEIVER_CMD;
4285 msg.data = NULL;
4286 msg.data_len = 0;
4292 &msg,
4333 msg.netfn = IPMI_NETFN_STORAGE_REQUEST; /* Storage. */
4334 msg.cmd = IPMI_ADD_SEL_ENTRY_CMD;
4335 msg.data = data;
4336 msg.data_len = 16;
4360 &msg,