Loading drivers/rpmsg/qcom_glink_native.c +4 −0 Original line number Diff line number Diff line Loading @@ -1475,6 +1475,9 @@ static int __qcom_glink_send(struct glink_channel *channel, if (intent) break; if (atomic_read(&glink->in_reset)) return -ECONNRESET; if (!wait) return -EBUSY; Loading Loading @@ -1505,6 +1508,7 @@ static int __qcom_glink_send(struct glink_channel *channel, } while (left_size > 0) { data = (void *)((char *)data + chunk_size); chunk_size = left_size; if (chunk_size > SZ_8K) chunk_size = SZ_8K; Loading drivers/rpmsg/qcom_glink_rpm.c +1 −1 Original line number Diff line number Diff line Loading @@ -338,7 +338,7 @@ static int __init glink_rpm_init(void) { return platform_driver_register(&glink_rpm_driver); } subsys_initcall(glink_rpm_init); postcore_initcall(glink_rpm_init); static void __exit glink_rpm_exit(void) { Loading net/qrtr/qrtr.c +47 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,8 @@ #define QRTR_MIN_EPH_SOCKET 0x4000 #define QRTR_MAX_EPH_SOCKET 0x7fff #define QRTR_PORT_CTRL_LEGACY 0xffff /* qrtr socket states */ #define QRTR_STATE_MULTI -2 #define QRTR_STATE_INIT -1 Loading Loading @@ -616,6 +618,48 @@ static void qrtr_node_assign(struct qrtr_node *node, unsigned int nid) } } /** * qrtr_peek_pkt_size() - Peek into the packet header to get potential pkt size * * @data: Starting address of the packet which points to router header. * * @returns: potential packet size on success, < 0 on error. * * This function is used by the underlying transport abstraction layer to * peek into the potential packet size of an incoming packet. This information * is used to perform link layer fragmentation and re-assembly */ int qrtr_peek_pkt_size(const void *data) { const struct qrtr_hdr_v1 *v1; const struct qrtr_hdr_v2 *v2; unsigned int hdrlen; unsigned int size; unsigned int ver; /* Version field in v1 is little endian, so this works for both cases */ ver = *(u8 *)data; switch (ver) { case QRTR_PROTO_VER_1: v1 = data; hdrlen = sizeof(*v1); size = le32_to_cpu(v1->size); break; case QRTR_PROTO_VER_2: v2 = data; hdrlen = sizeof(*v2) + v2->optlen; size = le32_to_cpu(v2->size); break; default: pr_err("qrtr: Invalid version %d\n", ver); return -EINVAL; } return ALIGN(size, 4) + hdrlen; } EXPORT_SYMBOL(qrtr_peek_pkt_size); /** * qrtr_endpoint_post() - post incoming data * @ep: endpoint handle Loading Loading @@ -684,6 +728,9 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len) goto err; } if (cb->dst_port == QRTR_PORT_CTRL_LEGACY) cb->dst_port = QRTR_PORT_CTRL; if (len != ALIGN(size, 4) + hdrlen) goto err; Loading net/qrtr/qrtr.h +1 −0 Original line number Diff line number Diff line Loading @@ -32,4 +32,5 @@ void qrtr_endpoint_unregister(struct qrtr_endpoint *ep); int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len); int qrtr_peek_pkt_size(const void *data); #endif net/qrtr/usb.c +1 −0 Original line number Diff line number Diff line Loading @@ -290,6 +290,7 @@ static void qcom_usb_qrtr_disconnect(struct usb_interface *interface) static const struct usb_device_id qcom_usb_qrtr_ids[] = { { USB_DEVICE_INTERFACE_NUMBER(QRTR_VENDOR_ID, 0x90ef, 3) }, { USB_DEVICE_INTERFACE_NUMBER(QRTR_VENDOR_ID, 0x90f0, 3) }, { USB_DEVICE_INTERFACE_NUMBER(QRTR_VENDOR_ID, 0x90f3, 2) }, { } /* Terminating entry */ }; MODULE_DEVICE_TABLE(usb, qcom_usb_qrtr_ids); Loading Loading
drivers/rpmsg/qcom_glink_native.c +4 −0 Original line number Diff line number Diff line Loading @@ -1475,6 +1475,9 @@ static int __qcom_glink_send(struct glink_channel *channel, if (intent) break; if (atomic_read(&glink->in_reset)) return -ECONNRESET; if (!wait) return -EBUSY; Loading Loading @@ -1505,6 +1508,7 @@ static int __qcom_glink_send(struct glink_channel *channel, } while (left_size > 0) { data = (void *)((char *)data + chunk_size); chunk_size = left_size; if (chunk_size > SZ_8K) chunk_size = SZ_8K; Loading
drivers/rpmsg/qcom_glink_rpm.c +1 −1 Original line number Diff line number Diff line Loading @@ -338,7 +338,7 @@ static int __init glink_rpm_init(void) { return platform_driver_register(&glink_rpm_driver); } subsys_initcall(glink_rpm_init); postcore_initcall(glink_rpm_init); static void __exit glink_rpm_exit(void) { Loading
net/qrtr/qrtr.c +47 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,8 @@ #define QRTR_MIN_EPH_SOCKET 0x4000 #define QRTR_MAX_EPH_SOCKET 0x7fff #define QRTR_PORT_CTRL_LEGACY 0xffff /* qrtr socket states */ #define QRTR_STATE_MULTI -2 #define QRTR_STATE_INIT -1 Loading Loading @@ -616,6 +618,48 @@ static void qrtr_node_assign(struct qrtr_node *node, unsigned int nid) } } /** * qrtr_peek_pkt_size() - Peek into the packet header to get potential pkt size * * @data: Starting address of the packet which points to router header. * * @returns: potential packet size on success, < 0 on error. * * This function is used by the underlying transport abstraction layer to * peek into the potential packet size of an incoming packet. This information * is used to perform link layer fragmentation and re-assembly */ int qrtr_peek_pkt_size(const void *data) { const struct qrtr_hdr_v1 *v1; const struct qrtr_hdr_v2 *v2; unsigned int hdrlen; unsigned int size; unsigned int ver; /* Version field in v1 is little endian, so this works for both cases */ ver = *(u8 *)data; switch (ver) { case QRTR_PROTO_VER_1: v1 = data; hdrlen = sizeof(*v1); size = le32_to_cpu(v1->size); break; case QRTR_PROTO_VER_2: v2 = data; hdrlen = sizeof(*v2) + v2->optlen; size = le32_to_cpu(v2->size); break; default: pr_err("qrtr: Invalid version %d\n", ver); return -EINVAL; } return ALIGN(size, 4) + hdrlen; } EXPORT_SYMBOL(qrtr_peek_pkt_size); /** * qrtr_endpoint_post() - post incoming data * @ep: endpoint handle Loading Loading @@ -684,6 +728,9 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len) goto err; } if (cb->dst_port == QRTR_PORT_CTRL_LEGACY) cb->dst_port = QRTR_PORT_CTRL; if (len != ALIGN(size, 4) + hdrlen) goto err; Loading
net/qrtr/qrtr.h +1 −0 Original line number Diff line number Diff line Loading @@ -32,4 +32,5 @@ void qrtr_endpoint_unregister(struct qrtr_endpoint *ep); int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len); int qrtr_peek_pkt_size(const void *data); #endif
net/qrtr/usb.c +1 −0 Original line number Diff line number Diff line Loading @@ -290,6 +290,7 @@ static void qcom_usb_qrtr_disconnect(struct usb_interface *interface) static const struct usb_device_id qcom_usb_qrtr_ids[] = { { USB_DEVICE_INTERFACE_NUMBER(QRTR_VENDOR_ID, 0x90ef, 3) }, { USB_DEVICE_INTERFACE_NUMBER(QRTR_VENDOR_ID, 0x90f0, 3) }, { USB_DEVICE_INTERFACE_NUMBER(QRTR_VENDOR_ID, 0x90f3, 2) }, { } /* Terminating entry */ }; MODULE_DEVICE_TABLE(usb, qcom_usb_qrtr_ids); Loading