Date: Sun, 20 Aug 2000 13:45:50 +0900 From: MIHIRA Sanpei Yoshiro <sanpei@sanpei.org> To: mobile@FreeBSD.org Subject: [PCCARD,PATCH] IOC_GET_RESOURCE_RANGE patch Message-ID: <200008200445.e7K4jp402239@lavender.sanpei.org>
next in thread | raw e-mail | index | archive | help
Hi.
mobile user
In 4-stable and 5-current, /usr/sbin/pccardd did not know used
resource(io) range in kernel. We need to write free resource range
to /etc/pccard.conf from /var/run/dmesg.boot information by hand.
I created experimental IOC_GET_RESOURCE_RANGE(but rename
PIOCSRESOURCE) ioctl code in sys/pccard which was suggested by
Warner-san. With below patch we could read free ioport/irq/memory
resources from userland programs.
====================
# ./pccard-kernel-resource 1 280 300 10
~ ~~~ ~~~ ~~
| | | size
| | max_addr
| min_addr
SYS_RES_IOPORT
min 0x280
max 0x300
size 0x10
resource 0x290 <-- return from ioctl
<-- 0x280 - 0x28f was used by xe0 driver
# ./pccard-kernel-resource 2 1 15 1
~ ~ ~~ ~
| | | (dummy)
| | max_irq
| min_irq
SYS_RES_IRQ
min 0x1
max 0x15
size 0x1
resource 0x9 <-- irq 9 is free
====================
Next step: I will add some code /usr/sbin/pccardd.
By the way, below code was quick-hack code, I want to any
suggestions to commit into 5-current.
Cheers.
---
MIHIRA, Sanpei Yoshiro
Yokohama, Japan.
--- sys/pccard/pccard.c.orig Sat Jun 24 07:47:17 2000
+++ sys/pccard/pccard.c Sun Aug 20 12:58:59 2000
@@ -460,7 +460,14 @@
struct slot *slt = pccard_slots[minor(dev)];
struct mem_desc *mp;
struct io_desc *ip;
+ struct pccard_resource *pr;
+ struct pccard_devinfo *devi;
+ struct resource *r;
+ device_t pccarddev;
+ device_t child;
int s, err;
+ int rid = 0;
+ int i;
int pwval;
if (slt == 0 && cmd != PIOCRWMEM)
@@ -610,6 +617,54 @@
if (pccard_beep_select(*(int *)data)) {
return EINVAL;
}
+ break;
+ case PIOCSRESOURCE: /* sanpei */
+ pr = (struct pccard_resource *)data;
+ pr->resource_addr = ~0ul;
+ pccarddev = devclass_get_device(pccard_devclass, 0);
+ MALLOC(devi, struct pccard_devinfo *, sizeof(*devi), M_DEVBUF, M_WAITOK);
+ bzero(devi, sizeof(*devi));
+ strcpy(devi->name, "ed");
+ devi->running = 1;
+ devi->slt = slt;
+ resource_list_init(&devi->resources);
+ child = device_add_child(pccarddev, devi->name, 3);
+ device_set_flags(child, 0x0);
+ device_set_ivars(child, devi);
+ switch(pr->type) {
+ case SYS_RES_IOPORT:
+ case SYS_RES_MEMORY:
+ for (i = pr->min; i + pr->size <= pr->max;
+ i++) {
+ err = bus_set_resource(child, pr->type, 0, i, pr->size);
+ if (!err) {
+ r = bus_alloc_resource(child, pr->type, &rid, 0ul, ~0ul, pr->size, RF_ACTIVE);
+ if (r) {
+ pr->resource_addr = (u_long)rman_get_start(r);
+ bus_release_resource(child, pr->type, rid, r);
+ break;
+ }
+ }
+ }
+ break;
+ case SYS_RES_IRQ:
+ for (i = pr->min; i <= pr->max;
+ i++) {
+ err = bus_set_resource(child, SYS_RES_IRQ, 0, i, 1);
+ if (!err) {
+ r = bus_alloc_resource(child, SYS_RES_IRQ, &rid, 0ul, ~0ul, 1, RF_ACTIVE);
+ if (r) {
+ pr->resource_addr = (u_long)rman_get_start(r);
+ bus_release_resource(child, SYS_RES_IRQ, rid, r);
+ break;
+ }
+ }
+ }
+ break;
+ default:
+ return EINVAL;
+ }
+ device_delete_child(pccarddev, child);
break;
}
return(0);
--- sys/pccard/cardinfo.h.orig Sun Jan 16 15:44:44 2000
+++ sys/pccard/cardinfo.h Sun Aug 20 11:59:38 2000
@@ -49,6 +49,7 @@
#define PIOCSPOW _IOW('P', 9, struct power) /* Set power structure */
#define PIOCSVIR _IOW('P', 10, int) /* Virtual insert/remove */
#define PIOCSBEEP _IOW('P', 11, int) /* Select Beep */
+#define PIOCSRESOURCE _IOWR('P', 12, struct pccard_resource) /* get resource info */
/*
* Debug codes.
*/
@@ -135,6 +136,18 @@
int vcc;
int vpp;
};
+
+/*
+ * Th PC-Card resource IOC_GET_RESOURCE_RANGE
+ */
+struct pccard_resource {
+ int type;
+ u_long size;
+ u_long min;
+ u_long max;
+ u_long resource_addr;
+};
+
/*
* Other system limits
---------- userland program----------
begin 644 pccard-kernel-resource-20000820.tar.gz
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
IO?%[^6=P*:644DHII9122BFEE%)**:644DHII92R+?\!66F'.``H```9
`
end
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-mobile" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200008200445.e7K4jp402239>
