summaryrefslogtreecommitdiff
path: root/ubuntu
diff options
context:
space:
mode:
authorManoj Iyer <manoj.iyer@canonical.com>2009-12-09 17:54:32 +0000
committerLeann Ogasawara <leann.ogasawara@canonical.com>2010-08-20 15:58:10 -0700
commit184e2bed871b52dbea7e3652898d1a7073057898 (patch)
tree456327597f5973118f1d84c3a7af55b50314037f /ubuntu
parent997c127f782cd6878799a1af83d765f5da3e0fb6 (diff)
UBUNTU: UBUNTU: ubuntu: fsam7400 -- kill switch for Fujitsu Siemens Amilo M 7400
ExternalDriver: fsam7400 Description: SW RF kill switch for Fujitsu Siemens Amilo M7400/Maxdata 7000DX and compatible hardware. Url: http://www.iragan.com/linux/fsam7400/ Mask: Version: 0.5.2 Signed-off-by: Manoj Iyer <manoj.iyer@canonical.com> Signed-off-by: Andy Whitcroft <apw@canonical.com>
Diffstat (limited to 'ubuntu')
-rw-r--r--ubuntu/Kconfig2
-rw-r--r--ubuntu/Makefile1
-rw-r--r--ubuntu/fsam7400/BOM2
-rw-r--r--ubuntu/fsam7400/CHANGELOG34
-rw-r--r--ubuntu/fsam7400/FILES6
-rw-r--r--ubuntu/fsam7400/INSTALL110
-rw-r--r--ubuntu/fsam7400/Kconfig4
-rw-r--r--ubuntu/fsam7400/LICENSE338
-rw-r--r--ubuntu/fsam7400/Makefile49
-rw-r--r--ubuntu/fsam7400/README60
-rw-r--r--ubuntu/fsam7400/fsam7400.c386
11 files changed, 992 insertions, 0 deletions
diff --git a/ubuntu/Kconfig b/ubuntu/Kconfig
index d8588db22fa3..d81c542485ae 100644
--- a/ubuntu/Kconfig
+++ b/ubuntu/Kconfig
@@ -3,6 +3,8 @@ menu "Ubuntu Supplied Third-Party Device Drivers"
source "ubuntu/aufs/Kconfig"
source "ubuntu/compcache/Kconfig"
source "ubuntu/dm-raid4-5/Kconfig"
+source "ubuntu/fsam7400/Kconfig"
+source "ubuntu/iscsitarget/Kconfig"
source "ubuntu/lirc/Kconfig"
source "ubuntu/ndiswrapper/Kconfig"
source "ubuntu/rfkill/Kconfig"
diff --git a/ubuntu/Makefile b/ubuntu/Makefile
index 4aa3976917e1..e473594ab2ce 100644
--- a/ubuntu/Makefile
+++ b/ubuntu/Makefile
@@ -5,6 +5,7 @@
obj-$(CONFIG_AUFS_FS) += aufs/
obj-$(CONFIG_BLK_DEV_COMPCACHE) += compcache/
obj-$(CONFIG_DM_RAID45) += dm-raid4-5/
+obj-$(CONFIG_FSAM7400) += fsam7400/
obj-$(CONFIG_LIRC_DEV) += lirc/
obj-$(CONFIG_NDISWRAPPER) += ndiswrapper/
obj-m += rfkill/
diff --git a/ubuntu/fsam7400/BOM b/ubuntu/fsam7400/BOM
new file mode 100644
index 000000000000..4bfee23e2235
--- /dev/null
+++ b/ubuntu/fsam7400/BOM
@@ -0,0 +1,2 @@
+Downloaded from: http://www.iragan.com/linux/fsam7400/
+Current Version: 0.5.2 (2008 Nov 22)
diff --git a/ubuntu/fsam7400/CHANGELOG b/ubuntu/fsam7400/CHANGELOG
new file mode 100644
index 000000000000..cb1700186d43
--- /dev/null
+++ b/ubuntu/fsam7400/CHANGELOG
@@ -0,0 +1,34 @@
+Nov 22 2008 Changes in 0.5.2 by legolas558
+* fixed some missing include files
+
+Sep 22 2006 Changes in 0.5.1
+* Fix: possible null pointer dereference in proc code
+* Fix: module exit code was mistakenly disabled
+
+Sep 22 2006 Changes in 0.5.0
+* fixed compilation problems with kernel 2.6.18
+* debug-output enabling via module parameter
+* hibernation support: reconstruct last radio state on resume
+* disabled autoload option by default
+
+Jul 16 2006 Changes in 0.4.1
+* new Makefile fixing problems with kernel 2.6.17
+* several bug fixes and compiler cleanups
+
+Aug 20 2004 Changes in 0.4.0
+* several bug fixes and compiler cleanups
+* UID/GID for procfs entry selectable via module parameter
+* Autoload support: fsam7400 modprobes and rmmods ipw2100 automatically
+ depending on radio state
+
+Apr 15 2004 Changes in 0.3.0
+* Fix: radio state was not displayed properly
+* some proc improvements
+* finished code for alternative routine address calculation
+* debug-output selectable at compile-time with CONFIG_IPW2100_DEBUG define
+ for smaller module size if no debug is needed ;)
+
+Apr 9 2004 Changes in 0.2.1
+* Initial release
+* Determines if wireless device is enabled by default Bios-settings
+* Auto-off functionality
diff --git a/ubuntu/fsam7400/FILES b/ubuntu/fsam7400/FILES
new file mode 100644
index 000000000000..80899bf57a1e
--- /dev/null
+++ b/ubuntu/fsam7400/FILES
@@ -0,0 +1,6 @@
+CHANGELOG Recently changes logged
+FILES This file
+fsam7400.c The source code, what else... :)
+INSTALL Installation instructions
+Makefile Makefile to build, install, uninstall the module
+README don't forget to read it
diff --git a/ubuntu/fsam7400/INSTALL b/ubuntu/fsam7400/INSTALL
new file mode 100644
index 000000000000..352e15b11ecb
--- /dev/null
+++ b/ubuntu/fsam7400/INSTALL
@@ -0,0 +1,110 @@
+SW RF kill switch for Fujitsu Siemens Amilo M 7400
+Copyright (C) 2006, zwobbl
+For additional information, contact Marcel Naziri <fsam7400@zwobbl.de>
+
+COMPILER REQUIREMENTS
+--------- ------ ---- --- -- -- - -
+
+You need to be using GCC v3.0 or higher in order to build the fsam7400 module.
+Using older versions will result in several compilation errors.
+
+
+INSTALLING THE BITS
+------------ ----- ----- ---- --- -- -
+
+# Unpack the source tarball
+
+% tar xvzf fsam7400-0.x.y.tgz
+% cd fsam7400-0.x.y
+
+Make sure to be root when performing the following operations. Also you must
+have a kernel source tree installed under /usr/src/linux
+
+# Build the kernel module
+
+% make
+
+Debug output is enabled by default. This is a good idea if you use the fsam module for
+the first time, so you get some nice information printed on kernel log. If you don't
+need the messages anymore, you have to comment out the line CONFIG_IPW2100_DEBUG=y in
+the Makefile.
+
+# Install the kernel module
+
+% make install
+
+Now you are ready for...
+
+
+LOADING THE DRIVER
+------------ ----- ----- ---- --- -- -
+
+Also easy to go... :)
+
+% modprobe fsam7400
+
+If you have set "wireless device" enabled in your "Advanced" bios settings of
+your Amilo M 7400 radio should be turned on at this point. So you're done!
+Watch out your kernel log if supported hardware was found. :)
+
+
+RADIO STATE AT LOADING
+
+You can override the wireless bios setting with
+
+% modprobe fsam7400 radio=[0|1]
+
+
+PROC FILESYSTEM
+
+If your hardware is supported by the driver you will get an entry in /proc
+called driver/wireless/radio which will give you state information by typing
+
+% cat /proc/driver/wireless/radio
+
+You can turn the radio on and off at your will with
+
+% echo [1|on] > /proc/driver/wireless/radio
+% echo [0|off] > /proc/driver/wireless/radio
+
+The module also recognizes parameters to set the user- and/or group-ID to
+something other than root, so you don't have to adjust it by hand.
+Just select your favourite IDs and type
+
+% modprobe fsam7400 uid=1000 gid=500
+
+Note, that /proc/driver/wireless/radio will only be read- and writeable by
+user & group and only readable by others.
+
+If you want to see debug output on syslog use the following parameter when
+loading the module
+
+% modprobe fsam7400 debug=1
+
+
+AUTOMATION FEATURES
+
+By default the driver will turn off the radio automatically short before the
+module is unloaded. To override this behaviour load the module adding the
+following parameter
+
+% modprobe fsam7400 autooff=0
+
+Also since 0.4.0 the driver can automatically modprobe the ipw2100 module when
+radio state changes to on and rmmods it when radio is turned off by fsam7400.
+To enable autoload support, use
+
+% modprobe fsam7400 autoload=1
+
+
+HIBERNATION SUPPORT
+
+After hibernation and boot up of the system the wireless radio might be disabled
+again. To revert to the radio state before hibernation just put the following
+in the wakeup script
+
+% echo resume > /proc/driver/wireless/radio
+
+
+
+That's all for now. Have fun with the driver!
diff --git a/ubuntu/fsam7400/Kconfig b/ubuntu/fsam7400/Kconfig
new file mode 100644
index 000000000000..b349ca296497
--- /dev/null
+++ b/ubuntu/fsam7400/Kconfig
@@ -0,0 +1,4 @@
+config FSAM7400
+ tristate "SW RF kill switch for Fujitsu Siemens Amilo M 7400"
+ default m
+ ---help---
diff --git a/ubuntu/fsam7400/LICENSE b/ubuntu/fsam7400/LICENSE
new file mode 100644
index 000000000000..1fe7297202e0
--- /dev/null
+++ b/ubuntu/fsam7400/LICENSE
@@ -0,0 +1,338 @@
+"This software program is licensed subject to the GNU General Public License
+(GPL). Version 2, June 1991, available at
+<http://www.fsf.org/copyleft/gpl.html>"
+
+GNU General Public License
+
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to
+share and change it. By contrast, the GNU General Public License is intended
+to guarantee your freedom to share and change free software--to make sure
+the software is free for all its users. This General Public License applies
+to most of the Free Software Foundation's software and to any other program
+whose authors commit to using it. (Some other Free Software Foundation
+software is covered by the GNU Library General Public License instead.) You
+can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you have the freedom
+to distribute copies of free software (and charge for this service if you
+wish), that you receive source code or can get it if you want it, that you
+can change the software or use pieces of it in new free programs; and that
+you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to
+deny you these rights or to ask you to surrender the rights. These
+restrictions translate to certain responsibilities for you if you distribute
+copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or
+for a fee, you must give the recipients all the rights that you have. You
+must make sure that they, too, receive or can get the source code. And you
+must show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2)
+offer you this license which gives you legal permission to copy, distribute
+and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that
+everyone understands that there is no warranty for this free software. If
+the software is modified by someone else and passed on, we want its
+recipients to know that what they have is not the original, so that any
+problems introduced by others will not reflect on the original authors'
+reputations.
+
+Finally, any free program is threatened constantly by software patents. We
+wish to avoid the danger that redistributors of a free program will
+individually obtain patent licenses, in effect making the program
+proprietary. To prevent this, we have made it clear that any patent must be
+licensed for everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice
+ placed by the copyright holder saying it may be distributed under the
+ terms of this General Public License. The "Program", below, refers to any
+ such program or work, and a "work based on the Program" means either the
+ Program or any derivative work under copyright law: that is to say, a
+ work containing the Program or a portion of it, either verbatim or with
+ modifications and/or translated into another language. (Hereinafter,
+ translation is included without limitation in the term "modification".)
+ Each licensee is addressed as "you".
+
+ Activities other than copying, distribution and modification are not
+ covered by this License; they are outside its scope. The act of running
+ the Program is not restricted, and the output from the Program is covered
+ only if its contents constitute a work based on the Program (independent
+ of having been made by running the Program). Whether that is true depends
+ on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program's source code
+ as you receive it, in any medium, provided that you conspicuously and
+ appropriately publish on each copy an appropriate copyright notice and
+ disclaimer of warranty; keep intact all the notices that refer to this
+ License and to the absence of any warranty; and give any other recipients
+ of the Program a copy of this License along with the Program.
+
+ You may charge a fee for the physical act of transferring a copy, and you
+ may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it,
+ thus forming a work based on the Program, and copy and distribute such
+ modifications or work under the terms of Section 1 above, provided that
+ you also meet all of these conditions:
+
+ * a) You must cause the modified files to carry prominent notices stating
+ that you changed the files and the date of any change.
+
+ * b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any part
+ thereof, to be licensed as a whole at no charge to all third parties
+ under the terms of this License.
+
+ * c) If the modified program normally reads commands interactively when
+ run, you must cause it, when started running for such interactive
+ use in the most ordinary way, to print or display an announcement
+ including an appropriate copyright notice and a notice that there is
+ no warranty (or else, saying that you provide a warranty) and that
+ users may redistribute the program under these conditions, and
+ telling the user how to view a copy of this License. (Exception: if
+ the Program itself is interactive but does not normally print such
+ an announcement, your work based on the Program is not required to
+ print an announcement.)
+
+ These requirements apply to the modified work as a whole. If identifiable
+ sections of that work are not derived from the Program, and can be
+ reasonably considered independent and separate works in themselves, then
+ this License, and its terms, do not apply to those sections when you
+ distribute them as separate works. But when you distribute the same
+ sections as part of a whole which is a work based on the Program, the
+ distribution of the whole must be on the terms of this License, whose
+ permissions for other licensees extend to the entire whole, and thus to
+ each and every part regardless of who wrote it.
+
+ Thus, it is not the intent of this section to claim rights or contest
+ your rights to work written entirely by you; rather, the intent is to
+ exercise the right to control the distribution of derivative or
+ collective works based on the Program.
+
+ In addition, mere aggregation of another work not based on the Program
+ with the Program (or with a work based on the Program) on a volume of a
+ storage or distribution medium does not bring the other work under the
+ scope of this License.
+
+3. You may copy and distribute the Program (or a work based on it, under
+ Section 2) in object code or executable form under the terms of Sections
+ 1 and 2 above provided that you also do one of the following:
+
+ * a) Accompany it with the complete corresponding machine-readable source
+ code, which must be distributed under the terms of Sections 1 and 2
+ above on a medium customarily used for software interchange; or,
+
+ * b) Accompany it with a written offer, valid for at least three years,
+ to give any third party, for a charge no more than your cost of
+ physically performing source distribution, a complete machine-
+ readable copy of the corresponding source code, to be distributed
+ under the terms of Sections 1 and 2 above on a medium customarily
+ used for software interchange; or,
+
+ * c) Accompany it with the information you received as to the offer to
+ distribute corresponding source code. (This alternative is allowed
+ only for noncommercial distribution and only if you received the
+ program in object code or executable form with such an offer, in
+ accord with Subsection b above.)
+
+ The source code for a work means the preferred form of the work for
+ making modifications to it. For an executable work, complete source code
+ means all the source code for all modules it contains, plus any
+ associated interface definition files, plus the scripts used to control
+ compilation and installation of the executable. However, as a special
+ exception, the source code distributed need not include anything that is
+ normally distributed (in either source or binary form) with the major
+ components (compiler, kernel, and so on) of the operating system on which
+ the executable runs, unless that component itself accompanies the
+ executable.
+
+ If distribution of executable or object code is made by offering access
+ to copy from a designated place, then offering equivalent access to copy
+ the source code from the same place counts as distribution of the source
+ code, even though third parties are not compelled to copy the source
+ along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as
+ expressly provided under this License. Any attempt otherwise to copy,
+ modify, sublicense or distribute the Program is void, and will
+ automatically terminate your rights under this License. However, parties
+ who have received copies, or rights, from you under this License will not
+ have their licenses terminated so long as such parties remain in full
+ compliance.
+
+5. You are not required to accept this License, since you have not signed
+ it. However, nothing else grants you permission to modify or distribute
+ the Program or its derivative works. These actions are prohibited by law
+ if you do not accept this License. Therefore, by modifying or
+ distributing the Program (or any work based on the Program), you
+ indicate your acceptance of this License to do so, and all its terms and
+ conditions for copying, distributing or modifying the Program or works
+ based on it.
+
+6. Each time you redistribute the Program (or any work based on the
+ Program), the recipient automatically receives a license from the
+ original licensor to copy, distribute or modify the Program subject to
+ these terms and conditions. You may not impose any further restrictions
+ on the recipients' exercise of the rights granted herein. You are not
+ responsible for enforcing compliance by third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent
+ infringement or for any other reason (not limited to patent issues),
+ conditions are imposed on you (whether by court order, agreement or
+ otherwise) that contradict the conditions of this License, they do not
+ excuse you from the conditions of this License. If you cannot distribute
+ so as to satisfy simultaneously your obligations under this License and
+ any other pertinent obligations, then as a consequence you may not
+ distribute the Program at all. For example, if a patent license would
+ not permit royalty-free redistribution of the Program by all those who
+ receive copies directly or indirectly through you, then the only way you
+ could satisfy both it and this License would be to refrain entirely from
+ distribution of the Program.
+
+ If any portion of this section is held invalid or unenforceable under any
+ particular circumstance, the balance of the section is intended to apply
+ and the section as a whole is intended to apply in other circumstances.
+
+ It is not the purpose of this section to induce you to infringe any
+ patents or other property right claims or to contest validity of any
+ such claims; this section has the sole purpose of protecting the
+ integrity of the free software distribution system, which is implemented
+ by public license practices. Many people have made generous contributions
+ to the wide range of software distributed through that system in
+ reliance on consistent application of that system; it is up to the
+ author/donor to decide if he or she is willing to distribute software
+ through any other system and a licensee cannot impose that choice.
+
+ This section is intended to make thoroughly clear what is believed to be
+ a consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain
+ countries either by patents or by copyrighted interfaces, the original
+ copyright holder who places the Program under this License may add an
+ explicit geographical distribution limitation excluding those countries,
+ so that distribution is permitted only in or among countries not thus
+ excluded. In such case, this License incorporates the limitation as if
+ written in the body of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of
+ the General Public License from time to time. Such new versions will be
+ similar in spirit to the present version, but may differ in detail to
+ address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the Program
+ specifies a version number of this License which applies to it and "any
+ later version", you have the option of following the terms and
+ conditions either of that version or of any later version published by
+ the Free Software Foundation. If the Program does not specify a version
+ number of this License, you may choose any version ever published by the
+ Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs
+ whose distribution conditions are different, write to the author to ask
+ for permission. For software which is copyrighted by the Free Software
+ Foundation, write to the Free Software Foundation; we sometimes make
+ exceptions for this. Our decision will be guided by the two goals of
+ preserving the free status of all derivatives of our free software and
+ of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
+ EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
+ ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH
+ YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+ NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
+ DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL
+ DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM
+ (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
+ INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF
+ THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR
+ OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it free
+software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to
+attach them to the start of each source file to most effectively convey the
+exclusion of warranty; and each file should have at least the "copyright"
+line and a pointer to where the full notice is found.
+
+one line to give the program's name and an idea of what it does.
+Copyright (C) yyyy name of author
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2 of the License, or (at your option)
+any later version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+more details.
+
+You should have received a copy of the GNU General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59
+Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when
+it starts in an interactive mode:
+
+Gnomovision version 69, Copyright (C) year name of author Gnomovision comes
+with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free
+software, and you are welcome to redistribute it under certain conditions;
+type 'show c' for details.
+
+The hypothetical commands 'show w' and 'show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may be
+called something other than 'show w' and 'show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+'Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+signature of Ty Coon, 1 April 1989
+Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General Public
+License instead of this License.
diff --git a/ubuntu/fsam7400/Makefile b/ubuntu/fsam7400/Makefile
new file mode 100644
index 000000000000..b5a3a15a9478
--- /dev/null
+++ b/ubuntu/fsam7400/Makefile
@@ -0,0 +1,49 @@
+KERNELSRC?=/lib/modules/`uname -r`/build
+KERNELVERSION=$(shell awk -F\" '/REL/ {print $$2}' $(shell grep -s -l REL $(KERNELSRC)/include/linux/version.h $(KERNELSRC)/include/linux/utsrelease.h))
+KERNELMAJOR=$(shell echo $(KERNELVERSION)|head -c3)
+
+CONFIG_FSAM7400?=m
+obj-$(CONFIG_FSAM7400) += fsam7400.o
+
+EXTRA_CFLAGS+=-c -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common
+INCLUDE=-I$(KERNELSRC)/include
+
+ifeq ($(KERNELMAJOR), 2.6)
+KERNEL26 := 1
+TARGET := fsam7400.ko
+else
+TARGET := fsam7400.o
+endif
+
+SOURCE := fsam7400.c
+
+all: $(TARGET)
+
+help:
+ @echo Possible targets:
+ @echo -e all\\t- default target, builds kernel module
+ @echo -e install\\t- copies module binary to /lib/modules/$(KERNELVERSION)/extra/
+ @echo -e clean\\t- removes all binaries and temporary files
+
+fsam7400.ko: $(SOURCE)
+ $(MAKE) -C $(KERNELSRC) SUBDIRS=$(PWD) modules
+
+fsam7400.o: $(SOURCE)
+ $(CC) $(INCLUDE) $(EXTRA_CFLAGS) -DDEBUG -DMODVERSIONS -DMODULE -D__KERNEL__ -o $(TARGET) $(SOURCE)
+
+clean:
+ @echo -n "sweeping directory... "
+ @rm -f *~ *.o *.ko .fsam7400* *.mod.c *symvers .tmp_versions/*
+ @if [ -d .tmp_versions ]; then rmdir .tmp_versions; fi
+ @echo "done"
+
+load: $(TARGET)
+ insmod $(TARGET)
+
+unload:
+ rmmod fsam7400
+
+install: $(TARGET)
+ mkdir -p /lib/modules/$(KERNELVERSION)/extra
+ cp -v $(TARGET) /lib/modules/$(KERNELVERSION)/extra/
+ depmod -a
diff --git a/ubuntu/fsam7400/README b/ubuntu/fsam7400/README
new file mode 100644
index 000000000000..d03ef625dfd4
--- /dev/null
+++ b/ubuntu/fsam7400/README
@@ -0,0 +1,60 @@
+SW RF kill switch for Fujitsu Siemens Amilo M 7400 / Maxdata 7000DX
+and compatible hardware.
+
+Please be sure that CONFIG_CHECK_SIGNATURE=y in your kernel configuration!
+Otherwise this module will not compile.
+
+Nov 22, 2008 - Release 0.5.2
+
+This package, with minor modifications from zwobbl's 0.5.1, was created
+by legolas558.
+
+More information at:
+http://legolas558.iragan.com/fsam7400
+
+Sep 24, 2006 - Release 0.5.1
+------------ ----- ----- ---- --- -- -
+
+* Fix: possible null pointer dereference in proc code
+
+* Fix: module exit code was mistakenly disabled
+
+
+for prior changes see CHANGELOG
+
+
+TODO
+------------ ----- ----- ---- --- -- -
+
+* Fix bugs (if there are any ;))
+
+
+------------ ----- ----- ---- --- -- -
+
+Have a look in INSTALL for further details to get things working!
+
+
+License
+------------ ----- ----- ---- --- -- -
+
+ Copyright(c) 2006 zwobbl. All rights reserved.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+
+ Contact Information:
+ Marcel Naziri <fsam7400@zwobbl.de>
diff --git a/ubuntu/fsam7400/fsam7400.c b/ubuntu/fsam7400/fsam7400.c
new file mode 100644
index 000000000000..cbc40b81991e
--- /dev/null
+++ b/ubuntu/fsam7400/fsam7400.c
@@ -0,0 +1,386 @@
+/*******************************************************************************
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ The full GNU General Public License is included in this distribution in the
+ file called LICENSE.
+
+ Author:
+ Marcel Naziri <fsam7400@zwobbl.de>
+
+ Based on:
+ pbe5.c by Pedro Ramalhais <pmr09313@students.fct.unl.pt>
+
+ Many thanks to:
+ Pedro Ramalhais for spending several nights with me on IRC
+
+*******************************************************************************/
+
+#ifdef CONFIG_X86
+#include <linux/version.h>
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
+#include <linux/moduleparam.h>
+#else
+#include <linux/modversions.h>
+#endif
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/compiler.h>
+#include <linux/types.h>
+#include <linux/proc_fs.h>
+#include <linux/ctype.h>
+#include <linux/string.h>
+#include <linux/kmod.h>
+#include <linux/io.h>
+#include <asm/uaccess.h>
+
+#define DRV_NAME "fsam7400"
+#define DRV_VERSION "0.5.2"
+#define DRV_DESCRIPTION "SW RF kill switch for Fujitsu Siemens Amilo M 7400 / Maxdata 7000DX"
+#define DRV_COPYRIGHT "Copyright(c) 2004 zwobbl"
+#define DRV_AUTHOR "Marcel Naziri"
+#define DRV_LICENSE "GPL"
+
+MODULE_DESCRIPTION(DRV_DESCRIPTION);
+MODULE_AUTHOR(DRV_AUTHOR);
+MODULE_LICENSE(DRV_LICENSE);
+
+#define RADIO_NONE 0xFFFFFFFF
+#define RADIO_OFF 0x00000000
+#define RADIO_ON 0x00000010
+
+static int radio = RADIO_NONE;
+static int autooff = 1;
+static int autoload = 0;
+static int uid = 0;
+static int gid = 0;
+static int debug = 0;
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
+module_param(radio, int, 0444);
+module_param(autooff, int, 0444);
+module_param(autoload, int, 0444);
+module_param(uid, int, 0444);
+module_param(gid, int, 0444);
+module_param(debug, int, 0444);
+#else
+MODULE_PARM(radio, "i");
+MODULE_PARM(autooff, "i");
+MODULE_PARM(autoload, "i");
+MODULE_PARM(uid, "i");
+MODULE_PARM(gid, "i");
+MODULE_PARM(debug, "i");
+#endif
+
+MODULE_PARM_DESC(radio, "desired radio state when loading module");
+MODULE_PARM_DESC(autooff, "turns radio off when unloading module (default)");
+MODULE_PARM_DESC(autoload, "load/unloads ipw2100 driver when toggling radio");
+MODULE_PARM_DESC(uid, "user ID for proc entry");
+MODULE_PARM_DESC(gid, "group ID for proc entry");
+MODULE_PARM_DESC(debug, "enables debug output on syslog");
+
+/* some more or less useful macros */
+
+#define DEBUG if (debug)
+#define DEBUG_OUT0(a) DEBUG printk(KERN_INFO DRV_NAME ": " a)
+#define DEBUG_OUT1(a,b) DEBUG printk(KERN_INFO DRV_NAME ": " a,b)
+#define DEBUG_OUT2(a,b,c) DEBUG printk(KERN_INFO DRV_NAME ": " a,b,c)
+#define DEBUG_OUT3(a,b,c,d) DEBUG printk(KERN_INFO DRV_NAME ": " a,b,c,d)
+
+#define ONOFF(x) (x) ? "ON" : "OFF"
+#define RADIO_ONOFF(x) (x) == RADIO_ON ? "ON" : "OFF"
+#define TOUL(x) (unsigned long) (x)
+
+/*
+ * NOTE: These values were obtained from disassembling the wbutton.sys driver
+ * installed in the Fujitsu Siemens Amilo M 7400 laptop. The names were guessed,
+ * so don't rely on them.
+ */
+
+/*** hardware dependant stuff ***/
+
+#define BIOS_CODE_ADDR 0x000F0000
+#define BIOS_CODE_ALT_MASK 0xFFFFC000
+
+#define BIOS_CODE_MAPSIZE 0x010000
+#define BIOS_CODE_ALT_MAPSIZE 0x004000
+
+#define BIOS_MAGIC_COMMAND 0x9610
+#define BIOS_MAGIC_OFF 0x0035
+#define BIOS_MAGIC_ON 0x0135
+#define BIOS_MAGIC_CHECK 0x0235
+
+#define PTR_POSITION 5
+#define ALLIGNED_STEP 0x10
+
+#define BIOS_SIGN_SIZE 4
+static const char bios_sign[] = {
+ 0x42, 0x21, 0x55, 0x30
+};
+
+#define WLAN_DISABLED_IN_BIOS 0x01
+#define WLAN_ENABLED_IN_BIOS 0x03
+
+static unsigned long bios_code = 0;
+
+static int fsam_bios_routine(int eax, int ebx)
+{
+ __asm__ __volatile__(
+ "call *%3 \t\n"
+ : "=a"(eax)
+ : "a"(eax), "b"(ebx), "c"(bios_code)
+ );
+ return (eax & 0xFF);
+}
+
+static int fsam_call_bios(int value)
+{
+ if (bios_code) {
+ int command = BIOS_MAGIC_COMMAND;
+ DEBUG_OUT2("bios routine gets parameter eax=%X and ebx=%X\n",
+ command, value);
+ value = fsam_bios_routine(command, value);
+ DEBUG_OUT1("bios routine results %X\n", value);
+ return value;
+ }
+ return ~0;
+}
+
+/* pointer to mapped memory*/
+static void *mem_code = NULL;
+
+static inline void fsam_unmap_memory(void)
+{
+ bios_code = 0;
+ if (mem_code) {
+ iounmap(mem_code);
+ }
+}
+
+static inline int fsam_map_memory(void)
+{
+ const unsigned long max_offset = BIOS_CODE_MAPSIZE - BIOS_SIGN_SIZE - PTR_POSITION;
+ unsigned long offset;
+ unsigned int addr;
+ mem_code = ioremap(BIOS_CODE_ADDR, BIOS_CODE_MAPSIZE);
+ if (!mem_code)
+ goto fail;
+ DEBUG_OUT3("physical memory %x-%x mapped to virtual address %p\n",
+ BIOS_CODE_ADDR, BIOS_CODE_ADDR+BIOS_CODE_MAPSIZE, mem_code);
+ for ( offset = 0; offset < max_offset; offset += ALLIGNED_STEP )
+ if (check_signature((void*)TOUL(mem_code) + offset, bios_sign, BIOS_SIGN_SIZE))
+ break;
+ if (offset >= max_offset)
+ goto fail;
+ DEBUG_OUT1("bios signature found at offset %lx\n", offset);
+ addr = readl((void*)TOUL(mem_code) + offset + PTR_POSITION);
+ if (addr < BIOS_CODE_ADDR) {
+ DEBUG_OUT0("bios routine out of memory range, "
+ "doing some new memory mapping...\n");
+ iounmap(mem_code);
+ mem_code = NULL;
+ addr &= BIOS_CODE_ALT_MASK;
+ mem_code = ioremap(addr, BIOS_CODE_ALT_MAPSIZE);
+ if (!mem_code)
+ goto fail;
+ DEBUG_OUT3("physical memory %x-%x mapped to virtual address %p\n",
+ addr, addr+BIOS_CODE_ALT_MAPSIZE, mem_code);
+ addr &= 0x3FFF;
+ } else
+ addr &= 0xFFFF;
+
+ bios_code = addr + TOUL(mem_code);
+ DEBUG_OUT1("supposed address of bios routine is %lx\n", bios_code);
+ return 1;
+ fail:
+ fsam_unmap_memory();
+ return 0;
+}
+
+/*** ipw2100 loading ***/
+
+static inline void do_ipw2100_loading(int state)
+{
+ int status;
+ char *mode;
+ char *envp[] = { "HOME=/",
+ "TERM=linux",
+ "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL };
+ if (state == RADIO_ON) {
+ char *argv[] = { "/sbin/modprobe", "-s", "-k", "ipw2100", NULL };
+ mode = "loading";
+ status = call_usermodehelper(argv[0], argv, envp, 1);
+ } else {
+ char *argv[] = { "/sbin/rmmod", "ipw2100", NULL };
+ mode = "removing";
+ status = call_usermodehelper(argv[0], argv, envp, 1);
+ }
+ DEBUG_OUT2("%s of ipw2100 module %s\n", mode, status == 0 ? "successful" : "FAILED");
+}
+
+/*** interface stuff ***/
+
+static void rfkill_set_radio(int value)
+{
+ radio = value == RADIO_ON ? fsam_call_bios(BIOS_MAGIC_ON) :
+ fsam_call_bios(BIOS_MAGIC_OFF);
+ if (autoload) do_ipw2100_loading(radio);
+}
+
+static inline int rfkill_get_radio(void)
+{
+ return radio;
+}
+
+static inline int rfkill_supported(void)
+{
+ return bios_code != 0;
+}
+
+static inline void rfkill_initialize(void) {
+ fsam_map_memory();
+ if (rfkill_supported()) {
+ radio = radio != RADIO_NONE
+ ? ( radio ? RADIO_ON : RADIO_OFF ) /*module parameter*/
+ : ( fsam_call_bios(BIOS_MAGIC_CHECK) == WLAN_ENABLED_IN_BIOS
+ ? RADIO_ON : RADIO_OFF );
+ }
+}
+
+static inline void rfkill_uninitialize(void) {
+ fsam_unmap_memory();
+}
+
+/*** proc stuff ***/
+
+static inline int common_proc_set_radio(struct file *file, const char *buffer,
+ unsigned long count, void *data)
+{
+ unsigned long len = 7;
+ char newstate[len];
+ len = count < len ? count : len;
+ if ( copy_from_user(newstate, buffer, len) != 0 )
+ return -EFAULT;
+ if ( (*newstate == '1' || *newstate == '0') &&
+ (count == 1 || isspace(newstate[1])) )
+ rfkill_set_radio(*newstate == '1' ? RADIO_ON : RADIO_OFF);
+ else
+ if ( !strncmp(newstate, "on", 2) &&
+ (count == 2 || isspace(newstate[2])) )
+ rfkill_set_radio(RADIO_ON);
+ else
+ if ( !strncmp(newstate, "off", 3) &&
+ (count == 3 || isspace(newstate[3])) )
+ rfkill_set_radio(RADIO_OFF);
+ else
+ if ( !strncmp(newstate, "resume", 6) &&
+ (count == 6 || isspace(newstate[6])) )
+ rfkill_set_radio(radio);
+ return count;
+}
+
+static inline int common_proc_get_radio(char *page, char **start, off_t offset,
+ int count, int *eof, void *data)
+{
+ int len = snprintf(page, count, DRV_DESCRIPTION ", v" DRV_VERSION "\n"
+ " auto-off is %s, auto-load is %s\n",
+ ONOFF(autooff), ONOFF(autoload));
+ len += snprintf(page+len, count-len, " radio state is %s\n",
+ RADIO_ONOFF(rfkill_get_radio()));
+ *eof = 1;
+ return len;
+}
+
+#define PROC_DIR "driver/wireless"
+#define PROC_RADIO "radio"
+
+static struct proc_dir_entry *dir_base = NULL;
+
+static inline void common_proc_cleanup(void)
+{
+ if (dir_base) {
+ remove_proc_entry(PROC_RADIO, dir_base);
+ remove_proc_entry(PROC_DIR, NULL);
+ dir_base = NULL;
+ }
+}
+
+static inline int common_proc_init(void)
+{
+ struct proc_dir_entry *ent;
+ int err = 0;
+ dir_base = proc_mkdir(PROC_DIR, NULL);
+ if (dir_base == NULL) {
+ printk(KERN_ERR DRV_NAME ": Unable to initialize /proc/" PROC_DIR "\n");
+ err = -ENOMEM;
+ goto fail;
+ }
+ ent = create_proc_entry(PROC_RADIO,
+ S_IFREG | S_IRUGO | S_IWUSR | S_IWGRP,
+ dir_base);
+ if (ent) {
+ ent->uid = uid;
+ ent->gid = gid;
+ ent->read_proc = common_proc_get_radio;
+ ent->write_proc = common_proc_set_radio;
+ } else {
+ printk(KERN_ERR DRV_NAME ": Unable to initialize /proc/"
+ PROC_DIR "/" PROC_RADIO "\n");
+ err = -ENOMEM;
+ goto fail;
+ }
+ return 0;
+ fail:
+ common_proc_cleanup();
+ return err;
+}
+
+/*** module stuff ***/
+
+static int __init common_init(void)
+{
+ printk(KERN_INFO DRV_NAME ": " DRV_DESCRIPTION ", v" DRV_VERSION "\n");
+ printk(KERN_INFO DRV_NAME ": " DRV_COPYRIGHT "\n");
+ rfkill_initialize();
+ if (rfkill_supported()) {
+ common_proc_init();
+ if (radio != RADIO_NONE)
+ rfkill_set_radio(radio);
+ } else
+ printk(KERN_INFO DRV_NAME ": no supported wireless hardware found\n");
+ return 0;
+}
+
+static void __exit common_exit(void)
+{
+ if (rfkill_supported() && autooff)
+ rfkill_set_radio(RADIO_OFF);
+ common_proc_cleanup();
+ rfkill_uninitialize();
+ printk(KERN_INFO DRV_NAME ": module removed successfully\n");
+}
+
+module_init(common_init);
+module_exit(common_exit);
+
+#else
+#error This driver is only available for X86 architecture
+#endif
+
+/*
+ 1 2 3 4 5 6 7
+12345678901234567890123456789012345678901234567890123456789012345678901234567890
+*/