Lines Matching refs:cn
26 struct cn_msg *cn; /* advances as cn_msg is appeneded */
40 /* pointers within w1_cb_block and cn data */
57 if (!block->cn)
59 return (u8 *)block->cn - (u8 *)block->first_cn + block->cn->len;
90 block->cn = NULL;
99 if (!(block->request_cn.flags & W1_CN_BUNDLE) && block->cn)
106 * @ack: determines if cn can be reused
108 * block->cn will be setup with the correct ack, advancing if needed
109 * block->cn->len does not include space for block->msg
114 if (block->cn && block->cn->ack == ack) {
115 block->msg = (struct w1_netlink_msg *)(block->cn->data + block->cn->len);
118 if (block->cn)
119 block->cn = (struct cn_msg *)(block->cn->data +
120 block->cn->len);
122 block->cn = block->first_cn;
124 memcpy(block->cn, &block->request_cn, sizeof(*block->cn));
125 block->cn->len = 0;
126 block->cn->ack = ack;
127 block->msg = (struct w1_netlink_msg *)block->cn->data;
148 block->cn->len += sizeof(*block->msg);
155 block->cn->len += space;
171 block->cn->len += sizeof(*req_msg);
177 block->cn->len += sizeof(*cmd);
186 * @cn: original cn_msg
191 * Use when a block isn't available to queue the message to and cn, msg
194 static void w1_netlink_send_error(struct cn_msg *cn, struct w1_netlink_msg *msg,
198 struct cn_msg cn;
201 memcpy(&packet.cn, cn, sizeof(packet.cn));
203 packet.cn.len = sizeof(packet.msg);
206 cn_netlink_send(&packet.cn, portid, 0, GFP_KERNEL);
219 struct cn_msg cn;
224 packet.cn.id.idx = CN_W1_IDX;
225 packet.cn.id.val = CN_W1_VAL;
227 packet.cn.seq = dev->seq++;
228 packet.cn.len = sizeof(*msg);
233 cn_netlink_send(&packet.cn, 0, 0, GFP_KERNEL);
253 block->cn->len += sizeof(*data);
402 struct cn_msg *cn;
406 cn = kmalloc(PAGE_SIZE, GFP_KERNEL);
407 if (!cn)
410 cn->id.idx = CN_W1_IDX;
411 cn->id.val = CN_W1_VAL;
413 cn->seq = req_cn->seq;
414 cn->ack = req_cn->seq + 1;
415 cn->len = sizeof(struct w1_netlink_msg);
416 msg = (struct w1_netlink_msg *)cn->data;
425 if (cn->len + sizeof(*id) > PAGE_SIZE - sizeof(struct cn_msg)) {
426 cn_netlink_send(cn, portid, 0, GFP_KERNEL);
427 cn->len = sizeof(struct w1_netlink_msg);
434 cn->len += sizeof(*id);
437 cn_netlink_send(cn, portid, 0, GFP_KERNEL);
440 kfree(cn);
537 static void w1_cn_callback(struct cn_msg *cn, struct netlink_skb_parms *nsp)
539 struct w1_netlink_msg *msg = (struct w1_netlink_msg *)(cn + 1);
554 if (cn->flags & ~(W1_CN_BUNDLE)) {
555 w1_netlink_send_error(cn, msg, nsp->portid, -EINVAL);
562 msg_len = cn->len;
581 msg = (struct w1_netlink_msg *)(cn + 1);
584 int reply_size = sizeof(*cn) + cn->len + slave_len;
585 if (cn->flags & W1_CN_BUNDLE) {
597 * cn->len doesn't include itself which is part of the block
600 sizeof(struct w1_cb_block) + sizeof(*cn) + cn->len +
611 w1_netlink_send_error(cn, msg, nsp->portid, -ENOMEM);
616 block->request_cn = *cn;
617 memcpy(block->request_cn.data, cn->data, cn->len);
618 node = (struct w1_cb_node *)(block->request_cn.data + cn->len);
634 msg_len = cn->len;
647 err = w1_process_command_root(cn, nsp->portid);
667 pr_notice("%s: cn: %x.%x, wrong type: %u, len: %u.\n",
668 __func__, cn->id.idx, cn->id.val,
685 (size_t)((u8 *)msg - (u8 *)cn));
701 w1_netlink_send_error(cn, msg, nsp->portid, err);
730 void w1_netlink_send(struct w1_master *dev, struct w1_netlink_msg *cn)