<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Kernel on Insignificant Bits</title>
    <link>https://bobcopeland.com/blog/tags/kernel/</link>
    <description>Recent content in Kernel on Insignificant Bits</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    <lastBuildDate>Mon, 31 Oct 2016 13:32:19 +0000</lastBuildDate>
    <atom:link href="https://bobcopeland.com/blog/tags/kernel/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Encrypted mesh PSA</title>
      <link>https://bobcopeland.com/blog/2016/10/encrypted-mesh-psa/</link>
      <pubDate>Mon, 31 Oct 2016 13:32:19 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=2318</guid> 
      <description>&lt;p&gt;I&amp;rsquo;m a bit late writing this up, as lately wifi stuff has taken a back seat to the day job. But, I&amp;rsquo;ve now seen the following issue reported more than once, so hopefully this post will save the other two mesh users some grief.&lt;/p&gt;
&lt;p&gt;If you are running an encrypted mesh on wpa_supplicant or (ye gods) authsae, take note:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Encrypted mesh on kernel 4.8 will not interoperate with kernel &amp;lt; 4.8&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;wpa_supplicant 2.6 will not interoperate with 2.5&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;authsae as of commit 706a2cf will not interoperate with that of commit 813ec0e [1]&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;wpa_supplicant 2.6 and authsae commit 706a2cf require additional configuration to work with kernel &amp;lt; 4.8 (see below).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>memory Âµ-optimizing</title>
      <link>https://bobcopeland.com/blog/2016/03/memory-%C2%B5-optimizing/</link>
      <pubDate>Tue, 15 Mar 2016 12:27:35 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=2279</guid> 
      <description>&lt;p&gt;While looking at some kmalloc statistics for my little corner of wireless, I found a new tool for the toolbox: &lt;code&gt;perf kmem&lt;/code&gt;. To test it out, I ran a simulated connected 25-node mesh in mac80211_hwsim.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what &lt;code&gt;perf kmem stat --caller&lt;/code&gt; had to say:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;---------------------------------------------------------------------&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; Callsite            &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; Total_alloc&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;Per &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; Total_req&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;Per  &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; Hit   &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;---------------------------------------------------------------------&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; mesh_table_alloc&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;e &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;      &lt;span style=&#34;color:#ae81ff&#34;&gt;1600&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;32&lt;/span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;       &lt;span style=&#34;color:#ae81ff&#34;&gt;400&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; mesh_rmc_init&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;23&lt;/span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;204800&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;8192&lt;/span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;102600&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4104&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;25&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; mesh_path_new&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;315904&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt;   &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;241864&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;392&lt;/span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;   &lt;span style=&#34;color:#ae81ff&#34;&gt;617&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The number of mesh nodes shows up in the &amp;lsquo;Hit&amp;rsquo; column in various ways: we can pretty easily see that mesh_table_alloc is called twice per mesh device, mesh_rmc_init is called once, and mesh_path_new is called at least once for every peer (617 ~= 25 * 24). We might scan the hit column to see if there are any cases in our code that perform unexpectedly high numbers of allocations, signifying a bug or poor design.&lt;/p&gt;</description>
    </item>
    <item>
      <title>wherein I did a git push</title>
      <link>https://bobcopeland.com/blog/2016/01/wherein-i-did-a-git-push/</link>
      <pubDate>Fri, 29 Jan 2016 14:03:09 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=2261</guid> 
      <description>&lt;p&gt;As &lt;a href=&#34;http://permalink.gmane.org/gmane.linux.kernel.wireless.general/146327&#34;&gt;I wrote&lt;/a&gt; somewhere in the Metaverse, I&amp;rsquo;m running the &lt;a href=&#34;https://git.kernel.org/cgit/linux/kernel/git/wireless/wireless-testing.git&#34;&gt;wireless-testing&lt;/a&gt; tree now, which is about as minimal a contribution as one could make. It essentially means running a script once daily; cron could do it all, if not for the part where I enter my ssh passphrase to actually push out the updates. For the curious, here&amp;rsquo;s &lt;a href=&#34;https://github.com/bcopeland/wt-tools/blob/master/wt-update&#34;&gt;the script&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;One of the killer features of git used here is &lt;code&gt;git rerere&lt;/code&gt;, which remembers conflict resolutions and reapplies them when reencountered. A human (me) still needs to resolve the conflict once, but after that it&amp;rsquo;s pretty much on autopilot for the rest of that kernel series. Normally one should reinspect the automatic merge made by git-rerere, but at least for this testing tree, throwing caution to the wind is warranted and thus the script has some kludges around that.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Phone bugs</title>
      <link>https://bobcopeland.com/blog/2014/03/phone-bugs/</link>
      <pubDate>Thu, 20 Mar 2014 13:36:43 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=2040</guid> 
      <description>&lt;p&gt;If you want to experience what it is like to be the first person to ever do something, might I suggest turning on all the debug knobs on an Android vendor kernel? Some speculative fixes &lt;a href=&#34;https://github.com/bcopeland/android_kernel_sony_apq8064&#34;&gt;over here&lt;/a&gt;, but there is still at least one other RCU bug on boot, and this use-after-free in the usb controller driver:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[   34.520080] msm_hsic_host msm_hsic_host: remove, state 1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[   34.525329] usb usb1: USB disconnect, device number 1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[   34.529602] usb 1-1: USB disconnect, device number 2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[   34.637023] msm_hsic_host msm_hsic_host: USB bus 1 deregistered
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[   34.668945] Unable to handle kernel paging request at virtual address aaaaaae6
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[   34.675201] pgd = c0004000
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[   34.678497] [aaaaaae6] *pgd=00000000
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[   34.681762] Internal error: Oops: 5 [#1] PREEMPT SMP ARM
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[   34.686737] Modules linked in: wcn36xx_msm(O) wcn36xx(O) mac80211(O) cfg80211(O) compat(O)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[   34.694976] CPU: 1    Tainted: G        W  O  (3.4.0-g4a73a1d-00005-g311eaee-dirty #2)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[   34.702972] PC is at __gpio_get_value+0x28/0x1cc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[   34.707489] LR is at do_restart+0x24/0xd8
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[   34.711486] pc : []    lr : []    psr: 60000013
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[   34.711486] sp : ebcd9ed8  ip : c032a858  fp : ebcd9ef4
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[   34.722930] r10: 00000000  r9 : c04dd67c  r8 : 00000000
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[   34.728210] r7 : c4d81f00  r6 : 6b6b6b6b  r5 : c10099cc  r4 : aaaaaaaa
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[   34.734680] r3 : 09090904  r2 : c1672f80  r1 : 00000010  r0 : 6b6b6b6b
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                                                 ^^^^^^^^ whoops
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[   34.741241] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[   34.748504] Control: 10c5787d  Table: acfb006a  DAC: 00000015
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I guess I should try to find out where to report bugs for these (predictably) not upstream drivers, but that seems like a total pain.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kernel updates</title>
      <link>https://bobcopeland.com/blog/2010/07/kernel-updates/</link>
      <pubDate>Sun, 18 Jul 2010 00:39:27 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=1506</guid> 
      <description>&lt;p&gt;During baby naps I actually did some Rio Karma work this week. First, I &lt;a href=&#34;http://marc.info/?l=linux-usb&amp;amp;m=127894796224563&amp;amp;w=2&#34;&gt;found and fixed&lt;/a&gt; a recent bug in usb storage that makes the Karma not work at all in 2.6.35. Then I finally set up my &lt;a href=&#34;http://git.kernel.org/?p=linux/kernel/git/bcopeland/omfs.git;a=shortlog;h=refs/heads/for-next&#34;&gt;omfs git tree&lt;/a&gt; on kernel.org, with a few patches I wrote almost two years ago, plus a recently found memory leak. I&amp;rsquo;ll try to get Linus to pull it in 2.6.36. Then, I made a new release of &lt;a href=&#34;https://bobcopeland.com/blog/karma/&#34;&gt;omfsprogs&lt;/a&gt; rewritten to use libomfs from the FUSE version of omfs (I also did this work two years ago). Now all is right in the Karma world again; time to ignore it for another 6 months.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ath5k AP Mode</title>
      <link>https://bobcopeland.com/blog/2009/11/ath5k-ap-mode/</link>
      <pubDate>Sun, 01 Nov 2009 18:29:22 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=1399</guid> 
      <description>&lt;p&gt;People seem to keep asking about this, despite there being a &lt;a href=&#34;http://wireless.kernel.org/en/users/Documentation/hostapd&#34;&gt;quality page on kernel.org&lt;/a&gt; on how to run an AP with any mac80211 driver. So for what it&amp;rsquo;s worth, here&amp;rsquo;s how my setup works. Note if you are seeing flakiness with certain clients, e.g. it works fine with a computer but not with your cell phone, it is likely there is some bug with the power saving handling. I&amp;rsquo;m currently working on a few such issues, so it may be fixed soon enough.&lt;/p&gt;</description>
    </item>
    <item>
      <title>wl1251 performance</title>
      <link>https://bobcopeland.com/blog/2009/08/wl1251-performance/</link>
      <pubDate>Tue, 18 Aug 2009 03:18:46 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=1383</guid> 
      <description>&lt;p&gt;After fixing the remaining ifup bug (as expected, it was easy), I have some initial numbers on the new kernel driver versus the stock vendor driver on the G1:
driveravg ping msnetperf mbit/stiwlan65.2317.53wl12518.5653.82
So, better on latency, worse on throughput. wl1251 is also quite a lot larger when taking all of cfg80211/mac80211 into account, though I didn&amp;rsquo;t spend any time trying to tweak the size in the build. Well, at least the code doesn&amp;rsquo;t make you want to poke your own eyes out.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hang fixed</title>
      <link>https://bobcopeland.com/blog/2009/08/hang-fixed/</link>
      <pubDate>Mon, 17 Aug 2009 18:04:06 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=1380</guid> 
      <description>&lt;p&gt;&lt;a href=&#34;http://patchwork.kernel.org/patch/42064/&#34;&gt;These sorts of bugs&lt;/a&gt; can ruin your weekend, just ask Ange who had to listen to me mope yesterday. Of course, I spotted it right away when looking at it freshly during this morning&amp;rsquo;s commute. Now, &lt;code&gt;ifconfig wlan0 up; ifconfig wlan0 down; ifconfig wlan0 up&lt;/code&gt; still fails with wl1251, but it doesn&amp;rsquo;t hang and the rest looks tractable.&lt;/p&gt;</description>
    </item>
    <item>
      <title>wl1251_sdio merged</title>
      <link>https://bobcopeland.com/blog/2009/08/wl1251_sdio-merged/</link>
      <pubDate>Tue, 11 Aug 2009 03:27:23 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=1378</guid> 
      <description>&lt;p&gt;The SDIO patches for TI 1251 (Android wifi chipset) are finally merged into wireless-testing, so they should be a lot easier to hack on now. That means the driver should make it into 2.6.32, though at a rather experimental stage. I did fix some crashes on ifup/ifdown since last posting, but there&amp;rsquo;s always more work to do. Current todo list includes better behavior for non-polling controllers (make the irq have a top-half), tracking down a device hang on reinitialization, pushing the msm_wifi.ko module, and on and on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Now bionic</title>
      <link>https://bobcopeland.com/blog/2009/07/now-bionic/</link>
      <pubDate>Sun, 19 Jul 2009 19:12:18 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=1363</guid> 
      <description>&lt;p&gt;Kalle has &lt;a href=&#34;http://marc.info/?l=linux-wireless&amp;amp;m=124785700109009&amp;amp;w=2&#34;&gt;posted&lt;/a&gt; a rebased version of my SDIO patches on top of the latest wireless-testing. I&amp;rsquo;ve done a little bit of testing with it &amp;ndash; the driver starts up and loads fine, but once the interface goes down, it&amp;rsquo;s busted:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;6&amp;gt;[  980.884302] wl1251_sdio mmc0:0001:1: firmware: requesting wl1251-fw.bin
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;6&amp;gt;[  981.036448] wl1251_sdio mmc0:0001:1: firmware: requesting wl1251-nvs.bin
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;3&amp;gt;[  981.045449] init: untracked pid 354 exited
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;3&amp;gt;[  981.074408] init: untracked pid 355 exited
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;7&amp;gt;[  981.331853] wl1251: 151 tx blocks at 0x3b788, 35 rx blocks at 0x3a780
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;7&amp;gt;[  981.339300] wl1251: firmware booted (Rev 4.0.4.3.5)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;7&amp;gt;[  984.702740] wlan0: direct probe to AP 00:1a:70:da:a9:cd (try 1)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;7&amp;gt;[  984.901621] wlan0: direct probe to AP 00:1a:70:da:a9:cd (try 2)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;7&amp;gt;[  985.101583] wlan0: direct probe to AP 00:1a:70:da:a9:cd (try 3)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;7&amp;gt;[  985.301617] wlan0: direct probe to AP 00:1a:70:da:a9:cd timed out
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;7&amp;gt;[ 1024.802837] wl1251: down
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;3&amp;gt;[ 1044.856640] init: untracked pid 358 exited
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;3&amp;gt;[ 1050.033886] mmc0: Data timeout
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;3&amp;gt;[ 1050.037701] wl1251: ERROR sdio write failed (-110)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;3&amp;gt;[ 1051.045674] mmc0: Data timeout
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;3&amp;gt;[ 1051.049519] wl1251: ERROR sdio write failed (-110)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;3&amp;gt;[ 1052.057673] mmc0: Data timeout
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;3&amp;gt;[ 1052.061518] wl1251: ERROR sdio write failed (-110)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Exploring this further turned into a rather long yak shaving session because I wanted to get iw on the phone to do more manual tests, and I wanted to link it dynamically against bionic, the Android&amp;rsquo;s fork of a BSD libc. Here were a few interesting discoveries found along the way:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wifi UI Part 0</title>
      <link>https://bobcopeland.com/blog/2009/07/wifi-ui-part-0/</link>
      <pubDate>Mon, 13 Jul 2009 04:13:13 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=1359</guid> 
      <description>&lt;p&gt;Work on the Android wireless driver is stalled for now as kvalo is rebasing the patches. I believe the next step will be to take the platform code, which I have temporarily built into a module called msm_wifiÂ¸ and turn it into a platform rfkill device. Or something like that &amp;ndash; this is what he and I came up with at the wireless summit. Then there&amp;rsquo;s an annoying stack trace because free_irq() happens in common code, but sdio irqs are somewhat different so that needs to be pushed down into the interface layer.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ath5k performance history</title>
      <link>https://bobcopeland.com/blog/2009/07/ath5k-performance-history/</link>
      <pubDate>Fri, 03 Jul 2009 17:35:04 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=1351</guid> 
      <description>&lt;p&gt;I was curious how well ath5k has been improving since its release, so I hacked up a little script to associate and do five minute iperf runs from /etc/rc.local. Looks pretty good so far (w-t is wireless-testing plus 5 or 6 extra patches I have brewing). The script is pretty kludgy, but may form the basis for some automatic build/regression testing in the future.
&lt;img alt=&#34;ath5k iperf chart&#34; loading=&#34;lazy&#34; src=&#34;https://bobcopeland.com/blog/images/lj/ath5k_iperf.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kernel 2.6.30</title>
      <link>https://bobcopeland.com/blog/2009/06/kernel-2630/</link>
      <pubDate>Tue, 16 Jun 2009 15:54:57 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=1335</guid> 
      <description>&lt;p&gt;Linux kernel 2.6.30 is out, featuring the best mainline support for ath5k yet. I recommend if you do use wireless with 2.6.30 (or .29), that you also grab &lt;a href=&#34;http://lkml.org/lkml/2009/6/5/269&#34;&gt;this patch&lt;/a&gt; which fixes a nasty memory corruption issue. That one haunted me for months but it was a great feeling to finally nail it down. Of course the fix turned out to be quite simple. It should be hitting stable in short order.&lt;/p&gt;</description>
    </item>
    <item>
      <title>wl12xx howto</title>
      <link>https://bobcopeland.com/blog/2009/05/wl12xx-howto/</link>
      <pubDate>Sun, 31 May 2009 00:03:55 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=1325</guid> 
      <description>&lt;p&gt;So, wl12xx definitely works including transmission, but I still haven&amp;rsquo;t fixed the rough edges in the driver. However, I did bother to make a semi-permanent &lt;a href=&#34;https://bobcopeland.com/blog/android_wifi.html&#34;&gt;writeup&lt;/a&gt; on how to build and use wl12xx on the G1 as it currently stands. I hope to clean up the warts and submit the patchset next week. Meanwhile, I have a lot of ath5k bugs to work on. Enough for today though.&lt;/p&gt;</description>
    </item>
    <item>
      <title>First scan</title>
      <link>https://bobcopeland.com/blog/2009/05/first-scan/</link>
      <pubDate>Thu, 21 May 2009 19:36:00 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=1318</guid> 
      <description>&lt;p&gt;Success! Scanning with wl12xx on my ADP1 works. I&amp;rsquo;ll post more later but here&amp;rsquo;s a teaser. That&amp;rsquo;s a real SSID, however apt.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# ./iwlist wlan0 scan
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wlan0     Scan completed :
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          Cell 01 - Address: 00:0F:B5:63:30:4E
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    Channel:11
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    Frequency:2.462 GHz (Channel 11)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    Quality=14/70  Signal level=-96 dBm
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    Encryption key:on
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    ESSID:&amp;#34;SERENDIPITY&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 18 Mb/s
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                              24 Mb/s; 36 Mb/s; 54 Mb/s
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 48 Mb/s
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    Mode:Master
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    Extra:tsf=000001dec907e41c
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    Extra: Last beacon: 160ms ago
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    (Unknown Wireless Token 0x8C05)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>wl12xx update</title>
      <link>https://bobcopeland.com/blog/2009/05/wl12xx-update/</link>
      <pubDate>Sat, 16 May 2009 21:42:54 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=1315</guid> 
      <description>&lt;p&gt;I won&amp;rsquo;t claim success until I actually transfer data, but so far, it looks like wl12xx SDIO support is baked:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;111.247063&lt;/span&gt;] cfg80211: Using &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; regulatory domain info
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;111.253472&lt;/span&gt;] cfg80211: Regulatory domain: US
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;111.262810&lt;/span&gt;] 	(start_freq &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; end_freq &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;@&lt;/span&gt; bandwidth), (max_antenna_gain, max_eirp)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;111.271568&lt;/span&gt;] 	(&lt;span style=&#34;color:#ae81ff&#34;&gt;2402000&lt;/span&gt; KHz &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2472000&lt;/span&gt; KHz &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;@&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;40000&lt;/span&gt; KHz), (&lt;span style=&#34;color:#ae81ff&#34;&gt;600&lt;/span&gt; mBi, &lt;span style=&#34;color:#ae81ff&#34;&gt;2700&lt;/span&gt; mBm)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;111.279472&lt;/span&gt;] 	(&lt;span style=&#34;color:#ae81ff&#34;&gt;5170000&lt;/span&gt; KHz &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5190000&lt;/span&gt; KHz &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;@&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;40000&lt;/span&gt; KHz), (&lt;span style=&#34;color:#ae81ff&#34;&gt;600&lt;/span&gt; mBi, &lt;span style=&#34;color:#ae81ff&#34;&gt;2300&lt;/span&gt; mBm)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;111.287254&lt;/span&gt;] 	(&lt;span style=&#34;color:#ae81ff&#34;&gt;5190000&lt;/span&gt; KHz &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5210000&lt;/span&gt; KHz &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;@&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;40000&lt;/span&gt; KHz), (&lt;span style=&#34;color:#ae81ff&#34;&gt;600&lt;/span&gt; mBi, &lt;span style=&#34;color:#ae81ff&#34;&gt;2300&lt;/span&gt; mBm)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;111.294975&lt;/span&gt;] 	(&lt;span style=&#34;color:#ae81ff&#34;&gt;5210000&lt;/span&gt; KHz &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5230000&lt;/span&gt; KHz &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;@&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;40000&lt;/span&gt; KHz), (&lt;span style=&#34;color:#ae81ff&#34;&gt;600&lt;/span&gt; mBi, &lt;span style=&#34;color:#ae81ff&#34;&gt;2300&lt;/span&gt; mBm)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;111.302482&lt;/span&gt;] 	(&lt;span style=&#34;color:#ae81ff&#34;&gt;5230000&lt;/span&gt; KHz &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5330000&lt;/span&gt; KHz &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;@&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;40000&lt;/span&gt; KHz), (&lt;span style=&#34;color:#ae81ff&#34;&gt;600&lt;/span&gt; mBi, &lt;span style=&#34;color:#ae81ff&#34;&gt;2300&lt;/span&gt; mBm)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;111.310264&lt;/span&gt;] 	(&lt;span style=&#34;color:#ae81ff&#34;&gt;5735000&lt;/span&gt; KHz &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5835000&lt;/span&gt; KHz &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;@&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;40000&lt;/span&gt; KHz), (&lt;span style=&#34;color:#ae81ff&#34;&gt;600&lt;/span&gt; mBi, &lt;span style=&#34;color:#ae81ff&#34;&gt;3000&lt;/span&gt; mBm)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;111.317894&lt;/span&gt;] cfg80211: Calling CRDA &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; country: US
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;112.684807&lt;/span&gt;] lib80211: common routines &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; IEEE802&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;11&lt;/span&gt; drivers
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;112.690972&lt;/span&gt;] lib80211_crypt: registered algorithm &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;NULL&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;112.744713&lt;/span&gt;] lib80211_crypt: registered algorithm &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;TKIP&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;112.787467&lt;/span&gt;] lib80211_crypt: registered algorithm &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;WEP&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;112.845267&lt;/span&gt;] lib80211_crypt: registered algorithm &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;CCMP&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;113.251671&lt;/span&gt;] wl12xx: registering driver
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;113.256462&lt;/span&gt;] wifi_probe
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;113.259208&lt;/span&gt;] trout_wifi_power: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;113.569452&lt;/span&gt;] trout_wifi_reset: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;113.623681&lt;/span&gt;] trout_wifi_set_carddetect: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;113.628290&lt;/span&gt;] mmc0: card_present &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;113.631921&lt;/span&gt;] mmc0: Slot status change detected (&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;113.653283&lt;/span&gt;] mmc0: Command timeout
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;113.664788&lt;/span&gt;] mmc0: card claims to support voltages below the defined range&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; These will be ignored&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;113.678429&lt;/span&gt;] mmc0: SDIO card claims to support the incompletely defined &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;low voltage range&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; This will be ignored&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;113.692773&lt;/span&gt;] mmc0: new SDIO card at address &lt;span style=&#34;color:#ae81ff&#34;&gt;0001&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;113.702813&lt;/span&gt;] wl12xx: &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; probe
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;113.728844&lt;/span&gt;] phy0: Selected rate control algorithm &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;minstrel&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;113.738915&lt;/span&gt;] wl12xx: loaded
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[  &lt;span style=&#34;color:#ae81ff&#34;&gt;113.743919&lt;/span&gt;] wl12xx: initialized
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Unfortunately, I can&amp;rsquo;t really test it yet because the wpa_supplicant already on the phone doesn&amp;rsquo;t support -Dwext or -Dnl80211, and there are no wireless-tools. So I need to cross-compile those before attempting to associate. In the meantime, here&amp;rsquo;s &lt;a href=&#34;https://bobcopeland.com/blog/kernel/wl/20090516/wl12xx_sdio_2.patch&#34;&gt;a very rough patch&lt;/a&gt; that implements the goods from wireless-testing wl12xx. I need to work on read() and write() - right now they are a copy of what is in the google driver because it appears the host driver has issues with RW_EXTENDED. I don&amp;rsquo;t believe the readb/writeb fallbacks should be strictly necessary. Ditto with the platform code, that needs a slightly better solution.&lt;/p&gt;</description>
    </item>
    <item>
      <title>wl12xx merged</title>
      <link>https://bobcopeland.com/blog/2009/04/wl12xx-merged/</link>
      <pubDate>Thu, 30 Apr 2009 22:25:27 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=1299</guid> 
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;commit 00d8979d598d5461a06d800c779f15e03888d9d8
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Author: Kalle Valo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Date:   Wed Apr 29 23:33:31 2009 +0300
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    wl12xx: add driver
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    wl12xx is a driver for TI wl1251 802.11 chipset designed for embedded
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    devices, supporting both SDIO and SPI busses. Currently the driver
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    supports only SPI. Adding support 1253 (the 5 GHz version) should be
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    relatively easy. More information here:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    http://focus.ti.com/general/docs/wtbu/wtbuproductcontent.tsp?contentId=4711
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (Collapsed original sequence of pre-merge patches into single commit for
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    initial merge. -- JWL)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Signed-off-by: Kalle Valo
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Signed-off-by: Bob Copeland
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Signed-off-by: John W. Linville
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Hooray, wl12xx is now in wireless-testing! As the commit log states, SDIO support isn&amp;rsquo;t there yet, because I haven&amp;rsquo;t written it yet. Well, I wrote some of it, but nothing worth even compile-testing yet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Closer</title>
      <link>https://bobcopeland.com/blog/2009/04/closer/</link>
      <pubDate>Sun, 19 Apr 2009 16:12:19 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=1293</guid> 
      <description>&lt;p&gt;I was in fact wrong that my self-compiled android kernels weren&amp;rsquo;t booting &amp;ndash; they were. But they do fail somewhere in init:. Unfortunately, when you boot the phone, you don&amp;rsquo;t have any idea why it fails because there&amp;rsquo;s no console by default. It would&amp;rsquo;ve been a lot easier to see this if I had a serial cable, but I did finally remember that I could use fbcon with the smallest font and CONFIG_PRINTK_DELAY to see the messages scroll by. And so now I see the problem:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Emulator</title>
      <link>https://bobcopeland.com/blog/2009/04/emulator/</link>
      <pubDate>Thu, 02 Apr 2009 03:01:59 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=1281</guid> 
      <description>&lt;p&gt;The Android source code includes at least two ARM sub-architectures in their kernel tree. The one actually used on the G1 hardware is derived from the Qualcomm MSM machine type, at least part of which is in the mainline. Then there is &amp;ldquo;goldfish,&amp;rdquo; which appears to be just a pseudo machine used only for the emulator. While I haven&amp;rsquo;t had a lot of success with the MSM stuff booting on the phone so far, building the emulator kernel is not too hard once you know where to look:&lt;/p&gt;</description>
    </item>
    <item>
      <title>2.6.30 preview</title>
      <link>https://bobcopeland.com/blog/2009/03/2630-preview/</link>
      <pubDate>Wed, 01 Apr 2009 03:39:42 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=1277</guid> 
      <description>&lt;p&gt;Now that Linux 2.6.29 just went out the door, here&amp;rsquo;s what I have prepared for 2.6.30 in the wireless arena. Of note, mac80211 now has suspend/resume support so a lot of nasty hacks in the drivers can go away. Most of the rest is just bug fixes, some of them for panics and soft lockups.&lt;/p&gt;
&lt;p&gt;The work I&amp;rsquo;m excited about this week is scheduled for 2.6.31 &amp;ndash; we extracted a bunch of ath9k regulatory infrastructure into a common module that all of the Atheros drivers (including the new ar9170) will use. This is the first step in getting a lot of that common code into a library. Hooray! Also Nick has some great improvements to the RF stuff queued up, so the driver is behaving much better.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Upstream Last</title>
      <link>https://bobcopeland.com/blog/2009/03/upstream-last/</link>
      <pubDate>Tue, 31 Mar 2009 14:28:08 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=1274</guid> 
      <description>&lt;p&gt;Building a booting kernel for Android using their own code still eludes me. I guess it would help if I knew anything at all about the ARM platform, as I have no idea what I am doing. Still, the code dump fails the &amp;ldquo;anyone should be able to build it&amp;rdquo; test rather strongly, judging from posts on the android mailing lists.&lt;/p&gt;
&lt;p&gt;Build problems aside, the more egregious failure of the Android open source project is the lack of the &amp;ldquo;upstream first&amp;rdquo; mentality. Most Linux software providers follow this strategy to a large extent, which is simply: any patch that goes in my distribution should go to the mainline kernel first. The benefits are obvious: no need to maintain a fork forever, and everyone gets the goods as soon as possible. Even if the patch only serves the developer&amp;rsquo;s own interests, upstreaming it often has the benefit of vetting the interfaces and producing more universal APIs (the wakelocks discussion that followed the code dump is an example of this done backwards).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fit to be TIed</title>
      <link>https://bobcopeland.com/blog/2009/03/fit-to-be-tied/</link>
      <pubDate>Sun, 22 Mar 2009 15:55:31 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=1228</guid> 
      <description>&lt;p&gt;The Android G1 phone uses the TI 1251 for Wifi.Â Â  This is pretty useful for when you need an internet connection for the laptop and there are no alternatives: you can bridge the wifi and the 3G connection and then connect to the wifi device using ad-hoc mode.Â  However, I normally keep the wireless off because it sucks down battery like mad.&lt;/p&gt;
&lt;p&gt;But Kalle Valo from Nokia is working on a driver for the chip called wl12xx, and he is putting a lot of effort into making sure it uses power conservatively (presumably some future version of the Nokia internet tablets will be using this device).Â  This driver is SPI, whereas the G1 uses the same chip in SDIO mode.Â  So I started writing the SDIO port for the driver &amp;ndash; hopefully it will be ready when wl12xx is included in mainline.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Serial offender</title>
      <link>https://bobcopeland.com/blog/2009/02/serial-offender/</link>
      <pubDate>Sun, 08 Feb 2009 14:27:00 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=577</guid> 
      <description>&lt;p&gt;There comes a time in every budding kernel developer&amp;rsquo;s life that he has to debug a mysterious lockup, and nothing will do but a serial console. Well, for my future recollections, here&amp;rsquo;s how to set it up:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Get out your handy pl2303-based usb to serial adapter, because chances are good your laptop doesn&amp;rsquo;t have a serial port&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Build your kernel with CONFIG_USB_SERIAL_CONSOLE=y&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add to your kernel command line: console=ttyUSB0,115200 console=tty0&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hook your computer up to the other computer via a null-modem cable (man, these are pricey these days, $30 for something no one still uses?)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set up minicom to use your serial port, say ttyS0, at 115200 baud, 8N1, and turn off all the modem init strings&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Don&amp;rsquo;t bother futzing with getty, you only need it if you want to also allow logins over serial. For logging, it&amp;rsquo;s unnecessary&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Hacking, the good kind</title>
      <link>https://bobcopeland.com/blog/2008/11/hacking-the-good-kind/</link>
      <pubDate>Wed, 05 Nov 2008 15:29:00 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=565</guid> 
      <description>&lt;p&gt;I could write about the election here, but &lt;a href=&#34;http://citizen905.livejournal.com/197602.html&#34;&gt;citizen905&lt;/a&gt; already summed it up pretty well. So instead, here&amp;rsquo;s what I&amp;rsquo;ve been breaking in the Linux kernel lately:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;My final patch count for 2.6.27 was 14, I think. Enough, anyway, that I can stop counting and just deal with all the work I&amp;rsquo;ve created for myself.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I added myself to MAINTAINERS for ath5k, which felt like a pretty ridiculous notoriety grab, but Nick asked me to do so twice, so there.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I have some fixes for ath5k for 2.6.28, nothing major but an oops should be fixed, and a WARN_ON removed. The oops fix, incidentally, had an obvious bug despite 3 sign-offs. I suck.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Also committed but to-be-reverted for suckiness is a patch to remove beaconing in STA mode. Turns out ath9k, from which I stole this idea, was just busted. The new plan is to use the beacon miss interrupt; until then, your wireless card has to wake up the CPU about 100 times a second.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For 2.6.29, I have added hardware encryption to ath5k and hopefully will get some time to hack on the suspend/resume support for mac80211. Then I have some omfs patches I&amp;rsquo;ve been sitting on for months.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>SYSRQ on MacBook</title>
      <link>https://bobcopeland.com/blog/2008/10/sysrq-on-macbook/</link>
      <pubDate>Tue, 07 Oct 2008 21:42:00 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=561</guid> 
      <description>&lt;p&gt;Lately I&amp;rsquo;ve really needed SysRq in situations where /proc/sysrq-trigger just doesn&amp;rsquo;t do the job, and my MacBook is missing lots of crusty old XT-era keys. Finally, I know how to do this!&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/* includes and error handling omitted for brevity... */
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#define USAGE_CODE 0x070044 /* USB hid for F11 */
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int main()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int codes[2];
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int fd = open(&amp;#34;/dev/input/by-id/usb-Apple_Computer_Apple_&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;#34;Internal_Keyboard_._Trackpad-event-kbd&amp;#34;, O_NONBLOCK);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;codes[0] = USAGE_CODE;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;codes[1] = KEY_SYSRQ;  /* from linux/input.h */
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ioctl(fd, EVIOCSKEYCODE, codes);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Awesome. Supposedly, a tool called keyfuzz is also efficacious.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OSS, I has it</title>
      <link>https://bobcopeland.com/blog/2008/10/oss-i-has-it/</link>
      <pubDate>Wed, 01 Oct 2008 14:27:00 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=558</guid> 
      <description>&lt;p&gt;I just sat in on a conference call as a representative (by default, since no one else called in) of the Linux ath5k community, with Atheros, makers of my MacBook&amp;rsquo;s wireless ethernet card. Atheros have really done a 180 for supporting the community, first by releasing ath9k, then by releasing the source to their previously-closed HAL last week. Thanks to that, 6 patches have already gone out fixing various problems. BTW, conference calls are just as pointless in the OSS community as they are in real life. But at least I did learn that it is pronounced &amp;ldquo;uh-THERE-ose&amp;rdquo;, not &amp;ldquo;ATH-er-ose.&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Oops</title>
      <link>https://bobcopeland.com/blog/2008/08/oops/</link>
      <pubDate>Tue, 12 Aug 2008 12:07:00 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=548</guid> 
      <description>&lt;p&gt;I am finally getting the hang of debugging kernel crashes. None too soon as I got my first OOPS report from the -rc kernel with OMFS, from a gentleman who is intentionally corrupting his FS (&amp;ldquo;fuzzing&amp;rdquo; in the infosec lingo). After a frustrating weekend in which I had inadvertantly fixed the bug but didn&amp;rsquo;t realize it because I was testing the wrong module, I can now claim success. One down, several more to go.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Meh</title>
      <link>https://bobcopeland.com/blog/2008/05/meh/</link>
      <pubDate>Tue, 13 May 2008 13:48:00 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=531</guid> 
      <description>&lt;p&gt;I&amp;rsquo;m playing with date conversions today, and again I&amp;rsquo;m struck by how much the Java Calendar should be held up as an example of the over-engineered API. Has anyone ever used anything besides the Gregorian calendar? They were so proud of it when it hit 1.1.&lt;/p&gt;
&lt;p&gt;I should have two patches hitting kernel 2.6.26, one entirely cosmetic and one that fixes a real bug on Atheros wireless cards. Akpm did pick up the OMFS patchset so hopefully that will go in .27 timeframe, though the jury is still out on whether it hits mainline.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Controversy, I has it.</title>
      <link>https://bobcopeland.com/blog/2008/04/controversy-i-has-it/</link>
      <pubDate>Mon, 14 Apr 2008 21:34:00 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=525</guid> 
      <description>&lt;p&gt;I unintentionally created quite a &lt;a href=&#34;http://marc.info/?l=linux-kernel&amp;amp;m=120816279104484&amp;amp;w=2&#34;&gt;ruckus&lt;/a&gt; on the kernel mailing list this weekend. &lt;a href=&#34;http://tservice.net.ru/~s0mbre/blog/devel/fs/2008_04_14.html&#34;&gt;Evgeniy&amp;rsquo;s take&lt;/a&gt;. It&amp;rsquo;s funny, I feel a lot less invested than practically anyone in the whole thread.&lt;/p&gt;</description>
    </item>
    <item>
      <title>mmio trace for fun and no-profit</title>
      <link>https://bobcopeland.com/blog/2008/01/mmio-trace-for-fun-and-no-profit/</link>
      <pubDate>Fri, 01 Feb 2008 03:06:00 +0000</pubDate>
       <guid isPermaLink="false">http://bobcopeland.com/blog/?p=511</guid> 
      <description>&lt;p&gt;I&amp;rsquo;m not sure what got me interested in assembly language as a nerdy high-schooler. It could have been the growing interest in computer graphics, at a time when you had to use assembly to get decent performance out of the machine. I remember learning tricks from much smarter people than myself, such as how to set a 256x256 pixel video mode so that you could address any pixel without ever needing to multiply. Not that you would use a multiply anyway since you can always use shifts and adds.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
