This fixes a bug that /etc/pccard_ether did not work without DHCP.
For example, when /etc/pccard.conf had ed0 in config line, but kernel refused this name and said devclass_alloc_unit: ed0 already exists, using next availale unit number Kernel used ed1 as device name and it did not match with config and insert/remove lines. Fortunately, dhclient was called without args, and it works, but if we wanted to use static IP address for PC-card, it did not work. This modification makes pccardd to execute insert/remove lines with the true device name that returns from kernel. (Last change to etc/pccard.conf.sample eliminated all hardwired device name from insert/remove lines in /etc/pccard.conf)
This commit is contained in:
parent
58361cb1b9
commit
a7da6b679e
@ -43,7 +43,7 @@
|
||||
#define PIOCSMEM _IOW('P', 3, struct mem_desc) /* Set memory map */
|
||||
#define PIOCGIO _IOWR('P', 4, struct io_desc) /* Get I/O map */
|
||||
#define PIOCSIO _IOW('P', 5, struct io_desc) /* Set I/O map */
|
||||
#define PIOCSDRV _IOW('P', 6, struct dev_desc) /* Set driver */
|
||||
#define PIOCSDRV _IOWR('P', 6, struct dev_desc) /* Set driver */
|
||||
#define PIOCRWFLAG _IOW('P', 7, int) /* Set flags for drv use */
|
||||
#define PIOCRWMEM _IOWR('P', 8, unsigned long) /* Set mem for drv use */
|
||||
#define PIOCSPOW _IOW('P', 9, struct power) /* Set power structure */
|
||||
|
@ -278,6 +278,8 @@ allocate_driver(struct slot *slt, struct dev_desc *desc)
|
||||
goto err;
|
||||
}
|
||||
err = device_probe_and_attach(child);
|
||||
snprintf(desc->name, sizeof(desc->name), "%s",
|
||||
device_get_nameunit(child));
|
||||
err:
|
||||
if (err)
|
||||
device_delete_child(pccarddev, child);
|
||||
|
@ -484,6 +484,7 @@ setup_slot(struct slot *sp)
|
||||
struct io_desc io;
|
||||
struct dev_desc drv;
|
||||
struct driver *drvp = sp->config->driver;
|
||||
char *p;
|
||||
char c;
|
||||
off_t offs;
|
||||
int rw_flags;
|
||||
@ -584,7 +585,6 @@ setup_slot(struct slot *sp)
|
||||
drv.iobase + sp->io.size - 1, drv.mem, drv.memsize,
|
||||
sp->irq, drv.flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* If the driver fails to be connected to the device,
|
||||
* then it may mean that the driver did not recognise it.
|
||||
@ -595,5 +595,16 @@ setup_slot(struct slot *sp)
|
||||
sp->card->manuf, sp->card->version, strerror(errno));
|
||||
return (0);
|
||||
}
|
||||
drv.name[sizeof(drv.name) - 1] = '\0';
|
||||
if (strncmp(drv.name, drvp->kernel, sizeof(drv.name))) {
|
||||
drvp->kernel = newstr(drv.name);
|
||||
p = drvp->kernel;
|
||||
while (*p++)
|
||||
if (*p >= '0' && *p <= '9') {
|
||||
drvp->unit = atoi(p);
|
||||
*p = '\0';
|
||||
break;
|
||||
}
|
||||
}
|
||||
return (1);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user