[ltp] Hotswap driver (supports DMA, etc etc)

Jim Duchek linux-thinkpad@linux-thinkpad.org
Tue, 21 Feb 2006 15:59:50 -0600


------=_Part_184_6924044.1140559190633
Content-Type: multipart/alternative; 
	boundary="----=_Part_185_5639224.1140559190634"

------=_Part_185_5639224.1140559190634
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Attached.  If you've got space, if you could post this tarball up and post
the URL, I'd be grateful.  My cheap host should hopefully be back up by
tonight, but I imagine I'm going to be bombarded by then...

The infrastructure is there, it's just hiding.  I had to get a little
creative.  For example, a given acpi device can only have one
notify_handler, so I dig into local acpi stuff, pull off the handler if it'=
s
already taken, replace it with mine, and then call their handler from mine.
That kinda stuff.  To be honest, I could probably have done it in half the
length with just a few changes to the kernel tree, but the chances of that
ever happening are slim, and there's often ramifications to some random
driver.

Your mileage may vary, but I think, anyway, that it ought to work on just
about anything.  Let me know though, because I really haven't played with
very many laptops.

Jim


On 21/02/06, Stefan Schmidt <stefan@sostec.de> wrote:
>
> Hello.
>
> On Tue, 2006-02-21 at 15:25, Jim Duchek wrote:
> > Hi.  I got bored last night (freakin' business trips) and wrote an ACPI
> > driver to handle hotswapping of IDE drives and batteries (yeah, I know
> > batteries don't need much support, but was annoying to not be able to
> see my
> > ultrabay battery if I didn't boot with it in).
>
> Sounds good. But i'am surprised that the whole kernel infrastrucrure
> is already there.
>
> > I don't want to attach a tarball to this list (even though it's only a
> > little over 10k) and my webspace is down right now...  Be happy to emai=
l
> it
> > to anyone in the time being, I'd certainly like to see it tested a bit.
>
> I think send the patch to the list not a problem. If you still don't
> want this. Please mail as pm. By the way, if you need webspace just
> ask.
>
> regards
> Stefan Schmidt
>
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.1 (GNU/Linux)
> Comment: http://www.datenfreihafen.org/contact.html
>
> iD8DBQFD+4p9bNSsvd31FmURAkR5AKDXuUUTdpyecMQ062XGgJr/JEvdDACeMFHr
> VJh8uPImYxX/6MpKmEZhf0I=3D
> =3Drwf2
> -----END PGP SIGNATURE-----
>
>
>

------=_Part_185_5639224.1140559190634
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Attached.&nbsp; If you've got space, if you could post this tarball up and =
post the URL, I'd be grateful.&nbsp; My cheap host should hopefully be back=
 up by tonight, but I imagine I'm going to be bombarded by then...<br><br>T=
he infrastructure is there, it's just hiding.&nbsp; I had to get a little c=
reative.&nbsp; For example, a given acpi device can only have one notify_ha=
ndler, so I dig into local acpi stuff, pull off the handler if it's already=
 taken, replace it with mine, and then call their handler from mine.&nbsp; =
That kinda stuff.&nbsp; To be honest, I could probably have done it in half=
 the length with just a few changes to the kernel tree, but the chances of =
that ever happening are slim, and there's often ramifications to some rando=
m driver.
<br><br>Your mileage may vary, but I think, anyway, that it ought to work o=
n just about anything.&nbsp; Let me know though, because I really haven't p=
layed with very many laptops.<br><br>Jim<br><br><br><div><span class=3D"gma=
il_quote">
On 21/02/06, <b class=3D"gmail_sendername">Stefan Schmidt</b> &lt;<a href=
=3D"mailto:stefan@sostec.de">stefan@sostec.de</a>&gt; wrote:</span><blockqu=
ote class=3D"gmail_quote" style=3D"border-left: 1px solid rgb(204, 204, 204=
); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hello.<br><br>On Tue, 2006-02-21 at 15:25, Jim Duchek wrote:<br>&gt; Hi.&nb=
sp;&nbsp;I got bored last night (freakin' business trips) and wrote an ACPI=
<br>&gt; driver to handle hotswapping of IDE drives and batteries (yeah, I =
know<br>
&gt; batteries don't need much support, but was annoying to not be able to =
see my<br>&gt; ultrabay battery if I didn't boot with it in).<br><br>Sounds=
 good. But i'am surprised that the whole kernel infrastrucrure<br>is alread=
y there.
<br><br>&gt; I don't want to attach a tarball to this list (even though it'=
s only a<br>&gt; little over 10k) and my webspace is down right now...&nbsp=
;&nbsp;Be happy to email it<br>&gt; to anyone in the time being, I'd certai=
nly like to see it tested a bit.
<br><br>I think send the patch to the list not a problem. If you still don'=
t<br>want this. Please mail as pm. By the way, if you need webspace just<br=
>ask.<br><br>regards<br>Stefan Schmidt<br><br><br>-----BEGIN PGP SIGNATURE-=
----
<br>Version: GnuPG v1.4.1 (GNU/Linux)<br>Comment: <a href=3D"http://www.dat=
enfreihafen.org/contact.html">http://www.datenfreihafen.org/contact.html</a=
><br><br>iD8DBQFD+4p9bNSsvd31FmURAkR5AKDXuUUTdpyecMQ062XGgJr/JEvdDACeMFHr
<br>VJh8uPImYxX/6MpKmEZhf0I=3D<br>=3Drwf2<br>-----END PGP SIGNATURE-----<br=
><br><br></blockquote></div><br>

------=_Part_185_5639224.1140559190634--

------=_Part_184_6924044.1140559190633
Content-Type: application/x-gzip; name=lt_hotswap-0.1.5.tar.gz
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ejyrd6be
Content-Disposition: attachment; filename="lt_hotswap-0.1.5.tar.gz"

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
S1ziEpe4xCUu///L/wJxOC/oAMgAAA==
------=_Part_184_6924044.1140559190633--