Lines Matching +full:- +full:- +full:-

83     if (ib->use_irq && ib->irqs_enabled && ib->raise_irq) {  in ipmi_bt_raise_irq()
84 ib->raise_irq(ib); in ipmi_bt_raise_irq()
90 if (ib->lower_irq) { in ipmi_bt_lower_irq()
91 ib->lower_irq(ib); in ipmi_bt_lower_irq()
98 IPMIBT *ib = iic->get_backend_data(ii); in ipmi_bt_handle_event()
100 if (ib->inlen < 4) { in ipmi_bt_handle_event()
104 if (ib->inmsg[0] != (ib->inlen - 1)) { in ipmi_bt_handle_event()
106 IPMI_BT_SET_BBUSY(ib->control_reg, 1); in ipmi_bt_handle_event()
107 ib->inlen = 0; in ipmi_bt_handle_event()
110 if ((ib->inmsg[1] == (IPMI_NETFN_APP << 2)) && in ipmi_bt_handle_event()
111 (ib->inmsg[3] == IPMI_CMD_GET_BT_INTF_CAP)) { in ipmi_bt_handle_event()
113 ib->outmsg[0] = 9; in ipmi_bt_handle_event()
114 ib->outmsg[1] = ib->inmsg[1] | 0x04; in ipmi_bt_handle_event()
115 ib->outmsg[2] = ib->inmsg[2]; in ipmi_bt_handle_event()
116 ib->outmsg[3] = ib->inmsg[3]; in ipmi_bt_handle_event()
117 ib->outmsg[4] = 0; in ipmi_bt_handle_event()
118 ib->outmsg[5] = 1; /* Only support 1 outstanding request. */ in ipmi_bt_handle_event()
119 if (sizeof(ib->inmsg) > 0xff) { /* Input buffer size */ in ipmi_bt_handle_event()
120 ib->outmsg[6] = 0xff; in ipmi_bt_handle_event()
122 ib->outmsg[6] = (unsigned char) sizeof(ib->inmsg); in ipmi_bt_handle_event()
124 if (sizeof(ib->outmsg) > 0xff) { /* Output buffer size */ in ipmi_bt_handle_event()
125 ib->outmsg[7] = 0xff; in ipmi_bt_handle_event()
127 ib->outmsg[7] = (unsigned char) sizeof(ib->outmsg); in ipmi_bt_handle_event()
129 ib->outmsg[8] = 10; /* Max request to response time */ in ipmi_bt_handle_event()
130 ib->outmsg[9] = 0; /* Don't recommend retries */ in ipmi_bt_handle_event()
131 ib->outlen = 10; in ipmi_bt_handle_event()
132 IPMI_BT_SET_BBUSY(ib->control_reg, 0); in ipmi_bt_handle_event()
133 IPMI_BT_SET_B2H_ATN(ib->control_reg, 1); in ipmi_bt_handle_event()
134 if (!IPMI_BT_GET_B2H_IRQ(ib->mask_reg) && in ipmi_bt_handle_event()
135 IPMI_BT_GET_B2H_IRQ_EN(ib->mask_reg)) { in ipmi_bt_handle_event()
136 IPMI_BT_SET_B2H_IRQ(ib->mask_reg, 1); in ipmi_bt_handle_event()
141 ib->waiting_seq = ib->inmsg[2]; in ipmi_bt_handle_event()
142 ib->inmsg[2] = ib->inmsg[1]; in ipmi_bt_handle_event()
144 IPMIBmcClass *bk = IPMI_BMC_GET_CLASS(ib->bmc); in ipmi_bt_handle_event()
145 bk->handle_command(ib->bmc, ib->inmsg + 2, ib->inlen - 2, in ipmi_bt_handle_event()
146 sizeof(ib->inmsg), ib->waiting_rsp); in ipmi_bt_handle_event()
154 IPMIBT *ib = iic->get_backend_data(ii); in ipmi_bt_handle_rsp()
156 if (ib->waiting_rsp == msg_id) { in ipmi_bt_handle_rsp()
157 ib->waiting_rsp++; in ipmi_bt_handle_rsp()
158 if (rsp_len > (sizeof(ib->outmsg) - 2)) { in ipmi_bt_handle_rsp()
159 ib->outmsg[0] = 4; in ipmi_bt_handle_rsp()
160 ib->outmsg[1] = rsp[0]; in ipmi_bt_handle_rsp()
161 ib->outmsg[2] = ib->waiting_seq; in ipmi_bt_handle_rsp()
162 ib->outmsg[3] = rsp[1]; in ipmi_bt_handle_rsp()
163 ib->outmsg[4] = IPMI_CC_CANNOT_RETURN_REQ_NUM_BYTES; in ipmi_bt_handle_rsp()
164 ib->outlen = 5; in ipmi_bt_handle_rsp()
166 ib->outmsg[0] = rsp_len + 1; in ipmi_bt_handle_rsp()
167 ib->outmsg[1] = rsp[0]; in ipmi_bt_handle_rsp()
168 ib->outmsg[2] = ib->waiting_seq; in ipmi_bt_handle_rsp()
169 memcpy(ib->outmsg + 3, rsp + 1, rsp_len - 1); in ipmi_bt_handle_rsp()
170 ib->outlen = rsp_len + 2; in ipmi_bt_handle_rsp()
172 IPMI_BT_SET_BBUSY(ib->control_reg, 0); in ipmi_bt_handle_rsp()
173 IPMI_BT_SET_B2H_ATN(ib->control_reg, 1); in ipmi_bt_handle_rsp()
174 if (!IPMI_BT_GET_B2H_IRQ(ib->mask_reg) && in ipmi_bt_handle_rsp()
175 IPMI_BT_GET_B2H_IRQ_EN(ib->mask_reg)) { in ipmi_bt_handle_rsp()
176 IPMI_BT_SET_B2H_IRQ(ib->mask_reg, 1); in ipmi_bt_handle_rsp()
187 IPMIBT *ib = iic->get_backend_data(ii); in ipmi_bt_ioport_read()
190 switch (addr & ib->size_mask) { in ipmi_bt_ioport_read()
192 ret = ib->control_reg; in ipmi_bt_ioport_read()
195 if (ib->outpos < ib->outlen) { in ipmi_bt_ioport_read()
196 ret = ib->outmsg[ib->outpos]; in ipmi_bt_ioport_read()
197 ib->outpos++; in ipmi_bt_ioport_read()
198 if (ib->outpos == ib->outlen) { in ipmi_bt_ioport_read()
199 ib->outpos = 0; in ipmi_bt_ioport_read()
200 ib->outlen = 0; in ipmi_bt_ioport_read()
207 ret = ib->mask_reg; in ipmi_bt_ioport_read()
220 ib->do_wake = 1; in ipmi_bt_signal()
221 while (ib->do_wake) { in ipmi_bt_signal()
222 ib->do_wake = 0; in ipmi_bt_signal()
223 iic->handle_if_event(ii); in ipmi_bt_signal()
232 IPMIBT *ib = iic->get_backend_data(ii); in ipmi_bt_ioport_write()
234 switch (addr & ib->size_mask) { in ipmi_bt_ioport_write()
237 ib->inlen = 0; in ipmi_bt_ioport_write()
240 ib->outpos = 0; in ipmi_bt_ioport_write()
243 IPMI_BT_SET_B2H_ATN(ib->control_reg, 0); in ipmi_bt_ioport_write()
246 IPMI_BT_SET_SMS_ATN(ib->control_reg, 0); in ipmi_bt_ioport_write()
250 IPMI_BT_SET_HBUSY(ib->control_reg, in ipmi_bt_ioport_write()
251 !IPMI_BT_GET_HBUSY(ib->control_reg)); in ipmi_bt_ioport_write()
254 IPMI_BT_SET_BBUSY(ib->control_reg, 1); in ipmi_bt_ioport_write()
260 if (ib->inlen < sizeof(ib->inmsg)) { in ipmi_bt_ioport_write()
261 ib->inmsg[ib->inlen] = val; in ipmi_bt_ioport_write()
263 ib->inlen++; in ipmi_bt_ioport_write()
268 IPMI_BT_GET_B2H_IRQ_EN(ib->mask_reg)) { in ipmi_bt_ioport_write()
270 if (IPMI_BT_GET_B2H_ATN(ib->control_reg) || in ipmi_bt_ioport_write()
271 IPMI_BT_GET_SMS_ATN(ib->control_reg)) { in ipmi_bt_ioport_write()
272 IPMI_BT_SET_B2H_IRQ(ib->mask_reg, 1); in ipmi_bt_ioport_write()
275 IPMI_BT_SET_B2H_IRQ_EN(ib->mask_reg, 1); in ipmi_bt_ioport_write()
277 if (IPMI_BT_GET_B2H_IRQ(ib->mask_reg)) { in ipmi_bt_ioport_write()
278 IPMI_BT_SET_B2H_IRQ(ib->mask_reg, 0); in ipmi_bt_ioport_write()
281 IPMI_BT_SET_B2H_IRQ_EN(ib->mask_reg, 0); in ipmi_bt_ioport_write()
284 if (IPMI_BT_GET_B2H_IRQ(val) && IPMI_BT_GET_B2H_IRQ(ib->mask_reg)) { in ipmi_bt_ioport_write()
285 IPMI_BT_SET_B2H_IRQ(ib->mask_reg, 0); in ipmi_bt_ioport_write()
308 IPMIBT *ib = iic->get_backend_data(ii); in ipmi_bt_set_atn()
310 if (!!val == IPMI_BT_GET_SMS_ATN(ib->control_reg)) { in ipmi_bt_set_atn()
314 IPMI_BT_SET_SMS_ATN(ib->control_reg, val); in ipmi_bt_set_atn()
316 if (irq && !IPMI_BT_GET_B2H_ATN(ib->control_reg) && in ipmi_bt_set_atn()
317 IPMI_BT_GET_B2H_IRQ_EN(ib->mask_reg)) { in ipmi_bt_set_atn()
318 IPMI_BT_SET_B2H_IRQ(ib->mask_reg, 1); in ipmi_bt_set_atn()
322 if (!IPMI_BT_GET_B2H_ATN(ib->control_reg) && in ipmi_bt_set_atn()
323 IPMI_BT_GET_B2H_IRQ(ib->mask_reg)) { in ipmi_bt_set_atn()
324 IPMI_BT_SET_B2H_IRQ(ib->mask_reg, 0); in ipmi_bt_set_atn()
333 IPMIBT *ib = iic->get_backend_data(ii); in ipmi_bt_handle_reset()
337 if (IPMI_BT_GET_B2H_IRQ(ib->mask_reg)) { in ipmi_bt_handle_reset()
338 IPMI_BT_SET_B2H_IRQ(ib->mask_reg, 0); in ipmi_bt_handle_reset()
341 IPMI_BT_SET_B2H_IRQ_EN(ib->mask_reg, 0); in ipmi_bt_handle_reset()
348 IPMIBT *ib = iic->get_backend_data(ii); in ipmi_bt_set_irq_enable()
350 ib->irqs_enabled = val; in ipmi_bt_set_irq_enable()
356 IPMIBT *ib = iic->get_backend_data(ii); in ipmi_bt_init()
361 ib->size_mask = min_size - 1; in ipmi_bt_init()
362 ib->io_length = 3; in ipmi_bt_init()
364 memory_region_init_io(&ib->io, NULL, &ipmi_bt_io_ops, ii, "ipmi-bt", in ipmi_bt_init()
373 if (ib->outpos >= MAX_IPMI_MSG_SIZE || ib->outlen >= MAX_IPMI_MSG_SIZE || in ipmi_bt_vmstate_post_load()
374 ib->outpos >= ib->outlen) { in ipmi_bt_vmstate_post_load()
377 ib->outpos, ib->outlen); in ipmi_bt_vmstate_post_load()
378 ib->outpos = 0; in ipmi_bt_vmstate_post_load()
379 ib->outlen = 0; in ipmi_bt_vmstate_post_load()
382 if (ib->inlen >= MAX_IPMI_MSG_SIZE) { in ipmi_bt_vmstate_post_load()
385 ib->inlen); in ipmi_bt_vmstate_post_load()
386 ib->inlen = 0; in ipmi_bt_vmstate_post_load()
416 info->interface_name = "bt"; in ipmi_bt_get_fwinfo()
417 info->interface_type = IPMI_SMBIOS_BT; in ipmi_bt_get_fwinfo()
418 info->ipmi_spec_major_revision = 2; in ipmi_bt_get_fwinfo()
419 info->ipmi_spec_minor_revision = 0; in ipmi_bt_get_fwinfo()
421 info->ipmi_channel_protocol = IPMI_CHANNEL_PROTOCOL_BT_15; in ipmi_bt_get_fwinfo()
422 info->base_address = ib->io_base; in ipmi_bt_get_fwinfo()
423 info->register_length = ib->io_length; in ipmi_bt_get_fwinfo()
424 info->register_spacing = 1; in ipmi_bt_get_fwinfo()
425 info->memspace = IPMI_MEMSPACE_IO; in ipmi_bt_get_fwinfo()
426 info->irq_type = IPMI_LEVEL_IRQ; in ipmi_bt_get_fwinfo()
431 iic->init = ipmi_bt_init; in ipmi_bt_class_init()
432 iic->set_atn = ipmi_bt_set_atn; in ipmi_bt_class_init()
433 iic->handle_rsp = ipmi_bt_handle_rsp; in ipmi_bt_class_init()
434 iic->handle_if_event = ipmi_bt_handle_event; in ipmi_bt_class_init()
435 iic->set_irq_enable = ipmi_bt_set_irq_enable; in ipmi_bt_class_init()
436 iic->reset = ipmi_bt_handle_reset; in ipmi_bt_class_init()