[OpenBIOS] [PATCH] next-property
Olivier Danet
odanet at caramail.com
Mon Feb 3 23:12:56 CET 2014
On 03/02/2014 15:21, Artyom Tarasenko wrote:
> On Sat, Feb 1, 2014 at 9:54 PM, Olivier Danet <odanet at caramail.com> wrote:
>> obp_nextprop(node,name) calls the Forth word "next-property" then pops the
>> result. "next-property" should therefore always return something :
>> * A string when the property provided is not the last one of the node.
>> * Zero when the property provided is the last one of the node.
>> * Zero when the property provided does not exist in the current node.
>>
>> Previously, next-property returned nothing when the property didn't exist.
>>
>> "next-property" behavior with last and nonexistant properties differs
>> between implementations of OF.
> Right. As discussed before, the current behavior matches the OBP behavior on
> sun4u machines.
>
> It would be nice to keep the comatibility with OBP. Can the C function
> obp_nextprop(node,name) be modified instead?
>
> Artyom
>
>> This problem was found with NetBSD on Sparc32. It ennumerates peripherals
>> when starting X11 and asks for the "name" and "device_type" property of many
>> nodes, including some which have neither "name" nor "device_type"
>> properties.
>>
>> Signed-off-by: Olivier Danet <odanet at caramail.com>
>> ===================================================================
>> --- forth/device/property.fs (révision 1257)
>> +++ forth/device/property.fs (copie de travail)
>> @@ -70,7 +70,7 @@
>> 2drop r> >dn.properties @
>> else
>> r> find-property dup if @ then
>> - ?dup if >prop.next @ then
>> + dup if >prop.next @ then
>> then
>>
>> ?dup if
>> ===================================================================
>>
>> --
>> OpenBIOS http://openbios.org/
>> Mailinglist: http://lists.openbios.org/mailman/listinfo
>> Free your System - May the Forth be with you
>
>
OpenBIOS's current behavior does not match any other !
For "next-property" we have 3 cases :
a) The property is not the last
b) The property is the last
c) The property does not exist
Current OpenBIOS : a) -1 "string" b) 0 c) nothing
Standard : a) true "string" b) false c) false
Sun Ultra10 : a) -1 "string" b) nothing c) nothing
PowerPC iBook : a) -1 "string" b) -1 0 0 c) 0
Previous patch : a) -1 "string" b) 0 c) 0
Here is a patch adhering to the Ultra10's behavior, maybe other
Sun4u computers do differently :
===================================================================
--- arch/sparc32/romvec.c (révision 1257)
+++ arch/sparc32/romvec.c (copie de travail)
@@ -173,8 +173,9 @@
const char *obp_nextprop(int node, const char *name)
{
- int found;
+ int stackcnt;
+ stackcnt = dstackcnt;
if (!name || *name == '\0') {
// NULL name means get first property
push_str("");
@@ -184,14 +185,13 @@
}
PUSH(node);
fword("next-property");
- found = POP();
- if (!found) {
+ if (dstackcnt == stackcnt) {
DPRINTF("obp_nextprop(0x%x, %s) (not found)\n", node, name);
return "";
} else {
char *str;
-
+ POP(); /* true */
POP(); /* len */
str = (char *) POP();
===================================================================
--- forth/device/property.fs (révision 1257)
+++ forth/device/property.fs (copie de travail)
@@ -70,14 +70,12 @@
2drop r> >dn.properties @
else
r> find-property dup if @ then
- ?dup if >prop.next @ then
+ dup if >prop.next @ then
then
?dup if
>prop.name @ dup cstrlen true
( phandle name-str name-len true )
- else
- false
then
;
===================================================================
The 'standard' way makes next-property more useable as
a Forth word, but, really, I don't care.
Olivier
More information about the OpenBIOS
mailing list