2013-08-19 19:11:10

by Kalle Valo

[permalink] [raw]
Subject: [PATCH 1/2] qca-swiss-army-knife: add ath6kl trace-cmd plugin

Just a skeleton for now.

Signed-off-by: Kalle Valo <[email protected]>
---
tracing/plugins/ath6kl.py | 251 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 251 insertions(+)
create mode 100644 tracing/plugins/ath6kl.py

diff --git a/tracing/plugins/ath6kl.py b/tracing/plugins/ath6kl.py
new file mode 100644
index 0000000..228c736
--- /dev/null
+++ b/tracing/plugins/ath6kl.py
@@ -0,0 +1,251 @@
+#
+# Copyright (c) 2012 Qualcomm Atheros, Inc.
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+# To install the plugin:
+#
+# cp ath6kl.py ~/.trace-cmd/plugins/
+#
+# When making changes to the plugin use -V to see all python errors/warnings:
+#
+# trace-cmd report -V trace.dat
+
+import tracecmd
+import struct
+import binascii
+
+def hexdump(buf, prefix=None):
+ s = binascii.b2a_hex(buf)
+ s_len = len(s)
+ result = ""
+
+ if prefix == None:
+ prefix = ""
+
+ for i in range(s_len / 2):
+ if i % 16 == 0:
+ result = result + ("%s%04x: " % (prefix, i))
+
+ result = result + (s[2*i] + s[2*i+1] + " ")
+
+ if (i + 1) % 16 == 0:
+ result = result + "\n"
+
+ # FIXME: if len(s) % 16 == 0 there's an extra \n in the end
+
+ return result
+
+def wmi_event_bssinfo(pevent, trace_seq, event, buf):
+ hdr = struct.unpack("<HBB6BH", buf[0:12])
+ channel = hdr[0]
+ frame_type = hdr[1]
+ snr = hdr[2]
+ bssid = hdr[3]
+ ie_mask = hdr[4]
+
+ trace_seq.puts("\t\t\tWMI_BSSINFO_EVENTID channel %d frame_type 0x%x snr %d ie_mask 0x%x\n" %
+ (channel, frame_type, snr, ie_mask))
+
+wmi_event_handlers = [
+ [0x1004, wmi_event_bssinfo ],
+ ]
+
+def wmi_cmd_set_bss_filter_handler(pevent, trace_seq, event, buf):
+ hdr = struct.unpack("<BBHI", buf[0:8])
+ bss_filter = hdr[0]
+ ie_mask = hdr[3]
+
+ trace_seq.puts("\t\t\tWMI_SET_BSS_FILTER_CMDID bss_filter 0x%x ie_mask 0x%08x\n" %
+ (bss_filter, ie_mask))
+
+def wmi_cmd_set_probed_ssid_handler(pevent, trace_seq, event, buf):
+ hdr = struct.unpack("<BBB", buf[0:3])
+ entry_index = hdr[0]
+ flag = hdr[1]
+ ssid_len = hdr[2]
+
+ # fmt = "<" + ssid_len + "s"
+ # hdr = struct.unpack(fmt, buf[3:3 + ssid_len])
+
+ trace_seq.puts("\t\t\tWMI_SET_PROBED_SSID_CMDID entry_index 0x%x flag 0x%08x ssid_len %d\n" %
+ (entry_index, flag, ssid_len))
+
+ # FIXME: print SSID
+ # for c in hdr[0]:
+ # print ascii(c)
+
+wmi_cmd_handlers = [
+ [9, wmi_cmd_set_bss_filter_handler ],
+ [10, wmi_cmd_set_probed_ssid_handler ],
+ ]
+
+WMI_CMD_HDR_IF_ID_MASK = 0xf
+
+def ath6kl_wmi_cmd_handler(pevent, trace_seq, event):
+ buf_len = long(event['buf_len'])
+ buf = event['buf'].data
+
+ hdr = struct.unpack("<HHH", buf[0:6])
+ cmd_id = hdr[0]
+ if_idx = hdr[1] & WMI_CMD_HDR_IF_ID_MASK
+
+ trace_seq.puts("id 0x%x len %d if_idx %d\n" % (cmd_id, buf_len, if_idx))
+
+ for (wmi_id, handler) in wmi_cmd_handlers:
+ if wmi_id == cmd_id:
+ handler(pevent, trace_seq, event, buf[6:])
+ break
+
+def ath6kl_wmi_event_handler(pevent, trace_seq, event):
+ buf_len = long(event['buf_len'])
+ buf = event['buf'].data
+
+ hdr = struct.unpack("<HHH", buf[0:6])
+ cmd_id = hdr[0]
+ if_idx = hdr[1] & WMI_CMD_HDR_IF_ID_MASK
+
+ trace_seq.puts("id 0x%x len %d if_idx %d\n" % (cmd_id, buf_len, if_idx))
+
+ for (wmi_id, handler) in wmi_event_handlers:
+ if wmi_id == cmd_id:
+ handler(pevent, trace_seq, event, buf[6:])
+ break
+
+def ath6kl_htc_tx_handler(pevent, trace_seq, event):
+ buf_len = long(event['buf_len'])
+ buf = event['buf'].data
+
+ hdr = struct.unpack("<BBHBB", buf[0:6])
+ endpoint = hdr[0]
+ flags = hdr[1]
+ payload_len = hdr[2]
+ ctrl0 = hdr[3]
+ ctrl1 = hdr[4]
+
+ seqno = ctrl1
+
+ trace_seq.puts("seqno %d endpoint %d payload_len %d flags 0x%x\n" %
+ (seqno, endpoint, payload_len, flags))
+
+ if flags != 0:
+ trace_seq.puts("\t\t\t\t\t\t")
+
+ if flags & 0x1:
+ trace_seq.puts(" NEED_CREDIT_UPDATE")
+
+ if flags & 0x2:
+ trace_seq.puts(" SEND_BUNDLE")
+
+ if flags & 0x4:
+ trace_seq.puts(" FIXUP_NETBUF")
+
+ if flags != 0:
+ trace_seq.puts("\n")
+
+def ath6kl_htc_rx_handler(pevent, trace_seq, event):
+ buf_len = long(event['buf_len'])
+ buf = event['buf'].data
+
+ hdr = struct.unpack("<BBHBB", buf[0:6])
+ endpoint = hdr[0]
+ flags = hdr[1]
+ payload_len = hdr[2]
+ ctrl0 = hdr[3]
+ ctrl1 = hdr[4]
+
+ seqno = ctrl1
+ bundle_count = (flags & 0xf0) >> 4
+
+ trace_seq.puts("seqno %d endpoint %d payload_len %d flags 0x%x bundle_count %d\n" %
+ (seqno, endpoint, payload_len, flags, bundle_count))
+
+ if (flags & 0xf) != 0:
+ trace_seq.puts("\t\t\t\t\t\t")
+
+ if flags & 0x1:
+ trace_seq.puts(" UNUSED")
+
+ if flags & 0x2:
+ trace_seq.puts(" TRAILER")
+
+ if (flags & 0xf) != 0:
+ trace_seq.puts("\n")
+
+def ath6kl_sdio_handler(pevent, trace_seq, event):
+ tx = long(event['tx'])
+ addr = event['addr']
+ flags = event['flags']
+
+ buf_len = long(event['buf_len'])
+ buf = event['buf'].data
+
+ if tx == 1:
+ direction = "tx"
+ else:
+ direction = "rx"
+
+ trace_seq.puts("%s addr 0x%x flags 0x%x buf_len %d\n" %
+ (direction, addr, flags, buf_len))
+ trace_seq.puts("%s\n" % hexdump(buf))
+
+def ath6kl_sdio_scat_handler(pevent, trace_seq, event):
+ tx = long(event['tx'])
+ addr = long(event['addr'])
+ flags = long(event['flags'])
+ entries = long(event['entries'])
+ total_len = long(event['total_len'])
+
+ len_array_data = event['len_array'].data
+ data = event['data'].data
+
+ if tx == 1:
+ direction = "tx"
+ else:
+ direction = "rx"
+
+ trace_seq.puts("%s addr 0x%x flags 0x%x entries %d total_len %d\n" %
+ (direction, addr, flags, entries, total_len))
+
+ offset = 0
+
+ len_array = struct.unpack("<%dI" % entries, len_array_data[0:8])
+
+ for i in range(entries):
+ length = len_array[i]
+ start = offset
+ end = start + length
+
+ trace_seq.puts("%s\n" % hexdump(data[start:end]))
+
+ offset = offset + length
+
+def register(pevent):
+ pevent.register_event_handler("ath6kl", "ath6kl_wmi_cmd",
+ lambda *args:
+ ath6kl_wmi_cmd_handler(pevent, *args))
+ pevent.register_event_handler("ath6kl", "ath6kl_wmi_event",
+ lambda *args:
+ ath6kl_wmi_event_handler(pevent, *args))
+ pevent.register_event_handler("ath6kl", "ath6kl_htc_tx",
+ lambda *args:
+ ath6kl_htc_tx_handler(pevent, *args))
+ pevent.register_event_handler("ath6kl", "ath6kl_htc_rx",
+ lambda *args:
+ ath6kl_htc_rx_handler(pevent, *args))
+ pevent.register_event_handler("ath6kl", "ath6kl_sdio",
+ lambda *args:
+ ath6kl_sdio_handler(pevent, *args))
+ pevent.register_event_handler("ath6kl", "ath6kl_sdio_scat",
+ lambda *args:
+ ath6kl_sdio_scat_handler(pevent, *args))
--
1.7.9.5



