do { if (!(inb(ec->io_command->start) &
(EC_CMDR_PENDING | EC_CMDR_BUSY))) returnfalse;
usleep_range(100, 200);
} while (time_before(jiffies, timeout));
/* Write request header, then data */
ret = cros_ec_lpc_io_bytes_mec(MEC_IO_WRITE, 0, sizeof(*rq), (u8 *)rq); if (ret < 0) return ret;
ret = cros_ec_lpc_io_bytes_mec(MEC_IO_WRITE, sizeof(*rq), msg->request_size,
msg->request_data); if (ret < 0) return ret;
/* Start the command */
outb(EC_MAILBOX_START_COMMAND, ec->io_command->start);
/* For some commands (eg shutdown) the EC will not respond, that's OK */ if (msg->flags & WILCO_EC_FLAG_NO_RESPONSE) {
dev_dbg(ec->dev, "EC does not respond to this command\n"); return0;
}
/* Wait for it to complete */ if (wilco_ec_response_timed_out(ec)) {
dev_dbg(ec->dev, "response timed out\n"); return -ETIMEDOUT;
}
/* Check result */
flag = inb(ec->io_data->start); if (flag) {
dev_dbg(ec->dev, "bad response: 0x%02x\n", flag); return -EIO;
}
/* Read back response */
rs = ec->data_buffer;
ret = cros_ec_lpc_io_bytes_mec(MEC_IO_READ, 0, sizeof(*rs) + EC_MAILBOX_DATA_SIZE,
(u8 *)rs); if (ret < 0) return ret; if (ret) {
dev_dbg(ec->dev, "bad packet checksum 0x%02x\n", rs->checksum); return -EBADMSG;
}
ret = wilco_ec_transfer(ec, msg, rq);
mutex_unlock(&ec->mailbox_lock);
return ret;
}
EXPORT_SYMBOL_GPL(wilco_ec_mailbox);
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.6Bemerkung:
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.