On Tue, 2006-04-25 at 21:54 +1000, Stephen Rothwell wrote: > We do this by putting them in the flattened device tree at setup time. > This required the flattened device tree blob to be made bigger. Fully sick! As the kids say .. I hear. We should probably think about allocating the blob at run time, just by sticking it at klimit. I think I decided that was a good idea, I just never got around to coding it up. > 676ab187518bfb5e48aa4c3cc418456e67a2ed70 > diff --git a/arch/powerpc/platforms/iseries/setup.c b/arch/powerpc/platforms/iseries/setup.c > index 3c51448..9ce2afc 100644 > --- a/arch/powerpc/platforms/iseries/setup.c > +++ b/arch/powerpc/platforms/iseries/setup.c > @@ -45,6 +45,7 @@ #include > #include > #include > #include > +#include > #include > #include > #include > @@ -710,7 +711,7 @@ define_machine(iseries) { > }; > > struct blob { > - unsigned char data[PAGE_SIZE]; > + unsigned char data[PAGE_SIZE * 2]; > unsigned long next; > }; > > @@ -911,6 +912,88 @@ void dt_model(struct iseries_flat_dt *dt > dt_prop_str(dt, "compatible", "IBM,iSeries"); > } > > +void dt_vdevices(struct iseries_flat_dt *dt) > +{ > + u32 reg = 0; > + HvLpIndexMap vlan_map; > + int i; > + char buf[32]; > + > + dt_start_node(dt, "vdevice"); > + dt_prop_u32(dt, "#address-cells", 1); > + dt_prop_u32(dt, "#size-cells", 0); > + > + snprintf(buf, sizeof(buf), "viocons@%08x", reg); > + dt_start_node(dt, buf); > + dt_prop_str(dt, "device_type", "serial"); > + dt_prop_empty(dt, "compatible"); > + dt_prop_u32(dt, "reg", reg); > + dt_end_node(dt); > + reg++; > + > + snprintf(buf, sizeof(buf), "v-scsi@%08x", reg); > + dt_start_node(dt, buf); > + dt_prop_str(dt, "device_type", "vscsi"); > + dt_prop_str(dt, "compatible", "IBM,v-scsi"); > + dt_prop_u32(dt, "reg", reg); > + dt_end_node(dt); > + reg++; > + > + vlan_map = HvLpConfig_getVirtualLanIndexMap(); > + for (i = 0; i < HVMAXARCHITECTEDVIRTUALLANS; i++) { > + unsigned char mac_addr[6]; ETH_ALEN instead of 6 ? > + > + if ((vlan_map & (0x8000 >> i)) == 0) > + continue; > + snprintf(buf, 32, "vlan@%08x", reg + i); > + dt_start_node(dt, buf); > + dt_prop_str(dt, "device_type", "vlan"); > + dt_prop_empty(dt, "compatible"); > + dt_prop_u32(dt, "reg", reg + i); > + > + mac_addr[0] = 0x02; > + mac_addr[1] = 0x01; > + mac_addr[2] = 0xff; > + mac_addr[3] = i; > + mac_addr[4] = 0xff; > + mac_addr[5] = HvLpConfig_getLpIndex_outline(); > + dt_prop(dt, "local-mac-address", (char *)mac_addr, 6); > + dt_prop(dt, "mac-address", (char *)mac_addr, 6); Ditto, ditto. cheers -- Michael Ellerman IBM OzLabs wwweb: http://michael.ellerman.id.au phone: +61 2 6212 1183 (tie line 70 21183) We do not inherit the earth from our ancestors, we borrow it from our children. - S.M.A.R.T Person