summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Brodowski <linux@dominikbrodowski.net>2005-12-06 21:09:24 +0100
committerDominik Brodowski <brodo@isilmar.linta.de>2005-12-06 21:10:24 +0100
commit8797fea0743bfaccd94d2e04de3807847fb6822d (patch)
tree8473090ad63c758657bfd8ab7880406425549097
parenta60643f3c2a2df8645965b085ba8325901f31b09 (diff)
downloadpcmciautils-8797fea0743bfaccd94d2e04de3807847fb6822d.tar.gz
Release of pcmciautils-010 (2005-09-17)pcmciautils-010
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
-rw-r--r--Makefile41
-rwxr-xr-xhotplug/pcmcia.agent6
-rw-r--r--src/lex_config.l1
-rw-r--r--src/pccardctl.c2
-rw-r--r--src/yacc_config.y1
-rw-r--r--udev/60-pcmcia.rules27
-rw-r--r--udev/60-pcmcia.rules.static27
7 files changed, 90 insertions, 15 deletions
diff --git a/Makefile b/Makefile
index ea93a75..1dd5a5c 100644
--- a/Makefile
+++ b/Makefile
@@ -29,6 +29,10 @@
# bus (e.g. on PPC)
STARTUP = true
+# Set this to true if you want to use 'udev' instead of 'hotplug'
+# to invoke the necessary pcmciautils commands.
+UDEV = false
+
# Set the following to `true' to log the debug
# and make a unstripped, unoptimized binary.
# Leave this set to `false' for production use.
@@ -40,7 +44,7 @@ PCMCIA_SOCKET_STARTUP = pcmcia-socket-startup
CBDUMP = cbdump
CISDUMP = dump_cis
-VERSION = 009
+VERSION = 010
#INSTALL_DIR = /usr/local/sbin
RELEASE_NAME = pcmciautils-$(VERSION)
@@ -63,6 +67,9 @@ INSTALL_SCRIPT = ${INSTALL_PROGRAM}
# place to put our hotplug scripts nodes
hotplugdir = ${prefix}/etc/hotplug
+# place to put our udev rules to
+udevrulesdir = ${prefix}/etc/udev/rules.d
+
# place where PCMICIA config is put to
pcmciaconfdir = ${prefix}${etcdir}/pcmcia
@@ -107,7 +114,7 @@ WARNINGS += $(call cc-supports,-Wno-pointer-sign)
WARNINGS += $(call cc-supports,-Wdeclaration-after-statement)
WARNINGS += -Wshadow
-CFLAGS := -pipe -DVERSION=\"$(VERSION)\"
+CFLAGS := -pipe -DPCMCIAUTILS_VERSION=\"$(VERSION)\"
YFLAGS := -d
HEADERS = \
@@ -153,15 +160,28 @@ else
STRIPCMD = $(STRIP) -s --remove-section=.note --remove-section=.comment
endif
+# HOTPLUG or UDEV?
+ifeq ($(strip $(UDEV)),false)
+ INSTALL_TARGETS = install-hotplug
+ UNINSTALL_TARGETS = uninstall-hotplug
+else
+ INSTALL_TARGETS = install-udev
+ UNINSTALL_TARGETS = uninstall-udev
+endif
+
# if STARTUP is disabled, we can skip a few things
ifeq ($(strip $(STARTUP)),false)
+ UDEV_RULES = udev/60-pcmcia.rules.static
PCMCIA_SOCKET_STARTUP_BUILD =
- INSTALL_TARGETS =
- UNINSTALL_TARGETS =
else
+ UDEV_RULES = udev/60-pcmcia.rules
PCMCIA_SOCKET_STARTUP_BUILD = $(PCMCIA_SOCKET_STARTUP)
- INSTALL_TARGETS = install-config install-socket-hotplug install-socket-tools
- UNINSTALL_TARGETS = uninstall-socket-hotplug uninstall-socket-tools
+ INSTALL_TARGETS += install-config install-socket-tools
+ UNINSTALL_TARGETS += uninstall-socket-tools
+ ifeq ($(strip $(UDEV)),false)
+ INSTALL_TARGETS += install-socket-hotplug
+ UNINSTALL_TARGETS += uninstall-socket-hotplug
+ endif
endif
@@ -250,7 +270,12 @@ install-config:
uninstall-config:
# - rm -f $(pcmciaconfdir)/config.opts
+install-udev:
+ $(INSTALL_DATA) -D $(UDEV_RULES) $(DESTDIR)$(udevrulesdir)/60-pcmcia.rules
+
+uninstall-udev:
+ - rm -f $(udevrulesdir)/60-pcmcia.rules
-install: install-tools install-hotplug $(INSTALL_TARGETS)
+install: install-tools $(INSTALL_TARGETS)
-uninstall: uninstall-tools uninstall-hotplug $(UNINSTALL_TARGETS)
+uninstall: uninstall-tools $(UNINSTALL_TARGETS)
diff --git a/hotplug/pcmcia.agent b/hotplug/pcmcia.agent
index e071e92..8f89925 100755
--- a/hotplug/pcmcia.agent
+++ b/hotplug/pcmcia.agent
@@ -28,10 +28,8 @@ add)
CISFILE=$(pcmcia-check-broken-cis $SOCKET_NO)
debug_mesg $CISFILE;
if [ ! -z $CISFILE ]; then
- if [ -f /etc/pcmcia/cis/$CISFILE ]; then
- cat /etc/pcmcia/cis/$CISFILE > /sys/class/pcmcia_socket/pcmcia_socket$(SOCKET_NO)/cis
- elif [ -f /lib/firmware/cis/$CISFILE ]; then
- cat /lib/firmware/cis/$CISFILE > /sys/class/pcmcia_socket/pcmcia_socket$(SOCKET_NO)/cis
+ if [ -f /lib/firmware/$CISFILE ]; then
+ cat /lib/firmware/$CISFILE > $SYSFS/class/pcmcia_socket/pcmcia_socket$(SOCKET_NO)/cis
fi;
fi;
fi;
diff --git a/src/lex_config.l b/src/lex_config.l
index 2d99966..746edc1 100644
--- a/src/lex_config.l
+++ b/src/lex_config.l
@@ -15,7 +15,6 @@
*/
#undef src
-#undef VERSION
#include <stdio.h>
#include <stdlib.h>
diff --git a/src/pccardctl.c b/src/pccardctl.c
index 02ad3ee..5bef5d2 100644
--- a/src/pccardctl.c
+++ b/src/pccardctl.c
@@ -218,7 +218,7 @@ static int pccardctl_info(unsigned long socket_no)
}
static void print_header(void) {
- printf("pcmciautils %s\n", VERSION);
+ printf("pcmciautils %s\n", PCMCIAUTILS_VERSION);
printf("Copyright (C) 2004-2005 Dominik Brodowski, (C) 1999 David A. Hinds\n");
printf("Report errors and bugs to <linux-pcmcia@lists.infradead.org>, please.\n");
}
diff --git a/src/yacc_config.y b/src/yacc_config.y
index 23fc054..f6df721 100644
--- a/src/yacc_config.y
+++ b/src/yacc_config.y
@@ -19,7 +19,6 @@
#include <sys/types.h>
#include "startup.h"
-#undef VERSION
/* If bison: generate nicer error messages */
#define YYERROR_VERBOSE 1
diff --git a/udev/60-pcmcia.rules b/udev/60-pcmcia.rules
new file mode 100644
index 0000000..79909ed
--- /dev/null
+++ b/udev/60-pcmcia.rules
@@ -0,0 +1,27 @@
+# PCMCIA devices:
+#
+# modprobe $modalias loads all possibly appropriate modules
+ACTION=="add", SUBSYSTEM=="pcmcia", MODALIAS=="*", \
+ RUN+="/sbin/modprobe $modalias"
+
+# Very few CIS firmware entries (which we use for matching)
+# are so broken that we need to read out random bytes of it
+# instead of the manufactor, card or product ID. Then the
+# matching is done in userspace.
+ACTION=="add", SUBSYSTEM=="pcmcia", MODALIAS=="*", \
+ RUN+="/sbin/pcmcia-check-broken-cis"
+
+# However, the "weak" matching by func_id is only allowed _after_ modprobe
+# returns, so that "strong" matches have a higher priority.
+ACTION=="add", SUBSYSTEM=="pcmcia", MODALIAS=="*", \
+ RUN+="/bin/sh -c 'echo 1 > /sys/$DEVPATH/allow_func_id_match'"
+
+
+# PCMCIA sockets:
+#
+# modprobe the pcmcia bus module so that 16-bit PCMCIA devices work
+SUBSYSTEM="pcmcia_socket" RUN+="/sbin/modprobe pcmcia"
+
+# if this is a PCMCIA socket which needs a resource database,
+# pcmcia-socket-startup sets it up
+SUBSYSTEM="pcmcia_socket" RUN+="/sbin/pcmcia-socket-startup"
diff --git a/udev/60-pcmcia.rules.static b/udev/60-pcmcia.rules.static
new file mode 100644
index 0000000..23ef3e3
--- /dev/null
+++ b/udev/60-pcmcia.rules.static
@@ -0,0 +1,27 @@
+# PCMCIA devices:
+#
+# modprobe $modalias loads all possibly appropriate modules
+ACTION=="add", SUBSYSTEM=="pcmcia", MODALIAS=="*", \
+ RUN+="/sbin/modprobe $modalias"
+
+# Very few CIS firmware entries (which we use for matching)
+# are so broken that we need to read out random bytes of it
+# instead of the manufactor, card or product ID. Then the
+# matching is done in userspace.
+ACTION=="add", SUBSYSTEM=="pcmcia", MODALIAS=="*", \
+ RUN+="/sbin/pcmcia-check-broken-cis"
+
+# However, the "weak" matching by func_id is only allowed _after_ modprobe
+# returns, so that "strong" matches have a higher priority.
+ACTION=="add", SUBSYSTEM=="pcmcia", MODALIAS=="*", \
+ RUN+="/bin/sh -c 'echo 1 > /sys/$DEVPATH/allow_func_id_match'"
+
+
+# PCMCIA sockets:
+#
+# modprobe the pcmcia bus module so that 16-bit PCMCIA devices work
+SUBSYSTEM="pcmcia_socket" RUN+="/sbin/modprobe pcmcia"
+
+# if this is a PCMCIA socket which needs a resource database,
+# pcmcia-socket-startup sets it up
+#SUBSYSTEM="pcmcia_socket" RUN+="/sbin/pcmcia-socket-startup"