This operation actually only support connection
and not a generic ioctl
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
- cb->fop_type = MEI_FOP_IOCTL;
+ cb->fop_type = MEI_FOP_WRITE;
if (!list_empty(&dev->amthif_cmd_list.list) ||
dev->iamthif_state != MEI_IAMTHIF_IDLE) {
if (!list_empty(&dev->amthif_cmd_list.list) ||
dev->iamthif_state != MEI_IAMTHIF_IDLE) {
- cb->fop_type = MEI_FOP_IOCTL;
+ cb->fop_type = MEI_FOP_CONNECT;
if (dev->hbuf_is_ready && !mei_cl_is_other_connecting(cl)) {
dev->hbuf_is_ready = false;
if (dev->hbuf_is_ready && !mei_cl_is_other_connecting(cl)) {
dev->hbuf_is_ready = false;
list_del(&pos->list);
return;
}
list_del(&pos->list);
return;
}
- if (pos->fop_type == MEI_FOP_IOCTL) {
+ if (pos->fop_type == MEI_FOP_CONNECT) {
if (is_treat_specially_client(cl, rs)) {
list_del(&pos->list);
cl->status = 0;
if (is_treat_specially_client(cl, rs)) {
list_del(&pos->list);
cl->status = 0;
- * mei_cl_irq_ioctl - processes client ioctl related operation from the
- * interrupt thread context - send connection request
+ * mei_cl_irq_connect - send connect request in irq_thread context
*
* @cl: client
* @cb: callback block.
*
* @cl: client
* @cb: callback block.
*
* returns 0, OK; otherwise, error.
*/
*
* returns 0, OK; otherwise, error.
*/
-static int mei_cl_irq_ioctl(struct mei_cl *cl, struct mei_cl_cb *cb,
+static int mei_cl_irq_connect(struct mei_cl *cl, struct mei_cl_cb *cb,
s32 *slots, struct mei_cl_cb *cmpl_list)
{
struct mei_device *dev = cl->dev;
s32 *slots, struct mei_cl_cb *cmpl_list)
{
struct mei_device *dev = cl->dev;
u32 msg_slots =
mei_data2slots(sizeof(struct hbm_client_connect_request));
u32 msg_slots =
mei_data2slots(sizeof(struct hbm_client_connect_request));
+ if (mei_cl_is_other_connecting(cl))
+ return 0;
+
if (*slots < msg_slots) {
/* return the cancel routine */
list_del(&cb->list);
if (*slots < msg_slots) {
/* return the cancel routine */
list_del(&cb->list);
- if (mei_cl_is_other_connecting(cl))
- continue;
- ret = mei_cl_irq_ioctl(cl, cb, &slots, cmpl_list);
+ ret = mei_cl_irq_connect(cl, cb, &slots, cmpl_list);
/**
* enum mei_cb_file_ops - file operation associated with the callback
/**
* enum mei_cb_file_ops - file operation associated with the callback
- * @MEI_FOP_READ - read
- * @MEI_FOP_WRITE - write
- * @MEI_FOP_IOCTL - ioctl
- * @MEI_FOP_OPEN - open
- * @MEI_FOP_CLOSE - close
+ * @MEI_FOP_READ - read
+ * @MEI_FOP_WRITE - write
+ * @MEI_FOP_CONNECT - connect
+ * @MEI_FOP_OPEN - open
+ * @MEI_FOP_CLOSE - close
*/
enum mei_cb_file_ops {
MEI_FOP_READ = 0,
MEI_FOP_WRITE,
*/
enum mei_cb_file_ops {
MEI_FOP_READ = 0,
MEI_FOP_WRITE,
MEI_FOP_OPEN,
MEI_FOP_CLOSE
};
MEI_FOP_OPEN,
MEI_FOP_CLOSE
};