2013-08-19 19:11:10

by Kalle Valo

[permalink] [raw]
Subject: [PATCH 2/2] qca-swiss-army-knife: add ath10k trace-cmd plugin

This one's a skeleton as well.

Signed-off-by: Kalle Valo <[email protected]>
---
tracing/plugins/ath10k.py | 133 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 133 insertions(+)
create mode 100644 tracing/plugins/ath10k.py

diff --git a/tracing/plugins/ath10k.py b/tracing/plugins/ath10k.py
new file mode 100644
index 0000000..1008c05
--- /dev/null
+++ b/tracing/plugins/ath10k.py
@@ -0,0 +1,133 @@
+#
+# Copyright (c) 2012 Qualcomm Atheros, Inc.
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+# trace-cmd plugin for ath10k, QCA Linux wireless driver
+
+
+import tracecmd
+import struct
+import binascii
+
+def hexdump(buf, prefix=None):
+ s = binascii.b2a_hex(buf)
+ s_len = len(s)
+ result = ""
+
+ if prefix == None:
+ prefix = ""
+
+ for i in range(s_len / 2):
+ if i % 16 == 0:
+ result = result + ("%s%04x: " % (prefix, i))
+
+ result = result + (s[2*i] + s[2*i+1] + " ")
+
+ if (i + 1) % 16 == 0:
+ result = result + "\n"
+
+ # FIXME: if len(s) % 16 == 0 there's an extra \n in the end
+
+ return result
+
+wmi_scan_event_names = [
+ [0x1, "WMI_SCAN_EVENT_STARTED" ],
+ [0x2, "WMI_SCAN_EVENT_COMPLETED" ],
+ [0x4, "WMI_SCAN_EVENT_BSS_CHANNEL" ],
+ [0x8, "WMI_SCAN_EVENT_FOREIGN_CHANNEL"],
+ [0x10, "WMI_SCAN_EVENT_DEQUEUED" ],
+ [0x20, "WMI_SCAN_EVENT_PREEMPTED" ],
+ [0x40, "WMI_SCAN_EVENT_START_FAILED" ],
+ ]
+
+def wmi_event_scan(pevent, trace_seq, event, buf):
+ hdr = struct.unpack("<IIIIII", buf[0:24])
+ event = hdr[0]
+ reason = hdr[1]
+ channel_freq = hdr[2]
+ requestor = hdr[3]
+ scan_id = hdr[4]
+ vdev_id = hdr[5]
+
+ trace_seq.puts("\t\t\t\tWMI_SCAN_EVENTID event 0x%x reason %d channel_freq %d requestor %d scan_id %d vdev_id %d\n" %
+ (event, reason, channel_freq, requestor, scan_id, vdev_id))
+
+ for (i, name) in wmi_scan_event_names:
+ if event == i:
+ trace_seq.puts("\t\t\t\t\t%s" % name)
+
+wmi_event_handlers = [
+ [0x9000, wmi_event_scan ],
+ ]
+
+def wmi_cmd_start_scan_handler(pevent, trace_seq, event, buf):
+ hdr = struct.unpack("<IIIIIIIIIIIIIII", buf[0:60])
+ scan_id = hdr[0]
+
+ trace_seq.puts("\t\t\t\tWMI_START_SCAN_CMDID scan_id %d\n" % (scan_id))
+
+wmi_cmd_handlers = [
+ [0x9000, wmi_cmd_start_scan_handler ],
+ ]
+
+def ath10k_wmi_cmd_handler(pevent, trace_seq, event):
+ buf_len = long(event['buf_len'])
+ buf = event['buf'].data
+
+ # parse wmi header
+ hdr = struct.unpack("<HH", buf[0:4])
+ buf = buf[4:]
+
+ cmd_id = hdr[0]
+
+ trace_seq.puts("id 0x%x len %d\n" % (cmd_id, buf_len))
+
+ for (wmi_id, handler) in wmi_cmd_handlers:
+ if wmi_id == cmd_id:
+ handler(pevent, trace_seq, event, buf)
+ break
+
+def ath10k_wmi_event_handler(pevent, trace_seq, event):
+ buf_len = long(event['buf_len'])
+ buf = event['buf'].data
+
+ hdr = struct.unpack("<HH", buf[0:4])
+ cmd_id = hdr[0]
+
+ trace_seq.puts("id 0x%x len %d\n" % (cmd_id, buf_len))
+
+ for (wmi_id, handler) in wmi_event_handlers:
+ if wmi_id == cmd_id:
+ handler(pevent, trace_seq, event, buf[4:])
+ break
+
+def ath10k_log_dbg_dump_handler(pevent, trace_seq, event):
+ msg = event['msg']
+ prefix = event['prefix']
+ buf_len = long(event['buf_len'])
+ buf = event['buf'].data
+
+ trace_seq.puts("%s\n" % (msg))
+ trace_seq.puts("%s\n" % hexdump(buf, prefix))
+
+def register(pevent):
+ pevent.register_event_handler("ath10k", "ath10k_wmi_cmd",
+ lambda *args:
+ ath10k_wmi_cmd_handler(pevent, *args))
+ pevent.register_event_handler("ath10k", "ath10k_wmi_event",
+ lambda *args:
+ ath10k_wmi_event_handler(pevent, *args))
+ pevent.register_event_handler("ath10k", "ath10k_log_dbg_dump",
+ lambda *args:
+ ath10k_log_dbg_dump_handler(pevent, *args))
--
1.7.9.5


