From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="yUM9UyusVj" Message-ID: <17665.28367.380866.565218@cargo.ozlabs.ibm.com> Date: Fri, 8 Sep 2006 23:23:27 +1000 From: Paul Mackerras To: "Mark A. Greer" Subject: Re: common flatdevtree code In-Reply-To: <20060908005630.GA9823@mag.az.mvista.com> References: <20060831184020.GA13494@mag.az.mvista.com> <17662.17895.852128.729679@cargo.ozlabs.ibm.com> <20060907003625.GA15533@mag.az.mvista.com> <1157615011.18137.14.camel@diesel> <20060907182717.GC4398@mag.az.mvista.com> <1157667816.5220.30.camel@basalt.austin.ibm.com> <20060908005630.GA9823@mag.az.mvista.com> Cc: linuxppc-dev , Hollis Blanchard List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , --yUM9UyusVj Content-Type: text/plain; charset=us-ascii Content-Description: message body text Content-Transfer-Encoding: 7bit Mark, Here's where I'm up to... Paul. --yUM9UyusVj Content-Type: application/x-csrc Content-Description: flatdevtree.c Content-Disposition: attachment; filename="flatdevtree.c" Content-Transfer-Encoding: base64 LyoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICogKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgogKgogKiBDb3B5cmlnaHQgUGFudGVsaXMg QW50b25pb3UgMjAwNgogKiBDb3B5cmlnaHQgKEMpIElCTSBDb3Jwb3JhdGlvbiAyMDA2CiAqCiAq IEF1dGhvcnM6IFBhbnRlbGlzIEFudG9uaW91IDxwYW50ZWxpc0BlbWJlZGRlZGFsbGV5LmNvbT4K ICogICAgICAgICAgSG9sbGlzIEJsYW5jaGFyZCA8aG9sbGlzYkB1cy5pYm0uY29tPgogKiAgICAg ICAgICBNYXJrIEEuIEdyZWVyIDxtZ3JlZXJAbXZpc3RhLmNvbT4KICoJICAgIFBhdWwgTWFja2Vy cmFzIDxwYXVsdXNAc2FtYmEub3JnPgogKi8KCiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUg ImZsYXRkZXZ0cmVlLmgiCgojZGVmaW5lIE1BWF9ERVBUSAk1MAoKLyogU3RydWN0IHVzZWQgdG8g cmV0dXJuIGluZm8gZnJvbSBmdF9uZXh0KCkgKi8Kc3RydWN0IGZ0X2F0b20gewoJdTMyIHRhZzsK CWNvbnN0IGNoYXIgKm5hbWU7Cgl2b2lkICpkYXRhOwoJdTMyIHNpemU7Cn07CgovKiBTZXQgcHRy cyB0byBjdXJyZW50IG9uZSdzIGluZm87IHJldHVybiBhZGRyIG9mIG5leHQgb25lICovCnN0YXRp YyBjb25zdCBjaGFyICpmdF9uZXh0KHN0cnVjdCBmdF9jeHQgKmN4dCwgY29uc3QgY2hhciAqcCwK CQkJICAgc3RydWN0IGZ0X2F0b20gKnJldCkKewoJdTMyIHN6OwoKCXJldC0+dGFnID0gYmUzMl90 b19jcHUoKih1MzIgKilwKTsKCXAgKz0gNDsKCglzd2l0Y2ggKHJldC0+dGFnKSB7IC8qIFRhZyAq LwoJY2FzZSBPRl9EVF9CRUdJTl9OT0RFOgoJCXJldC0+bmFtZSA9IHA7CgkJcmV0LT5kYXRhID0g KHZvaWQgKikocCAtIDQpOwkvKiBzdGFydCBvZiBub2RlICovCgkJcCArPSBfQUxJR04oc3RybGVu KHApICsgMSwgNCk7CgkJYnJlYWs7CgljYXNlIE9GX0RUX1BST1A6CgkJcmV0LT5zaXplID0gc3og PSBiZTMyX3RvX2NwdSgqKHUzMiAqKXApOwoJCXJldC0+bmFtZSA9IGN4dC0+c3RyX2FuY2hvciAr IGJlMzJfdG9fY3B1KCoodTMyICopKHAgKyA0KSk7CgkJcmV0LT5kYXRhID0gKHZvaWQgKikocCAr IDgpOwoJCXAgKz0gOCArIF9BTElHTihzeiwgNCk7CgkJYnJlYWs7CgljYXNlIE9GX0RUX0VORF9O T0RFOgoJY2FzZSBPRl9EVF9OT1A6CgkJYnJlYWs7CgljYXNlIE9GX0RUX0VORDoKCWRlZmF1bHQ6 CgkJcCA9IE5VTEw7CgkJYnJlYWs7Cgl9CgoJcmV0dXJuIHA7Cn0KCiNkZWZpbmUgSERSX1NJWkUJ X0FMSUdOKHNpemVvZihzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIpLCA4KQojZGVmaW5lIEVYUEFO RF9JTkNSCTEwMjQJLyogYWxsb2MgdGhpcyBtdWNoIGV4dHJhIHdoZW4gZXhwYW5kaW5nICovCgov KiBTZWUgaWYgdGhlIHJlZ2lvbnMgYXJlIGluIHRoZSBzdGFuZGFyZCBvcmRlciBhbmQgbm9uLW92 ZXJsYXBwaW5nICovCnN0YXRpYyBpbnQgZnRfb3JkZXJlZChzdHJ1Y3QgZnRfY3h0ICpjeHQpCnsK CWNoYXIgKnAgPSAoY2hhciAqKSBjeHQtPmJwaCArIEhEUl9TSVpFOwoJZW51bSBmdF9yZ25faWQg cjsKCglmb3IgKHIgPSBGVF9SU1ZNQVA7IHIgPD0gRlRfU1RSSU5HUzsgKytyKSB7CgkJaWYgKGN4 dC0+cmduW3JdLnN0YXJ0IDwgcCkKCQkJcmV0dXJuIDA7CgkJcCA9IGN4dC0+cmduW3JdLnN0YXJ0 ICsgY3h0LT5yZ25bcl0uc2l6ZTsKCX0KCXJldHVybiBwIDw9IChjaGFyICopIGN4dC0+YnBoICsg Y3h0LT5tYXhfc2l6ZTsKfQoKLyogQ29weSB0aGUgdHJlZSB0byBhIG5ld2x5LWFsbG9jYXRlZCBy ZWdpb24gYW5kIHB1dCB0aGluZ3MgaW4gb3JkZXIgKi8Kc3RhdGljIGludCBmdF9yZW9yZGVyKHN0 cnVjdCBmdF9jeHQgKmN4dCwgaW50IG5leHRyYSkKewoJdW5zaWduZWQgbG9uZyB0b3Q7CgllbnVt IGZ0X3Jnbl9pZCByOwoJY2hhciAqcCwgKnBlbmQ7CglpbnQgc3Ryb2ZmOwoKCXRvdCA9IEhEUl9T SVpFICsgRVhQQU5EX0lOQ1I7Cglmb3IgKHIgPSBGVF9SU1ZNQVA7IHIgPD0gRlRfU1RSSU5HUzsg KytyKQoJCXRvdCArPSBjeHQtPnJnbltyXS5zaXplOwoJaWYgKG5leHRyYSA+IDApCgkJdG90ICs9 IG5leHRyYTsKCXRvdCA9IF9BTElHTih0b3QsIDgpOwoKCWlmICghY3h0LT5yZWFsbG9jKQoJCXJl dHVybiAwOwoJcCA9IGN4dC0+cmVhbGxvYyhOVUxMLCB0b3QpOwoJaWYgKCFwKQoJCXJldHVybiAw OwoKCW1lbWNweShwLCBjeHQtPmJwaCwgc2l6ZW9mKHN0cnVjdCBib290X3BhcmFtX2hlYWRlcikp OwoJLyogb2Zmc2V0cyBnZXQgZml4ZWQgdXAgbGF0ZXIgKi8KCgljeHQtPmJwaCA9IChzdHJ1Y3Qg Ym9vdF9wYXJhbV9oZWFkZXIgKikgcDsKCWN4dC0+bWF4X3NpemUgPSB0b3Q7CglwZW5kID0gcCAr IHRvdDsKCXAgKz0gSERSX1NJWkU7CgoJbWVtY3B5KHAsIGN4dC0+cmduW0ZUX1JTVk1BUF0uc3Rh cnQsIGN4dC0+cmduW0ZUX1JTVk1BUF0uc2l6ZSk7CgljeHQtPnJnbltGVF9SU1ZNQVBdLnN0YXJ0 ID0gcDsKCXAgKz0gY3h0LT5yZ25bRlRfUlNWTUFQXS5zaXplOwoKCW1lbWNweShwLCBjeHQtPnJn bltGVF9TVFJVQ1RdLnN0YXJ0LCBjeHQtPnJnbltGVF9TVFJVQ1RdLnNpemUpOwoJY3h0LT5yZ25b RlRfU1RSVUNUXS5zdGFydCA9IHA7CgoJcCA9IHBlbmQgLSBjeHQtPnJnbltGVF9TVFJJTkdTXS5z aXplOwoJbWVtY3B5KHAsIGN4dC0+cmduW0ZUX1NUUklOR1NdLnN0YXJ0LCBjeHQtPnJnbltGVF9T VFJJTkdTXS5zaXplKTsKCXN0cm9mZiA9IGN4dC0+c3RyX2FuY2hvciAtIGN4dC0+cmduW0ZUX1NU UklOR1NdLnN0YXJ0OwoJY3h0LT5yZ25bRlRfU1RSSU5HU10uc3RhcnQgPSBwOwoJY3h0LT5zdHJf YW5jaG9yID0gcCArIHN0cm9mZjsKCgljeHQtPmlzb3JkZXJlZCA9IDE7CglyZXR1cm4gMTsKfQoK c3RhdGljIGlubGluZSBjaGFyICpwcmV2X2VuZChzdHJ1Y3QgZnRfY3h0ICpjeHQsIGVudW0gZnRf cmduX2lkIHIpCnsKCWlmIChyID4gRlRfUlNWTUFQKQoJCXJldHVybiBjeHQtPnJnbltyLTFdLnN0 YXJ0ICsgY3h0LT5yZ25bci0xXS5zaXplOwoJcmV0dXJuIChjaGFyICopIGN4dC0+YnBoICsgSERS X1NJWkU7Cn0KCnN0YXRpYyBpbmxpbmUgY2hhciAqbmV4dF9zdGFydChzdHJ1Y3QgZnRfY3h0ICpj eHQsIGVudW0gZnRfcmduX2lkIHIpCnsKCWlmIChyIDwgRlRfU1RSSU5HUykKCQlyZXR1cm4gY3h0 LT5yZ25bcisxXS5zdGFydDsKCXJldHVybiAoY2hhciAqKSBjeHQtPmJwaCArIGN4dC0+bWF4X3Np emU7Cn0KCi8qCiAqIFNlZSBpZiB3ZSBjYW4gZXhwYW5kIHJlZ2lvbiByZ24gYnkgbmV4dHJhIGJ5 dGVzIGJ5IHVzaW5nIHVwCiAqIGZyZWUgc3BhY2UgYWZ0ZXIgb3IgYmVmb3JlIHRoZSByZWdpb24u CiAqLwpzdGF0aWMgaW50IGZ0X3NodWZmbGUoc3RydWN0IGZ0X2N4dCAqY3h0LCBjaGFyICoqcHAs IGVudW0gZnRfcmduX2lkIHJnbiwKCQkgICAgICBpbnQgbmV4dHJhKQp7CgljaGFyICpwID0gKnBw OwoJY2hhciAqcmduX3N0YXJ0LCAqcmduX2VuZDsKCglyZ25fc3RhcnQgPSBjeHQtPnJnbltyZ25d LnN0YXJ0OwoJcmduX2VuZCA9IHJnbl9zdGFydCArIGN4dC0+cmduW3Jnbl0uc2l6ZTsKCWlmIChu ZXh0cmEgPD0gMCB8fCByZ25fZW5kICsgbmV4dHJhIDw9IG5leHRfc3RhcnQoY3h0LCByZ24pKSB7 CgkJLyogbW92ZSBmb2xsb3dpbmcgc3R1ZmYgKi8KCQlpZiAobmV4dHJhIDwgMCkKCQkJcCAtPSBu ZXh0cmE7CgkJaWYgKHAgPCByZ25fZW5kKQoJCQltZW1tb3ZlKHAgKyBuZXh0cmEsIHAsIHJnbl9l bmQgLSBwKTsKCQljeHQtPnJnbltyZ25dLnNpemUgKz0gbmV4dHJhOwoJCWlmIChyZ24gPT0gRlRf U1RSSU5HUykKCQkJLyogYXNzdW1lcyBzdHJpbmdzIG9ubHkgYWRkZWQgYXQgYmVnaW5uaW5nICov CgkJCWN4dC0+c3RyX2FuY2hvciArPSBuZXh0cmE7CgkJcmV0dXJuIDE7Cgl9CglpZiAocHJldl9l bmQoY3h0LCByZ24pIDw9IHJnbl9zdGFydCAtIG5leHRyYSkgewoJCS8qIG1vdmUgcHJlY2VkaW5n IHN0dWZmICovCgkJaWYgKHAgPiByZ25fc3RhcnQpCgkJCW1lbW1vdmUocmduX3N0YXJ0IC0gbmV4 dHJhLCByZ25fc3RhcnQsIHAgLSByZ25fc3RhcnQpOwoJCSpwIC09IG5leHRyYTsKCQljeHQtPnJn bltyZ25dLnN0YXJ0IC09IG5leHRyYTsKCQljeHQtPnJnbltyZ25dLnNpemUgKz0gbmV4dHJhOwoJ CXJldHVybiAxOwoJfQoJcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQgZnRfbWFrZV9zcGFjZShzdHJ1 Y3QgZnRfY3h0ICpjeHQsIGNoYXIgKipwcCwgZW51bSBmdF9yZ25faWQgcmduLAoJCQkgaW50IG5l eHRyYSkKewoJdW5zaWduZWQgbG9uZyBzaXplLCBzc2l6ZSwgdG90OwoJY2hhciAqc3RyLCAqbmV4 dDsKCWVudW0gZnRfcmduX2lkIHI7CgoJaWYgKCFjeHQtPmlzb3JkZXJlZCAmJiAhZnRfcmVvcmRl cihjeHQsIG5leHRyYSkpCgkJcmV0dXJuIDA7CglpZiAoZnRfc2h1ZmZsZShjeHQsIHBwLCByZ24s IG5leHRyYSkpCgkJcmV0dXJuIDE7CgoJLyogU2VlIGlmIHRoZXJlIGlzIHNwYWNlIGFmdGVyIHRo ZSBzdHJpbmdzIHNlY3Rpb24gKi8KCXNzaXplID0gY3h0LT5yZ25bRlRfU1RSSU5HU10uc2l6ZTsK CWlmIChjeHQtPnJnbltGVF9TVFJJTkdTXS5zdGFydCArIHNzaXplCgkgICAgPCAoY2hhciAqKSBj eHQtPmJwaCArIGN4dC0+bWF4X3NpemUpIHsKCQkvKiBtb3ZlIHN0cmluZ3MgdXAgYXMgZmFyIGFz IHBvc3NpYmxlICovCgkJc3RyID0gKGNoYXIgKikgY3h0LT5icGggKyBjeHQtPm1heF9zaXplIC0g c3NpemU7CgkJY3h0LT5zdHJfYW5jaG9yICs9IHN0ciAtIGN4dC0+cmduW0ZUX1NUUklOR1NdLnN0 YXJ0OwoJCW1lbW1vdmUoc3RyLCBjeHQtPnJnbltGVF9TVFJJTkdTXS5zdGFydCwgc3NpemUpOwoJ CWN4dC0+cmduW0ZUX1NUUklOR1NdLnN0YXJ0ID0gc3RyOwoJCS8qIGVub3VnaCBzcGFjZSBub3c/ ICovCgkJaWYgKHJnbiA+PSBGVF9TVFJVQ1QgJiYgZnRfc2h1ZmZsZShjeHQsIHBwLCByZ24sIG5l eHRyYSkpCgkJCXJldHVybiAxOwoJfQoKCS8qIGhvdyBtdWNoIHRvdGFsIGZyZWUgc3BhY2UgaXMg dGhlcmUgZm9sbG93aW5nIHRoaXMgcmVnaW9uPyAqLwoJdG90ID0gMDsKCWZvciAociA9IHJnbjsg ciA8IEZUX1NUUklOR1M7ICsrcikgewoJCWNoYXIgKnJfZW5kID0gY3h0LT5yZ25bcl0uc3RhcnQg KyBjeHQtPnJnbltyXS5zaXplOwoJCXRvdCArPSBuZXh0X3N0YXJ0KGN4dCwgcmduKSAtIHJfZW5k OwoJfQoKCWlmICh0b3QgPCBuZXh0cmEpIHsKCQkvKiBoYXZlIHRvIHJlYWxsb2NhdGUgKi8KCQlj aGFyICpuZXdwLCAqb2xkcDsKCgkJaWYgKCFjeHQtPnJlYWxsb2MpCgkJCXJldHVybiAwOwoJCXNp emUgPSBfQUxJR04oY3h0LT5tYXhfc2l6ZSArIChuZXh0cmEgLSB0b3QpICsgRVhQQU5EX0lOQ1Is IDgpOwoJCW5ld3AgPSBjeHQtPnJlYWxsb2MoY3h0LT5icGgsIHNpemUpOwoJCWlmICghbmV3cCkK CQkJcmV0dXJuIDA7CgkJb2xkcCA9IChjaGFyICopIGN4dC0+YnBoOwoJCWN4dC0+YnBoID0gKHN0 cnVjdCBib290X3BhcmFtX2hlYWRlciAqKSBuZXdwOwoJCWN4dC0+bWF4X3NpemUgPSBzaXplOwoJ CWZvciAociA9IEZUX1JTVk1BUDsgciA8PSBGVF9TVFJJTkdTOyArK3IpCgkJCWN4dC0+cmduW3Jn bl0uc3RhcnQgKz0gbmV3cCAtIG9sZHA7CgkJKnBwICs9IG5ld3AgLSBvbGRwOwoKCQkvKiBtb3Zl IHN0cmluZ3MgdXAgdG8gdGhlIGVuZCAqLwoJCXN0ciA9IG5ld3AgKyBzaXplIC0gc3NpemU7CgkJ Y3h0LT5zdHJfYW5jaG9yICs9IHN0ciAtIGN4dC0+cmduW0ZUX1NUUklOR1NdLnN0YXJ0OwoJCW1l bW1vdmUoc3RyLCBjeHQtPnJnbltGVF9TVFJJTkdTXS5zdGFydCwgc3NpemUpOwoJCWN4dC0+cmdu W0ZUX1NUUklOR1NdLnN0YXJ0ID0gc3RyOwoJCWlmIChmdF9zaHVmZmxlKGN4dCwgcHAsIHJnbiwg bmV4dHJhKSkKCQkJcmV0dXJuIDE7Cgl9CgoJLyogbXVzdCBiZSBGVF9SU1ZNQVAgYW5kIHdlIG5l ZWQgdG8gbW92ZSBGVF9TVFJVQ1QgdXAgKi8KCWlmIChyZ24gPT0gRlRfUlNWTUFQKSB7CgkJbmV4 dCA9IGN4dC0+cmduW0ZUX1JTVk1BUF0uc3RhcnQgKyBjeHQtPnJnbltGVF9SU1ZNQVBdLnNpemUK CQkJKyBuZXh0cmE7CgkJc3NpemUgPSBjeHQtPnJnbltGVF9TVFJVQ1RdLnNpemU7CgkJaWYgKG5l eHQgKyBzc2l6ZSA+PSBjeHQtPnJnbltGVF9TVFJJTkdTXS5zdGFydCkKCQkJcmV0dXJuIDA7CS8q ICJjYW4ndCBoYXBwZW4iICovCgkJbWVtbW92ZShuZXh0LCBjeHQtPnJnbltGVF9TVFJVQ1RdLnN0 YXJ0LCBzc2l6ZSk7CgkJY3h0LT5yZ25bRlRfU1RSVUNUXS5zdGFydCA9IG5leHQ7CgkJaWYgKGZ0 X3NodWZmbGUoY3h0LCBwcCwgcmduLCBuZXh0cmEpKQoJCQlyZXR1cm4gMTsKCX0KCglyZXR1cm4g MDsJLyogImNhbid0IGhhcHBlbiIgKi8KfQoKc3RhdGljIHZvaWQgZnRfcHV0X3dvcmQoc3RydWN0 IGZ0X2N4dCAqY3h0LCB1MzIgdikKewoJKih1MzIgKikgY3h0LT5wID0gY3B1X3RvX2JlMzIodik7 CgljeHQtPnAgKz0gNDsKfQoKc3RhdGljIHZvaWQgZnRfcHV0X2JpbihzdHJ1Y3QgZnRfY3h0ICpj eHQsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBzeikKewoJdW5zaWduZWQgbG9uZyBzemEgPSBfQUxJ R04oc3osIDQpOwoKCS8qIHplcm8gb3V0IHRoZSBhbGlnbm1lbnQgZ2FwIGlmIG5lY2Vzc2FyeSAq LwoJaWYgKHN6IDwgc3phKQoJCSoodTMyICopKGN4dC0+cCArIHN6YSAtIDQpID0gMDsKCgkvKiBj b3B5IGluIHRoZSBkYXRhICovCgltZW1jcHkoY3h0LT5wLCBkYXRhLCBzeik7CgoJY3h0LT5wICs9 IHN6YTsKfQoKaW50IGZ0X2JlZ2luX25vZGUoc3RydWN0IGZ0X2N4dCAqY3h0LCBjb25zdCBjaGFy ICpuYW1lKQp7Cgl1bnNpZ25lZCBsb25nIG5sZW4gPSBzdHJsZW4obmFtZSkgKyAxOwoJdW5zaWdu ZWQgbG9uZyBsZW4gPSA4ICsgX0FMSUdOKG5sZW4sIDQpOwoKCWlmICghZnRfbWFrZV9zcGFjZShj eHQsICZjeHQtPnAsIEZUX1NUUlVDVCwgbGVuKSkKCQlyZXR1cm4gLTE7CglmdF9wdXRfd29yZChj eHQsIE9GX0RUX0JFR0lOX05PREUpOwoJZnRfcHV0X2JpbihjeHQsIG5hbWUsIHN0cmxlbihuYW1l KSArIDEpOwoJcmV0dXJuIDA7Cn0KCnZvaWQgZnRfZW5kX25vZGUoc3RydWN0IGZ0X2N4dCAqY3h0 KQp7CglmdF9wdXRfd29yZChjeHQsIE9GX0RUX0VORF9OT0RFKTsKfQoKdm9pZCBmdF9ub3Aoc3Ry dWN0IGZ0X2N4dCAqY3h0KQp7CglpZiAoZnRfbWFrZV9zcGFjZShjeHQsICZjeHQtPnAsIEZUX1NU UlVDVCwgNCkpCgkJZnRfcHV0X3dvcmQoY3h0LCBPRl9EVF9OT1ApOwp9CgojZGVmaW5lIE5PX1NU UklORwkweDdmZmZmZmZmCgpzdGF0aWMgaW50IGxvb2t1cF9zdHJpbmcoc3RydWN0IGZ0X2N4dCAq Y3h0LCBjb25zdCBjaGFyICpuYW1lKQp7CgljaGFyICpwLCAqZW5kOwoKCXAgPSBjeHQtPnJnbltG VF9TVFJJTkdTXS5zdGFydDsKCWVuZCA9IHAgKyBjeHQtPnJnbltGVF9TVFJJTkdTXS5zaXplOwoJ d2hpbGUgKHAgPCBlbmQpIHsKCQlpZiAoc3RyY21wKHAsIChjaGFyICopbmFtZSkgPT0gMCkKCQkJ cmV0dXJuIHAgLSBjeHQtPnN0cl9hbmNob3I7CgkJcCArPSBzdHJsZW4ocCkgKyAxOwoJfQoKCXJl dHVybiBOT19TVFJJTkc7Cn0KCi8qIGxvb2t1cCBzdHJpbmcgYW5kIGluc2VydCBpZiBub3QgZm91 bmQgKi8Kc3RhdGljIGludCBtYXBfc3RyaW5nKHN0cnVjdCBmdF9jeHQgKmN4dCwgY29uc3QgY2hh ciAqbmFtZSkKewoJaW50IG9mZjsKCWNoYXIgKnA7CgoJb2ZmID0gbG9va3VwX3N0cmluZyhjeHQs IG5hbWUpOwoJaWYgKG9mZiAhPSBOT19TVFJJTkcpCgkJcmV0dXJuIG9mZjsKCXAgPSBjeHQtPnJn bltGVF9TVFJJTkdTXS5zdGFydDsKCWlmICghZnRfbWFrZV9zcGFjZShjeHQsICZwLCBGVF9TVFJJ TkdTLCBzdHJsZW4obmFtZSkgKyAxKSkKCQlyZXR1cm4gTk9fU1RSSU5HOwoJc3RyY3B5KHAsIG5h bWUpOwoJcmV0dXJuIHAgLSBjeHQtPnN0cl9hbmNob3I7Cn0KCmludCBmdF9wcm9wKHN0cnVjdCBm dF9jeHQgKmN4dCwgY29uc3QgY2hhciAqbmFtZSwKCSAgICBjb25zdCB2b2lkICpkYXRhLCB1bnNp Z25lZCBpbnQgc3opCnsKCWludCBvZmYsIGxlbjsKCglvZmYgPSBsb29rdXBfc3RyaW5nKGN4dCwg bmFtZSk7CglpZiAob2ZmID09IE5PX1NUUklORykKCQlyZXR1cm4gLTE7CgoJbGVuID0gMTIgKyBf QUxJR04oc3osIDQpOwoJaWYgKCFmdF9tYWtlX3NwYWNlKGN4dCwgJmN4dC0+cCwgRlRfU1RSVUNU LCBsZW4pKQoJCXJldHVybiAtMTsKCglmdF9wdXRfd29yZChjeHQsIE9GX0RUX1BST1ApOwoJZnRf cHV0X3dvcmQoY3h0LCBzeik7CglmdF9wdXRfd29yZChjeHQsIG9mZik7CglmdF9wdXRfYmluKGN4 dCwgZGF0YSwgc3opOwoJcmV0dXJuIDA7Cn0KCmludCBmdF9wcm9wX3N0cihzdHJ1Y3QgZnRfY3h0 ICpjeHQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnN0cikKewoJcmV0dXJuIGZ0X3By b3AoY3h0LCBuYW1lLCBzdHIsIHN0cmxlbihzdHIpICsgMSk7Cn0KCmludCBmdF9wcm9wX2ludChz dHJ1Y3QgZnRfY3h0ICpjeHQsIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCB2YWwpCnsK CXUzMiB2ID0gY3B1X3RvX2JlMzIoKHUzMikgdmFsKTsKCglyZXR1cm4gZnRfcHJvcChjeHQsIG5h bWUsICZ2LCA0KTsKfQoKLyogQ2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSByZXNlcnZlZCBtYXAg Ki8Kc3RhdGljIHVuc2lnbmVkIGxvbmcgcnN2bWFwX3NpemUoc3RydWN0IGZ0X2N4dCAqY3h0KQp7 CglzdHJ1Y3QgZnRfcmVzZXJ2ZSAqcmVzOwoKCXJlcyA9IChzdHJ1Y3QgZnRfcmVzZXJ2ZSAqKSBj eHQtPnJnbltGVF9SU1ZNQVBdLnN0YXJ0OwoJd2hpbGUgKHJlcy0+c3RhcnQgfHwgcmVzLT5sZW4p CgkJKytyZXM7CglyZXR1cm4gKGNoYXIgKikocmVzICsgMSkgLSBjeHQtPnJnbltGVF9SU1ZNQVBd LnN0YXJ0Owp9CgovKiBDYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIHN0cnVjdCByZWdpb24gYnkg c3RlcHBpbmcgdGhyb3VnaCBpdCAqLwpzdGF0aWMgdW5zaWduZWQgbG9uZyBzdHJ1Y3Rfc2l6ZShz dHJ1Y3QgZnRfY3h0ICpjeHQpCnsKCWNoYXIgKnAgPSBjeHQtPnJnbltGVF9TVFJVQ1RdLnN0YXJ0 OwoJY2hhciAqbmV4dDsKCXN0cnVjdCBmdF9hdG9tIGF0b207CgoJd2hpbGUgKChuZXh0ID0gZnRf bmV4dChjeHQsIHAsICZhdG9tKSkgIT0gTlVMTCkKCQlwID0gbmV4dDsKCXJldHVybiBwICsgNCAt IGN4dC0+cmduW0ZUX1NUUlVDVF0uc3RhcnQ7Cn0KCi8qIGFkZCBgYWRqJyBvbiB0byBhbGwgc3Ry aW5nIG9mZnNldCB2YWx1ZXMgaW4gdGhlIHN0cnVjdCBhcmVhICovCnN0YXRpYyB2b2lkIGFkanVz dF9zdHJpbmdfb2Zmc2V0cyhzdHJ1Y3QgZnRfY3h0ICpjeHQsIGludCBhZGopCnsKCWNoYXIgKnAg PSBjeHQtPnJnbltGVF9TVFJVQ1RdLnN0YXJ0OwoJY2hhciAqbmV4dDsKCXN0cnVjdCBmdF9hdG9t IGF0b207CglpbnQgb2ZmOwoKCXdoaWxlICgobmV4dCA9IGZ0X25leHQoY3h0LCBwLCAmYXRvbSkp ICE9IE5VTEwpIHsKCQlpZiAoYXRvbS50YWcgPT0gT0ZfRFRfUFJPUCkgewoJCQlvZmYgPSBiZTMy X3RvX2NwdSgqKHUzMiAqKShwICsgOCkpOwoJCQkqKHUzMiAqKShwICsgOCkgPSBjcHVfdG9fYmUz MihvZmYgKyBhZGopOwoJCX0KCQlwID0gbmV4dDsKCX0KfQoKLyogc3RhcnQgY29uc3RydWN0aW9u IG9mIHRoZSBmbGF0IE9GIHRyZWUgZnJvbSBzY3JhdGNoICovCnZvaWQgZnRfYmVnaW4oc3RydWN0 IGZ0X2N4dCAqY3h0LCB2b2lkICpibG9iLCB1bnNpZ25lZCBpbnQgbWF4X3NpemUsCgkgICAgICB2 b2lkICooKnJlYWxsb2NfZm4pKHZvaWQgKiwgdW5zaWduZWQgbG9uZykpCnsKCXN0cnVjdCBib290 X3BhcmFtX2hlYWRlciAqYnBoID0gYmxvYjsKCWNoYXIgKnA7CglzdHJ1Y3QgZnRfcmVzZXJ2ZSAq cHJlczsKCgkvKiBjbGVhciB0aGUgY3h0ICovCgltZW1zZXQoY3h0LCAwLCBzaXplb2YoKmN4dCkp OwoKCWN4dC0+YnBoID0gYnBoOwoJY3h0LT5tYXhfc2l6ZSA9IG1heF9zaXplOwoJY3h0LT5yZWFs bG9jID0gcmVhbGxvY19mbjsKCWN4dC0+aXNvcmRlcmVkID0gMTsKCgkvKiB6ZXJvIGV2ZXJ5dGhp bmcgaW4gdGhlIGhlYWRlciBhcmVhICovCgltZW1zZXQoYnBoLCAwLCBzaXplb2YoKmJwaCkpOwoK CWJwaC0+bWFnaWMgPSBjcHVfdG9fYmUzMihPRl9EVF9IRUFERVIpOwoJYnBoLT52ZXJzaW9uID0g Y3B1X3RvX2JlMzIoMHgxMCk7CglicGgtPmxhc3RfY29tcF92ZXJzaW9uID0gY3B1X3RvX2JlMzIo MHgxMCk7CgoJLyogc3RhcnQgcG9pbnRlcnMgKi8KCWN4dC0+cmduW0ZUX1JTVk1BUF0uc3RhcnQg PSBwID0gYmxvYiArIEhEUl9TSVpFOwoJY3h0LT5yZ25bRlRfUlNWTUFQXS5zaXplID0gc2l6ZW9m KHN0cnVjdCBmdF9yZXNlcnZlKTsKCXByZXMgPSAoc3RydWN0IGZ0X3Jlc2VydmUgKikgcDsKCWN4 dC0+cmduW0ZUX1NUUlVDVF0uc3RhcnQgPSBwICs9IHNpemVvZihzdHJ1Y3QgZnRfcmVzZXJ2ZSk7 CgljeHQtPnJnbltGVF9TVFJVQ1RdLnNpemUgPSA0OwoJY3h0LT5yZ25bRlRfU1RSSU5HU10uc3Rh cnQgPSBibG9iICsgbWF4X3NpemU7CgljeHQtPnJnbltGVF9TVFJJTkdTXS5zaXplID0gMDsKCgkv KiBpbml0IHJzdm1hcCBhbmQgc3RydWN0ICovCglwcmVzLT5zdGFydCA9IDA7CglwcmVzLT5sZW4g PSAwOwoJKih1MzIgKilwID0gY3B1X3RvX2JlMzIoT0ZfRFRfRU5EKTsKCgljeHQtPnN0cl9hbmNo b3IgPSBibG9iOwp9CgovKiBvcGVuIHVwIGFuIGV4aXN0aW5nIGJsb2IgdG8gYmUgZXhhbWluZWQg b3IgbW9kaWZpZWQgKi8KaW50IGZ0X29wZW4oc3RydWN0IGZ0X2N4dCAqY3h0LCB2b2lkICpibG9i LCB1bnNpZ25lZCBpbnQgbWF4X3NpemUsCgkgICAgdm9pZCAqKCpyZWFsbG9jX2ZuKSh2b2lkICos IHVuc2lnbmVkIGxvbmcpKQp7CglzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgKmJwaCA9IGJsb2I7 CgoJLyogY2FuJ3QgY29wZSB3aXRoIHZlcnNpb24gPCAxNiAqLwoJaWYgKGJlMzJfdG9fY3B1KGJw aC0+dmVyc2lvbikgPCAxNikKCQlyZXR1cm4gLTE7CgoJLyogY2xlYXIgdGhlIGN4dCAqLwoJbWVt c2V0KGN4dCwgMCwgc2l6ZW9mKCpjeHQpKTsKCgljeHQtPmJwaCA9IGJwaDsKCWN4dC0+bWF4X3Np emUgPSBtYXhfc2l6ZTsKCWN4dC0+cmVhbGxvYyA9IHJlYWxsb2NfZm47CgoJY3h0LT5yZ25bRlRf UlNWTUFQXS5zdGFydCA9IGJsb2IgKyBiZTMyX3RvX2NwdShicGgtPm9mZl9tZW1fcnN2bWFwKTsK CWN4dC0+cmduW0ZUX1JTVk1BUF0uc2l6ZSA9IHJzdm1hcF9zaXplKGN4dCk7CgljeHQtPnJnbltG VF9TVFJVQ1RdLnN0YXJ0ID0gYmxvYiArIGJlMzJfdG9fY3B1KGJwaC0+b2ZmX2R0X3N0cnVjdCk7 CgljeHQtPnJnbltGVF9TVFJVQ1RdLnNpemUgPSBzdHJ1Y3Rfc2l6ZShjeHQpOwoJY3h0LT5yZ25b RlRfU1RSSU5HU10uc3RhcnQgPSBibG9iICsgYmUzMl90b19jcHUoYnBoLT5vZmZfZHRfc3RyaW5n cyk7CgljeHQtPnJnbltGVF9TVFJJTkdTXS5zaXplID0gYmUzMl90b19jcHUoYnBoLT5kdF9zdHJp bmdzX3NpemUpOwoJY3h0LT5pc29yZGVyZWQgPSBmdF9vcmRlcmVkKGN4dCk7CgoJY3h0LT5wID0g Y3h0LT5yZ25bRlRfU1RSVUNUXS5zdGFydDsKCWN4dC0+c3RyX2FuY2hvciA9IGN4dC0+cmduW0ZU X1NUUklOR1NdLnN0YXJ0OwoKCXJldHVybiAwOwp9CgovKiBhZGQgYSByZXNlcnZlciBwaHlzaWNh bCBhcmVhIHRvIHRoZSByc3ZtYXAgKi8KaW50IGZ0X2FkZF9yc3ZtYXAoc3RydWN0IGZ0X2N4dCAq Y3h0LCB1NjQgcGh5c2FkZHIsIHU2NCBzaXplKQp7CgljaGFyICpwOwoJc3RydWN0IGZ0X3Jlc2Vy dmUgKnByZXM7CgoJcCA9IGN4dC0+cmduW0ZUX1JTVk1BUF0uc3RhcnQgKyBjeHQtPnJnbltGVF9S U1ZNQVBdLnNpemUKCQktIHNpemVvZihzdHJ1Y3QgZnRfcmVzZXJ2ZSk7CglpZiAoIWZ0X21ha2Vf c3BhY2UoY3h0LCAmcCwgRlRfUlNWTUFQLCBzaXplb2Yoc3RydWN0IGZ0X3Jlc2VydmUpKSkKCQly ZXR1cm4gLTE7CgoJcHJlcyA9IChzdHJ1Y3QgZnRfcmVzZXJ2ZSAqKSBwOwoJcHJlcy0+c3RhcnQg PSBjcHVfdG9fYmU2NChwaHlzYWRkcik7CglwcmVzLT5sZW4gPSBjcHVfdG9fYmU2NChzaXplKTsK CglyZXR1cm4gMDsKfQoKdm9pZCBmdF9iZWdpbl90cmVlKHN0cnVjdCBmdF9jeHQgKmN4dCkKewoJ Y3h0LT5wID0gY3h0LT5yZ25bRlRfU1RSVUNUXS5zdGFydDsKfQoKdm9pZCBmdF9lbmRfdHJlZShz dHJ1Y3QgZnRfY3h0ICpjeHQpCnsKCXN0cnVjdCBib290X3BhcmFtX2hlYWRlciAqYnBoID0gY3h0 LT5icGg7CgljaGFyICpwLCAqb2xkc3RyLCAqc3RyLCAqZW5kcDsKCXVuc2lnbmVkIGxvbmcgc3Np emU7CgoJaWYgKCFjeHQtPmlzb3JkZXJlZCkKCQlyZXR1cm47CQkvKiB3ZSBoYXZlbid0IHRvdWNo ZWQgYW55dGhpbmcgKi8KCgkvKiBhZGp1c3Qgc3RyaW5nIG9mZnNldHMgKi8KCW9sZHN0ciA9IGN4 dC0+cmduW0ZUX1NUUklOR1NdLnN0YXJ0OwoJYWRqdXN0X3N0cmluZ19vZmZzZXRzKGN4dCwgY3h0 LT5zdHJfYW5jaG9yIC0gb2xkc3RyKTsKCgkvKiBtYWtlIHN0cmluZ3MgZW5kIG9uIDgtYnl0ZSBi b3VuZGFyeSAqLwoJc3NpemUgPSBjeHQtPnJnbltGVF9TVFJJTkdTXS5zaXplOwoJZW5kcCA9IChj aGFyICopX0FMSUdOKCh1bnNpZ25lZCBsb25nKSBjeHQtPnJnbltGVF9TVFJVQ1RdLnN0YXJ0CgkJ CSAgICAgICsgY3h0LT5yZ25bRlRfU1RSVUNUXS5zaXplICsgc3NpemUsIDgpOwoJc3RyID0gZW5k cCAtIHNzaXplOwoKCS8qIG1vdmUgc3RyaW5ncyBkb3duIHRvIGVuZCBvZiBzdHJ1Y3RzICovCglt ZW1tb3ZlKHN0ciwgb2xkc3RyLCBzc2l6ZSk7CgljeHQtPnN0cl9hbmNob3IgPSBzdHI7CgljeHQt PnJnbltGVF9TVFJJTkdTXS5zdGFydCA9IHN0cjsKCgkvKiBmaWxsIGluIGhlYWRlciBmaWVsZHMg Ki8KCXAgPSAoY2hhciAqKSBicGg7CglicGgtPnRvdGFsc2l6ZSA9IGNwdV90b19iZTMyKGVuZHAg LSBwKTsKCWJwaC0+b2ZmX21lbV9yc3ZtYXAgPSBjcHVfdG9fYmUzMihjeHQtPnJnbltGVF9SU1ZN QVBdLnN0YXJ0IC0gcCk7CglicGgtPm9mZl9kdF9zdHJ1Y3QgPSBjcHVfdG9fYmUzMihjeHQtPnJn bltGVF9TVFJVQ1RdLnN0YXJ0IC0gcCk7CglicGgtPm9mZl9kdF9zdHJpbmdzID0gY3B1X3RvX2Jl MzIoY3h0LT5yZ25bRlRfU1RSSU5HU10uc3RhcnQgLSBwKTsKCWJwaC0+ZHRfc3RyaW5nc19zaXpl ID0gY3B1X3RvX2JlMzIoc3NpemUpOwp9Cgp2b2lkICpmdF9maW5kX2RldmljZShzdHJ1Y3QgZnRf Y3h0ICpjeHQsIGNvbnN0IGNoYXIgKnNyY2hfcGF0aCkKewoJc3RydWN0IGZ0X2F0b20gYXRvbTsK CWNvbnN0IGNoYXIgKnAsICpjcCwgKnE7CglpbnQgY2w7CglpbnQgZGVwdGggPSAtMTsKCWludCBk bWF0Y2ggPSAwOwoJY29uc3QgY2hhciAqcGF0aF9jb21wW01BWF9ERVBUSF07CgoJLyogcmVxdWly ZSBhYnNvbHV0ZSBwYXRoICovCglpZiAoc3JjaF9wYXRoWzBdICE9ICcvJykKCQlyZXR1cm4gTlVM TDsKCgljcCA9IHNyY2hfcGF0aDsKCWNsID0gMDsKCXAgPSBjeHQtPnJnbltGVF9TVFJVQ1RdLnN0 YXJ0OwoKCXdoaWxlICgocCA9IGZ0X25leHQoY3h0LCBwLCAmYXRvbSkpICE9IE5VTEwpIHsKCQlz d2l0Y2ggKGF0b20udGFnKSB7CgkJY2FzZSBPRl9EVF9CRUdJTl9OT0RFOgoJCQkrK2RlcHRoOwoJ CQlpZiAoZGVwdGggIT0gZG1hdGNoKQoJCQkJYnJlYWs7CgkJCWlmICghKHN0cm5jbXAoYXRvbS5u YW1lLCBjcCwgY2wpID09IDAgJiYKCQkJICAgICAgKGF0b20ubmFtZVtjbF0gPT0gMCB8fCBhdG9t Lm5hbWVbY2xdID09ICdAJykpKQoJCQkJYnJlYWs7CgkJCS8qIG9rIGl0IG1hdGNoZXMgc28gZmFy Li4uICovCgkJCWlmIChjcFtjbF0gPT0gMCkKCQkJCXJldHVybiBhdG9tLmRhdGE7CgkJCXBhdGhf Y29tcFtkbWF0Y2hdID0gY3A7CgkJCS8qIGFkdmFuY2UgdG8gbmV4dCBwYXRoIGNvbXBvbmVudCAq LwoJCQljcCArPSBjbCArIDE7CgkJCS8qIGFsbG93IG11bHRpcGxlIHNsYXNoZXMgKi8KCQkJd2hp bGUgKCpjcCA9PSAnLycpCgkJCQkrK2NwOwoJCQkvKiBhbGxvdyB0cmFpbGluZyBzbGFzaChlcykg Ki8KCQkJaWYgKCpjcCA9PSAwKQoJCQkJcmV0dXJuIGF0b20uZGF0YTsKCQkJLyogbG9vayBmb3Ig ZW5kIG9mIHRoaXMgY29tcG9uZW50ICovCgkJCXEgPSBzdHJjaHIoY3AsICcvJyk7CgkJCWlmIChx KQoJCQkJY2wgPSBxIC0gc3JjaF9wYXRoOwoJCQllbHNlCgkJCQljbCA9IHN0cmxlbihjcCk7CgkJ CSsrZG1hdGNoOwoJCQlicmVhazsKCQljYXNlIE9GX0RUX0VORF9OT0RFOgoJCQlpZiAoZG1hdGNo ID4gZGVwdGgpIHsKCQkJCS0tZG1hdGNoOwoJCQkJY2wgPSBjcCAtIHBhdGhfY29tcFtkbWF0Y2hd IC0gMTsKCQkJCWNwID0gcGF0aF9jb21wW2RtYXRjaF07CgkJCQl3aGlsZSAoY2wgPiAwICYmIGNw W2NsLTFdID09ICcvJykKCQkJCQktLWNsOwoJCQl9CgkJCS0tZGVwdGg7CgkJCWJyZWFrOwoJCX0K CX0KCXJldHVybiBOVUxMOwp9CgppbnQgZnRfZ2V0X3Byb3Aoc3RydWN0IGZ0X2N4dCAqY3h0LCBj b25zdCB2b2lkICpub2RlLCBjb25zdCBjaGFyICpwcm9wbmFtZSwKCQl2b2lkICpidWYsIGNvbnN0 IHVuc2lnbmVkIGludCBidWZsZW4pCnsKCXN0cnVjdCBmdF9hdG9tIGF0b207CgljaGFyICpwOwoJ aW50IGRlcHRoOwoJdW5zaWduZWQgaW50IHNpemU7CgoJZGVwdGggPSAwOwoJcCA9IGN4dC0+cmdu W0ZUX1NUUlVDVF0uc3RhcnQ7CgoJd2hpbGUgKChwID0gZnRfbmV4dChjeHQsIHAsICZhdG9tKSkg IT0gTlVMTCkgewoJCXN3aXRjaCAoYXRvbS50YWcpIHsKCQljYXNlIE9GX0RUX0JFR0lOX05PREU6 CgkJCWlmIChkZXB0aCkKCQkJCXJldHVybiAtMTsKCQkJZGVwdGggPSAxOwoJCQlicmVhazsKCQlj YXNlIE9GX0RUX1BST1A6CgkJCWlmIChzdHJjbXAoYXRvbS5uYW1lLCBwcm9wbmFtZSkpCgkJCQli cmVhazsKCQkJc2l6ZSA9IG1pbihhdG9tLnNpemUsIGJ1Zmxlbik7CgkJCW1lbWNweShidWYsIGF0 b20uZGF0YSwgc2l6ZSk7CgkJCXJldHVybiBhdG9tLnNpemU7CgkJY2FzZSBPRl9EVF9FTkRfTk9E RToKCQkJcmV0dXJuIC0xOwoJCX0KCX0KCXJldHVybiAtMTsKfQoKaW50IGZ0X3NldF9wcm9wKHN0 cnVjdCBmdF9jeHQgKmN4dCwgY29uc3Qgdm9pZCAqbm9kZSwgY29uc3QgY2hhciAqcHJvcG5hbWUs CgkJY29uc3Qgdm9pZCAqYnVmLCBjb25zdCB1bnNpZ25lZCBpbnQgYnVmbGVuKQp7CglzdHJ1Y3Qg ZnRfYXRvbSBhdG9tOwoJY2hhciAqcCwgKm5leHQ7CglpbnQgbmV4dHJhOwoKCXAgPSBjeHQtPnJn bltGVF9TVFJVQ1RdLnN0YXJ0OwoKCS8qIHNraXAgaW5pdGlhbCBPRl9EVF9CRUdJTl9OT0RFICov CglwID0gZnRfbmV4dChjeHQsIHAsICZhdG9tKTsKCWlmIChwID09IE5VTEwgfHwgYXRvbS50YWcg IT0gT0ZfRFRfQkVHSU5fTk9ERSkKCQlyZXR1cm4gLTE7CgoJd2hpbGUgKChuZXh0ID0gZnRfbmV4 dChjeHQsIHAsICZhdG9tKSkgIT0gTlVMTCkgewoJCXN3aXRjaCAoYXRvbS50YWcpIHsKCQljYXNl IE9GX0RUX0JFR0lOX05PREU6CgkJY2FzZSBPRl9EVF9FTkRfTk9ERToKCQkJLyogaGF2ZW4ndCBm b3VuZCB0aGUgcHJvcGVydHksIGluc2VydCBoZXJlICovCgkJCWN4dC0+cCA9IHA7CgkJCXJldHVy biBmdF9wcm9wKGN4dCwgcHJvcG5hbWUsIGJ1ZiwgYnVmbGVuKTsKCQljYXNlIE9GX0RUX1BST1A6 CgkJCWlmIChzdHJjbXAoYXRvbS5uYW1lLCBwcm9wbmFtZSkpCgkJCQlicmVhazsKCQkJLyogZm91 bmQgYW4gZXhpc3RpbmcgcHJvcGVydHksIG92ZXJ3cml0ZSBpdCAqLwoJCQluZXh0cmEgPSBfQUxJ R04oYnVmbGVuLCA0KSAtIF9BTElHTihhdG9tLnNpemUsIDQpOwoJCQljeHQtPnAgPSBhdG9tLmRh dGE7CgkJCWlmICghZnRfbWFrZV9zcGFjZShjeHQsICZjeHQtPnAsIEZUX1NUUlVDVCwgbmV4dHJh KSkKCQkJCXJldHVybiAtMTsKCQkJKih1MzIgKikoY3h0LT5wIC0gOCkgPSBjcHVfdG9fYmUzMihi dWZsZW4pOwoJCQlmdF9wdXRfYmluKGN4dCwgYnVmLCBidWZsZW4pOwoJCQlyZXR1cm4gMDsKCQl9 CgkJcCA9IG5leHQ7Cgl9CglyZXR1cm4gLTE7Cn0KCnZvaWQgKmZ0X2NyZWF0ZV9ub2RlKHN0cnVj dCBmdF9jeHQgKmN4dCwgY29uc3Qgdm9pZCAqcGFyZW50LCBjb25zdCBjaGFyICpwYXRoKQp7Cglz dHJ1Y3QgZnRfYXRvbSBhdG9tOwoJY2hhciAqcCwgKm5leHQ7CglpbnQgZGVwdGggPSAwOwoKCXAg PSBjeHQtPnJnbltGVF9TVFJVQ1RdLnN0YXJ0OwoJd2hpbGUgKChuZXh0ID0gZnRfbmV4dChjeHQs IHAsICZhdG9tKSkgIT0gTlVMTCkgewoJCXN3aXRjaCAoYXRvbS50YWcpIHsKCQljYXNlIE9GX0RU X0JFR0lOX05PREU6CgkJCSsrZGVwdGg7CgkJCWlmIChkZXB0aCA9PSAxICYmIHN0cmNtcChhdG9t Lm5hbWUsIHBhdGgpID09IDApCgkJCQkvKiBkdXBsaWNhdGUgbm9kZSBwYXRoLCByZXR1cm4gZXJy b3IgKi8KCQkJCXJldHVybiBOVUxMOwoJCQlicmVhazsKCQljYXNlIE9GX0RUX0VORF9OT0RFOgoJ CQktLWRlcHRoOwoJCQlpZiAoZGVwdGggPiAwKQoJCQkJYnJlYWs7CgkJCS8qIGVuZCBvZiBub2Rl LCBpbnNlcnQgaGVyZSAqLwoJCQljeHQtPnAgPSBwOwoJCQlmdF9iZWdpbl9ub2RlKGN4dCwgcGF0 aCk7CgkJCWZ0X2VuZF9ub2RlKGN4dCk7CgkJCXJldHVybiBwOwoJCX0KCQlwID0gbmV4dDsKCX0K fQo= --yUM9UyusVj Content-Type: application/x-chdr Content-Description: flatdevtree.h Content-Disposition: attachment; filename="flatdevtree.h" Content-Transfer-Encoding: base64 LyoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICogKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgogKi8KCiNpZm5kZWYgRkxBVERFVlRSRUVf SAojZGVmaW5lIEZMQVRERVZUUkVFX0gKCiNpbmNsdWRlIDxzdGRhcmcuaD4KI2luY2x1ZGUgPHN0 ZGRlZi5oPgojaW5jbHVkZSAiZmxhdGRldnRyZWVfZW52LmgiCiNpbmNsdWRlICJ0eXBlcy5oIgoj aW5jbHVkZSAicGFnZS5oIgojaW5jbHVkZSAic3RyaW5nLmgiCiNpbmNsdWRlICJzdGRpby5oIgoK LyogRGVmaW5pdGlvbnMgdXNlZCBieSB0aGUgZmxhdHRlbmVkIGRldmljZSB0cmVlICovCiNkZWZp bmUgT0ZfRFRfSEVBREVSICAgICAgICAgICAgMHhkMDBkZmVlZCAgICAgIC8qIG1hcmtlciAqLwoj ZGVmaW5lIE9GX0RUX0JFR0lOX05PREUgICAgICAgIDB4MSAgICAgLyogU3RhcnQgb2Ygbm9kZSwg ZnVsbCBuYW1lICovCiNkZWZpbmUgT0ZfRFRfRU5EX05PREUgICAgICAgICAgMHgyICAgICAvKiBF bmQgbm9kZSAqLwojZGVmaW5lIE9GX0RUX1BST1AgICAgICAgICAgICAgIDB4MyAgICAgLyogUHJv cGVydHk6IG5hbWUgb2ZmLCBzaXplLCBjb250ZW50ICovCiNkZWZpbmUgT0ZfRFRfTk9QICAgICAg ICAgICAgICAgMHg0ICAgICAvKiBub3AgKi8KI2RlZmluZSBPRl9EVF9FTkQgICAgICAgICAgICAg ICAweDkKCiNkZWZpbmUgT0ZfRFRfVkVSU0lPTiAgICAgICAgICAgMHgxMAoKc3RydWN0IGJvb3Rf cGFyYW1faGVhZGVyIHsKCXUzMiBtYWdpYzsgICAgICAgICAgICAgIC8qIG1hZ2ljIHdvcmQgT0Zf RFRfSEVBREVSICovCgl1MzIgdG90YWxzaXplOyAgICAgICAgICAvKiB0b3RhbCBzaXplIG9mIERU IGJsb2NrICovCgl1MzIgb2ZmX2R0X3N0cnVjdDsgICAgICAvKiBvZmZzZXQgdG8gc3RydWN0dXJl ICovCgl1MzIgb2ZmX2R0X3N0cmluZ3M7ICAgICAvKiBvZmZzZXQgdG8gc3RyaW5ncyAqLwoJdTMy IG9mZl9tZW1fcnN2bWFwOyAgICAgLyogb2Zmc2V0IHRvIG1lbW9yeSByZXNlcnZlIG1hcCAqLwoJ dTMyIHZlcnNpb247ICAgICAgICAgICAgLyogZm9ybWF0IHZlcnNpb24gKi8KCXUzMiBsYXN0X2Nv bXBfdmVyc2lvbjsgIC8qIGxhc3QgY29tcGF0aWJsZSB2ZXJzaW9uICovCgkvKiB2ZXJzaW9uIDIg ZmllbGRzIGJlbG93ICovCgl1MzIgYm9vdF9jcHVpZF9waHlzOyAgICAvKiBQaHlzaWNhbCBDUFUg aWQgd2UncmUgYm9vdGluZyBvbiAqLwoJLyogdmVyc2lvbiAzIGZpZWxkcyBiZWxvdyAqLwoJdTMy IGR0X3N0cmluZ3Nfc2l6ZTsgICAgLyogc2l6ZSBvZiB0aGUgRFQgc3RyaW5ncyBibG9jayAqLwp9 OwoKc3RydWN0IGZ0X3Jlc2VydmUgewoJdTY0IHN0YXJ0OwoJdTY0IGxlbjsKfTsKCnN0cnVjdCBm dF9yZWdpb24gewoJY2hhciAqc3RhcnQ7Cgl1bnNpZ25lZCBsb25nIHNpemU7Cn07CgplbnVtIGZ0 X3Jnbl9pZCB7CglGVF9SU1ZNQVAsCglGVF9TVFJVQ1QsCglGVF9TVFJJTkdTLAoJRlRfTl9SRUdJ T04KfTsKCnN0cnVjdCBmdF9jeHQgewoJc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyICpicGg7Cglp bnQgbWF4X3NpemU7ICAgICAgICAgICAvKiBtYXhpbXVtIHNpemUgb2YgdHJlZSAqLwoJaW50IGlz b3JkZXJlZDsJCS8qIGV2ZXJ5dGhpbmcgaW4gc3RhbmRhcmQgb3JkZXIgKi8KCXZvaWQgKigqcmVh bGxvYykodm9pZCAqLCB1bnNpZ25lZCBsb25nKTsKCWNoYXIgKnN0cl9hbmNob3I7CgljaGFyICpw OwkJLyogY3VycmVudCBpbnNlcnRpb24gcG9pbnQgaW4gc3RydWN0cyAqLwoJc3RydWN0IGZ0X3Jl Z2lvbiByZ25bRlRfTl9SRUdJT05dOwp9OwoKaW50IGZ0X2JlZ2luX25vZGUoc3RydWN0IGZ0X2N4 dCAqY3h0LCBjb25zdCBjaGFyICpuYW1lKTsKdm9pZCBmdF9lbmRfbm9kZShzdHJ1Y3QgZnRfY3h0 ICpjeHQpOwoKdm9pZCBmdF9iZWdpbl90cmVlKHN0cnVjdCBmdF9jeHQgKmN4dCk7CnZvaWQgZnRf ZW5kX3RyZWUoc3RydWN0IGZ0X2N4dCAqY3h0KTsKCnZvaWQgZnRfbm9wKHN0cnVjdCBmdF9jeHQg KmN4dCk7CmludCBmdF9wcm9wKHN0cnVjdCBmdF9jeHQgKmN4dCwgY29uc3QgY2hhciAqbmFtZSwK CSAgICBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc3opOwppbnQgZnRfcHJvcF9zdHIo c3RydWN0IGZ0X2N4dCAqY3h0LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzdHIpOwpp bnQgZnRfcHJvcF9pbnQoc3RydWN0IGZ0X2N4dCAqY3h0LCBjb25zdCBjaGFyICpuYW1lLCB1bnNp Z25lZCBpbnQgdmFsKTsKdm9pZCBmdF9iZWdpbihzdHJ1Y3QgZnRfY3h0ICpjeHQsIHZvaWQgKmJs b2IsIHVuc2lnbmVkIGludCBtYXhfc2l6ZSwKCSAgICAgIHZvaWQgKigqcmVhbGxvY19mbikodm9p ZCAqLCB1bnNpZ25lZCBsb25nKSk7CmludCBmdF9vcGVuKHN0cnVjdCBmdF9jeHQgKmN4dCwgdm9p ZCAqYmxvYiwgdW5zaWduZWQgaW50IG1heF9zaXplLAoJICAgIHZvaWQgKigqcmVhbGxvY19mbiko dm9pZCAqLCB1bnNpZ25lZCBsb25nKSk7CmludCBmdF9hZGRfcnN2bWFwKHN0cnVjdCBmdF9jeHQg KmN4dCwgdTY0IHBoeXNhZGRyLCB1NjQgc2l6ZSk7Cgp2b2lkIGZ0X2R1bXBfYmxvYihjb25zdCB2 b2lkICpicGhwKTsKdm9pZCBmdF9tZXJnZV9ibG9iKHN0cnVjdCBmdF9jeHQgKmN4dCwgdm9pZCAq YmxvYik7CnZvaWQgKmZ0X2ZpbmRfZGV2aWNlKHN0cnVjdCBmdF9jeHQgKmN4dCwgY29uc3QgY2hh ciAqc3JjaF9wYXRoKTsKaW50IGZ0X2dldF9wcm9wKHN0cnVjdCBmdF9jeHQgKmN4dCwgY29uc3Qg dm9pZCAqbm9kZSwgY29uc3QgY2hhciAqcHJvcG5hbWUsCgkJdm9pZCAqYnVmLCBjb25zdCB1bnNp Z25lZCBpbnQgYnVmbGVuKTsKaW50IGZ0X3NldF9wcm9wKHN0cnVjdCBmdF9jeHQgKmN4dCwgY29u c3Qgdm9pZCAqbm9kZSwgY29uc3QgY2hhciAqcHJvcG5hbWUsCgkJY29uc3Qgdm9pZCAqYnVmLCBj b25zdCB1bnNpZ25lZCBpbnQgYnVmbGVuKTsKCnN0YXRpYyBpbmxpbmUgY2hhciAqZnRfc3RycmNo cihjb25zdCBjaGFyICpzLCBpbnQgYykKewoJY29uc3QgY2hhciAqcCA9IHMgKyBzdHJsZW4ocyk7 CgoJZG8gewoJCWlmICgqcCA9PSAoY2hhciljKQoJCQlyZXR1cm4gKGNoYXIgKilwOwoJfSB3aGls ZSAoLS1wID49IHMpOwoJcmV0dXJuIE5VTEw7Cn0KCi8qICdwYXRoJyBpcyBtb2RpZmllZCAqLwpz dGF0aWMgaW5saW5lIHZvaWQgZnRfcGFyZW50aXplKGNoYXIgKnBhdGgsIHU4IGxlYXZlX3NsYXNo KQp7CgljaGFyICpzID0gJnBhdGhbc3RybGVuKHBhdGgpIC0gMV07CgoJaWYgKCpzID09ICcvJykK CQkqcyA9ICdcMCc7CglzID0gZnRfc3RycmNocihwYXRoLCAnLycpOwoJaWYgKHMgIT0gTlVMTCkg ewoJCWlmIChsZWF2ZV9zbGFzaCkKCQkJc1sxXSA9ICdcMCc7CgkJZWxzZSBpZiAoc1swXSA9PSAn LycpCgkJCXNbMF0gPSAnXDAnOwoJfQp9CiNlbmRpZiAvKiBGTEFUREVWVFJFRV9IICovCg== --yUM9UyusVj Content-Type: application/x-chdr Content-Description: flatdevtree_env.h Content-Disposition: attachment; filename="flatdevtree_env.h" Content-Transfer-Encoding: base64 LyoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICogKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgogKi8KCgojaWZuZGVmIF9QUENfQk9PVF9G TEFUREVWVFJFRV9FTlZfSF8KI2RlZmluZSBfUFBDX0JPT1RfRkxBVERFVlRSRUVfRU5WX0hfCgoj ZGVmaW5lCWJlMTZfdG9fY3B1KHgpCQkoeCkKI2RlZmluZQljcHVfdG9fYmUxNih4KQkJKHgpCiNk ZWZpbmUJYmUzMl90b19jcHUoeCkJCSh4KQojZGVmaW5lCWNwdV90b19iZTMyKHgpCQkoeCkKI2Rl ZmluZQliZTY0X3RvX2NwdSh4KQkJKHgpCiNkZWZpbmUJY3B1X3RvX2JlNjQoeCkJCSh4KQoKI2Vu ZGlmIC8qIF9QUENfQk9PVF9GTEFUREVWVFJFRV9FTlZfSF8gKi8K --yUM9UyusVj--