@@ -92,6 +92,7 @@ struct qmi_transport {
uint16_t next_service_tid;
struct l_hashmap *family_list;
const struct qmi_transport_ops *ops;
+ struct debug_data debug;
bool writer_active : 1;
};
@@ -945,10 +946,10 @@ static int qmi_qmux_device_write(struct qmi_transport *transport,
return -errno;
l_util_hexdump(false, req->data, bytes_written,
- qmux->debug.func, qmux->debug.user_data);
+ transport->debug.func, transport->debug.user_data);
__qmux_debug_msg(' ', req->data, bytes_written,
- qmux->debug.func, qmux->debug.user_data);
+ transport->debug.func, transport->debug.user_data);
hdr = (struct qmi_mux_hdr *) req->data;
@@ -998,6 +999,7 @@ static void __rx_ctl_message(struct qmi_qmux_device *qmux,
static bool received_qmux_data(struct l_io *io, void *user_data)
{
struct qmi_qmux_device *qmux = user_data;
+ struct qmi_transport *transport = &qmux->transport;
struct qmi_mux_hdr *hdr;
unsigned char buf[2048];
ssize_t bytes_read;
@@ -1008,7 +1010,7 @@ static bool received_qmux_data(struct l_io *io, void *user_data)
return true;
l_util_hexdump(true, buf, bytes_read,
- qmux->debug.func, qmux->debug.user_data);
+ transport->debug.func, transport->debug.user_data);
offset = 0;
@@ -1033,7 +1035,8 @@ static bool received_qmux_data(struct l_io *io, void *user_data)
break;
__qmux_debug_msg(' ', buf + offset, len,
- qmux->debug.func, qmux->debug.user_data);
+ transport->debug.func,
+ transport->debug.user_data);
msg = buf + offset + QMI_MUX_HDR_SIZE;
@@ -1605,6 +1608,15 @@ void qmi_qmux_device_set_debug(struct qmi_qmux_device *qmux,
__debug_data_init(&qmux->debug, func, user_data);
}
+void qmi_qmux_device_set_io_debug(struct qmi_qmux_device *qmux,
+ qmi_debug_func_t func, void *user_data)
+{
+ if (!qmux)
+ return;
+
+ __debug_data_init(&qmux->transport.debug, func, user_data);
+}
+
struct qmi_qrtr_node {
unsigned int next_group_id; /* Matches requests with services */
struct l_queue *service_infos;
@@ -1663,8 +1675,6 @@ static void __qrtr_lookup_finished(struct qmi_qrtr_node *node)
static int qmi_qrtr_node_write(struct qmi_transport *transport,
struct qmi_request *req)
{
- struct qmi_qrtr_node *node =
- l_container_of(transport, struct qmi_qrtr_node, transport);
struct sockaddr_qrtr addr;
uint8_t *data;
uint16_t len;
@@ -1683,15 +1693,15 @@ static int qmi_qrtr_node_write(struct qmi_transport *transport,
bytes_written = sendto(fd, data, len, 0, (struct sockaddr *) &addr,
sizeof(addr));
if (bytes_written < 0) {
- DEBUG(&node->debug, "sendto: %s", strerror(errno));
+ DEBUG(&transport->debug, "sendto: %s", strerror(errno));
return -errno;
}
l_util_hexdump(false, data, bytes_written,
- node->debug.func, node->debug.user_data);
+ transport->debug.func, transport->debug.user_data);
__qrtr_debug_msg(' ', data, bytes_written,
- req->info.service_type, &node->debug);
+ req->info.service_type, &transport->debug);
l_queue_push_tail(transport->service_queue, req);
@@ -1802,13 +1812,14 @@ static void qrtr_received_service_message(struct qmi_qrtr_node *node,
return;
}
- __qrtr_debug_msg(' ', buf, len, service_type, &node->debug);
+ __qrtr_debug_msg(' ', buf, len, service_type, &transport->debug);
__rx_message(transport, service_type, 0, buf);
}
static bool qrtr_received_data(struct l_io *io, void *user_data)
{
struct qmi_qrtr_node *qrtr = user_data;
+ struct debug_data *debug = &qrtr->transport.debug;
struct sockaddr_qrtr addr;
unsigned char buf[2048];
ssize_t bytes_read;
@@ -1818,14 +1829,13 @@ static bool qrtr_received_data(struct l_io *io, void *user_data)
bytes_read = recvfrom(l_io_get_fd(qrtr->transport.io),
buf, sizeof(buf), 0,
(struct sockaddr *) &addr, &addr_size);
- DEBUG(&qrtr->debug, "Received %zd bytes from Node: %d Port: %d",
+ DEBUG(debug, "Received %zd bytes from Node: %d Port: %d",
bytes_read, addr.sq_node, addr.sq_port);
if (bytes_read < 0)
return true;
- l_util_hexdump(true, buf, bytes_read,
- qrtr->debug.func, qrtr->debug.user_data);
+ l_util_hexdump(true, buf, bytes_read, debug->func, debug->user_data);
if (addr.sq_port == QRTR_PORT_CTRL)
qrtr_received_control_packet(qrtr, buf, bytes_read);
@@ -1887,6 +1897,15 @@ void qmi_qrtr_node_set_debug(struct qmi_qrtr_node *node,
__debug_data_init(&node->debug, func, user_data);
}
+void qmi_qrtr_node_set_io_debug(struct qmi_qrtr_node *node,
+ qmi_debug_func_t func, void *user_data)
+{
+ if (!node)
+ return;
+
+ __debug_data_init(&node->transport.debug, func, user_data);
+}
+
static void qrtr_lookup_reply_timeout(struct l_timeout *timeout,
void *user_data)
{
@@ -1904,6 +1923,7 @@ int qmi_qrtr_node_lookup(struct qmi_qrtr_node *node,
socklen_t addr_len;
ssize_t bytes_written;
int fd;
+ struct debug_data *debug = &node->transport.debug;
if (!node || !func)
return -EINVAL;
@@ -1921,12 +1941,12 @@ int qmi_qrtr_node_lookup(struct qmi_qrtr_node *node,
*/
addr_len = sizeof(addr);
if (getsockname(fd, (struct sockaddr *) &addr, &addr_len) < 0) {
- DEBUG(&node->debug, "getsockname failed: %s", strerror(errno));
+ DEBUG(debug, "getsockname failed: %s", strerror(errno));
return -errno;
}
if (addr.sq_family != AF_QIPCRTR || addr_len != sizeof(addr)) {
- DEBUG(&node->debug, "Unexpected sockaddr family: %d size: %d",
+ DEBUG(debug, "Unexpected sockaddr family: %d size: %d",
addr.sq_family, addr_len);
return -EIO;
}
@@ -1939,12 +1959,12 @@ int qmi_qrtr_node_lookup(struct qmi_qrtr_node *node,
sizeof(packet), 0,
(struct sockaddr *) &addr, addr_len);
if (bytes_written < 0) {
- DEBUG(&node->debug, "sendto failed: %s", strerror(errno));
+ DEBUG(debug, "sendto failed: %s", strerror(errno));
return -errno;
}
l_util_hexdump(false, &packet, bytes_written,
- node->debug.func, node->debug.user_data);
+ debug->func, debug->user_data);
node->lookup.func = func;
node->lookup.user_data = user_data;
@@ -72,6 +72,8 @@ struct qmi_qmux_device *qmi_qmux_device_new(const char *device);
void qmi_qmux_device_free(struct qmi_qmux_device *qmux);
void qmi_qmux_device_set_debug(struct qmi_qmux_device *qmux,
qmi_debug_func_t func, void *user_data);
+void qmi_qmux_device_set_io_debug(struct qmi_qmux_device *qmux,
+ qmi_debug_func_t func, void *user_data);
int qmi_qmux_device_discover(struct qmi_qmux_device *qmux,
qmi_qmux_device_discover_func_t func,
void *user_data, qmi_destroy_func_t destroy);
@@ -91,6 +93,8 @@ struct qmi_qrtr_node *qmi_qrtr_node_new(uint32_t node);
void qmi_qrtr_node_free(struct qmi_qrtr_node *node);
void qmi_qrtr_node_set_debug(struct qmi_qrtr_node *node,
qmi_debug_func_t func, void *user_data);
+void qmi_qrtr_node_set_io_debug(struct qmi_qrtr_node *node,
+ qmi_debug_func_t func, void *user_data);
int qmi_qrtr_node_lookup(struct qmi_qrtr_node *node,
qmi_qrtr_node_lookup_done_func_t func,
void *user_data, qmi_destroy_func_t destroy);