2013-09-05 04:57:56

by Julian Calaby

[permalink] [raw]
Subject: Re: [PATCH 2/2] qca-swiss-army-knife: add ath10k trace-cmd plugin

Hi Kalle,

On Thu, Sep 5, 2013 at 2:49 PM, Kalle Valo <[email protected]> wrote:
> "Luis R. Rodriguez" <[email protected]> writes:
>
>> On Mon, Aug 19, 2013 at 12:11 PM, Kalle Valo <[email protected]> wrote:
>>> This one's a skeleton as well.
>>>
>>> Signed-off-by: Kalle Valo <[email protected]>
>>
>> Applied both and pushed, thanks!
>
> Thanks.
>
>> I just removed 3 trailing spaces on the 2 patches. One had two
>> trailing spaces, the last patch had one.
>
> Oh, sorry about that. Any ideas how I could check for those myself?

If you have coloured diff output enabled in git (color.diff = true)
then they and other whitespace errors are highlighted in red whenever
you do diffs.

Thanks,

--
Julian Calaby

Email: [email protected]
Profile: http://www.google.com/profiles/julian.calaby/
.Plan: http://sites.google.com/site/juliancalaby/

2013-09-04 18:57:33

by Luis R. Rodriguez

[permalink] [raw]
Subject: Re: [PATCH 2/2] qca-swiss-army-knife: add ath10k trace-cmd plugin

