Lines Matching +full:firmware +full:- +full:reset

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
62 cmd->opcode = htole16(0xfc09),
63 cmd->length = len + 1,
64 cmd->data[0] = fragment_type;
65 memcpy(cmd->data + 1, data, len);
78 return (-1);
91 return (-1);
138 switch (((struct iwmbt_hci_event *)event)->header.event) {
143 if (cmd->opcode !=
144 ((struct iwmbt_hci_event_cmd_compl *)event)->opcode)
153 ((struct iwmbt_hci_event *)event)->header.event);
178 iwmbt_err("Invalid firmware, unexpected EOF in HCI "
180 return (-1);
184 iwmbt_err("Invalid firmware, expected HCI command (%d)",
186 return (-1);
191 fw_job.len--;
202 * firmware file, then activate the patch upon success,
210 fw_job.len -= 3;
213 iwmbt_err("Invalid firmware, unexpected EOF in HCI "
216 return (-1);
221 fw_job.len -= cmd_length;
235 return (-1);
240 * what is recorded in the firmware file. Perform that check
247 iwmbt_err("Invalid firmware, unexpected EOF in"
249 return (-1);
254 fw_job.len--;
262 fw_job.len -= 2;
271 iwmbt_err("Invalid firmware, unexpected EOF in"
274 return (-1);
287 return (-1);
292 iwmbt_err("event does not match firmware");
293 return (-1);
298 fw_job.len -= evt_length;
310 fw->buf + sent, \
311 XMIN(size, fw->len - sent), \
316 return (-1); \
364 * Send firmware chunks. Chunk len must be 4 byte aligned.
367 while (fw->len - sent - ready >= (int) sizeof(struct iwmbt_hci_cmd)) {
368 cmd = (struct iwmbt_hci_cmd *)(fw->buf + sent + ready);
369 /* Parse firmware for Intel Reset HCI command parameter */
370 if (cmd->opcode == htole16(0xfc0e)) {
371 *boot_param = le32dec(cmd->data);
376 IWMBT_SEND_FRAGMENT(0x01, 0xFC, "firmware chunk");
377 ready -= 0xFC;
380 IWMBT_SEND_FRAGMENT(0x01, ready, "firmware chunk");
385 /* Wait for firmware download completion event */
398 return (-1);
403 if (event->header.event != 0xFF || event->data[0] != 0x06) {
404 iwmbt_err("firmware download completion event missed");
405 return (-1);
433 return (-1);
464 return (-1);
495 return (-1);
499 memcpy(version, event->data, sizeof(struct iwmbt_version));
532 return (-1);
536 memcpy(version, event->data, sizeof(struct iwmbt_version));
538 datalen = event->header.length - IWMBT_HCI_EVENT_COMPL_HEAD_SIZE;
539 data = event->data;
542 return (-1);
543 datalen--;
548 datalen -= 2;
551 return (-1);
556 version->cnvi_top = le32dec(data);
560 version->cnvr_top = le32dec(data);
564 version->cnvi_bt = le32dec(data);
568 version->cnvr_bt = le32dec(data);
572 version->dev_rev_id = le16dec(data);
576 version->img_type = *data;
580 version->min_fw_build_cw = data[0];
581 version->min_fw_build_yy = data[1];
582 version->timestamp = le16dec(data);
586 version->build_type = *data;
590 version->min_fw_build_nn = *data;
591 version->build_num = le32dec(data);
595 version->secure_boot = *data;
599 version->otp_lock = *data;
603 version->api_lock = *data;
607 version->debug_lock = *data;
611 version->min_fw_build_nn = data[0];
612 version->min_fw_build_cw = data[1];
613 version->min_fw_build_yy = data[2];
617 version->limited_cce = *data;
621 version->sbe_type = *data;
624 memcpy(&version->otp_bd_addr, data, sizeof(bdaddr_t));
631 datalen -= len;
663 return (-1);
667 memcpy(params, event->data, sizeof(struct iwmbt_boot_params));
695 iwmbt_debug("Intel Reset command failed: code=%d, size=%d",
703 if (event->header.event != 0xFF || event->data[0] != 0x02) {
704 iwmbt_err("Intel Reset completion event missed");
705 return (-1);
721 size = ddc->len;
723 iwmbt_debug("file=%s, size=%d", ddc->fwname, size);
728 cmd->opcode = htole16(0xfc8b);
729 cmd->length = ddc->buf[sent] + 1;
730 memcpy(cmd->data, ddc->buf + sent, XMIN(ddc->buf[sent], size));
733 cmd->length,
736 size -= cmd->length;
737 sent += cmd->length;
748 return (-1);