summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Brodowski <linux@dominikbrodowski.net>2005-12-06 20:53:12 +0100
committerDominik Brodowski <brodo@isilmar.linta.de>2005-12-06 20:53:33 +0100
commit8afe48747b193e039bdc698406adbbadabf21aa4 (patch)
tree3aca74a36da860e923298973f4dd2fb0a83df476
parent37fad4fccd5c5b4b70ec364f4259ce1ba6db1340 (diff)
downloadpcmciautils-8afe48747b193e039bdc698406adbbadabf21aa4.tar.gz
Release of pcmciautils-008 (2005-08-28)
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
-rw-r--r--Makefile2
-rwxr-xr-xhotplug/pcmcia.agent5
-rw-r--r--src/startup.c33
3 files changed, 27 insertions, 13 deletions
diff --git a/Makefile b/Makefile
index b0a9801..30ef605 100644
--- a/Makefile
+++ b/Makefile
@@ -40,7 +40,7 @@ PCMCIA_SOCKET_STARTUP = pcmcia-socket-startup
CBDUMP = cbdump
CISDUMP = dump_cis
-VERSION = 007
+VERSION = 008
#INSTALL_DIR = /usr/local/sbin
RELEASE_NAME = pcmciautils-$(VERSION)
diff --git a/hotplug/pcmcia.agent b/hotplug/pcmcia.agent
index a9ec4d1..e071e92 100755
--- a/hotplug/pcmcia.agent
+++ b/hotplug/pcmcia.agent
@@ -16,11 +16,6 @@ if [ "$ACTION" = "" ]; then
exit 1
fi
-if [ "$MODALIAS" = "" ]; then
- # this will go away soon -- only a few -mm kernels exported this wrongly.
- MODALIAS=$(MODNAME)
-fi
-
debug_mesg $SOCKET_NO $DEVICE_NO $MODALIAS $DEVPATH
case $ACTION in
diff --git a/src/startup.c b/src/startup.c
index 2f78c52..0dd5f38 100644
--- a/src/startup.c
+++ b/src/startup.c
@@ -50,6 +50,7 @@ static const char *resource_files[MAX_RESOURCE_FILES] = {
static int add_available_resource(unsigned int socket_no, unsigned int type,
+ unsigned int action,
unsigned long start, unsigned long end)
{
char file[SYSFS_PATH_MAX];
@@ -64,12 +65,25 @@ static int add_available_resource(unsigned int socket_no, unsigned int type,
if (end <= start)
return -EINVAL;
- dprintf("%d %d %lx %lx\n", socket_no, type, start, end);
+ dprintf("%d %d %d 0x%lx 0x%lx\n", socket_no, type, action, start, end);
snprintf(file, SYSFS_PATH_MAX, PATH_TO_SOCKET "pcmcia_socket%u/%s",
socket_no, resource_files[type]);
- len = snprintf(content, SYSFS_PATH_MAX, "0x%08lx - 0x%08lx", start, end);
+ switch(action) {
+ case ADD_MANAGED_RESOURCE:
+ len = snprintf(content, SYSFS_PATH_MAX,
+ "0x%08lx - 0x%08lx", start, end);
+ break;
+
+ case REMOVE_MANAGED_RESOURCE:
+ len = snprintf(content, SYSFS_PATH_MAX,
+ "- 0x%08lx - 0x%08lx", start, end);
+ break;
+
+ default:
+ return -EINVAL;
+ }
dprintf("content is %s\n", content);
@@ -125,9 +139,10 @@ static int disallow_irq(unsigned int socket_no, unsigned int irq)
if (irq >= 32)
return -EINVAL;
- snprintf(file, SYSFS_PATH_MAX, PATH_TO_SOCKET
+ len = snprintf(file, SYSFS_PATH_MAX, PATH_TO_SOCKET
"pcmcia_socket%u/card_irq_mask",
socket_no);
+ dprintf("file is %s\n", file);
attr = sysfs_open_attribute(file);
if (!attr)
@@ -184,18 +199,21 @@ static void adjust_resources(unsigned int socket_no)
switch (al->adj.Resource) {
case RES_MEMORY_RANGE:
add_available_resource(socket_no, RESOURCE_MEM,
+ al->adj.Action,
al->adj.resource.memory.Base,
al->adj.resource.memory.Base +
al->adj.resource.memory.Size - 1);
break;
case RES_IO_RANGE:
add_available_resource(socket_no, RESOURCE_IO,
+ al->adj.Action,
al->adj.resource.io.BasePort,
al->adj.resource.io.BasePort +
al->adj.resource.io.NumPorts - 1);
break;
case RES_IRQ:
- disallow_irq(socket_no, al->adj.resource.irq.IRQ);
+ if(al->adj.Action == REMOVE_MANAGED_RESOURCE)
+ disallow_irq(socket_no, al->adj.resource.irq.IRQ);
break;
}
}
@@ -207,10 +225,11 @@ int main(int argc, char *argv[])
char *socket_no;
unsigned long socket;
- if (argc == 2) {
- socket = strtoul(argv[1], NULL, 0);
- } else if ((socket_no = getenv("SOCKET_NO"))) {
+
+ if ((socket_no = getenv("SOCKET_NO"))) {
socket = strtoul(socket_no, NULL, 0);
+ } else if (argc == 2) {
+ socket = strtoul(argv[1], NULL, 0);
} else {
return -EINVAL;
}