On Mon, Aug 19, 2013 at 12:11 PM, Kalle Valo <[email protected]> wrote:
> This one's a skeleton as well.
>
> Signed-off-by: Kalle Valo <[email protected]>

Applied both and pushed, thanks! I just removed 3 trailing spaces on
the 2 patches. One had two trailing spaces, the last patch had one.

Luis

2013-09-05 05:38:57

by Joe Perches

[permalink] [raw]
Subject: Re: [PATCH 2/2] qca-swiss-army-knife: add ath10k trace-cmd plugin

On Thu, 2013-09-05 at 08:03 +0300, Kalle Valo wrote:
> Joe Perches <[email protected]> writes:
>
> > On Thu, 2013-09-05 at 07:49 +0300, Kalle Valo wrote:
> >> "Luis R. Rodriguez" <[email protected]> writes:
> >> > I just removed 3 trailing spaces on the 2 patches. One had two
> >> > trailing spaces, the last patch had one.
> >>
> >> Oh, sorry about that. Any ideas how I could check for those myself?
> >
> > scripts/checkpatch.pl <patch>
>
> Checkpatch works also with trace-cmd plugins written in python?

Don't see why not.

Trailing spaces are trailing spaces and the trailing
space test is done way before looking at file type
specific tests.

> > git am <patch>
>
> Yeah, I guess I could do that, it's just a bit inconvienient.

