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 M'XL(`"%:GSD``^U8;6_;1A+.5_-73)TFE0Q&HMXLQ(Z#TA)M$Y!$E:3B&FG@ M4N32VK-("ES*EGOH?[^9)65+?FD/AUR*HAS`YG)WYIEG7G:7]L+WO31X=\W2 MF,W?I4PDR]1G]5=?4Z"M=3L=H*?6;."31"N>Q0MT&^WN?J>C-5H`C7:CU7H% MG:_*X@59BLQ+`5X)+UXP_K+>[8RQ^;<@]&UE\7S]A]XU"_F<?14?#4W;;[=? MKG]+:Z_KW^XV]['^G?U.]Q5H7\7[G\@_O/ZOE=<[>0_XL"ZZ@I/P_4G*V+'3 M/P"1^O6E2&MBRN-ZKEL\_/L^46^@46LTH/'^_?MZHUG7FJ!U#CK-@TX7>+0` M8[6`[Q%W;%NG1SO/-YWBV#WGI<6:KRA*C<?^?!DP^#`506V1)E>UZ/JC\E?G M\.\L+^S_EXKP/_GXD_W?Z=*9G^__9K/;!&AJW7:GW/_?0NI["NQ!+UG<I?QJ MED'%K](F[H`>!RF[A:%O>ZP&H,_G(#4$8#>P](8%-;0D8YL%7&0IGRXSGL3@ MQ0$L!0,>0]XU<@;/#B^]@S!)(Z'"+<]FD*3RF2PS0HF2@(?<]PA#!2]EL&!I MQ+.,!8`[_88'.,AF7H:_&.+,Y\DMCZ_`3^*`DY$@%+*+6'9`XT;M$34!2;CF MY"=XC$18?`PG\Y`KH7K3Y(:6BF00"$J<9-QG*FIP`7/$(Y@'MS*\;4[HU)][ M/&(IY0B:3XF@PXV,K(E@G,$2R?U_N$`>98$4)/XR8G'FK8M6QWHDN)Y"Y&4L MY=Y</"1>%HR`-\.0P;5JX.)\[$6,N$CJ2ZPJP=P17Y@RZ@?DE0"+@R3%WL!5 MA(Z2C$$><R;6M-`S]A:$N)Q'*9(PNZ6Z%LT"8L%\:A4TY=1#*35)G+>+$`4O M@G//3`<<Z\0]UVT#<(RWSR>S;_3A^`(7#=`G[IEEPZ^_Z@XN__`#Z*,^_ER` M\?/8-AP'+)MPS.%X8*(5PMCZR#4-1P5SU!M,^N;H5(7CB0LCRX6!.31=5',M M5:(_-2,PZP2&AMT[PQG]V!R8[H7T>F*Z(_)X@GQT&.NV:_8F`]V&\<0>6PYR MQ1#ZIM,;Z.;0Z,O4FR/T"\8G8^2"<Z8/!IM!'1M(2#\>&#DD!M4W;:/G$O5B ME&/T,"/(9:"",S9Z)@V,GPWDKML7*F8`>M;(,7Z:H!(N0E\?ZJ>&`Y7M#!#6 MXR1@NGL3VQ@2/PS;F1P[KNE.7`-.+:M/V07'L#^9/<,YA(%%^3Z!B6-(8GW= MU:5[1,'DH`8%-7%,F29SY!JV/1F[IC6JPIEUCEE`ICI:]V4^K1'%G'>!8=D7 M!$WYD!E7X?S,P'F;4HCAN;9.B7%<V^RYFVKHTK5L&=Q#O#`R3@?FJ3'J&:1@ M$="YZ1A5K)'ID((IG6/AT>U$QDZ%06XX?-*8JJP@F">@]S^9Q+_0Q[([9M$B M,GV]LR+[5/VZHM3W_LNOM$5RBT>1+S_2FH^_T?8/6OL/WV@%<'XIX!'ISYD7 M+Q<J3)=7[T*^DB<,6^&&HYU&:M,[<+U,+",.9XE(KKU;#S[,BM&/45;S1>V: M\:3F^;5_+3[FU%_S,`Y8B$=8G"F"#B&?CC$\S_P97L>I+WCP^0L<*3N[8]TZ M@,T(6GD$6K..'YP8@:8==-IPO4SYG1=Y%,;NH?(:CQH>`J:(CB!R4_A=?T'Z MV=V"U68?-Z98FFY/A'Z<S;>G1!9@*(^GYGRZ/;>,\9P,'NG=B3HY%4^G>>(_ M=A1Y_HS'K'[_[86K&\M%A>D7CT/)2*%<1GB75;STRJ<[].JFJNQ0Z"0T>:CL MR/P"[-'JYR^'RK\?-,)`!:Y"S&ZI(BK<>',>P!$T5!!SS.(1:`\`\L3_O-_^ MHL+>`J?Q6L!C'')>EVO6L!Z@QO0WEB:5M^L9!.6_L22LK">JU4,%R80@^<-W M1]!!^CMK%N2;%K^3$[2"]5I5D-SN1'A7[`#>",!3&^B#+J.K1CK8S1/Q6?LB MX87PO3BLR*D&<M]]$Z#&6UZE$/"&\6=0X57`K/@>7E2-`_1S7P*J'C)Q+IQ+ M='1I6F,\'-!P9YHR[_JPL&G^H8W]TQ.#UA\9#(TA'E^;-KAOO.4\(R.\`>,L MK.QB)A)YOZ/%+_$N!8.`V3*-*PUZ^?U1Y$T9^8HBO_<;\9A4UY#X"MKJS0KA M5'BDM`W6>@[,6VV!>:OGP*32-EC[&3`JXR8:O3\#5Z@IZW\KB$*?&E7%N\'N M7_8-NFU4T*3?D-HJ6;"X4+$N[?ZY72WZ#%<_H&+>9[+-W@AT1ZIK%;EM*[1M MQJ;5<S#YUL0F_+<//;UA+]6ALJ5;W=V,['[;W$=7P87J?8CKP:47!"D9YD6F 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>