scripting a git am script for a patch
set is just a for loop...

You could also use scripts/cleanpatch


2013-09-05 05:03:49

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH 2/2] qca-swiss-army-knife: add ath10k trace-cmd plugin

Joe Perches <[email protected]> writes:

> On Thu, 2013-09-05 at 07:49 +0300, Kalle Valo wrote:
>> "Luis R. Rodriguez" <[email protected]> writes:
>> > I just removed 3 trailing spaces on the 2 patches. One had two
>> > trailing spaces, the last patch had one.
>>
>> Oh, sorry about that. Any ideas how I could check for those myself?
>
> scripts/checkpatch.pl <patch>

Checkpatch works also with trace-cmd plugins written in python?

> git am <patch>

Yeah, I guess I could do that, it's just a bit inconvienient.

--
Kalle Valo

2013-09-05 04:49:50

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH 2/2] qca-swiss-army-knife: add ath10k trace-cmd plugin

"Luis R. Rodriguez" <[email protected]> writes:

> On Mon, Aug 19, 2013 at 12:11 PM, Kalle Valo <[email protected]> wrote:
>> This one's a skeleton as well.
>>
>> Signed-off-by: Kalle Valo <[email protected]>
>
> Applied both and pushed, thanks!

Thanks.

> I just removed 3 trailing spaces on the 2 patches. One had two
> trailing spaces, the last patch had one.

Oh, sorry about that. Any ideas how I could check for those myself?

--
Kalle Valo

2013-09-05 05:08:20

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH 2/2] qca-swiss-army-knife: add ath10k trace-cmd plugin

Hi Julian,

Julian Calaby <[email protected]> writes:

> On Thu, Sep 5, 2013 at 2:49 PM, Kalle Valo <[email protected]> wrote:
>> "Luis R. Rodriguez" <[email protected]> writes:
>>
>>> On Mon, Aug 19, 2013 at 12:11 PM, Kalle Valo <[email protected]> wrote:
>>>> This one's a skeleton as well.
>>>>
>>>> Signed-off-by: Kalle Valo <[email protected]>
>>>
>>> Applied both and pushed, thanks!
>>
>> Thanks.
>>
>>> I just removed 3 trailing spaces on the 2 patches. One had two
>>> trailing spaces, the last patch had one.
>>
>> Oh, sorry about that. Any ideas how I could check for those myself?
>
> If you have coloured diff output enabled in git (color.diff = true)
> then they and other whitespace errors are highlighted in red whenever
> you do diffs.

I don't normally have colors enabled (don't like them), but it seems to
be easy to enable with 'git diff --color'. It's just that it doesn't
seem to work in my terminal, I only see the ANSI codes and no colors.
But this is the best way to do that, just need to fix my terminal.

Thanks!

--
Kalle Valo

2013-09-05 04:57:08

by Joe Perches

[permalink] [raw]
Subject: Re: [PATCH 2/2] qca-swiss-army-knife: add ath10k trace-cmd plugin

On Thu, 2013-09-05 at 07:49 +0300, Kalle Valo wrote:
> "Luis R. Rodriguez" <[email protected]> writes:
> > I just removed 3 trailing spaces on the 2 patches. One had two
> > trailing spaces, the last patch had one.
>
> Oh, sorry about that. Any ideas how I could check for those myself?

scripts/checkpatch.pl <patch>
git am <patch>