From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="D9qSeFpq" Received: from mailout4.samsung.com (mailout4.samsung.com [203.254.224.34]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A3E2F12D for ; Sun, 26 Nov 2023 23:31:14 -0800 (PST) Received: from epcas5p4.samsung.com (unknown [182.195.41.42]) by mailout4.samsung.com (KnoxPortal) with ESMTP id 20231127073110epoutp04305440f128c7ab4af21aee9f14621a76~bamXuMcEf1916219162epoutp045 for ; Mon, 27 Nov 2023 07:31:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout4.samsung.com 20231127073110epoutp04305440f128c7ab4af21aee9f14621a76~bamXuMcEf1916219162epoutp045 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1701070270; bh=/O7GxW4+OPp3iltiCjpDj2tV+gbFG4XP70pxdSz2jC0=; h=From:To:Cc:In-Reply-To:Subject:Date:References:From; b=D9qSeFpqYh+2Xs5HD14tiNbi2vGyXLvG2QX8pi574ndpQKmjlYa6dV1euWLN0Cy4k hRk5N5YXnWh+dKU1Lr8nQm3IZG2DyPLXtpTUgkuI43m7CAeRdS7Ox5vWpbmslOOAnv eCs9xUt/O0MDKcQa6LZQe8TG5MuBYEcTU+UTgW6s= Received: from epsnrtp3.localdomain (unknown [182.195.42.164]) by epcas5p2.samsung.com (KnoxPortal) with ESMTP id 20231127073109epcas5p23dfbea83edaed63d60886d785aeadc5c~bamW-KVrZ0286702867epcas5p2R; Mon, 27 Nov 2023 07:31:09 +0000 (GMT) Received: from epsmges5p2new.samsung.com (unknown [182.195.38.174]) by epsnrtp3.localdomain (Postfix) with ESMTP id 4Sdy1l5Jrfz4x9QQ; Mon, 27 Nov 2023 07:31:07 +0000 (GMT) Received: from epcas5p2.samsung.com ( [182.195.41.40]) by epsmges5p2new.samsung.com (Symantec Messaging Gateway) with SMTP id 7C.95.10009.BB544656; Mon, 27 Nov 2023 16:31:07 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas5p4.samsung.com (KnoxPortal) with ESMTPA id 20231127070013epcas5p4e967991cccb1908ddf010ec13e758d27~baLWtSliN3195231952epcas5p4j; Mon, 27 Nov 2023 07:00:13 +0000 (GMT) Received: from epsmgmc1p1new.samsung.com (unknown [182.195.42.40]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20231127070013epsmtrp223d6e8de69b418d4a77ab914f7b707f4~baLWr9ppJ0136401364epsmtrp2N; Mon, 27 Nov 2023 07:00:13 +0000 (GMT) X-AuditID: b6c32a4a-ff1ff70000002719-f8-656445bbd991 Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgmc1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id CE.9B.07368.D7E34656; Mon, 27 Nov 2023 16:00:13 +0900 (KST) Received: from FDSFTE308 (unknown [107.122.81.79]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20231127070009epsmtip2ee6eb1275ef80b60cbb58bcc79c204e8~baLTMJN6S2484424844epsmtip2u; Mon, 27 Nov 2023 07:00:09 +0000 (GMT) From: "Aakarsh Jain" To: "'Nicolas Dufresne'" , , , , Cc: , , , , , , , , , , , , , , , , , , "'Smitha T Murthy'" In-Reply-To: Subject: RE: [Patch v4 04/11] media: s5p-mfc: Add YV12 and I420 multiplanar format support Date: Mon, 27 Nov 2023 12:30:08 +0530 Message-ID: <0fe401da20ff$5e47e410$1ad7ac30$@samsung.com> Precedence: bulk X-Mailing-List: linux-samsung-soc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Mailer: Microsoft Outlook 16.0 Thread-Index: AQLm4twfZx4yvmLB3iF6RxvUJv+HzQIF15oBArq90LwDAvliPK42GgUg Content-Language: en-in X-Brightmail-Tracker: H4sIAAAAAAAAA01Te0xTVxzmPtpbWAt3WMOBMYd3aoYGaBW6wwbOB+qNkkC2bDhHUpv2Dgil bdrilG2BqUzF4kYCQZpSmSBjWIYrlneXymMNjQ/wgeB4iwHF6KDo0Mm20paN/77f73zf+X7f 7+RwsMAyIoSTodAyaoVETrH98MbO8Hci2nbJGEHv6Q3Q9vQKDseMjWxYuTCFwtFKJw47GiwE NFmvo/BHu40Fz3VdZ8GmKxM4HLS1oLCvbBiHZ6bHMWi+38+C449S4K1WAxvqLllY8OyNX1FY 1zVMwAt3+1BYbX6FwjlHCwbPW+YJmG/tIuDxb6pY2wBtMpoQ+m7VHEa36IcJurL9IUqba0+x 6aH+djbdUJVLN0yfxuj87pc4feZyLUL/fbScoJ3mNbTjmZNI5h3IjEtnJDJGHcYopEpZhiIt ntr3kXinOEYkEEYIY+G7VJhCksXEUwmJyRG7M+SuDVBhhyTybFcrWaLRUFFb49TKbC0Tlq7U aOMpRiWTq6JVkRpJliZbkRapYLTvCQWCzTEu4sHM9NmJNpaq+xJ22GbZn4cMVWEFiC8HkNGg rsFBFCB+nECyDQEj1lHMU8whYKZmhO0pniPAftzMWpaMdZayPAdWBPT9ZvfqpxDQ/7wFWWKx ySgw6tC5WXyyGQHONoubhZE/4aCpy8ReYvmSe8Girtx97yoyFeRN33RjnFwPnBajaxIOh0fG gt4C8VKbR74Oesom8SWMkZtA9Q8z3hRh4MWDareUT+4GJ0pfsjycIND9QucOBMibvqD12gLq ESSAorkpwoNXgUf2y14cApxPrGwPloL75x96DeSgvr0Y9+APgO22AV+aDSPDQX1rlKf9Jihx /Ix6fP1B4V+TXiseaDYu4w3AMLTgXWMo6Lx4AfkeofQroulXRNOviKD/360CwWuRYEalyUpj NDGqzQrmi//eXKrMMiPuP7JxbzMyPvZHZAeCcpAOBHAwis+LnJUygTyZ5EgOo1aK1dlyRtOB xLjWXYSFrJYqXZ9MoRULo2MF0SKRKDp2i0hIBfFm8stlgWSaRMtkMoyKUS/rUI5vSB7KjzNK J6b25X7un3XQkBv8OMhQ3zApqFFBwXzkfu7tq5u+OnVCln9uC78ixqcwY/CVLjfY8uXItDF/ +56TtSMVXEoKkmdFGfNzg70V/HULobeuHr3z9cSaUGFeglNZ7HibE7SjYNTZNHHD5v+dL5MU f2/2NYPVssd/e89TxdpSbriP/1rQ09f4ccm3o5/dW59YpyldrU/ZZbUXGwYuvp+nj9HxdazC nHb7QNOxfxLqD+ew7swPl9T3c00B204uEqaBx6k48mHAofnf3wjX2X2Qs/RbkwF+z8R/Di0+ +IUbl3ikhtj6adGapHVPnOMHUnk8urB3ljy2s98ylZRyzVHG/YTCNekS4UZMrZH8C1vk5n2s BAAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpkleLIzCtJLcpLzFFi42LZdlhJXrfWLiXVYPEpVYsD7w+yWDyYt43N YvGP50wW9xd/ZrE4tHkru8WaveeYLJYfP8BqMf/IOVaL7QcfsVjcPLCTyeLizLssFn0vHjJb bHp8jdXi4atwi8u75rBZ9GzYymox4/w+Jou1R+6yWyy9fpHJYtmmP0wWn07tZLZYtPULu0Xr 3iPsFi2NS1gdJDzWzFvD6HF9ySdmj52z7rJ7LN7zkslj06pONo871/aweWxeUu+x+UU3s0fr 0V8sHn1bVjF6/Guay+7xeZOcx6mvn9kDeKO4bFJSczLLUov07RK4Mu5sWsBWMHM5U8XJqVPZ Ghg3vWPsYuTkkBAwkXhweDprFyMXh5DAbkaJXfdusEAkZCT+tx1jh7CFJVb+e84OUfSUUeLX qylg3WwC+hL3T/WAdYsI7GGUWL59FxtIgllgN4vEgbuSEB3/GSW2zvgENpZTwEvib89cVhBb WCBK4sTFF2BxFgFVic9b5zF3MXJw8ApYSlzoigcJ8woISpyc+YQFYqa2xNObT+HsZQtfM0Nc pyDx8+kysJEiAm4S7dN/sULUiEsc/dnDPIFReBaSUbOQjJqFZNQsJC0LGFlWMUqmFhTnpucm GxYY5qWW6xUn5haX5qXrJefnbmIEpxItjR2M9+b/0zvEyMTBeIhRgoNZSYRX72NyqhBvSmJl VWpRfnxRaU5q8SFGaQ4WJXFewxmzU4QE0hNLUrNTUwtSi2CyTBycUg1MR95eiJe98l5d1nbO nQ7eLfPU/px4VCK/KbdX0dghJbFtdbdF/MaL+ROns2w20tqTcuS3K7fdTIX6dcePb/t9PWf9 0T+KX3Juihk5rEq1cb7N/NIn8pH7v2nntuxLsmZQztrnHFBr/5mdX2L+bJHjMbpbz+1n3rZ2 p1RC2cyUO+tFpqorzjLIMz9Q5LjTXvbIr+nH54cLPBHVTYsveOM0dylX3craW6x625SMpov4 N5wOXSvl4vMnWO2HtOSRD87ezl96Wr+zC0xseV527Fp/zkev5bFGbH8Df/dYHvhh0hyV5Wpy 8LfLFh6uhuCsmeFCLz5Jhc6x8NH4u156z0+HuBT3jUsrFPZ3PQms9rVWYinOSDTUYi4qTgQA SQo3qpQDAAA= X-CMS-MailID: 20231127070013epcas5p4e967991cccb1908ddf010ec13e758d27 X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20231025102243epcas5p1cdd0eb385d2381943d6d194eec3a569d References: <20231025102216.50480-1-aakarsh.jain@samsung.com> <20231025102216.50480-5-aakarsh.jain@samsung.com> Hi Nicolas, > -----Original Message----- > From: Nicolas Dufresne > Sent: 23 November 2023 22:56 > To: Aakarsh Jain ; linux-arm- > kernel=40lists.infradead.org; linux-media=40vger.kernel.org; linux- > kernel=40vger.kernel.org; devicetree=40vger.kernel.org > Cc: m.szyprowski=40samsung.com; andrzej.hajda=40intel.com; > mchehab=40kernel.org; hverkuil-cisco=40xs4all.nl; > krzysztof.kozlowski+dt=40linaro.org; dillon.minfei=40gmail.com; > david.plowman=40raspberrypi.com; mark.rutland=40arm.com; > robh+dt=40kernel.org; conor+dt=40kernel.org; linux-samsung- > soc=40vger.kernel.org; andi=40etezian.org; gost.dev=40samsung.com; > alim.akhtar=40samsung.com; aswani.reddy=40samsung.com; > pankaj.dubey=40samsung.com; ajaykumar.rs=40samsung.com; linux- > fsd=40tesla.com; Smitha T Murthy > Subject: Re: =5BPatch v4 04/11=5D media: s5p-mfc: Add YV12 and I420 multi= planar > format support >=20 > Le mercredi 25 octobre 2023 =C3=A0=2015:52=20+0530,=20Aakarsh=20Jain=20a= =20=C3=A9crit=20:=0D=0A>=20>=20YV12=20and=20I420=20format=20(3-plane)=20sup= port=20is=20added.=20Stride=20information=20is=0D=0A>=20>=20added=20to=20al= l=20formats=20and=20planes=20since=20it=20is=20necessary=20for=20YV12/I420= =0D=0A>=20>=20which=20are=20different=20from=20width.=0D=0A>=20>=0D=0A>=20>= =20Cc:=20linux-fsd=40tesla.com=0D=0A>=20>=20Signed-off-by:=20Smitha=20T=20M= urthy=20=0D=0A>=20>=20Signed-off-by:=20Aakarsh= =20Jain=20=0D=0A>=20>=20---=0D=0A>=20>=20=20...= /platform/samsung/s5p-mfc/regs-mfc-v12.h=20=20=20=7C=20=20=202=20+=0D=0A>= =20>=20=20.../platform/samsung/s5p-mfc/regs-mfc-v7.h=20=20=20=20=7C=20=20= =201=20+=0D=0A>=20>=20=20.../platform/samsung/s5p-mfc/regs-mfc-v8.h=20=20= =20=20=7C=20=20=203=20+=0D=0A>=20>=20=20.../platform/samsung/s5p-mfc/s5p_mf= c_common.h=20=7C=20=20=204=20+=0D=0A>=20>=20=20.../platform/samsung/s5p-mfc= /s5p_mfc_dec.c=20=20=20=20=7C=20=2045=20++++-=0D=0A>=20>=20=20.../platform/= samsung/s5p-mfc/s5p_mfc_enc.c=20=20=20=20=7C=20=2086=20+++++++--=0D=0A>=20>= =20=20.../platform/samsung/s5p-mfc/s5p_mfc_opr.h=20=20=20=20=7C=20=20=206= =20+-=0D=0A>=20>=20=20.../platform/samsung/s5p-mfc/s5p_mfc_opr_v5.c=20=7C= =20=2012=20+-=0D=0A>=20>=20.../platform/samsung/s5p-mfc/s5p_mfc_opr_v6.c=20= =7C=20168=0D=0A>=20+++++++++++++++---=0D=0A>=20>=20=209=20files=20changed,= =20281=20insertions(+),=2046=20deletions(-)=0D=0A>=20>=0D=0A>=20>=20diff=20= --git=20a/drivers/media/platform/samsung/s5p-mfc/regs-mfc-v12.h=0D=0A>=20>= =20b/drivers/media/platform/samsung/s5p-mfc/regs-mfc-v12.h=0D=0A>=20>=20ind= ex=206c68a45082d0..70464f47c1f9=20100644=0D=0A>=20>=20---=20a/drivers/media= /platform/samsung/s5p-mfc/regs-mfc-v12.h=0D=0A>=20>=20+++=20b/drivers/media= /platform/samsung/s5p-mfc/regs-mfc-v12.h=0D=0A>=20>=20=40=40=20-26,6=20+26,= 8=20=40=40=0D=0A>=20>=20=20=23define=20MFC_VERSION_V12=09=09=090xC0=0D=0A>= =20>=20=20=23define=20MFC_NUM_PORTS_V12=09=091=0D=0A>=20>=20=20=23define=20= S5P_FIMV_CODEC_VP9_ENC=09=0927=0D=0A>=20>=20+=23define=20MFC_CHROMA_PAD_BYT= ES_V12=20=20=20=20=20=20=20=20256=0D=0A>=20>=20+=23define=20S5P_FIMV_D_ALIG= N_PLANE_SIZE_V12=20256=0D=0A>=20>=0D=0A>=20>=20=20/*=20Encoder=20buffer=20s= ize=20for=20MFCv12=20*/=0D=0A>=20>=20=20=23define=20ENC_V120_BASE_SIZE(x,= =20y)=20=5C=0D=0A>=20>=20diff=20--git=20a/drivers/media/platform/samsung/s5= p-mfc/regs-mfc-v7.h=0D=0A>=20>=20b/drivers/media/platform/samsung/s5p-mfc/r= egs-mfc-v7.h=0D=0A>=20>=20index=204a7adfdaa359..50f9bf0603c1=20100644=0D=0A= >=20>=20---=20a/drivers/media/platform/samsung/s5p-mfc/regs-mfc-v7.h=0D=0A>= =20>=20+++=20b/drivers/media/platform/samsung/s5p-mfc/regs-mfc-v7.h=0D=0A>= =20>=20=40=40=20-24,6=20+24,7=20=40=40=0D=0A>=20>=0D=0A>=20>=20=20=23define= =20S5P_FIMV_E_ENCODED_SOURCE_FIRST_ADDR_V7=0D=0A>=20=090xfa70=0D=0A>=20>=20= =20=23define=20S5P_FIMV_E_ENCODED_SOURCE_SECOND_ADDR_V7=0D=0A>=20=090xfa74= =0D=0A>=20>=20+=23define=20S5P_FIMV_E_ENCODED_SOURCE_THIRD_ADDR_V7=0D=0A>= =20=090xfa78=0D=0A>=20>=0D=0A>=20>=20=20=23define=20S5P_FIMV_E_VP8_OPTIONS_= V7=09=09=090xfdb0=0D=0A>=20>=20=20=23define=20S5P_FIMV_E_VP8_FILTER_OPTIONS= _V7=09=090xfdb4=0D=0A>=20>=20diff=20--git=20a/drivers/media/platform/samsun= g/s5p-mfc/regs-mfc-v8.h=0D=0A>=20>=20b/drivers/media/platform/samsung/s5p-m= fc/regs-mfc-v8.h=0D=0A>=20>=20index=20162e3c7e920f..0ef9eb2dff22=20100644= =0D=0A>=20>=20---=20a/drivers/media/platform/samsung/s5p-mfc/regs-mfc-v8.h= =0D=0A>=20>=20+++=20b/drivers/media/platform/samsung/s5p-mfc/regs-mfc-v8.h= =0D=0A>=20>=20=40=40=20-17,13=20+17,16=20=40=40=0D=0A>=20>=20=20=23define= =20S5P_FIMV_D_MIN_SCRATCH_BUFFER_SIZE_V8=090xf108=0D=0A>=20>=20=20=23define= =20S5P_FIMV_D_FIRST_PLANE_DPB_SIZE_V8=090xf144=0D=0A>=20>=20=20=23define=20= S5P_FIMV_D_SECOND_PLANE_DPB_SIZE_V8=090xf148=0D=0A>=20>=20+=23define=20S5P_= FIMV_D_THIRD_PLANE_DPB_SIZE_V8=090xf14C=0D=0A>=20>=20=20=23define=20S5P_FIM= V_D_MV_BUFFER_SIZE_V8=09=090xf150=0D=0A>=20>=0D=0A>=20>=20=20=23define=20S5= P_FIMV_D_FIRST_PLANE_DPB_STRIDE_SIZE_V8=090xf138=0D=0A>=20>=20=20=23define= =20S5P_FIMV_D_SECOND_PLANE_DPB_STRIDE_SIZE_V8=0D=0A>=20=090xf13c=0D=0A>=20>= =20+=23define=20S5P_FIMV_D_THIRD_PLANE_DPB_STRIDE_SIZE_V8=0D=0A>=20=090xf14= 0=0D=0A>=20>=0D=0A>=20>=20=20=23define=20S5P_FIMV_D_FIRST_PLANE_DPB_V8=09= =090xf160=0D=0A>=20>=20=20=23define=20S5P_FIMV_D_SECOND_PLANE_DPB_V8=09=090= xf260=0D=0A>=20>=20+=23define=20S5P_FIMV_D_THIRD_PLANE_DPB_V8=09=090xf360= =0D=0A>=20>=20=20=23define=20S5P_FIMV_D_MV_BUFFER_V8=09=09=090xf460=0D=0A>= =20>=0D=0A>=20>=20=20=23define=20S5P_FIMV_D_NUM_MV_V8=09=09=090xf134=0D=0A>= =20>=20diff=20--git=20a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_comm= on.h=0D=0A>=20>=20b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_common.h= =0D=0A>=20>=20index=20dd2e9f7704ab..9a39cccfe002=20100644=0D=0A>=20>=20---= =20a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_common.h=0D=0A>=20>=20+= ++=20b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_common.h=0D=0A>=20>= =20=40=40=20-56,6=20+56,7=20=40=40=0D=0A>=20>=20=20=23define=20MFC_NO_INSTA= NCE_SET=09-1=0D=0A>=20>=20=20=23define=20MFC_ENC_CAP_PLANE_COUNT=091=0D=0A>= =20>=20=20=23define=20MFC_ENC_OUT_PLANE_COUNT=092=0D=0A>=20>=20+=23define= =20VB2_MAX_PLANE_COUNT=093=0D=0A>=20>=20=20=23define=20STUFF_BYTE=09=094=0D= =0A>=20>=20=20=23define=20MFC_MAX_CTRLS=09=09128=0D=0A>=20>=0D=0A>=20>=20= =40=40=20-181,6=20+182,7=20=40=40=20struct=20s5p_mfc_buf=20=7B=0D=0A>=20>= =20=20=09=09struct=20=7B=0D=0A>=20>=20=20=09=09=09size_t=20luma;=0D=0A>=20>= =20=20=09=09=09size_t=20chroma;=0D=0A>=20>=20+=09=09=09size_t=20chroma_1;= =0D=0A>=20>=20=20=09=09=7D=20raw;=0D=0A>=20>=20=20=09=09size_t=20stream;=0D= =0A>=20>=20=20=09=7D=20cookie;=0D=0A>=20>=20=40=40=20-657,6=20+659,7=20=40= =40=20struct=20s5p_mfc_ctx=20=7B=0D=0A>=20>=0D=0A>=20>=20=20=09int=20luma_s= ize;=0D=0A>=20>=20=20=09int=20chroma_size;=0D=0A>=20>=20+=09int=20chroma_si= ze_1;=0D=0A>=20>=20=20=09int=20mv_size;=0D=0A>=20>=0D=0A>=20>=20=20=09unsig= ned=20long=20consumed_stream;=0D=0A>=20>=20=40=40=20-722,6=20+725,7=20=40= =40=20struct=20s5p_mfc_ctx=20=7B=0D=0A>=20>=20=20=09size_t=20scratch_buf_si= ze;=0D=0A>=20>=20=20=09int=20is_10bit;=0D=0A>=20>=20=20=09int=20is_422;=0D= =0A>=20>=20+=09int=20stride=5BVB2_MAX_PLANE_COUNT=5D;=0D=0A>=20>=20=20=7D;= =0D=0A>=20>=0D=0A>=20>=20=20/*=0D=0A>=20>=20diff=20--git=20a/drivers/media/= platform/samsung/s5p-mfc/s5p_mfc_dec.c=0D=0A>=20>=20b/drivers/media/platfor= m/samsung/s5p-mfc/s5p_mfc_dec.c=0D=0A>=20>=20index=20e219cbcd86d5..317f796f= ffa1=20100644=0D=0A>=20>=20---=20a/drivers/media/platform/samsung/s5p-mfc/s= 5p_mfc_dec.c=0D=0A>=20>=20+++=20b/drivers/media/platform/samsung/s5p-mfc/s5= p_mfc_dec.c=0D=0A>=20>=20=40=40=20-56,6=20+56,20=20=40=40=20static=20struct= =20s5p_mfc_fmt=20formats=5B=5D=20=3D=20=7B=0D=0A>=20>=20=20=09=09.num_plane= s=09=3D=202,=0D=0A>=20>=20=20=09=09.versions=09=3D=20MFC_V6PLUS_BITS,=0D=0A= >=20>=20=20=09=7D,=0D=0A>=20>=20+=09=7B=0D=0A>=20>=20+=09=09.fourcc=20=20= =20=20=20=20=20=20=20=3D=20V4L2_PIX_FMT_YUV420M,=0D=0A>=20>=20+=09=09.codec= _mode=20=20=20=20=20=3D=20S5P_MFC_CODEC_NONE,=0D=0A>=20>=20+=09=09.type=20= =20=20=20=20=20=20=20=20=20=20=3D=20MFC_FMT_RAW,=0D=0A>=20>=20+=09=09.num_p= lanes=20=20=20=20=20=3D=203,=0D=0A>=20>=20+=09=09.versions=20=20=20=20=20= =20=20=3D=20MFC_V12_BIT,=0D=0A>=20>=20+=09=7D,=0D=0A>=20>=20+=09=7B=0D=0A>= =20>=20+=09=09.fourcc=20=20=20=20=20=20=20=20=20=3D=20V4L2_PIX_FMT_YVU420M,= =0D=0A>=20>=20+=09=09.codec_mode=20=20=20=20=20=3D=20S5P_MFC_CODEC_NONE,=0D= =0A>=20>=20+=09=09.type=20=20=20=20=20=20=20=20=20=20=20=3D=20MFC_FMT_RAW,= =0D=0A>=20>=20+=09=09.num_planes=20=20=20=20=20=3D=203,=0D=0A>=20>=20+=09= =09.versions=20=20=20=20=20=20=20=3D=20MFC_V12_BIT=0D=0A>=20>=20+=09=7D,=0D= =0A>=20>=20=20=09=7B=0D=0A>=20>=20=20=09=09.fourcc=09=09=3D=20V4L2_PIX_FMT_= H264,=0D=0A>=20>=20=20=09=09.codec_mode=09=3D=20S5P_MFC_CODEC_H264_DEC,=0D= =0A>=20>=20=40=40=20-359,10=20+373,15=20=40=40=20static=20int=20vidioc_g_fm= t(struct=20file=20*file,=20void=20*priv,=0D=0A>=20struct=20v4l2_format=20*f= )=0D=0A>=20>=20=20=09=09/*=20Set=20pixelformat=20to=20the=20format=20in=20w= hich=20MFC=0D=0A>=20>=20=20=09=09=20=20=20outputs=20the=20decoded=20frame= =20*/=0D=0A>=20>=20=20=09=09pix_mp->pixelformat=20=3D=20ctx->dst_fmt->fourc= c;=0D=0A>=20>=20-=09=09pix_mp->plane_fmt=5B0=5D.bytesperline=20=3D=20ctx->b= uf_width;=0D=0A>=20>=20+=09=09pix_mp->plane_fmt=5B0=5D.bytesperline=20=3D= =20ctx->stride=5B0=5D;=0D=0A>=20>=20=20=09=09pix_mp->plane_fmt=5B0=5D.sizei= mage=20=3D=20ctx->luma_size;=0D=0A>=20>=20-=09=09pix_mp->plane_fmt=5B1=5D.b= ytesperline=20=3D=20ctx->buf_width;=0D=0A>=20>=20+=09=09pix_mp->plane_fmt= =5B1=5D.bytesperline=20=3D=20ctx->stride=5B1=5D;=0D=0A>=20>=20=20=09=09pix_= mp->plane_fmt=5B1=5D.sizeimage=20=3D=20ctx->chroma_size;=0D=0A>=20>=20+=09= =09if=20(ctx->dst_fmt->fourcc=20=3D=3D=20V4L2_PIX_FMT_YUV420M=20=7C=7C=0D= =0A>=20>=20+=09=09=09=09ctx->dst_fmt->fourcc=20=3D=3D=0D=0A>=20V4L2_PIX_FMT= _YVU420M)=20=7B=0D=0A>=20>=20+=09=09=09pix_mp->plane_fmt=5B2=5D.bytesperlin= e=20=3D=20ctx->stride=5B2=5D;=0D=0A>=20>=20+=09=09=09pix_mp->plane_fmt=5B2= =5D.sizeimage=20=3D=20ctx-=0D=0A>=20>chroma_size_1;=0D=0A>=20>=20+=09=09=7D= =0D=0A>=20>=20=20=09=7D=20else=20if=20(f->type=20=3D=3D=20V4L2_BUF_TYPE_VID= EO_OUTPUT_MPLANE)=20=7B=0D=0A>=20>=20=20=09=09/*=20This=20is=20run=20on=20O= UTPUT=0D=0A>=20>=20=20=09=09=20=20=20The=20buffer=20contains=20compressed= =20image=20=40=40=20-937,6=20+956,9=0D=0A>=20=40=40=20static=0D=0A>=20>=20i= nt=20s5p_mfc_queue_setup(struct=20vb2_queue=20*vq,=0D=0A>=20>=20=20=09=09= =20=20=20vq->type=20=3D=3D=20V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)=20=7B=0D= =0A>=20>=20=20=09=09/*=20Output=20plane=20count=20is=202=20-=20one=20for=20= Y=20and=20one=20for=20CbCr=20*/=0D=0A>=20>=20=20=09=09*plane_count=20=3D=20= 2;=0D=0A>=20>=20+=09=09if=20(ctx->dst_fmt->fourcc=20=3D=3D=20V4L2_PIX_FMT_Y= UV420M=20=7C=7C=0D=0A>=20>=20+=09=09=09=09ctx->dst_fmt->fourcc=20=3D=3D=0D= =0A>=20V4L2_PIX_FMT_YVU420M)=0D=0A>=20>=20+=09=09=09*plane_count=20=3D=203;= =0D=0A>=20=0D=0A>=20I=20don't=20usually=20interfere,=20this=20is=20your=20d= river=20to=20maintain,=20but=20this=20becomes=0D=0A>=20horribly=20messy.=20= Have=20you=20consider=20de-hardcoding=20a=20little=20and=20encapsulate=20pe= r=0D=0A>=20HW=20format=20details=20into=20a=20C=20structure=20?=20Drivers= =20these=20days=20try=20to=20make=20sure=20of=0D=0A>=20v4l2-=20common=20lib= rary,=20which=20as=20a=20matter=20of=20fact=20knows=20that=20YUV420M=20and= =0D=0A>=20YVU420M=20have=203=20places,=20so=20that=20you=20don't=20have=20t= o=20duplicate=20it=20in=20your=20driver.=0D=0A>=20=0D=0A>=20regards,=0D=0A>= =20Nicolas=0D=0A=0D=0AThanks=20for=20pointing=20out.=0D=0AWe=20could=20have= =20done=20it=20in=20this=20way=20'=20*plane_count=20=3D=20ctx->dst_fmt->num= _planes'=20also.=0D=0AAnyway,=20will=20make=20use=20of=20'=20v4l2-=20common= =20library=20'=20for=20getting=20the=20planes=20count=20here=20in=20next=20= series.=0D=0A=0D=0AThanks=20for=20the=20review.=0D=0A>=20=0D=0A>=20>=20=20= =09=09/*=20Setup=20buffer=20count=20*/=0D=0A>=20>=20=20=09=09if=20(*buf_cou= nt=20<=20ctx->pb_count)=0D=0A>=20>=20=20=09=09=09*buf_count=20=3D=20ctx->pb= _count;=0D=0A>=20>=20=40=40=20-955,12=20+977,17=20=40=40=20static=20int=20s= 5p_mfc_queue_setup(struct=0D=0A>=20vb2_queue=20*vq,=0D=0A>=20>=20=20=09=20= =20=20=20vq->type=20=3D=3D=20V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)=20=7B=0D= =0A>=20>=20=20=09=09psize=5B0=5D=20=3D=20ctx->luma_size;=0D=0A>=20>=20=20= =09=09psize=5B1=5D=20=3D=20ctx->chroma_size;=0D=0A>=20>=20-=0D=0A>=20>=20+= =09=09if=20(ctx->dst_fmt->fourcc=20=3D=3D=20V4L2_PIX_FMT_YUV420M=20=7C=7C= =0D=0A>=20>=20+=09=09=09=09ctx->dst_fmt->fourcc=20=3D=3D=0D=0A>=20V4L2_PIX_= FMT_YVU420M)=0D=0A>=20>=20+=09=09=09psize=5B2=5D=20=3D=20ctx->chroma_size_1= ;=0D=0A>=20>=20=20=09=09if=20(IS_MFCV6_PLUS(dev))=0D=0A>=20>=20=20=09=09=09= alloc_devs=5B0=5D=20=3D=20ctx->dev->mem_dev=5BBANK_L_CTX=5D;=0D=0A>=20>=20= =20=09=09else=0D=0A>=20>=20=20=09=09=09alloc_devs=5B0=5D=20=3D=20ctx->dev->= mem_dev=5BBANK_R_CTX=5D;=0D=0A>=20>=20=20=09=09alloc_devs=5B1=5D=20=3D=20ct= x->dev->mem_dev=5BBANK_L_CTX=5D;=0D=0A>=20>=20+=09=09if=20(ctx->dst_fmt->fo= urcc=20=3D=3D=20V4L2_PIX_FMT_YUV420M=20=7C=7C=0D=0A>=20>=20+=09=09=09=09ctx= ->dst_fmt->fourcc=20=3D=3D=0D=0A>=20V4L2_PIX_FMT_YVU420M)=0D=0A>=20>=20+=09= =09=09alloc_devs=5B2=5D=20=3D=20ctx->dev->mem_dev=5BBANK_L_CTX=5D;=0D=0A>= =20>=20=20=09=7D=20else=20if=20(vq->type=20=3D=3D=20V4L2_BUF_TYPE_VIDEO_OUT= PUT_MPLANE=20&&=0D=0A>=20>=20=20=09=09=20=20=20ctx->state=20=3D=3D=20MFCINS= T_INIT)=20=7B=0D=0A>=20>=20=20=09=09psize=5B0=5D=20=3D=20ctx->dec_src_buf_s= ize;=0D=0A>=20>=20=40=40=20-994,12=20+1021,24=20=40=40=20static=20int=20s5p= _mfc_buf_init(struct=20vb2_buffer=0D=0A>=20*vb)=0D=0A>=20>=20=20=09=09=09mf= c_err(=22Plane=20buffer=20(CAPTURE)=20is=20too=20small=5Cn=22);=0D=0A>=20>= =20=20=09=09=09return=20-EINVAL;=0D=0A>=20>=20=20=09=09=7D=0D=0A>=20>=20+= =09=09if=20(ctx->dst_fmt->fourcc=20=3D=3D=20V4L2_PIX_FMT_YUV420M=20=7C=7C= =0D=0A>=20>=20+=09=09=09=09ctx->dst_fmt->fourcc=20=3D=3D=0D=0A>=20V4L2_PIX_= FMT_YVU420M)=20=7B=0D=0A>=20>=20+=09=09=09if=20(vb2_plane_size(vb,=202)=20<= =20ctx->chroma_size_1)=20=7B=0D=0A>=20>=20+=09=09=09=09mfc_err(=22Plane=20b= uffer=20(CAPTURE)=20is=20too=0D=0A>=20small=5Cn=22);=0D=0A>=20>=20+=09=09= =09=09return=20-EINVAL;=0D=0A>=20>=20+=09=09=09=7D=0D=0A>=20>=20+=09=09=7D= =0D=0A>=20>=20=20=09=09i=20=3D=20vb->index;=0D=0A>=20>=20=20=09=09ctx->dst_= bufs=5Bi=5D.b=20=3D=20vbuf;=0D=0A>=20>=20=20=09=09ctx->dst_bufs=5Bi=5D.cook= ie.raw.luma=20=3D=0D=0A>=20>=0D=0A>=20=09vb2_dma_contig_plane_dma_addr(vb,= =200);=0D=0A>=20>=20=20=09=09ctx->dst_bufs=5Bi=5D.cookie.raw.chroma=20=3D= =0D=0A>=20>=0D=0A>=20=09vb2_dma_contig_plane_dma_addr(vb,=201);=0D=0A>=20>= =20+=09=09if=20(ctx->dst_fmt->fourcc=20=3D=3D=20V4L2_PIX_FMT_YUV420M=20=7C= =7C=0D=0A>=20>=20+=09=09=09=09ctx->dst_fmt->fourcc=20=3D=3D=0D=0A>=20V4L2_P= IX_FMT_YVU420M)=20=7B=0D=0A>=20>=20+=09=09=09ctx->dst_bufs=5Bi=5D.cookie.ra= w.chroma_1=20=3D=0D=0A>=20>=20+=0D=0A>=20=09vb2_dma_contig_plane_dma_addr(v= b,=202);=0D=0A>=20>=20+=09=09=7D=0D=0A>=20>=20=20=09=09ctx->dst_bufs_cnt++;= =0D=0A>=20>=20=20=09=7D=20else=20if=20(vq->type=20=3D=3D=20V4L2_BUF_TYPE_VI= DEO_OUTPUT_MPLANE)=20=7B=0D=0A>=20>=20=20=09=09if=20(IS_ERR_OR_NULL(ERR_PTR= (=0D=0A>=20>=20diff=20--git=20a/drivers/media/platform/samsung/s5p-mfc/s5p_= mfc_enc.c=0D=0A>=20>=20b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_enc= .c=0D=0A>=20>=20index=20e4d6e7c117b5..0eec04eb3ef3=20100644=0D=0A>=20>=20--= -=20a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_enc.c=0D=0A>=20>=20+++= =20b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_enc.c=0D=0A>=20>=20=40= =40=20-59,6=20+59,20=20=40=40=20static=20struct=20s5p_mfc_fmt=20formats=5B= =5D=20=3D=20=7B=0D=0A>=20>=20=20=09=09.num_planes=09=3D=202,=0D=0A>=20>=20= =20=09=09.versions=09=3D=20MFC_V6PLUS_BITS,=0D=0A>=20>=20=20=09=7D,=0D=0A>= =20>=20+=09=7B=0D=0A>=20>=20+=09=09.fourcc=20=20=20=20=20=20=20=20=20=3D=20= V4L2_PIX_FMT_YUV420M,=0D=0A>=20>=20+=09=09.codec_mode=20=20=20=20=20=3D=20S= 5P_MFC_CODEC_NONE,=0D=0A>=20>=20+=09=09.type=20=20=20=20=20=20=20=20=20=20= =20=3D=20MFC_FMT_RAW,=0D=0A>=20>=20+=09=09.num_planes=20=20=20=20=20=3D=203= ,=0D=0A>=20>=20+=09=09.versions=20=20=20=20=20=20=20=3D=20MFC_V12_BIT,=0D= =0A>=20>=20+=09=7D,=0D=0A>=20>=20+=09=7B=0D=0A>=20>=20+=09=09.fourcc=20=20= =20=20=20=20=20=20=20=3D=20V4L2_PIX_FMT_YVU420M,=0D=0A>=20>=20+=09=09.codec= _mode=20=20=20=20=20=3D=20S5P_MFC_CODEC_NONE,=0D=0A>=20>=20+=09=09.type=20= =20=20=20=20=20=20=20=20=20=20=3D=20MFC_FMT_RAW,=0D=0A>=20>=20+=09=09.num_p= lanes=20=20=20=20=20=3D=203,=0D=0A>=20>=20+=09=09.versions=20=20=20=20=20= =20=20=3D=20MFC_V12_BIT,=0D=0A>=20>=20+=09=7D,=0D=0A>=20>=20=20=09=7B=0D=0A= >=20>=20=20=09=09.fourcc=09=09=3D=20V4L2_PIX_FMT_H264,=0D=0A>=20>=20=20=09= =09.codec_mode=09=3D=20S5P_MFC_CODEC_H264_ENC,=0D=0A>=20>=20=40=40=20-1193,= 14=20+1207,20=20=40=40=20static=20int=20enc_pre_frame_start(struct=0D=0A>= =20s5p_mfc_ctx=20*ctx)=0D=0A>=20>=20=20=09struct=20s5p_mfc_dev=20*dev=20=3D= =20ctx->dev;=0D=0A>=20>=20=20=09struct=20s5p_mfc_buf=20*dst_mb;=0D=0A>=20>= =20=20=09struct=20s5p_mfc_buf=20*src_mb;=0D=0A>=20>=20-=09unsigned=20long= =20src_y_addr,=20src_c_addr,=20dst_addr;=0D=0A>=20>=20+=09unsigned=20long= =20src_y_addr,=20src_c_addr,=20src_c_1_addr,=20dst_addr;=0D=0A>=20>=20=20= =09unsigned=20int=20dst_size;=0D=0A>=20>=0D=0A>=20>=20=20=09src_mb=20=3D=20= list_entry(ctx->src_queue.next,=20struct=20s5p_mfc_buf,=20list);=0D=0A>=20>= =20=20=09src_y_addr=20=3D=20vb2_dma_contig_plane_dma_addr(&src_mb->b-=0D=0A= >=20>vb2_buf,=200);=0D=0A>=20>=20=20=09src_c_addr=20=3D=20vb2_dma_contig_pl= ane_dma_addr(&src_mb->b-=0D=0A>=20>vb2_buf,=201);=0D=0A>=20>=20+=09if=20(ct= x->src_fmt->fourcc=20=3D=3D=20V4L2_PIX_FMT_YUV420M=20=7C=7C=0D=0A>=20>=20+= =09=09=09ctx->src_fmt->fourcc=20=3D=3D=20V4L2_PIX_FMT_YVU420M)=0D=0A>=20>= =20+=09=09src_c_1_addr=20=3D=0D=0A>=20>=20+=09=09=09vb2_dma_contig_plane_dm= a_addr(&src_mb->b-=0D=0A>=20>vb2_buf,=202);=0D=0A>=20>=20+=09else=0D=0A>=20= >=20+=09=09src_c_1_addr=20=3D=200;=0D=0A>=20>=20=20=09s5p_mfc_hw_call(dev->= mfc_ops,=20set_enc_frame_buffer,=20ctx,=0D=0A>=20>=20-=09=09=09=09=09=09=09= src_y_addr,=0D=0A>=20src_c_addr);=0D=0A>=20>=20+=09=09=09=09=09src_y_addr,= =20src_c_addr,=0D=0A>=20src_c_1_addr);=0D=0A>=20>=0D=0A>=20>=20=20=09dst_mb= =20=3D=20list_entry(ctx->dst_queue.next,=20struct=20s5p_mfc_buf,=20list);= =0D=0A>=20>=20=20=09dst_addr=20=3D=20vb2_dma_contig_plane_dma_addr(&dst_mb-= >b-=0D=0A>=20>vb2_buf,=200);=20=40=40=0D=0A>=20>=20-1215,8=20+1235,8=20=40= =40=20static=20int=20enc_post_frame_start(struct=20s5p_mfc_ctx=0D=0A>=20>= =20*ctx)=20=20=7B=0D=0A>=20>=20=20=09struct=20s5p_mfc_dev=20*dev=20=3D=20ct= x->dev;=0D=0A>=20>=20=20=09struct=20s5p_mfc_buf=20*mb_entry;=0D=0A>=20>=20-= =09unsigned=20long=20enc_y_addr=20=3D=200,=20enc_c_addr=20=3D=200;=0D=0A>= =20>=20-=09unsigned=20long=20mb_y_addr,=20mb_c_addr;=0D=0A>=20>=20+=09unsig= ned=20long=20enc_y_addr=20=3D=200,=20enc_c_addr=20=3D=200,=20enc_c_1_addr= =20=3D=200;=0D=0A>=20>=20+=09unsigned=20long=20mb_y_addr,=20mb_c_addr,=20mb= _c_1_addr;=0D=0A>=20>=20=20=09int=20slice_type;=0D=0A>=20>=20=20=09unsigned= =20int=20strm_size;=0D=0A>=20>=20=20=09bool=20src_ready;=0D=0A>=20>=20=40= =40=20-1229,14=20+1249,21=20=40=40=20static=20int=20enc_post_frame_start(st= ruct=0D=0A>=20s5p_mfc_ctx=20*ctx)=0D=0A>=20>=20=20=09=09=20=20mfc_read(dev,= =20S5P_FIMV_ENC_SI_PIC_CNT));=0D=0A>=20>=20=20=09if=20(slice_type=20>=3D=20= 0)=20=7B=0D=0A>=20>=20=20=09=09s5p_mfc_hw_call(dev->mfc_ops,=20get_enc_fram= e_buffer,=0D=0A>=20ctx,=0D=0A>=20>=20-=09=09=09=09&enc_y_addr,=20&enc_c_add= r);=0D=0A>=20>=20+=09=09=09=09&enc_y_addr,=20&enc_c_addr,=0D=0A>=20&enc_c_1= _addr);=0D=0A>=20>=20=20=09=09list_for_each_entry(mb_entry,=20&ctx->src_que= ue,=20list)=20=7B=0D=0A>=20>=20=20=09=09=09mb_y_addr=20=3D=20vb2_dma_contig= _plane_dma_addr(=0D=0A>=20>=20=20=09=09=09=09=09&mb_entry->b->vb2_buf,=200)= ;=0D=0A>=20>=20=20=09=09=09mb_c_addr=20=3D=20vb2_dma_contig_plane_dma_addr(= =0D=0A>=20>=20=20=09=09=09=09=09&mb_entry->b->vb2_buf,=201);=0D=0A>=20>=20-= =09=09=09if=20((enc_y_addr=20=3D=3D=20mb_y_addr)=20&&=0D=0A>=20>=20-=09=09= =09=09=09=09(enc_c_addr=20=3D=3D=20mb_c_addr))=0D=0A>=20=7B=0D=0A>=20>=20+= =09=09=09if=20(ctx->src_fmt->fourcc=20=3D=3D=0D=0A>=20V4L2_PIX_FMT_YUV420M= =20=7C=7C=0D=0A>=20>=20+=09=09=09=09ctx->src_fmt->fourcc=20=3D=3D=0D=0A>=20= V4L2_PIX_FMT_YVU420M)=0D=0A>=20>=20+=09=09=09=09mb_c_1_addr=20=3D=0D=0A>=20= vb2_dma_contig_plane_dma_addr=0D=0A>=20>=20+=09=09=09=09=09=09(&mb_entry->b= ->vb2_buf,=0D=0A>=202);=0D=0A>=20>=20+=09=09=09else=0D=0A>=20>=20+=09=09=09= =09mb_c_1_addr=20=3D=200;=0D=0A>=20>=20+=09=09=09if=20((enc_y_addr=20=3D=3D= =20mb_y_addr)=0D=0A>=20>=20+=09=09=09=09=09&&=20(enc_c_addr=20=3D=3D=20mb_c= _addr)=0D=0A>=20>=20+=09=09=09=09=09&&=20(enc_c_1_addr=20=3D=3D=0D=0A>=20mb= _c_1_addr))=20=7B=0D=0A>=20>=20=20=09=09=09=09list_del(&mb_entry->list);=0D= =0A>=20>=20=20=09=09=09=09ctx->src_queue_cnt--;=0D=0A>=20>=20=20=09=09=09= =09vb2_buffer_done(&mb_entry->b->vb2_buf,=0D=0A>=20>=20=40=40=20-1249,8=20+= 1276,15=20=40=40=20static=20int=20enc_post_frame_start(struct=0D=0A>=20s5p_= mfc_ctx=20*ctx)=0D=0A>=20>=20=20=09=09=09=09=09&mb_entry->b->vb2_buf,=200);= =0D=0A>=20>=20=20=09=09=09mb_c_addr=20=3D=20vb2_dma_contig_plane_dma_addr(= =0D=0A>=20>=20=20=09=09=09=09=09&mb_entry->b->vb2_buf,=201);=0D=0A>=20>=20-= =09=09=09if=20((enc_y_addr=20=3D=3D=20mb_y_addr)=20&&=0D=0A>=20>=20-=09=09= =09=09=09=09(enc_c_addr=20=3D=3D=20mb_c_addr))=0D=0A>=20=7B=0D=0A>=20>=20+= =09=09=09if=20(ctx->src_fmt->fourcc=20=3D=3D=0D=0A>=20V4L2_PIX_FMT_YUV420M= =20=7C=7C=0D=0A>=20>=20+=09=09=09=09ctx->src_fmt->fourcc=20=3D=3D=0D=0A>=20= V4L2_PIX_FMT_YVU420M)=0D=0A>=20>=20+=09=09=09=09mb_c_1_addr=20=3D=0D=0A>=20= vb2_dma_contig_plane_dma_addr(=0D=0A>=20>=20+=09=09=09=09=09=09&mb_entry->b= ->vb2_buf,=202);=0D=0A>=20>=20+=09=09=09else=0D=0A>=20>=20+=09=09=09=09mb_c= _1_addr=20=3D=200;=0D=0A>=20>=20+=09=09=09if=20((enc_y_addr=20=3D=3D=20mb_y= _addr)=0D=0A>=20>=20+=09=09=09=09=09&&=20(enc_c_addr=20=3D=3D=20mb_c_addr)= =0D=0A>=20>=20+=09=09=09=09=09&&=20(enc_c_1_addr=20=3D=3D=0D=0A>=20mb_c_1_a= ddr))=20=7B=0D=0A>=20>=20=20=09=09=09=09list_del(&mb_entry->list);=0D=0A>= =20>=20=20=09=09=09=09ctx->ref_queue_cnt--;=0D=0A>=20>=20=20=09=09=09=09vb2= _buffer_done(&mb_entry->b->vb2_buf,=0D=0A>=20>=20=40=40=20-1381,10=20+1415,= 15=20=40=40=20static=20int=20vidioc_g_fmt(struct=20file=20*file,=20void=0D= =0A>=20*priv,=20struct=20v4l2_format=20*f)=0D=0A>=20>=20=20=09=09pix_fmt_mp= ->pixelformat=20=3D=20ctx->src_fmt->fourcc;=0D=0A>=20>=20=20=09=09pix_fmt_m= p->num_planes=20=3D=20ctx->src_fmt->num_planes;=0D=0A>=20>=0D=0A>=20>=20-= =09=09pix_fmt_mp->plane_fmt=5B0=5D.bytesperline=20=3D=20ctx->buf_width;=0D= =0A>=20>=20+=09=09pix_fmt_mp->plane_fmt=5B0=5D.bytesperline=20=3D=20ctx->st= ride=5B0=5D;=0D=0A>=20>=20=20=09=09pix_fmt_mp->plane_fmt=5B0=5D.sizeimage= =20=3D=20ctx->luma_size;=0D=0A>=20>=20-=09=09pix_fmt_mp->plane_fmt=5B1=5D.b= ytesperline=20=3D=20ctx->buf_width;=0D=0A>=20>=20+=09=09pix_fmt_mp->plane_f= mt=5B1=5D.bytesperline=20=3D=20ctx->stride=5B1=5D;=0D=0A>=20>=20=20=09=09pi= x_fmt_mp->plane_fmt=5B1=5D.sizeimage=20=3D=20ctx->chroma_size;=0D=0A>=20>= =20+=09=09if=20(ctx->src_fmt->fourcc=20=3D=3D=20V4L2_PIX_FMT_YUV420M=20=7C= =7C=0D=0A>=20>=20+=09=09=09=09ctx->src_fmt->fourcc=20=3D=3D=0D=0A>=20V4L2_P= IX_FMT_YVU420M)=20=7B=0D=0A>=20>=20+=09=09=09pix_fmt_mp->plane_fmt=5B2=5D.b= ytesperline=20=3D=20ctx-=0D=0A>=20>stride=5B2=5D;=0D=0A>=20>=20+=09=09=09pi= x_fmt_mp->plane_fmt=5B2=5D.sizeimage=20=3D=20ctx-=0D=0A>=20>chroma_size_1;= =0D=0A>=20>=20+=09=09=7D=0D=0A>=20>=20=20=09=7D=20else=20=7B=0D=0A>=20>=20= =20=09=09mfc_err(=22invalid=20buf=20type=5Cn=22);=0D=0A>=20>=20=20=09=09ret= urn=20-EINVAL;=0D=0A>=20>=20=40=40=20-1468,9=20+1507,14=20=40=40=20static= =20int=20vidioc_s_fmt(struct=20file=20*file,=20void=0D=0A>=20>=20*priv,=20s= truct=20v4l2_format=20*f)=0D=0A>=20>=0D=0A>=20>=20=20=09=09s5p_mfc_hw_call(= dev->mfc_ops,=20enc_calc_src_size,=20ctx);=0D=0A>=20>=20=20=09=09pix_fmt_mp= ->plane_fmt=5B0=5D.sizeimage=20=3D=20ctx->luma_size;=0D=0A>=20>=20-=09=09pi= x_fmt_mp->plane_fmt=5B0=5D.bytesperline=20=3D=20ctx->buf_width;=0D=0A>=20>= =20+=09=09pix_fmt_mp->plane_fmt=5B0=5D.bytesperline=20=3D=20ctx->stride=5B0= =5D;=0D=0A>=20>=20=20=09=09pix_fmt_mp->plane_fmt=5B1=5D.sizeimage=20=3D=20c= tx->chroma_size;=0D=0A>=20>=20-=09=09pix_fmt_mp->plane_fmt=5B1=5D.bytesperl= ine=20=3D=20ctx->buf_width;=0D=0A>=20>=20+=09=09pix_fmt_mp->plane_fmt=5B1= =5D.bytesperline=20=3D=20ctx->stride=5B1=5D;=0D=0A>=20>=20+=09=09if=20(ctx-= >src_fmt->fourcc=20=3D=3D=20V4L2_PIX_FMT_YUV420M=20=7C=7C=0D=0A>=20>=20+=09= =09=09=09ctx->src_fmt->fourcc=20=3D=3D=0D=0A>=20V4L2_PIX_FMT_YVU420M)=20=7B= =0D=0A>=20>=20+=09=09=09pix_fmt_mp->plane_fmt=5B2=5D.bytesperline=20=3D=20c= tx-=0D=0A>=20>stride=5B2=5D;=0D=0A>=20>=20+=09=09=09pix_fmt_mp->plane_fmt= =5B2=5D.sizeimage=20=3D=20ctx-=0D=0A>=20>chroma_size_1;=0D=0A>=20>=20+=09= =09=7D=0D=0A>=20>=0D=0A>=20>=20=20=09=09ctx->src_bufs_cnt=20=3D=200;=0D=0A>= =20>=20=20=09=09ctx->output_state=20=3D=20QUEUE_FREE;=0D=0A>=20>=20=40=40= =20-2414,10=20+2458,16=20=40=40=20static=20int=20s5p_mfc_queue_setup(struct= =0D=0A>=20>=20vb2_queue=20*vq,=0D=0A>=20>=0D=0A>=20>=20=20=09=09psize=5B0= =5D=20=3D=20ctx->luma_size;=0D=0A>=20>=20=20=09=09psize=5B1=5D=20=3D=20ctx-= >chroma_size;=0D=0A>=20>=20+=09=09if=20(ctx->src_fmt->fourcc=20=3D=3D=20V4L= 2_PIX_FMT_YUV420M=20=7C=7C=0D=0A>=20>=20+=09=09=09=09ctx->src_fmt->fourcc= =20=3D=3D=0D=0A>=20V4L2_PIX_FMT_YVU420M)=0D=0A>=20>=20+=09=09=09psize=5B2= =5D=20=3D=20ctx->chroma_size_1;=0D=0A>=20>=0D=0A>=20>=20=20=09=09if=20(IS_M= FCV6_PLUS(dev))=20=7B=0D=0A>=20>=20=20=09=09=09alloc_devs=5B0=5D=20=3D=20ct= x->dev->mem_dev=5BBANK_L_CTX=5D;=0D=0A>=20>=20=20=09=09=09alloc_devs=5B1=5D= =20=3D=20ctx->dev->mem_dev=5BBANK_L_CTX=5D;=0D=0A>=20>=20+=09=09=09if=20(ct= x->src_fmt->fourcc=20=3D=3D=0D=0A>=20V4L2_PIX_FMT_YUV420M=20=7C=7C=0D=0A>= =20>=20+=09=09=09=09ctx->src_fmt->fourcc=20=3D=3D=0D=0A>=20V4L2_PIX_FMT_YVU= 420M)=0D=0A>=20>=20+=09=09=09=09alloc_devs=5B2=5D=20=3D=20ctx->dev-=0D=0A>= =20>mem_dev=5BBANK_L_CTX=5D;=0D=0A>=20>=20=20=09=09=7D=20else=20=7B=0D=0A>= =20>=20=20=09=09=09alloc_devs=5B0=5D=20=3D=20ctx->dev->mem_dev=5BBANK_R_CTX= =5D;=0D=0A>=20>=20=20=09=09=09alloc_devs=5B1=5D=20=3D=20ctx->dev->mem_dev= =5BBANK_R_CTX=5D;=0D=0A>=20=40=40=20-2456,6=20+2506,10=0D=0A>=20>=20=40=40= =20static=20int=20s5p_mfc_buf_init(struct=20vb2_buffer=20*vb)=0D=0A>=20>=0D= =0A>=20=09vb2_dma_contig_plane_dma_addr(vb,=200);=0D=0A>=20>=20=20=09=09ctx= ->src_bufs=5Bi=5D.cookie.raw.chroma=20=3D=0D=0A>=20>=0D=0A>=20=09vb2_dma_co= ntig_plane_dma_addr(vb,=201);=0D=0A>=20>=20+=09=09if=20(ctx->src_fmt->fourc= c=20=3D=3D=20V4L2_PIX_FMT_YUV420M=20=7C=7C=0D=0A>=20>=20+=09=09=09=09ctx->s= rc_fmt->fourcc=20=3D=3D=0D=0A>=20V4L2_PIX_FMT_YVU420M)=0D=0A>=20>=20+=09=09= =09ctx->src_bufs=5Bi=5D.cookie.raw.chroma_1=20=3D=0D=0A>=20>=20+=0D=0A>=20= =09vb2_dma_contig_plane_dma_addr(vb,=202);=0D=0A>=20>=20=20=09=09ctx->src_b= ufs_cnt++;=0D=0A>=20>=20=20=09=7D=20else=20=7B=0D=0A>=20>=20=20=09=09mfc_er= r(=22invalid=20queue=20type:=20%d=5Cn=22,=20vq->type);=20=40=40=20-2493,6= =0D=0A>=20+2547,12=0D=0A>=20>=20=40=40=20static=20int=20s5p_mfc_buf_prepare= (struct=20vb2_buffer=20*vb)=0D=0A>=20>=20=20=09=09=09mfc_err(=22plane=20siz= e=20is=20too=20small=20for=20output=5Cn=22);=0D=0A>=20>=20=20=09=09=09retur= n=20-EINVAL;=0D=0A>=20>=20=20=09=09=7D=0D=0A>=20>=20+=09=09if=20((ctx->src_= fmt->fourcc=20=3D=3D=20V4L2_PIX_FMT_YUV420M=20=7C=7C=0D=0A>=20>=20+=09=09= =20=20=20=20=20ctx->src_fmt->fourcc=20=3D=3D=20V4L2_PIX_FMT_YVU420M)=20&&= =0D=0A>=20>=20+=09=09=20=20=20=20(vb2_plane_size(vb,=202)=20<=20ctx->chroma= _size_1))=20=7B=0D=0A>=20>=20+=09=09=09mfc_err(=22plane=20size=20is=20too= =20small=20for=20output=5Cn=22);=0D=0A>=20>=20+=09=09=09return=20-EINVAL;= =0D=0A>=20>=20+=09=09=7D=0D=0A>=20>=20=20=09=7D=20else=20=7B=0D=0A>=20>=20= =20=09=09mfc_err(=22invalid=20queue=20type:=20%d=5Cn=22,=20vq->type);=0D=0A= >=20>=20=20=09=09return=20-EINVAL;=0D=0A>=20>=20diff=20--git=20a/drivers/me= dia/platform/samsung/s5p-mfc/s5p_mfc_opr.h=0D=0A>=20>=20b/drivers/media/pla= tform/samsung/s5p-mfc/s5p_mfc_opr.h=0D=0A>=20>=20index=2087ac56756a16..7c5e= 851c8191=20100644=0D=0A>=20>=20---=20a/drivers/media/platform/samsung/s5p-m= fc/s5p_mfc_opr.h=0D=0A>=20>=20+++=20b/drivers/media/platform/samsung/s5p-mf= c/s5p_mfc_opr.h=0D=0A>=20>=20=40=40=20-293,9=20+293,11=20=40=40=20struct=20= s5p_mfc_hw_ops=20=7B=0D=0A>=20>=20=20=09int=20(*set_enc_stream_buffer)(stru= ct=20s5p_mfc_ctx=20*ctx,=0D=0A>=20>=20=20=09=09=09unsigned=20long=20addr,= =20unsigned=20int=20size);=0D=0A>=20>=20=20=09void=20(*set_enc_frame_buffer= )(struct=20s5p_mfc_ctx=20*ctx,=0D=0A>=20>=20-=09=09=09unsigned=20long=20y_a= ddr,=20unsigned=20long=20c_addr);=0D=0A>=20>=20+=09=09=09unsigned=20long=20= y_addr,=20unsigned=20long=20c_addr,=0D=0A>=20>=20+=09=09=09unsigned=20long= =20c_1_addr);=0D=0A>=20>=20=20=09void=20(*get_enc_frame_buffer)(struct=20s5= p_mfc_ctx=20*ctx,=0D=0A>=20>=20-=09=09=09unsigned=20long=20*y_addr,=20unsig= ned=20long=20*c_addr);=0D=0A>=20>=20+=09=09=09unsigned=20long=20*y_addr,=20= unsigned=20long=20*c_addr,=0D=0A>=20>=20+=09=09=09unsigned=20long=20*c_1_ad= dr);=0D=0A>=20>=20=20=09void=20(*try_run)(struct=20s5p_mfc_dev=20*dev);=0D= =0A>=20>=20=20=09void=20(*clear_int_flags)(struct=20s5p_mfc_dev=20*dev);=0D= =0A>=20>=20=20=09int=20(*get_dspl_y_adr)(struct=20s5p_mfc_dev=20*dev);=20di= ff=20--git=0D=0A>=20>=20a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_op= r_v5.c=0D=0A>=20>=20b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_opr_v5= .c=0D=0A>=20>=20index=2028a06dc343fd..fcfaf125a5a1=20100644=0D=0A>=20>=20--= -=20a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_opr_v5.c=0D=0A>=20>=20= +++=20b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_opr_v5.c=0D=0A>=20>= =20=40=40=20-516,7=20+516,8=20=40=40=20static=20int=0D=0A>=20s5p_mfc_set_en= c_stream_buffer_v5(struct=0D=0A>=20>=20s5p_mfc_ctx=20*ctx,=20=20=7D=0D=0A>= =20>=0D=0A>=20>=20=20static=20void=20s5p_mfc_set_enc_frame_buffer_v5(struct= =20s5p_mfc_ctx=20*ctx,=0D=0A>=20>=20-=09=09unsigned=20long=20y_addr,=20unsi= gned=20long=20c_addr)=0D=0A>=20>=20+=09=09unsigned=20long=20y_addr,=20unsig= ned=20long=20c_addr,=0D=0A>=20>=20+=09=09unsigned=20long=20c_1_addr)=0D=0A>= =20>=20=20=7B=0D=0A>=20>=20=20=09struct=20s5p_mfc_dev=20*dev=20=3D=20ctx->d= ev;=0D=0A>=20>=0D=0A>=20>=20=40=40=20-525,7=20+526,8=20=40=40=20static=20vo= id=0D=0A>=20s5p_mfc_set_enc_frame_buffer_v5(struct=0D=0A>=20>=20s5p_mfc_ctx= =20*ctx,=20=20=7D=0D=0A>=20>=0D=0A>=20>=20=20static=20void=20s5p_mfc_get_en= c_frame_buffer_v5(struct=20s5p_mfc_ctx=20*ctx,=0D=0A>=20>=20-=09=09unsigned= =20long=20*y_addr,=20unsigned=20long=20*c_addr)=0D=0A>=20>=20+=09=09unsigne= d=20long=20*y_addr,=20unsigned=20long=20*c_addr,=0D=0A>=20>=20+=09=09unsign= ed=20long=20*c_1_addr)=0D=0A>=20>=20=20=7B=0D=0A>=20>=20=20=09struct=20s5p_= mfc_dev=20*dev=20=3D=20ctx->dev;=0D=0A>=20>=0D=0A>=20>=20=40=40=20-1210,7= =20+1212,7=20=40=40=20static=20int=20s5p_mfc_run_enc_frame(struct=0D=0A>=20= s5p_mfc_ctx=20*ctx)=0D=0A>=20>=20=20=09if=20(list_empty(&ctx->src_queue))= =20=7B=0D=0A>=20>=20=20=09=09/*=20send=20null=20frame=20*/=0D=0A>=20>=20=20= =09=09s5p_mfc_set_enc_frame_buffer_v5(ctx,=20dev-=0D=0A>=20>dma_base=5BBANK= _R_CTX=5D,=0D=0A>=20>=20-=09=09=09=09=09=09dev-=0D=0A>=20>dma_base=5BBANK_R= _CTX=5D);=0D=0A>=20>=20+=09=09=09=09=09=09dev-=0D=0A>=20>dma_base=5BBANK_R_= CTX=5D,=200);=0D=0A>=20>=20=20=09=09src_mb=20=3D=20NULL;=0D=0A>=20>=20=20= =09=7D=20else=20=7B=0D=0A>=20>=20=20=09=09src_mb=20=3D=20list_entry(ctx->sr= c_queue.next,=20struct=0D=0A>=20s5p_mfc_buf,=20=40=40=0D=0A>=20>=20-1220,7= =20+1222,7=20=40=40=20static=20int=20s5p_mfc_run_enc_frame(struct=20s5p_mfc= _ctx=0D=0A>=20*ctx)=0D=0A>=20>=20=20=09=09=09/*=20send=20null=20frame=20*/= =0D=0A>=20>=20=20=09=09=09s5p_mfc_set_enc_frame_buffer_v5(ctx,=0D=0A>=20>= =20=20=09=09=09=09=09=09dev-=0D=0A>=20>dma_base=5BBANK_R_CTX=5D,=0D=0A>=20>= =20-=09=09=09=09=09=09dev-=0D=0A>=20>dma_base=5BBANK_R_CTX=5D);=0D=0A>=20>= =20+=09=09=09=09=09=09dev-=0D=0A>=20>dma_base=5BBANK_R_CTX=5D,=200);=0D=0A>= =20>=20=20=09=09=09ctx->state=20=3D=20MFCINST_FINISHING;=0D=0A>=20>=20=20= =09=09=7D=20else=20=7B=0D=0A>=20>=20=20=09=09=09src_y_addr=20=3D=20vb2_dma_= contig_plane_dma_addr(=0D=0A>=20=40=40=20-1228,7=20+1230,7=20=40=40=0D=0A>= =20>=20static=20int=20s5p_mfc_run_enc_frame(struct=20s5p_mfc_ctx=20*ctx)=0D= =0A>=20>=20=20=09=09=09src_c_addr=20=3D=20vb2_dma_contig_plane_dma_addr(=0D= =0A>=20>=20=20=09=09=09=09=09&src_mb->b->vb2_buf,=201);=0D=0A>=20>=20=20=09= =09=09s5p_mfc_set_enc_frame_buffer_v5(ctx,=20src_y_addr,=0D=0A>=20>=20-=09= =09=09=09=09=09=09=09src_c_addr);=0D=0A>=20>=20+=09=09=09=09=09=09=09=09src= _c_addr,=0D=0A>=200);=0D=0A>=20>=20=20=09=09=09if=20(src_mb->flags=20&=20MF= C_BUF_FLAG_EOS)=0D=0A>=20>=20=20=09=09=09=09ctx->state=20=3D=20MFCINST_FINI= SHING;=0D=0A>=20>=20=20=09=09=7D=0D=0A>=20>=20diff=20--git=20a/drivers/medi= a/platform/samsung/s5p-mfc/s5p_mfc_opr_v6.c=0D=0A>=20>=20b/drivers/media/pl= atform/samsung/s5p-mfc/s5p_mfc_opr_v6.c=0D=0A>=20>=20index=20fb3f0718821d..= e579c765e902=20100644=0D=0A>=20>=20---=20a/drivers/media/platform/samsung/s= 5p-mfc/s5p_mfc_opr_v6.c=0D=0A>=20>=20+++=20b/drivers/media/platform/samsung= /s5p-mfc/s5p_mfc_opr_v6.c=0D=0A>=20>=20=40=40=20-494,16=20+494,43=20=40=40= =20static=20void=20s5p_mfc_dec_calc_dpb_size_v6(struct=0D=0A>=20s5p_mfc_ctx= =20*ctx)=0D=0A>=20>=20=20=09struct=20s5p_mfc_dev=20*dev=20=3D=20ctx->dev;= =0D=0A>=20>=20=20=09ctx->buf_width=20=3D=20ALIGN(ctx->img_width,=0D=0A>=20S= 5P_FIMV_NV12MT_HALIGN_V6);=0D=0A>=20>=20=20=09ctx->buf_height=20=3D=20ALIGN= (ctx->img_height,=0D=0A>=20S5P_FIMV_NV12MT_VALIGN_V6);=0D=0A>=20>=20+=09ctx= ->chroma_size_1=20=3D=200;=0D=0A>=20>=20=20=09mfc_debug(2,=20=22SEQ=20Done:= =20Movie=20dimensions=20%dx%d,=5Cn=22=0D=0A>=20>=20=20=09=09=09=22buffer=20= dimensions:=20%dx%d=5Cn=22,=20ctx->img_width,=0D=0A>=20>=20=20=09=09=09ctx-= >img_height,=20ctx->buf_width,=20ctx->buf_height);=0D=0A>=20>=0D=0A>=20>=20= -=09ctx->luma_size=20=3D=20calc_plane(ctx->img_width,=20ctx->img_height);= =0D=0A>=20>=20-=09ctx->chroma_size=20=3D=20calc_plane(ctx->img_width,=20(ct= x->img_height=20>>=0D=0A>=201));=0D=0A>=20>=20+=09switch=20(ctx->dst_fmt->f= ourcc)=20=7B=0D=0A>=20>=20+=09case=20V4L2_PIX_FMT_NV12M:=0D=0A>=20>=20+=09c= ase=20V4L2_PIX_FMT_NV21M:=0D=0A>=20>=20+=09=09ctx->stride=5B0=5D=20=3D=20AL= IGN(ctx->img_width,=0D=0A>=20>=20+=09=09=09=09=09S5P_FIMV_NV12MT_HALIGN_V6)= ;=0D=0A>=20>=20+=09=09ctx->stride=5B1=5D=20=3D=20ALIGN(ctx->img_width,=0D= =0A>=20>=20+=09=09=09=09=09S5P_FIMV_NV12MT_HALIGN_V6);=0D=0A>=20>=20+=09=09= ctx->luma_size=20=3D=20calc_plane(ctx->stride=5B0=5D,=20ctx->img_height);= =0D=0A>=20>=20+=09=09ctx->chroma_size=20=3D=20calc_plane(ctx->stride=5B1=5D= ,=0D=0A>=20>=20+=09=09=09=09=09(ctx->img_height=20/=202));=0D=0A>=20>=20+= =09=09break;=0D=0A>=20>=20+=09case=20V4L2_PIX_FMT_YUV420M:=0D=0A>=20>=20+= =09case=20V4L2_PIX_FMT_YVU420M:=0D=0A>=20>=20+=09=09ctx->stride=5B0=5D=20= =3D=20ALIGN(ctx->img_width,=0D=0A>=20>=20+=09=09=09=09=09S5P_FIMV_NV12MT_HA= LIGN_V6);=0D=0A>=20>=20+=09=09ctx->stride=5B1=5D=20=3D=20ALIGN(ctx->img_wid= th=20/=202,=0D=0A>=20>=20+=09=09=09=09=09S5P_FIMV_NV12MT_HALIGN_V6);=0D=0A>= =20>=20+=09=09ctx->stride=5B2=5D=20=3D=20ALIGN(ctx->img_width=20/=202,=0D= =0A>=20>=20+=09=09=09=09=09S5P_FIMV_NV12MT_HALIGN_V6);=0D=0A>=20>=20+=09=09= ctx->luma_size=20=3D=20calc_plane(ctx->stride=5B0=5D,=20ctx->img_height);= =0D=0A>=20>=20+=09=09ctx->chroma_size=20=3D=20calc_plane(ctx->stride=5B1=5D= ,=0D=0A>=20>=20+=09=09=09=09=09(ctx->img_height=20/=202));=0D=0A>=20>=20+= =09=09ctx->chroma_size_1=20=3D=20calc_plane(ctx->stride=5B2=5D,=0D=0A>=20>= =20+=09=09=09=09=09(ctx->img_height=20/=202));=0D=0A>=20>=20+=09=09break;= =0D=0A>=20>=20+=09=7D=0D=0A>=20>=20+=0D=0A>=20>=20=20=09if=20(IS_MFCV8_PLUS= (ctx->dev))=20=7B=0D=0A>=20>=20=20=09=09/*=20MFCv8=20needs=20additional=206= 4=20bytes=20for=20luma,chroma=20dpb*/=0D=0A>=20>=20=20=09=09ctx->luma_size= =20+=3D=20S5P_FIMV_D_ALIGN_PLANE_SIZE_V8;=0D=0A>=20>=20=20=09=09ctx->chroma= _size=20+=3D=20S5P_FIMV_D_ALIGN_PLANE_SIZE_V8;=0D=0A>=20>=20+=09=09ctx->chr= oma_size_1=20+=3D=0D=0A>=20S5P_FIMV_D_ALIGN_PLANE_SIZE_V8;=0D=0A>=20>=20=20= =09=7D=0D=0A>=20>=0D=0A>=20>=20=20=09if=20(ctx->codec_mode=20=3D=3D=20S5P_M= FC_CODEC_H264_DEC=20=7C=7C=20=40=40=20-534,15=0D=0A>=20+561,53=0D=0A>=20>= =20=40=40=20static=20void=20s5p_mfc_enc_calc_src_size_v6(struct=20s5p_mfc_c= tx=20*ctx)=0D=0A>=20>=20=20=09mb_width=20=3D=20MB_WIDTH(ctx->img_width);=0D= =0A>=20>=20=20=09mb_height=20=3D=20MB_HEIGHT(ctx->img_height);=0D=0A>=20>= =0D=0A>=20>=20-=09ctx->buf_width=20=3D=20ALIGN(ctx->img_width,=0D=0A>=20S5P= _FIMV_NV12M_HALIGN_V6);=0D=0A>=20>=20-=09ctx->luma_size=20=3D=20ALIGN((mb_w= idth=20*=20mb_height)=20*=20256,=20256);=0D=0A>=20>=20-=09ctx->chroma_size= =20=3D=20ALIGN((mb_width=20*=20mb_height)=20*=20128,=20256);=0D=0A>=20>=20-= =0D=0A>=20>=20-=09/*=20MFCv7=20needs=20pad=20bytes=20for=20Luma=20and=20Chr= oma=20*/=0D=0A>=20>=20-=09if=20(IS_MFCV7_PLUS(ctx->dev))=20=7B=0D=0A>=20>= =20+=09if=20(IS_MFCV12(ctx->dev))=20=7B=0D=0A>=20>=20+=09=09switch=20(ctx->= src_fmt->fourcc)=20=7B=0D=0A>=20>=20+=09=09case=20V4L2_PIX_FMT_NV12M:=0D=0A= >=20>=20+=09=09case=20V4L2_PIX_FMT_NV21M:=0D=0A>=20>=20+=09=09=09ctx->strid= e=5B0=5D=20=3D=20ALIGN(ctx->img_width,=0D=0A>=20>=20+=0D=0A>=20=09S5P_FIMV_= NV12M_HALIGN_V6);=0D=0A>=20>=20+=09=09=09ctx->stride=5B1=5D=20=3D=20ALIGN(c= tx->img_width,=0D=0A>=20>=20+=0D=0A>=20=09S5P_FIMV_NV12M_HALIGN_V6);=0D=0A>= =20>=20+=09=09=09ctx->luma_size=20=3D=20ctx->stride=5B0=5D=20*=0D=0A>=20>= =20+=09=09=09=09=09=09ALIGN(ctx->img_height,=2016);=0D=0A>=20>=20+=09=09=09= ctx->chroma_size=20=3D=20=20ctx->stride=5B0=5D=20*=0D=0A>=20>=20+=09=09=09= =09=09=09ALIGN(ctx->img_height=20/=202,=0D=0A>=2016);=0D=0A>=20>=20+=09=09= =09break;=0D=0A>=20>=20+=09=09case=20V4L2_PIX_FMT_YUV420M:=0D=0A>=20>=20+= =09=09case=20V4L2_PIX_FMT_YVU420M:=0D=0A>=20>=20+=09=09=09ctx->stride=5B0= =5D=20=3D=20ALIGN(ctx->img_width,=0D=0A>=20>=20+=0D=0A>=20=09S5P_FIMV_NV12M= _HALIGN_V6);=0D=0A>=20>=20+=09=09=09ctx->stride=5B1=5D=20=3D=20ALIGN(ctx->i= mg_width=20/=202,=0D=0A>=20>=20+=0D=0A>=20=09S5P_FIMV_NV12M_HALIGN_V6);=0D= =0A>=20>=20+=09=09=09ctx->stride=5B2=5D=20=3D=20ALIGN(ctx->img_width=20/=20= 2,=0D=0A>=20>=20+=0D=0A>=20=09S5P_FIMV_NV12M_HALIGN_V6);=0D=0A>=20>=20+=09= =09=09ctx->luma_size=20=3D=20ctx->stride=5B0=5D=20*=0D=0A>=20>=20+=09=09=09= =09=09=09ALIGN(ctx->img_height,=2016);=0D=0A>=20>=20+=09=09=09ctx->chroma_s= ize=20=3D=20=20ctx->stride=5B1=5D=20*=0D=0A>=20>=20+=09=09=09=09=09=09ALIGN= (ctx->img_height=20/=202,=0D=0A>=2016);=0D=0A>=20>=20+=09=09=09ctx->chroma_= size_1=20=3D=20=20ctx->stride=5B2=5D=20*=0D=0A>=20>=20+=09=09=09=09=09=09AL= IGN(ctx->img_height=20/=202,=0D=0A>=2016);=0D=0A>=20>=20+=09=09=09break;=0D= =0A>=20>=20+=09=09=7D=0D=0A>=20>=20=20=09=09ctx->luma_size=20+=3D=20MFC_LUM= A_PAD_BYTES_V7;=0D=0A>=20>=20-=09=09ctx->chroma_size=20+=3D=20MFC_CHROMA_PA= D_BYTES_V7;=0D=0A>=20>=20+=09=09ctx->chroma_size=20+=3D=20MFC_CHROMA_PAD_BY= TES_V12;=0D=0A>=20>=20+=09=09ctx->chroma_size_1=20+=3D=20MFC_CHROMA_PAD_BYT= ES_V12;=0D=0A>=20>=20+=09=7D=20else=20=7B=0D=0A>=20>=20+=09=09ctx->buf_widt= h=20=3D=20ALIGN(ctx->img_width,=0D=0A>=20>=20+=09=09=09=09=09S5P_FIMV_NV12M= _HALIGN_V6);=0D=0A>=20>=20+=09=09ctx->stride=5B0=5D=20=3D=20ctx->buf_width;= =0D=0A>=20>=20+=09=09ctx->stride=5B1=5D=20=3D=20ctx->buf_width;=0D=0A>=20>= =20+=09=09ctx->luma_size=20=3D=20ALIGN((mb_width=20*=20mb_height)=20*=20256= ,=0D=0A>=20256);=0D=0A>=20>=20+=09=09ctx->chroma_size=20=3D=20ALIGN((mb_wid= th=20*=20mb_height)=20*=20128,=0D=0A>=20256);=0D=0A>=20>=20+=09=09ctx->chro= ma_size_1=20=3D=200;=0D=0A>=20>=20+=09=09/*=20MFCv7=20needs=20pad=20bytes= =20for=20Luma=20and=20Chroma=20*/=0D=0A>=20>=20+=09=09if=20(IS_MFCV7_PLUS(c= tx->dev))=20=7B=0D=0A>=20>=20+=09=09=09ctx->luma_size=20+=3D=20MFC_LUMA_PAD= _BYTES_V7;=0D=0A>=20>=20+=09=09=09ctx->chroma_size=20+=3D=20MFC_LUMA_PAD_BY= TES_V7;=0D=0A>=20>=20+=09=09=7D=0D=0A>=20>=20=20=09=7D=0D=0A>=20>=20+=0D=0A= >=20>=20=20=7D=0D=0A>=20>=0D=0A>=20>=20=20/*=20Set=20registers=20for=20deco= ding=20stream=20buffer=20*/=20=40=40=20-588,15=20+653,21=20=40=40=0D=0A>=20= >=20static=20int=20s5p_mfc_set_dec_frame_buffer_v6(struct=20s5p_mfc_ctx=20*= ctx)=0D=0A>=20>=20=20=09writel(ctx->total_dpb_count,=20mfc_regs->d_num_dpb)= ;=0D=0A>=20>=20=20=09writel(ctx->luma_size,=20mfc_regs->d_first_plane_dpb_s= ize);=0D=0A>=20>=20=20=09writel(ctx->chroma_size,=20mfc_regs->d_second_plan= e_dpb_size);=0D=0A>=20>=20-=0D=0A>=20>=20+=09if=20(ctx->dst_fmt->fourcc=20= =3D=3D=20V4L2_PIX_FMT_YUV420M=20=7C=7C=0D=0A>=20>=20+=09=09=09ctx->dst_fmt-= >fourcc=20=3D=3D=20V4L2_PIX_FMT_YVU420M)=0D=0A>=20>=20+=09=09writel(ctx->ch= roma_size_1,=20mfc_regs-=0D=0A>=20>d_third_plane_dpb_size);=0D=0A>=20>=20= =20=09writel(buf_addr1,=20mfc_regs->d_scratch_buffer_addr);=0D=0A>=20>=20= =20=09writel(ctx->scratch_buf_size,=20mfc_regs->d_scratch_buffer_size);=0D= =0A>=20>=0D=0A>=20>=20=20=09if=20(IS_MFCV8_PLUS(dev))=20=7B=0D=0A>=20>=20-= =09=09writel(ctx->img_width,=0D=0A>=20>=20+=09=09writel(ctx->stride=5B0=5D,= =0D=0A>=20>=20=20=09=09=09mfc_regs->d_first_plane_dpb_stride_size);=0D=0A>= =20>=20-=09=09writel(ctx->img_width,=0D=0A>=20>=20+=09=09writel(ctx->stride= =5B1=5D,=0D=0A>=20>=20=20=09=09=09mfc_regs->d_second_plane_dpb_stride_size)= ;=0D=0A>=20>=20+=09=09if=20(ctx->dst_fmt->fourcc=20=3D=3D=20V4L2_PIX_FMT_YU= V420M=20=7C=7C=0D=0A>=20>=20+=09=09=09=09ctx->dst_fmt->fourcc=20=3D=3D=0D= =0A>=20V4L2_PIX_FMT_YVU420M)=0D=0A>=20>=20+=09=09=09writel(ctx->stride=5B2= =5D,=0D=0A>=20>=20+=09=09=09=09mfc_regs->d_third_plane_dpb_stride_size);=0D= =0A>=20>=20=20=09=7D=0D=0A>=20>=0D=0A>=20>=20=20=09buf_addr1=20+=3D=20ctx->= scratch_buf_size;=0D=0A>=20>=20=40=40=20-625,6=20+696,13=20=40=40=20static= =20int=0D=0A>=20s5p_mfc_set_dec_frame_buffer_v6(struct=20s5p_mfc_ctx=20*ctx= )=0D=0A>=20>=20=20=09=09=09=09=09ctx->dst_bufs=5Bi=5D.cookie.raw.chroma);= =0D=0A>=20>=20=20=09=09writel(ctx->dst_bufs=5Bi=5D.cookie.raw.chroma,=0D=0A= >=20>=20=20=09=09=09=09mfc_regs->d_second_plane_dpb=20+=20i=20*=204);=0D=0A= >=20>=20+=09=09if=20(ctx->dst_fmt->fourcc=20=3D=3D=20V4L2_PIX_FMT_YUV420M= =20=7C=7C=0D=0A>=20>=20+=09=09=09=09ctx->dst_fmt->fourcc=20=3D=3D=0D=0A>=20= V4L2_PIX_FMT_YVU420M)=20=7B=0D=0A>=20>=20+=09=09=09mfc_debug(2,=20=22=5CtCh= roma_1=20%d:=20%zx=5Cn=22,=20i,=0D=0A>=20>=20+=09=09=09=09=09ctx-=0D=0A>=20= >dst_bufs=5Bi=5D.cookie.raw.chroma_1);=0D=0A>=20>=20+=09=09=09writel(ctx->d= st_bufs=5Bi=5D.cookie.raw.chroma_1,=0D=0A>=20>=20+=09=09=09=09=09mfc_regs->= d_third_plane_dpb=20+=20i=20*=0D=0A>=204);=0D=0A>=20>=20+=09=09=7D=0D=0A>= =20>=20=20=09=7D=0D=0A>=20>=20=20=09if=20(ctx->codec_mode=20=3D=3D=20S5P_MF= C_CODEC_H264_DEC=20=7C=7C=0D=0A>=20>=20=20=09=09=09ctx->codec_mode=20=3D=3D= =0D=0A>=20S5P_MFC_CODEC_H264_MVC_DEC=20=7C=7C=20=40=40=20-683,20=0D=0A>=20>= =20+761,24=20=40=40=20static=20int=20s5p_mfc_set_enc_stream_buffer_v6(struc= t=0D=0A>=20>=20s5p_mfc_ctx=20*ctx,=20=20=7D=0D=0A>=20>=0D=0A>=20>=20=20stat= ic=20void=20s5p_mfc_set_enc_frame_buffer_v6(struct=20s5p_mfc_ctx=20*ctx,=0D= =0A>=20>=20-=09=09unsigned=20long=20y_addr,=20unsigned=20long=20c_addr)=0D= =0A>=20>=20+=09=09unsigned=20long=20y_addr,=20unsigned=20long=20c_addr,=0D= =0A>=20>=20+=09=09unsigned=20long=20c_1_addr)=0D=0A>=20>=20=20=7B=0D=0A>=20= >=20=20=09struct=20s5p_mfc_dev=20*dev=20=3D=20ctx->dev;=0D=0A>=20>=20=20=09= const=20struct=20s5p_mfc_regs=20*mfc_regs=20=3D=20dev->mfc_regs;=0D=0A>=20>= =0D=0A>=20>=20=20=09writel(y_addr,=20mfc_regs->e_source_first_plane_addr);= =0D=0A>=20>=20=20=09writel(c_addr,=20mfc_regs->e_source_second_plane_addr);= =0D=0A>=20>=20+=09writel(c_1_addr,=20mfc_regs->e_source_third_plane_addr);= =0D=0A>=20>=0D=0A>=20>=20=20=09mfc_debug(2,=20=22enc=20src=20y=20buf=20addr= :=200x%08lx=5Cn=22,=20y_addr);=0D=0A>=20>=20=20=09mfc_debug(2,=20=22enc=20s= rc=20c=20buf=20addr:=200x%08lx=5Cn=22,=20c_addr);=0D=0A>=20>=20+=09mfc_debu= g(2,=20=22enc=20src=20cr=20buf=20addr:=200x%08lx=5Cn=22,=20c_1_addr);=0D=0A= >=20>=20=20=7D=0D=0A>=20>=0D=0A>=20>=20=20static=20void=20s5p_mfc_get_enc_f= rame_buffer_v6(struct=20s5p_mfc_ctx=20*ctx,=0D=0A>=20>=20-=09=09unsigned=20= long=20*y_addr,=20unsigned=20long=20*c_addr)=0D=0A>=20>=20+=09=09unsigned= =20long=20*y_addr,=20unsigned=20long=20*c_addr,=0D=0A>=20>=20+=09=09unsigne= d=20long=20*c_1_addr)=0D=0A>=20>=20=20=7B=0D=0A>=20>=20=20=09struct=20s5p_m= fc_dev=20*dev=20=3D=20ctx->dev;=0D=0A>=20>=20=20=09const=20struct=20s5p_mfc= _regs=20*mfc_regs=20=3D=20dev->mfc_regs;=20=40=40=20-704,12=0D=0A>=20>=20+7= 86,17=20=40=40=20static=20void=20s5p_mfc_get_enc_frame_buffer_v6(struct=0D= =0A>=20>=20s5p_mfc_ctx=20*ctx,=0D=0A>=20>=0D=0A>=20>=20=20=09*y_addr=20=3D= =20readl(mfc_regs->e_encoded_source_first_plane_addr);=0D=0A>=20>=20=20=09*= c_addr=20=3D=20readl(mfc_regs-=0D=0A>=20>e_encoded_source_second_plane_addr= );=0D=0A>=20>=20+=09if=20(ctx->src_fmt->fourcc=20=3D=3D=20V4L2_PIX_FMT_YUV4= 20M=20=7C=7C=0D=0A>=20>=20+=09=09=09ctx->src_fmt->fourcc=20=3D=3D=20V4L2_PI= X_FMT_YVU420M)=0D=0A>=20>=20+=09=09*c_1_addr=20=3D=20readl(mfc_regs-=0D=0A>= =20>e_encoded_source_third_plane_addr);=0D=0A>=20>=20+=09else=0D=0A>=20>=20= +=09=09*c_1_addr=20=3D=200;=0D=0A>=20>=0D=0A>=20>=20=20=09enc_recon_y_addr= =20=3D=20readl(mfc_regs->e_recon_luma_dpb_addr);=0D=0A>=20>=20=20=09enc_rec= on_c_addr=20=3D=20readl(mfc_regs->e_recon_chroma_dpb_addr);=0D=0A>=20>=0D= =0A>=20>=20=20=09mfc_debug(2,=20=22recon=20y=20addr:=200x%08lx=20y_addr:=20= 0x%08lx=5Cn=22,=0D=0A>=20enc_recon_y_addr,=20*y_addr);=0D=0A>=20>=20-=09mfc= _debug(2,=20=22recon=20c=20addr:=200x%08lx=5Cn=22,=20enc_recon_c_addr);=0D= =0A>=20>=20+=09mfc_debug(2,=20=22recon=20c=20addr:=200x%08lx=20c_addr:=200x= %08lx=5Cn=22,=0D=0A>=20>=20+enc_recon_c_addr,=20*c_addr);=0D=0A>=20>=20=20= =7D=0D=0A>=20>=0D=0A>=20>=20=20/*=20Set=20encoding=20ref=20&=20codec=20buff= er=20*/=20=40=40=20-886,6=20+973,20=20=40=40=20static=20int=0D=0A>=20>=20s5= p_mfc_set_enc_params(struct=20s5p_mfc_ctx=20*ctx)=0D=0A>=20>=20=20=09=09wri= tel(reg,=20mfc_regs->e_enc_options);=0D=0A>=20>=20=20=09=09/*=200:=20NV12(C= bCr),=201:=20NV21(CrCb)=20*/=0D=0A>=20>=20=20=09=09writel(0x0,=20mfc_regs->= pixel_format);=0D=0A>=20>=20+=09=7D=20else=20if=20(ctx->src_fmt->fourcc=20= =3D=3D=20V4L2_PIX_FMT_YVU420M)=20=7B=0D=0A>=20>=20+=09=09/*=200:=20Linear,= =201:=202D=20tiled*/=0D=0A>=20>=20+=09=09reg=20=3D=20readl(mfc_regs->e_enc_= options);=0D=0A>=20>=20+=09=09reg=20&=3D=20=7E(0x1=20<<=207);=0D=0A>=20>=20= +=09=09writel(reg,=20mfc_regs->e_enc_options);=0D=0A>=20>=20+=09=09/*=202:= =20YV12(CrCb),=203:=20I420(CrCb)=20*/=0D=0A>=20>=20+=09=09writel(0x2,=20mfc= _regs->pixel_format);=0D=0A>=20>=20+=09=7D=20else=20if=20(ctx->src_fmt->fou= rcc=20=3D=3D=20V4L2_PIX_FMT_YUV420M)=20=7B=0D=0A>=20>=20+=09=09/*=200:=20Li= near,=201:=202D=20tiled*/=0D=0A>=20>=20+=09=09reg=20=3D=20readl(mfc_regs->e= _enc_options);=0D=0A>=20>=20+=09=09reg=20&=3D=20=7E(0x1=20<<=207);=0D=0A>= =20>=20+=09=09writel(reg,=20mfc_regs->e_enc_options);=0D=0A>=20>=20+=09=09/= *=202:=20YV12(CrCb),=203:=20I420(CrCb)=20*/=0D=0A>=20>=20+=09=09writel(0x3,= =20mfc_regs->pixel_format);=0D=0A>=20>=20=20=09=7D=0D=0A>=20>=0D=0A>=20>=20= =20=09/*=20memory=20structure=20recon.=20frame=20*/=0D=0A>=20>=20=40=40=20-= 1696,8=20+1797,12=20=40=40=20static=20int=20s5p_mfc_init_decode_v6(struct= =0D=0A>=20s5p_mfc_ctx=20*ctx)=0D=0A>=20>=20=20=09else=0D=0A>=20>=20=20=09= =09writel(reg,=20mfc_regs->d_dec_options);=0D=0A>=20>=0D=0A>=20>=20-=09/*= =200:=20NV12(CbCr),=201:=20NV21(CrCb)=20*/=0D=0A>=20>=20-=09if=20(ctx->dst_= fmt->fourcc=20=3D=3D=20V4L2_PIX_FMT_NV21M)=0D=0A>=20>=20+=09/*=200:=20NV12(= CbCr),=201:=20NV21(CrCb),=202:=20YV12(CrCb),=203:=20I420(CbCr)=20*/=0D=0A>= =20>=20+=09if=20(ctx->dst_fmt->fourcc=20=3D=3D=20V4L2_PIX_FMT_YUV420M)=0D= =0A>=20>=20+=09=09writel(0x3,=20mfc_regs->pixel_format);=0D=0A>=20>=20+=09e= lse=20if=20(ctx->dst_fmt->fourcc=20=3D=3D=20V4L2_PIX_FMT_YVU420M)=0D=0A>=20= >=20+=09=09writel(0x2,=20mfc_regs->pixel_format);=0D=0A>=20>=20+=09else=20i= f=20(ctx->dst_fmt->fourcc=20=3D=3D=20V4L2_PIX_FMT_NV21M)=0D=0A>=20>=20=20= =09=09writel(0x1,=20mfc_regs->pixel_format);=0D=0A>=20>=20=20=09else=0D=0A>= =20>=20=20=09=09writel(0x0,=20mfc_regs->pixel_format);=20=40=40=20-1781,8= =20+1886,12=0D=0A>=20=40=40=20static=0D=0A>=20>=20int=20s5p_mfc_init_encode= _v6(struct=20s5p_mfc_ctx=20*ctx)=0D=0A>=20>=0D=0A>=20>=20=20=09/*=20Set=20s= tride=20lengths=20for=20v7=20&=20above=20*/=0D=0A>=20>=20=20=09if=20(IS_MFC= V7_PLUS(dev))=20=7B=0D=0A>=20>=20-=09=09writel(ctx->img_width,=20mfc_regs-= =0D=0A>=20>e_source_first_plane_stride);=0D=0A>=20>=20-=09=09writel(ctx->im= g_width,=20mfc_regs-=0D=0A>=20>e_source_second_plane_stride);=0D=0A>=20>=20= +=09=09writel(ctx->stride=5B0=5D,=20mfc_regs-=0D=0A>=20>e_source_first_plan= e_stride);=0D=0A>=20>=20+=09=09writel(ctx->stride=5B1=5D,=20mfc_regs-=0D=0A= >=20>e_source_second_plane_stride);=0D=0A>=20>=20+=09=09if=20(ctx->src_fmt-= >fourcc=20=3D=3D=20V4L2_PIX_FMT_YUV420M=20=7C=7C=0D=0A>=20>=20+=09=09=09=09= ctx->src_fmt->fourcc=20=3D=3D=0D=0A>=20V4L2_PIX_FMT_YVU420M)=0D=0A>=20>=20+= =09=09=09writel(ctx->stride=5B2=5D,=0D=0A>=20>=20+=09=09=09=09=09mfc_regs-= =0D=0A>=20>e_source_third_plane_stride);=0D=0A>=20>=20=20=09=7D=0D=0A>=20>= =0D=0A>=20>=20=20=09writel(ctx->inst_no,=20mfc_regs->instance_id);=20=40=40= =20-1891,7=20+2000,7=0D=0A>=20=40=40=0D=0A>=20>=20static=20inline=20int=20s= 5p_mfc_run_enc_frame(struct=20s5p_mfc_ctx=20*ctx)=0D=0A>=20>=20=20=09struct= =20s5p_mfc_dev=20*dev=20=3D=20ctx->dev;=0D=0A>=20>=20=20=09struct=20s5p_mfc= _buf=20*dst_mb;=0D=0A>=20>=20=20=09struct=20s5p_mfc_buf=20*src_mb;=0D=0A>= =20>=20-=09unsigned=20long=20src_y_addr,=20src_c_addr,=20dst_addr;=0D=0A>= =20>=20+=09unsigned=20long=20src_y_addr,=20src_c_addr,=20src_c_1_addr,=20ds= t_addr;=0D=0A>=20>=20=20=09/*=0D=0A>=20>=20=20=09unsigned=20int=20src_y_siz= e,=20src_c_size;=0D=0A>=20>=20=20=09*/=0D=0A>=20>=20=40=40=20-1909,22=20+20= 18,29=20=40=40=20static=20inline=20int=20s5p_mfc_run_enc_frame(struct=0D=0A= >=20>=20s5p_mfc_ctx=20*ctx)=0D=0A>=20>=0D=0A>=20>=20=20=09if=20(list_empty(= &ctx->src_queue))=20=7B=0D=0A>=20>=20=20=09=09/*=20send=20null=20frame=20*/= =0D=0A>=20>=20-=09=09s5p_mfc_set_enc_frame_buffer_v6(ctx,=200,=200);=0D=0A>= =20>=20+=09=09s5p_mfc_set_enc_frame_buffer_v6(ctx,=200,=200,=200);=0D=0A>= =20>=20=20=09=09src_mb=20=3D=20NULL;=0D=0A>=20>=20=20=09=7D=20else=20=7B=0D= =0A>=20>=20=20=09=09src_mb=20=3D=20list_entry(ctx->src_queue.next,=20struct= =0D=0A>=20s5p_mfc_buf,=20list);=0D=0A>=20>=20=20=09=09src_mb->flags=20=7C= =3D=20MFC_BUF_FLAG_USED;=0D=0A>=20>=20=20=09=09if=20(src_mb->b->vb2_buf.pla= nes=5B0=5D.bytesused=20=3D=3D=200)=20=7B=0D=0A>=20>=20-=09=09=09s5p_mfc_set= _enc_frame_buffer_v6(ctx,=200,=200);=0D=0A>=20>=20+=09=09=09s5p_mfc_set_enc= _frame_buffer_v6(ctx,=200,=200,=200);=0D=0A>=20>=20=20=09=09=09ctx->state= =20=3D=20MFCINST_FINISHING;=0D=0A>=20>=20=20=09=09=7D=20else=20=7B=0D=0A>= =20>=20=20=09=09=09src_y_addr=20=3D=0D=0A>=20vb2_dma_contig_plane_dma_addr(= &src_mb->b->vb2_buf,=200);=0D=0A>=20>=20=20=09=09=09src_c_addr=20=3D=0D=0A>= =20vb2_dma_contig_plane_dma_addr(&src_mb->b->vb2_buf,=0D=0A>=20>=201);=0D= =0A>=20>=20+=09=09=09if=20(ctx->src_fmt->fourcc=20=3D=3D=0D=0A>=20V4L2_PIX_= FMT_YUV420M=20=7C=7C=0D=0A>=20>=20+=09=09=09=09ctx->src_fmt->fourcc=20=3D= =3D=0D=0A>=20V4L2_PIX_FMT_YVU420M)=0D=0A>=20>=20+=09=09=09=09src_c_1_addr= =20=3D=0D=0A>=20vb2_dma_contig_plane_dma_addr=0D=0A>=20>=20+=09=09=09=09=09= =09(&src_mb->b->vb2_buf,=202);=0D=0A>=20>=20+=09=09=09else=0D=0A>=20>=20+= =09=09=09=09src_c_1_addr=20=3D=200;=0D=0A>=20>=0D=0A>=20>=20=20=09=09=09mfc= _debug(2,=20=22enc=20src=20y=20addr:=200x%08lx=5Cn=22,=0D=0A>=20src_y_addr)= ;=0D=0A>=20>=20=20=09=09=09mfc_debug(2,=20=22enc=20src=20c=20addr:=200x%08l= x=5Cn=22,=0D=0A>=20src_c_addr);=0D=0A>=20>=0D=0A>=20>=20-=09=09=09s5p_mfc_s= et_enc_frame_buffer_v6(ctx,=20src_y_addr,=0D=0A>=20src_c_addr);=0D=0A>=20>= =20+=09=09=09s5p_mfc_set_enc_frame_buffer_v6(ctx,=20src_y_addr,=0D=0A>=20>= =20+=09=09=09=09=09=09src_c_addr,=20src_c_1_addr);=0D=0A>=20>=20=20=09=09= =09if=20(src_mb->flags=20&=20MFC_BUF_FLAG_EOS)=0D=0A>=20>=20=20=09=09=09=09= ctx->state=20=3D=20MFCINST_FINISHING;=0D=0A>=20>=20=20=09=09=7D=0D=0A>=20>= =20=40=40=20-2450,6=20+2566,8=20=40=40=20const=20struct=20s5p_mfc_regs=0D= =0A>=20*s5p_mfc_init_regs_v6_plus(struct=20s5p_mfc_dev=20*dev)=0D=0A>=20>= =20=20=09=09=09S5P_FIMV_E_ENCODED_SOURCE_FIRST_ADDR_V7);=0D=0A>=20>=20=20= =09R(e_encoded_source_second_plane_addr,=0D=0A>=20>=0D=0A>=20=09S5P_FIMV_E_= ENCODED_SOURCE_SECOND_ADDR_V7);=0D=0A>=20>=20+=09R(e_encoded_source_third_p= lane_addr,=0D=0A>=20>=20+=09=09=09S5P_FIMV_E_ENCODED_SOURCE_THIRD_ADDR_V7);= =0D=0A>=20>=20=20=09R(e_vp8_options,=20S5P_FIMV_E_VP8_OPTIONS_V7);=0D=0A>= =20>=0D=0A>=20>=20=20=09if=20(=21IS_MFCV8_PLUS(dev))=0D=0A>=20>=20=40=40=20= -2464,16=20+2582,20=20=40=40=20const=20struct=20s5p_mfc_regs=0D=0A>=20*s5p_= mfc_init_regs_v6_plus(struct=20s5p_mfc_dev=20*dev)=0D=0A>=20>=20=20=09R(d_c= pb_buffer_offset,=20S5P_FIMV_D_CPB_BUFFER_OFFSET_V8);=0D=0A>=20>=20=20=09R(= d_first_plane_dpb_size,=0D=0A>=20S5P_FIMV_D_FIRST_PLANE_DPB_SIZE_V8);=0D=0A= >=20>=20=20=09R(d_second_plane_dpb_size,=0D=0A>=20S5P_FIMV_D_SECOND_PLANE_D= PB_SIZE_V8);=0D=0A>=20>=20+=09R(d_third_plane_dpb_size,=0D=0A>=20S5P_FIMV_D= _THIRD_PLANE_DPB_SIZE_V8);=0D=0A>=20>=20=20=09R(d_scratch_buffer_addr,=0D= =0A>=20S5P_FIMV_D_SCRATCH_BUFFER_ADDR_V8);=0D=0A>=20>=20=20=09R(d_scratch_b= uffer_size,=20S5P_FIMV_D_SCRATCH_BUFFER_SIZE_V8);=0D=0A>=20>=20=20=09R(d_fi= rst_plane_dpb_stride_size,=0D=0A>=20>=20=20=09=09=09S5P_FIMV_D_FIRST_PLANE_= DPB_STRIDE_SIZE_V8);=0D=0A>=20>=20=20=09R(d_second_plane_dpb_stride_size,= =0D=0A>=20>=0D=0A>=20=09S5P_FIMV_D_SECOND_PLANE_DPB_STRIDE_SIZE_V8);=0D=0A>= =20>=20+=09R(d_third_plane_dpb_stride_size,=0D=0A>=20>=20+=09=09=09S5P_FIMV= _D_THIRD_PLANE_DPB_STRIDE_SIZE_V8);=0D=0A>=20>=20=20=09R(d_mv_buffer_size,= =20S5P_FIMV_D_MV_BUFFER_SIZE_V8);=0D=0A>=20>=20=20=09R(d_num_mv,=20S5P_FIMV= _D_NUM_MV_V8);=0D=0A>=20>=20=20=09R(d_first_plane_dpb,=20S5P_FIMV_D_FIRST_P= LANE_DPB_V8);=0D=0A>=20>=20=20=09R(d_second_plane_dpb,=20S5P_FIMV_D_SECOND_= PLANE_DPB_V8);=0D=0A>=20>=20+=09R(d_third_plane_dpb,=20S5P_FIMV_D_THIRD_PLA= NE_DPB_V8);=0D=0A>=20>=20=20=09R(d_mv_buffer,=20S5P_FIMV_D_MV_BUFFER_V8);= =0D=0A>=20>=20=20=09R(d_init_buffer_options,=20S5P_FIMV_D_INIT_BUFFER_OPTIO= NS_V8);=0D=0A>=20>=20=20=09R(d_available_dpb_flag_lower,=0D=0A>=20>=20S5P_F= IMV_D_AVAILABLE_DPB_FLAG_LOWER_V8);=0D=0A=0D=0A=0D=0A From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9B926C4167B for ; Mon, 27 Nov 2023 07:32:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:References:MIME-Version:Message-ID:Date :Subject:In-Reply-To:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=HqkwVR36mVM091d7XAOPgPrlxrBsvqEBPG5n2fXpvyE=; b=QyVt7ka+k67Ej/ W8PjSKfb75cQAow59igz/+OFOfyW0gCw0aju1bHCGpLLf7jkKtZeFYZpdKVjfB5h5Raw8dYtLElaA qtsl2pnbrh0mrWmsv9NMdO9iAMV1xbgFc9U01BDJ1gCxvGkC/qg6rVcR2tu4Hm1xwviAASFBKiiz/ B3PvvhcpQhFkRF0j8v4VRbw1GHt3Hyk9VgFf2p6pw5DPSbha55078XS32E2A5H3jqu136XBoRdAmn BPUMZKO7uiiO7bNS56BOL0kj/rtlPyKRbYj3TMnCuwDFH7cHvvy/FNzsIWQkQ3klShp+3gWrspUTv cESMPIRhCvSxj01+pCMA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r7W5U-001k2x-1m; Mon, 27 Nov 2023 07:31:24 +0000 Received: from mailout2.samsung.com ([203.254.224.25]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r7W5O-001k1X-06 for linux-arm-kernel@lists.infradead.org; Mon, 27 Nov 2023 07:31:22 +0000 Received: from epcas5p4.samsung.com (unknown [182.195.41.42]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20231127073110epoutp02ba4e8cba942b3545d887ad2b20ab9922~bamXlePIE1656616566epoutp02l for ; Mon, 27 Nov 2023 07:31:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20231127073110epoutp02ba4e8cba942b3545d887ad2b20ab9922~bamXlePIE1656616566epoutp02l DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1701070270; bh=/O7GxW4+OPp3iltiCjpDj2tV+gbFG4XP70pxdSz2jC0=; h=From:To:Cc:In-Reply-To:Subject:Date:References:From; b=D9qSeFpqYh+2Xs5HD14tiNbi2vGyXLvG2QX8pi574ndpQKmjlYa6dV1euWLN0Cy4k hRk5N5YXnWh+dKU1Lr8nQm3IZG2DyPLXtpTUgkuI43m7CAeRdS7Ox5vWpbmslOOAnv eCs9xUt/O0MDKcQa6LZQe8TG5MuBYEcTU+UTgW6s= Received: from epsnrtp3.localdomain (unknown [182.195.42.164]) by epcas5p2.samsung.com (KnoxPortal) with ESMTP id 20231127073109epcas5p23dfbea83edaed63d60886d785aeadc5c~bamW-KVrZ0286702867epcas5p2R; Mon, 27 Nov 2023 07:31:09 +0000 (GMT) Received: from epsmges5p2new.samsung.com (unknown [182.195.38.174]) by epsnrtp3.localdomain (Postfix) with ESMTP id 4Sdy1l5Jrfz4x9QQ; Mon, 27 Nov 2023 07:31:07 +0000 (GMT) Received: from epcas5p2.samsung.com ( [182.195.41.40]) by epsmges5p2new.samsung.com (Symantec Messaging Gateway) with SMTP id 7C.95.10009.BB544656; Mon, 27 Nov 2023 16:31:07 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas5p4.samsung.com (KnoxPortal) with ESMTPA id 20231127070013epcas5p4e967991cccb1908ddf010ec13e758d27~baLWtSliN3195231952epcas5p4j; Mon, 27 Nov 2023 07:00:13 +0000 (GMT) Received: from epsmgmc1p1new.samsung.com (unknown [182.195.42.40]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20231127070013epsmtrp223d6e8de69b418d4a77ab914f7b707f4~baLWr9ppJ0136401364epsmtrp2N; Mon, 27 Nov 2023 07:00:13 +0000 (GMT) X-AuditID: b6c32a4a-ff1ff70000002719-f8-656445bbd991 Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgmc1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id CE.9B.07368.D7E34656; Mon, 27 Nov 2023 16:00:13 +0900 (KST) Received: from FDSFTE308 (unknown [107.122.81.79]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20231127070009epsmtip2ee6eb1275ef80b60cbb58bcc79c204e8~baLTMJN6S2484424844epsmtip2u; Mon, 27 Nov 2023 07:00:09 +0000 (GMT) From: "Aakarsh Jain" To: "'Nicolas Dufresne'" , , , , Cc: , , , , , , , , , , , , , , , , , , "'Smitha T Murthy'" In-Reply-To: Subject: RE: [Patch v4 04/11] media: s5p-mfc: Add YV12 and I420 multiplanar format support Date: Mon, 27 Nov 2023 12:30:08 +0530 Message-ID: <0fe401da20ff$5e47e410$1ad7ac30$@samsung.com> MIME-Version: 1.0 X-Mailer: Microsoft Outlook 16.0 Thread-Index: AQLm4twfZx4yvmLB3iF6RxvUJv+HzQIF15oBArq90LwDAvliPK42GgUg Content-Language: en-in X-Brightmail-Tracker: H4sIAAAAAAAAA01Te0xTVxzmPtpbWAt3WMOBMYd3aoYGaBW6wwbOB+qNkkC2bDhHUpv2Dgil bdrilG2BqUzF4kYCQZpSmSBjWIYrlneXymMNjQ/wgeB4iwHF6KDo0Mm20paN/77f73zf+X7f 7+RwsMAyIoSTodAyaoVETrH98MbO8Hci2nbJGEHv6Q3Q9vQKDseMjWxYuTCFwtFKJw47GiwE NFmvo/BHu40Fz3VdZ8GmKxM4HLS1oLCvbBiHZ6bHMWi+38+C449S4K1WAxvqLllY8OyNX1FY 1zVMwAt3+1BYbX6FwjlHCwbPW+YJmG/tIuDxb6pY2wBtMpoQ+m7VHEa36IcJurL9IUqba0+x 6aH+djbdUJVLN0yfxuj87pc4feZyLUL/fbScoJ3mNbTjmZNI5h3IjEtnJDJGHcYopEpZhiIt ntr3kXinOEYkEEYIY+G7VJhCksXEUwmJyRG7M+SuDVBhhyTybFcrWaLRUFFb49TKbC0Tlq7U aOMpRiWTq6JVkRpJliZbkRapYLTvCQWCzTEu4sHM9NmJNpaq+xJ22GbZn4cMVWEFiC8HkNGg rsFBFCB+nECyDQEj1lHMU8whYKZmhO0pniPAftzMWpaMdZayPAdWBPT9ZvfqpxDQ/7wFWWKx ySgw6tC5WXyyGQHONoubhZE/4aCpy8ReYvmSe8Girtx97yoyFeRN33RjnFwPnBajaxIOh0fG gt4C8VKbR74Oesom8SWMkZtA9Q8z3hRh4MWDareUT+4GJ0pfsjycIND9QucOBMibvqD12gLq ESSAorkpwoNXgUf2y14cApxPrGwPloL75x96DeSgvr0Y9+APgO22AV+aDSPDQX1rlKf9Jihx /Ix6fP1B4V+TXiseaDYu4w3AMLTgXWMo6Lx4AfkeofQroulXRNOviKD/360CwWuRYEalyUpj NDGqzQrmi//eXKrMMiPuP7JxbzMyPvZHZAeCcpAOBHAwis+LnJUygTyZ5EgOo1aK1dlyRtOB xLjWXYSFrJYqXZ9MoRULo2MF0SKRKDp2i0hIBfFm8stlgWSaRMtkMoyKUS/rUI5vSB7KjzNK J6b25X7un3XQkBv8OMhQ3zApqFFBwXzkfu7tq5u+OnVCln9uC78ixqcwY/CVLjfY8uXItDF/ +56TtSMVXEoKkmdFGfNzg70V/HULobeuHr3z9cSaUGFeglNZ7HibE7SjYNTZNHHD5v+dL5MU f2/2NYPVssd/e89TxdpSbriP/1rQ09f4ccm3o5/dW59YpyldrU/ZZbUXGwYuvp+nj9HxdazC nHb7QNOxfxLqD+ew7swPl9T3c00B204uEqaBx6k48mHAofnf3wjX2X2Qs/RbkwF+z8R/Di0+ +IUbl3ikhtj6adGapHVPnOMHUnk8urB3ljy2s98ylZRyzVHG/YTCNekS4UZMrZH8C1vk5n2s BAAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpkleLIzCtJLcpLzFFi42LZdlhJXrfWLiXVYPEpVYsD7w+yWDyYt43N YvGP50wW9xd/ZrE4tHkru8WaveeYLJYfP8BqMf/IOVaL7QcfsVjcPLCTyeLizLssFn0vHjJb bHp8jdXi4atwi8u75rBZ9GzYymox4/w+Jou1R+6yWyy9fpHJYtmmP0wWn07tZLZYtPULu0Xr 3iPsFi2NS1gdJDzWzFvD6HF9ySdmj52z7rJ7LN7zkslj06pONo871/aweWxeUu+x+UU3s0fr 0V8sHn1bVjF6/Guay+7xeZOcx6mvn9kDeKO4bFJSczLLUov07RK4Mu5sWsBWMHM5U8XJqVPZ Ghg3vWPsYuTkkBAwkXhweDprFyMXh5DAbkaJXfdusEAkZCT+tx1jh7CFJVb+e84OUfSUUeLX qylg3WwC+hL3T/WAdYsI7GGUWL59FxtIgllgN4vEgbuSEB3/GSW2zvgENpZTwEvib89cVhBb WCBK4sTFF2BxFgFVic9b5zF3MXJw8ApYSlzoigcJ8woISpyc+YQFYqa2xNObT+HsZQtfM0Nc pyDx8+kysJEiAm4S7dN/sULUiEsc/dnDPIFReBaSUbOQjJqFZNQsJC0LGFlWMUqmFhTnpucm GxYY5qWW6xUn5haX5qXrJefnbmIEpxItjR2M9+b/0zvEyMTBeIhRgoNZSYRX72NyqhBvSmJl VWpRfnxRaU5q8SFGaQ4WJXFewxmzU4QE0hNLUrNTUwtSi2CyTBycUg1MR95eiJe98l5d1nbO nQ7eLfPU/px4VCK/KbdX0dghJbFtdbdF/MaL+ROns2w20tqTcuS3K7fdTIX6dcePb/t9PWf9 0T+KX3Juihk5rEq1cb7N/NIn8pH7v2nntuxLsmZQztrnHFBr/5mdX2L+bJHjMbpbz+1n3rZ2 p1RC2cyUO+tFpqorzjLIMz9Q5LjTXvbIr+nH54cLPBHVTYsveOM0dylX3craW6x625SMpov4 N5wOXSvl4vMnWO2HtOSRD87ezl96Wr+zC0xseV527Fp/zkev5bFGbH8Df/dYHvhh0hyV5Wpy 8LfLFh6uhuCsmeFCLz5Jhc6x8NH4u156z0+HuBT3jUsrFPZ3PQms9rVWYinOSDTUYi4qTgQA SQo3qpQDAAA= X-CMS-MailID: 20231127070013epcas5p4e967991cccb1908ddf010ec13e758d27 X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20231025102243epcas5p1cdd0eb385d2381943d6d194eec3a569d References: <20231025102216.50480-1-aakarsh.jain@samsung.com> <20231025102216.50480-5-aakarsh.jain@samsung.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231126_233118_552078_1CD4D820 X-CRM114-Status: GOOD ( 10.28 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgTmljb2xhcywKCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiBGcm9tOiBOaWNvbGFz IER1ZnJlc25lIDxuaWNvbGFzQG5kdWZyZXNuZS5jYT4KPiBTZW50OiAyMyBOb3ZlbWJlciAyMDIz IDIyOjU2Cj4gVG86IEFha2Fyc2ggSmFpbiA8YWFrYXJzaC5qYWluQHNhbXN1bmcuY29tPjsgbGlu dXgtYXJtLQo+IGtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOyBsaW51eC1tZWRpYUB2Z2VyLmtl cm5lbC5vcmc7IGxpbnV4LQo+IGtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IGRldmljZXRyZWVAdmdl ci5rZXJuZWwub3JnCj4gQ2M6IG0uc3p5cHJvd3NraUBzYW1zdW5nLmNvbTsgYW5kcnplai5oYWpk YUBpbnRlbC5jb207Cj4gbWNoZWhhYkBrZXJuZWwub3JnOyBodmVya3VpbC1jaXNjb0B4czRhbGwu bmw7Cj4ga3J6eXN6dG9mLmtvemxvd3NraStkdEBsaW5hcm8ub3JnOyBkaWxsb24ubWluZmVpQGdt YWlsLmNvbTsKPiBkYXZpZC5wbG93bWFuQHJhc3BiZXJyeXBpLmNvbTsgbWFyay5ydXRsYW5kQGFy bS5jb207Cj4gcm9iaCtkdEBrZXJuZWwub3JnOyBjb25vcitkdEBrZXJuZWwub3JnOyBsaW51eC1z YW1zdW5nLQo+IHNvY0B2Z2VyLmtlcm5lbC5vcmc7IGFuZGlAZXRlemlhbi5vcmc7IGdvc3QuZGV2 QHNhbXN1bmcuY29tOwo+IGFsaW0uYWtodGFyQHNhbXN1bmcuY29tOyBhc3dhbmkucmVkZHlAc2Ft c3VuZy5jb207Cj4gcGFua2FqLmR1YmV5QHNhbXN1bmcuY29tOyBhamF5a3VtYXIucnNAc2Ftc3Vu Zy5jb207IGxpbnV4LQo+IGZzZEB0ZXNsYS5jb207IFNtaXRoYSBUIE11cnRoeSA8c21pdGhhdG11 cnRoeUBnbWFpbC5jb20+Cj4gU3ViamVjdDogUmU6IFtQYXRjaCB2NCAwNC8xMV0gbWVkaWE6IHM1 cC1tZmM6IEFkZCBZVjEyIGFuZCBJNDIwIG11bHRpcGxhbmFyCj4gZm9ybWF0IHN1cHBvcnQKPiAK PiBMZSBtZXJjcmVkaSAyNSBvY3RvYnJlIDIwMjMgw6AgMTU6NTIgKzA1MzAsIEFha2Fyc2ggSmFp biBhIMOpY3JpdCA6DQo+ID4gWVYxMiBhbmQgSTQyMCBmb3JtYXQgKDMtcGxhbmUpIHN1cHBvcnQg aXMgYWRkZWQuIFN0cmlkZSBpbmZvcm1hdGlvbiBpcw0KPiA+IGFkZGVkIHRvIGFsbCBmb3JtYXRz IGFuZCBwbGFuZXMgc2luY2UgaXQgaXMgbmVjZXNzYXJ5IGZvciBZVjEyL0k0MjANCj4gPiB3aGlj aCBhcmUgZGlmZmVyZW50IGZyb20gd2lkdGguDQo+ID4NCj4gPiBDYzogbGludXgtZnNkQHRlc2xh LmNvbQ0KPiA+IFNpZ25lZC1vZmYtYnk6IFNtaXRoYSBUIE11cnRoeSA8c21pdGhhdG11cnRoeUBn bWFpbC5jb20+DQo+ID4gU2lnbmVkLW9mZi1ieTogQWFrYXJzaCBKYWluIDxhYWthcnNoLmphaW5A c2Ftc3VuZy5jb20+DQo+ID4gLS0tDQo+ID4gIC4uLi9wbGF0Zm9ybS9zYW1zdW5nL3M1cC1tZmMv cmVncy1tZmMtdjEyLmggICB8ICAgMiArDQo+ID4gIC4uLi9wbGF0Zm9ybS9zYW1zdW5nL3M1cC1t ZmMvcmVncy1tZmMtdjcuaCAgICB8ICAgMSArDQo+ID4gIC4uLi9wbGF0Zm9ybS9zYW1zdW5nL3M1 cC1tZmMvcmVncy1tZmMtdjguaCAgICB8ICAgMyArDQo+ID4gIC4uLi9wbGF0Zm9ybS9zYW1zdW5n L3M1cC1tZmMvczVwX21mY19jb21tb24uaCB8ICAgNCArDQo+ID4gIC4uLi9wbGF0Zm9ybS9zYW1z dW5nL3M1cC1tZmMvczVwX21mY19kZWMuYyAgICB8ICA0NSArKysrLQ0KPiA+ICAuLi4vcGxhdGZv cm0vc2Ftc3VuZy9zNXAtbWZjL3M1cF9tZmNfZW5jLmMgICAgfCAgODYgKysrKysrKy0tDQo+ID4g IC4uLi9wbGF0Zm9ybS9zYW1zdW5nL3M1cC1tZmMvczVwX21mY19vcHIuaCAgICB8ICAgNiArLQ0K PiA+ICAuLi4vcGxhdGZvcm0vc2Ftc3VuZy9zNXAtbWZjL3M1cF9tZmNfb3ByX3Y1LmMgfCAgMTIg Ky0NCj4gPiAuLi4vcGxhdGZvcm0vc2Ftc3VuZy9zNXAtbWZjL3M1cF9tZmNfb3ByX3Y2LmMgfCAx NjgNCj4gKysrKysrKysrKysrKysrLS0tDQo+ID4gIDkgZmlsZXMgY2hhbmdlZCwgMjgxIGluc2Vy dGlvbnMoKyksIDQ2IGRlbGV0aW9ucygtKQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bWVkaWEvcGxhdGZvcm0vc2Ftc3VuZy9zNXAtbWZjL3JlZ3MtbWZjLXYxMi5oDQo+ID4gYi9kcml2 ZXJzL21lZGlhL3BsYXRmb3JtL3NhbXN1bmcvczVwLW1mYy9yZWdzLW1mYy12MTIuaA0KPiA+IGlu ZGV4IDZjNjhhNDUwODJkMC4uNzA0NjRmNDdjMWY5IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMv bWVkaWEvcGxhdGZvcm0vc2Ftc3VuZy9zNXAtbWZjL3JlZ3MtbWZjLXYxMi5oDQo+ID4gKysrIGIv ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zYW1zdW5nL3M1cC1tZmMvcmVncy1tZmMtdjEyLmgNCj4g PiBAQCAtMjYsNiArMjYsOCBAQA0KPiA+ICAjZGVmaW5lIE1GQ19WRVJTSU9OX1YxMgkJCTB4QzAN Cj4gPiAgI2RlZmluZSBNRkNfTlVNX1BPUlRTX1YxMgkJMQ0KPiA+ICAjZGVmaW5lIFM1UF9GSU1W X0NPREVDX1ZQOV9FTkMJCTI3DQo+ID4gKyNkZWZpbmUgTUZDX0NIUk9NQV9QQURfQllURVNfVjEy ICAgICAgICAyNTYNCj4gPiArI2RlZmluZSBTNVBfRklNVl9EX0FMSUdOX1BMQU5FX1NJWkVfVjEy IDI1Ng0KPiA+DQo+ID4gIC8qIEVuY29kZXIgYnVmZmVyIHNpemUgZm9yIE1GQ3YxMiAqLw0KPiA+ ICAjZGVmaW5lIEVOQ19WMTIwX0JBU0VfU0laRSh4LCB5KSBcDQo+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vc2Ftc3VuZy9zNXAtbWZjL3JlZ3MtbWZjLXY3LmgNCj4gPiBi L2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc2Ftc3VuZy9zNXAtbWZjL3JlZ3MtbWZjLXY3LmgNCj4g PiBpbmRleCA0YTdhZGZkYWEzNTkuLjUwZjliZjA2MDNjMSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2 ZXJzL21lZGlhL3BsYXRmb3JtL3NhbXN1bmcvczVwLW1mYy9yZWdzLW1mYy12Ny5oDQo+ID4gKysr IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zYW1zdW5nL3M1cC1tZmMvcmVncy1tZmMtdjcuaA0K PiA+IEBAIC0yNCw2ICsyNCw3IEBADQo+ID4NCj4gPiAgI2RlZmluZSBTNVBfRklNVl9FX0VOQ09E RURfU09VUkNFX0ZJUlNUX0FERFJfVjcNCj4gCTB4ZmE3MA0KPiA+ICAjZGVmaW5lIFM1UF9GSU1W X0VfRU5DT0RFRF9TT1VSQ0VfU0VDT05EX0FERFJfVjcNCj4gCTB4ZmE3NA0KPiA+ICsjZGVmaW5l IFM1UF9GSU1WX0VfRU5DT0RFRF9TT1VSQ0VfVEhJUkRfQUREUl9WNw0KPiAJMHhmYTc4DQo+ID4N Cj4gPiAgI2RlZmluZSBTNVBfRklNVl9FX1ZQOF9PUFRJT05TX1Y3CQkJMHhmZGIwDQo+ID4gICNk ZWZpbmUgUzVQX0ZJTVZfRV9WUDhfRklMVEVSX09QVElPTlNfVjcJCTB4ZmRiNA0KPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NhbXN1bmcvczVwLW1mYy9yZWdzLW1mYy12 OC5oDQo+ID4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NhbXN1bmcvczVwLW1mYy9yZWdzLW1m Yy12OC5oDQo+ID4gaW5kZXggMTYyZTNjN2U5MjBmLi4wZWY5ZWIyZGZmMjIgMTAwNjQ0DQo+ID4g LS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zYW1zdW5nL3M1cC1tZmMvcmVncy1tZmMtdjgu aA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc2Ftc3VuZy9zNXAtbWZjL3JlZ3Mt bWZjLXY4LmgNCj4gPiBAQCAtMTcsMTMgKzE3LDE2IEBADQo+ID4gICNkZWZpbmUgUzVQX0ZJTVZf RF9NSU5fU0NSQVRDSF9CVUZGRVJfU0laRV9WOAkweGYxMDgNCj4gPiAgI2RlZmluZSBTNVBfRklN Vl9EX0ZJUlNUX1BMQU5FX0RQQl9TSVpFX1Y4CTB4ZjE0NA0KPiA+ICAjZGVmaW5lIFM1UF9GSU1W X0RfU0VDT05EX1BMQU5FX0RQQl9TSVpFX1Y4CTB4ZjE0OA0KPiA+ICsjZGVmaW5lIFM1UF9GSU1W X0RfVEhJUkRfUExBTkVfRFBCX1NJWkVfVjgJMHhmMTRDDQo+ID4gICNkZWZpbmUgUzVQX0ZJTVZf RF9NVl9CVUZGRVJfU0laRV9WOAkJMHhmMTUwDQo+ID4NCj4gPiAgI2RlZmluZSBTNVBfRklNVl9E X0ZJUlNUX1BMQU5FX0RQQl9TVFJJREVfU0laRV9WOAkweGYxMzgNCj4gPiAgI2RlZmluZSBTNVBf RklNVl9EX1NFQ09ORF9QTEFORV9EUEJfU1RSSURFX1NJWkVfVjgNCj4gCTB4ZjEzYw0KPiA+ICsj ZGVmaW5lIFM1UF9GSU1WX0RfVEhJUkRfUExBTkVfRFBCX1NUUklERV9TSVpFX1Y4DQo+IAkweGYx NDANCj4gPg0KPiA+ICAjZGVmaW5lIFM1UF9GSU1WX0RfRklSU1RfUExBTkVfRFBCX1Y4CQkweGYx NjANCj4gPiAgI2RlZmluZSBTNVBfRklNVl9EX1NFQ09ORF9QTEFORV9EUEJfVjgJCTB4ZjI2MA0K PiA+ICsjZGVmaW5lIFM1UF9GSU1WX0RfVEhJUkRfUExBTkVfRFBCX1Y4CQkweGYzNjANCj4gPiAg I2RlZmluZSBTNVBfRklNVl9EX01WX0JVRkZFUl9WOAkJCTB4ZjQ2MA0KPiA+DQo+ID4gICNkZWZp bmUgUzVQX0ZJTVZfRF9OVU1fTVZfVjgJCQkweGYxMzQNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS9zYW1zdW5nL3M1cC1tZmMvczVwX21mY19jb21tb24uaA0KPiA+IGIv ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zYW1zdW5nL3M1cC1tZmMvczVwX21mY19jb21tb24uaA0K PiA+IGluZGV4IGRkMmU5Zjc3MDRhYi4uOWEzOWNjY2ZlMDAyIDEwMDY0NA0KPiA+IC0tLSBhL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vc2Ftc3VuZy9zNXAtbWZjL3M1cF9tZmNfY29tbW9uLmgNCj4g PiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NhbXN1bmcvczVwLW1mYy9zNXBfbWZjX2Nv bW1vbi5oDQo+ID4gQEAgLTU2LDYgKzU2LDcgQEANCj4gPiAgI2RlZmluZSBNRkNfTk9fSU5TVEFO Q0VfU0VUCS0xDQo+ID4gICNkZWZpbmUgTUZDX0VOQ19DQVBfUExBTkVfQ09VTlQJMQ0KPiA+ICAj ZGVmaW5lIE1GQ19FTkNfT1VUX1BMQU5FX0NPVU5UCTINCj4gPiArI2RlZmluZSBWQjJfTUFYX1BM QU5FX0NPVU5UCTMNCj4gPiAgI2RlZmluZSBTVFVGRl9CWVRFCQk0DQo+ID4gICNkZWZpbmUgTUZD X01BWF9DVFJMUwkJMTI4DQo+ID4NCj4gPiBAQCAtMTgxLDYgKzE4Miw3IEBAIHN0cnVjdCBzNXBf bWZjX2J1ZiB7DQo+ID4gIAkJc3RydWN0IHsNCj4gPiAgCQkJc2l6ZV90IGx1bWE7DQo+ID4gIAkJ CXNpemVfdCBjaHJvbWE7DQo+ID4gKwkJCXNpemVfdCBjaHJvbWFfMTsNCj4gPiAgCQl9IHJhdzsN Cj4gPiAgCQlzaXplX3Qgc3RyZWFtOw0KPiA+ICAJfSBjb29raWU7DQo+ID4gQEAgLTY1Nyw2ICs2 NTksNyBAQCBzdHJ1Y3QgczVwX21mY19jdHggew0KPiA+DQo+ID4gIAlpbnQgbHVtYV9zaXplOw0K PiA+ICAJaW50IGNocm9tYV9zaXplOw0KPiA+ICsJaW50IGNocm9tYV9zaXplXzE7DQo+ID4gIAlp bnQgbXZfc2l6ZTsNCj4gPg0KPiA+ICAJdW5zaWduZWQgbG9uZyBjb25zdW1lZF9zdHJlYW07DQo+ ID4gQEAgLTcyMiw2ICs3MjUsNyBAQCBzdHJ1Y3QgczVwX21mY19jdHggew0KPiA+ICAJc2l6ZV90 IHNjcmF0Y2hfYnVmX3NpemU7DQo+ID4gIAlpbnQgaXNfMTBiaXQ7DQo+ID4gIAlpbnQgaXNfNDIy Ow0KPiA+ICsJaW50IHN0cmlkZVtWQjJfTUFYX1BMQU5FX0NPVU5UXTsNCj4gPiAgfTsNCj4gPg0K PiA+ICAvKg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NhbXN1bmcv czVwLW1mYy9zNXBfbWZjX2RlYy5jDQo+ID4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NhbXN1 bmcvczVwLW1mYy9zNXBfbWZjX2RlYy5jDQo+ID4gaW5kZXggZTIxOWNiY2Q4NmQ1Li4zMTdmNzk2 ZmZmYTEgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zYW1zdW5nL3M1 cC1tZmMvczVwX21mY19kZWMuYw0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc2Ft c3VuZy9zNXAtbWZjL3M1cF9tZmNfZGVjLmMNCj4gPiBAQCAtNTYsNiArNTYsMjAgQEAgc3RhdGlj IHN0cnVjdCBzNXBfbWZjX2ZtdCBmb3JtYXRzW10gPSB7DQo+ID4gIAkJLm51bV9wbGFuZXMJPSAy LA0KPiA+ICAJCS52ZXJzaW9ucwk9IE1GQ19WNlBMVVNfQklUUywNCj4gPiAgCX0sDQo+ID4gKwl7 DQo+ID4gKwkJLmZvdXJjYyAgICAgICAgID0gVjRMMl9QSVhfRk1UX1lVVjQyME0sDQo+ID4gKwkJ LmNvZGVjX21vZGUgICAgID0gUzVQX01GQ19DT0RFQ19OT05FLA0KPiA+ICsJCS50eXBlICAgICAg ICAgICA9IE1GQ19GTVRfUkFXLA0KPiA+ICsJCS5udW1fcGxhbmVzICAgICA9IDMsDQo+ID4gKwkJ LnZlcnNpb25zICAgICAgID0gTUZDX1YxMl9CSVQsDQo+ID4gKwl9LA0KPiA+ICsJew0KPiA+ICsJ CS5mb3VyY2MgICAgICAgICA9IFY0TDJfUElYX0ZNVF9ZVlU0MjBNLA0KPiA+ICsJCS5jb2RlY19t b2RlICAgICA9IFM1UF9NRkNfQ09ERUNfTk9ORSwNCj4gPiArCQkudHlwZSAgICAgICAgICAgPSBN RkNfRk1UX1JBVywNCj4gPiArCQkubnVtX3BsYW5lcyAgICAgPSAzLA0KPiA+ICsJCS52ZXJzaW9u cyAgICAgICA9IE1GQ19WMTJfQklUDQo+ID4gKwl9LA0KPiA+ICAJew0KPiA+ICAJCS5mb3VyY2MJ CT0gVjRMMl9QSVhfRk1UX0gyNjQsDQo+ID4gIAkJLmNvZGVjX21vZGUJPSBTNVBfTUZDX0NPREVD X0gyNjRfREVDLA0KPiA+IEBAIC0zNTksMTAgKzM3MywxNSBAQCBzdGF0aWMgaW50IHZpZGlvY19n X2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCj4gc3RydWN0IHY0bDJfZm9ybWF0 ICpmKQ0KPiA+ICAJCS8qIFNldCBwaXhlbGZvcm1hdCB0byB0aGUgZm9ybWF0IGluIHdoaWNoIE1G Qw0KPiA+ICAJCSAgIG91dHB1dHMgdGhlIGRlY29kZWQgZnJhbWUgKi8NCj4gPiAgCQlwaXhfbXAt PnBpeGVsZm9ybWF0ID0gY3R4LT5kc3RfZm10LT5mb3VyY2M7DQo+ID4gLQkJcGl4X21wLT5wbGFu ZV9mbXRbMF0uYnl0ZXNwZXJsaW5lID0gY3R4LT5idWZfd2lkdGg7DQo+ID4gKwkJcGl4X21wLT5w bGFuZV9mbXRbMF0uYnl0ZXNwZXJsaW5lID0gY3R4LT5zdHJpZGVbMF07DQo+ID4gIAkJcGl4X21w LT5wbGFuZV9mbXRbMF0uc2l6ZWltYWdlID0gY3R4LT5sdW1hX3NpemU7DQo+ID4gLQkJcGl4X21w LT5wbGFuZV9mbXRbMV0uYnl0ZXNwZXJsaW5lID0gY3R4LT5idWZfd2lkdGg7DQo+ID4gKwkJcGl4 X21wLT5wbGFuZV9mbXRbMV0uYnl0ZXNwZXJsaW5lID0gY3R4LT5zdHJpZGVbMV07DQo+ID4gIAkJ cGl4X21wLT5wbGFuZV9mbXRbMV0uc2l6ZWltYWdlID0gY3R4LT5jaHJvbWFfc2l6ZTsNCj4gPiAr CQlpZiAoY3R4LT5kc3RfZm10LT5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX1lVVjQyME0gfHwNCj4g PiArCQkJCWN0eC0+ZHN0X2ZtdC0+Zm91cmNjID09DQo+IFY0TDJfUElYX0ZNVF9ZVlU0MjBNKSB7 DQo+ID4gKwkJCXBpeF9tcC0+cGxhbmVfZm10WzJdLmJ5dGVzcGVybGluZSA9IGN0eC0+c3RyaWRl WzJdOw0KPiA+ICsJCQlwaXhfbXAtPnBsYW5lX2ZtdFsyXS5zaXplaW1hZ2UgPSBjdHgtDQo+ID5j aHJvbWFfc2l6ZV8xOw0KPiA+ICsJCX0NCj4gPiAgCX0gZWxzZSBpZiAoZi0+dHlwZSA9PSBWNEwy X0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUpIHsNCj4gPiAgCQkvKiBUaGlzIGlzIHJ1biBv biBPVVRQVVQNCj4gPiAgCQkgICBUaGUgYnVmZmVyIGNvbnRhaW5zIGNvbXByZXNzZWQgaW1hZ2Ug QEAgLTkzNyw2ICs5NTYsOQ0KPiBAQCBzdGF0aWMNCj4gPiBpbnQgczVwX21mY19xdWV1ZV9zZXR1 cChzdHJ1Y3QgdmIyX3F1ZXVlICp2cSwNCj4gPiAgCQkgICB2cS0+dHlwZSA9PSBWNEwyX0JVRl9U WVBFX1ZJREVPX0NBUFRVUkVfTVBMQU5FKSB7DQo+ID4gIAkJLyogT3V0cHV0IHBsYW5lIGNvdW50 IGlzIDIgLSBvbmUgZm9yIFkgYW5kIG9uZSBmb3IgQ2JDciAqLw0KPiA+ICAJCSpwbGFuZV9jb3Vu dCA9IDI7DQo+ID4gKwkJaWYgKGN0eC0+ZHN0X2ZtdC0+Zm91cmNjID09IFY0TDJfUElYX0ZNVF9Z VVY0MjBNIHx8DQo+ID4gKwkJCQljdHgtPmRzdF9mbXQtPmZvdXJjYyA9PQ0KPiBWNEwyX1BJWF9G TVRfWVZVNDIwTSkNCj4gPiArCQkJKnBsYW5lX2NvdW50ID0gMzsNCj4gDQo+IEkgZG9uJ3QgdXN1 YWxseSBpbnRlcmZlcmUsIHRoaXMgaXMgeW91ciBkcml2ZXIgdG8gbWFpbnRhaW4sIGJ1dCB0aGlz IGJlY29tZXMNCj4gaG9ycmlibHkgbWVzc3kuIEhhdmUgeW91IGNvbnNpZGVyIGRlLWhhcmRjb2Rp bmcgYSBsaXR0bGUgYW5kIGVuY2Fwc3VsYXRlIHBlcg0KPiBIVyBmb3JtYXQgZGV0YWlscyBpbnRv IGEgQyBzdHJ1Y3R1cmUgPyBEcml2ZXJzIHRoZXNlIGRheXMgdHJ5IHRvIG1ha2Ugc3VyZSBvZg0K PiB2NGwyLSBjb21tb24gbGlicmFyeSwgd2hpY2ggYXMgYSBtYXR0ZXIgb2YgZmFjdCBrbm93cyB0 aGF0IFlVVjQyME0gYW5kDQo+IFlWVTQyME0gaGF2ZSAzIHBsYWNlcywgc28gdGhhdCB5b3UgZG9u J3QgaGF2ZSB0byBkdXBsaWNhdGUgaXQgaW4geW91ciBkcml2ZXIuDQo+IA0KPiByZWdhcmRzLA0K PiBOaWNvbGFzDQoNClRoYW5rcyBmb3IgcG9pbnRpbmcgb3V0Lg0KV2UgY291bGQgaGF2ZSBkb25l IGl0IGluIHRoaXMgd2F5ICcgKnBsYW5lX2NvdW50ID0gY3R4LT5kc3RfZm10LT5udW1fcGxhbmVz JyBhbHNvLg0KQW55d2F5LCB3aWxsIG1ha2UgdXNlIG9mICcgdjRsMi0gY29tbW9uIGxpYnJhcnkg JyBmb3IgZ2V0dGluZyB0aGUgcGxhbmVzIGNvdW50IGhlcmUgaW4gbmV4dCBzZXJpZXMuDQoNClRo YW5rcyBmb3IgdGhlIHJldmlldy4NCj4gDQo+ID4gIAkJLyogU2V0dXAgYnVmZmVyIGNvdW50ICov DQo+ID4gIAkJaWYgKCpidWZfY291bnQgPCBjdHgtPnBiX2NvdW50KQ0KPiA+ICAJCQkqYnVmX2Nv dW50ID0gY3R4LT5wYl9jb3VudDsNCj4gPiBAQCAtOTU1LDEyICs5NzcsMTcgQEAgc3RhdGljIGlu dCBzNXBfbWZjX3F1ZXVlX3NldHVwKHN0cnVjdA0KPiB2YjJfcXVldWUgKnZxLA0KPiA+ICAJICAg IHZxLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUpIHsNCj4gPiAg CQlwc2l6ZVswXSA9IGN0eC0+bHVtYV9zaXplOw0KPiA+ICAJCXBzaXplWzFdID0gY3R4LT5jaHJv bWFfc2l6ZTsNCj4gPiAtDQo+ID4gKwkJaWYgKGN0eC0+ZHN0X2ZtdC0+Zm91cmNjID09IFY0TDJf UElYX0ZNVF9ZVVY0MjBNIHx8DQo+ID4gKwkJCQljdHgtPmRzdF9mbXQtPmZvdXJjYyA9PQ0KPiBW NEwyX1BJWF9GTVRfWVZVNDIwTSkNCj4gPiArCQkJcHNpemVbMl0gPSBjdHgtPmNocm9tYV9zaXpl XzE7DQo+ID4gIAkJaWYgKElTX01GQ1Y2X1BMVVMoZGV2KSkNCj4gPiAgCQkJYWxsb2NfZGV2c1sw XSA9IGN0eC0+ZGV2LT5tZW1fZGV2W0JBTktfTF9DVFhdOw0KPiA+ICAJCWVsc2UNCj4gPiAgCQkJ YWxsb2NfZGV2c1swXSA9IGN0eC0+ZGV2LT5tZW1fZGV2W0JBTktfUl9DVFhdOw0KPiA+ICAJCWFs bG9jX2RldnNbMV0gPSBjdHgtPmRldi0+bWVtX2RldltCQU5LX0xfQ1RYXTsNCj4gPiArCQlpZiAo Y3R4LT5kc3RfZm10LT5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX1lVVjQyME0gfHwNCj4gPiArCQkJ CWN0eC0+ZHN0X2ZtdC0+Zm91cmNjID09DQo+IFY0TDJfUElYX0ZNVF9ZVlU0MjBNKQ0KPiA+ICsJ CQlhbGxvY19kZXZzWzJdID0gY3R4LT5kZXYtPm1lbV9kZXZbQkFOS19MX0NUWF07DQo+ID4gIAl9 IGVsc2UgaWYgKHZxLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORSAm Jg0KPiA+ICAJCSAgIGN0eC0+c3RhdGUgPT0gTUZDSU5TVF9JTklUKSB7DQo+ID4gIAkJcHNpemVb MF0gPSBjdHgtPmRlY19zcmNfYnVmX3NpemU7DQo+ID4gQEAgLTk5NCwxMiArMTAyMSwyNCBAQCBz dGF0aWMgaW50IHM1cF9tZmNfYnVmX2luaXQoc3RydWN0IHZiMl9idWZmZXINCj4gKnZiKQ0KPiA+ ICAJCQltZmNfZXJyKCJQbGFuZSBidWZmZXIgKENBUFRVUkUpIGlzIHRvbyBzbWFsbFxuIik7DQo+ ID4gIAkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICAJCX0NCj4gPiArCQlpZiAoY3R4LT5kc3RfZm10 LT5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX1lVVjQyME0gfHwNCj4gPiArCQkJCWN0eC0+ZHN0X2Zt dC0+Zm91cmNjID09DQo+IFY0TDJfUElYX0ZNVF9ZVlU0MjBNKSB7DQo+ID4gKwkJCWlmICh2YjJf cGxhbmVfc2l6ZSh2YiwgMikgPCBjdHgtPmNocm9tYV9zaXplXzEpIHsNCj4gPiArCQkJCW1mY19l cnIoIlBsYW5lIGJ1ZmZlciAoQ0FQVFVSRSkgaXMgdG9vDQo+IHNtYWxsXG4iKTsNCj4gPiArCQkJ CXJldHVybiAtRUlOVkFMOw0KPiA+ICsJCQl9DQo+ID4gKwkJfQ0KPiA+ICAJCWkgPSB2Yi0+aW5k ZXg7DQo+ID4gIAkJY3R4LT5kc3RfYnVmc1tpXS5iID0gdmJ1ZjsNCj4gPiAgCQljdHgtPmRzdF9i dWZzW2ldLmNvb2tpZS5yYXcubHVtYSA9DQo+ID4NCj4gCXZiMl9kbWFfY29udGlnX3BsYW5lX2Rt YV9hZGRyKHZiLCAwKTsNCj4gPiAgCQljdHgtPmRzdF9idWZzW2ldLmNvb2tpZS5yYXcuY2hyb21h ID0NCj4gPg0KPiAJdmIyX2RtYV9jb250aWdfcGxhbmVfZG1hX2FkZHIodmIsIDEpOw0KPiA+ICsJ CWlmIChjdHgtPmRzdF9mbXQtPmZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfWVVWNDIwTSB8fA0KPiA+ ICsJCQkJY3R4LT5kc3RfZm10LT5mb3VyY2MgPT0NCj4gVjRMMl9QSVhfRk1UX1lWVTQyME0pIHsN Cj4gPiArCQkJY3R4LT5kc3RfYnVmc1tpXS5jb29raWUucmF3LmNocm9tYV8xID0NCj4gPiArDQo+ IAl2YjJfZG1hX2NvbnRpZ19wbGFuZV9kbWFfYWRkcih2YiwgMik7DQo+ID4gKwkJfQ0KPiA+ICAJ CWN0eC0+ZHN0X2J1ZnNfY250Kys7DQo+ID4gIAl9IGVsc2UgaWYgKHZxLT50eXBlID09IFY0TDJf QlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORSkgew0KPiA+ICAJCWlmIChJU19FUlJfT1JfTlVM TChFUlJfUFRSKA0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NhbXN1 bmcvczVwLW1mYy9zNXBfbWZjX2VuYy5jDQo+ID4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Nh bXN1bmcvczVwLW1mYy9zNXBfbWZjX2VuYy5jDQo+ID4gaW5kZXggZTRkNmU3YzExN2I1Li4wZWVj MDRlYjNlZjMgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zYW1zdW5n L3M1cC1tZmMvczVwX21mY19lbmMuYw0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0v c2Ftc3VuZy9zNXAtbWZjL3M1cF9tZmNfZW5jLmMNCj4gPiBAQCAtNTksNiArNTksMjAgQEAgc3Rh dGljIHN0cnVjdCBzNXBfbWZjX2ZtdCBmb3JtYXRzW10gPSB7DQo+ID4gIAkJLm51bV9wbGFuZXMJ PSAyLA0KPiA+ICAJCS52ZXJzaW9ucwk9IE1GQ19WNlBMVVNfQklUUywNCj4gPiAgCX0sDQo+ID4g Kwl7DQo+ID4gKwkJLmZvdXJjYyAgICAgICAgID0gVjRMMl9QSVhfRk1UX1lVVjQyME0sDQo+ID4g KwkJLmNvZGVjX21vZGUgICAgID0gUzVQX01GQ19DT0RFQ19OT05FLA0KPiA+ICsJCS50eXBlICAg ICAgICAgICA9IE1GQ19GTVRfUkFXLA0KPiA+ICsJCS5udW1fcGxhbmVzICAgICA9IDMsDQo+ID4g KwkJLnZlcnNpb25zICAgICAgID0gTUZDX1YxMl9CSVQsDQo+ID4gKwl9LA0KPiA+ICsJew0KPiA+ ICsJCS5mb3VyY2MgICAgICAgICA9IFY0TDJfUElYX0ZNVF9ZVlU0MjBNLA0KPiA+ICsJCS5jb2Rl Y19tb2RlICAgICA9IFM1UF9NRkNfQ09ERUNfTk9ORSwNCj4gPiArCQkudHlwZSAgICAgICAgICAg PSBNRkNfRk1UX1JBVywNCj4gPiArCQkubnVtX3BsYW5lcyAgICAgPSAzLA0KPiA+ICsJCS52ZXJz aW9ucyAgICAgICA9IE1GQ19WMTJfQklULA0KPiA+ICsJfSwNCj4gPiAgCXsNCj4gPiAgCQkuZm91 cmNjCQk9IFY0TDJfUElYX0ZNVF9IMjY0LA0KPiA+ICAJCS5jb2RlY19tb2RlCT0gUzVQX01GQ19D T0RFQ19IMjY0X0VOQywNCj4gPiBAQCAtMTE5MywxNCArMTIwNywyMCBAQCBzdGF0aWMgaW50IGVu Y19wcmVfZnJhbWVfc3RhcnQoc3RydWN0DQo+IHM1cF9tZmNfY3R4ICpjdHgpDQo+ID4gIAlzdHJ1 Y3QgczVwX21mY19kZXYgKmRldiA9IGN0eC0+ZGV2Ow0KPiA+ICAJc3RydWN0IHM1cF9tZmNfYnVm ICpkc3RfbWI7DQo+ID4gIAlzdHJ1Y3QgczVwX21mY19idWYgKnNyY19tYjsNCj4gPiAtCXVuc2ln bmVkIGxvbmcgc3JjX3lfYWRkciwgc3JjX2NfYWRkciwgZHN0X2FkZHI7DQo+ID4gKwl1bnNpZ25l ZCBsb25nIHNyY195X2FkZHIsIHNyY19jX2FkZHIsIHNyY19jXzFfYWRkciwgZHN0X2FkZHI7DQo+ ID4gIAl1bnNpZ25lZCBpbnQgZHN0X3NpemU7DQo+ID4NCj4gPiAgCXNyY19tYiA9IGxpc3RfZW50 cnkoY3R4LT5zcmNfcXVldWUubmV4dCwgc3RydWN0IHM1cF9tZmNfYnVmLCBsaXN0KTsNCj4gPiAg CXNyY195X2FkZHIgPSB2YjJfZG1hX2NvbnRpZ19wbGFuZV9kbWFfYWRkcigmc3JjX21iLT5iLQ0K PiA+dmIyX2J1ZiwgMCk7DQo+ID4gIAlzcmNfY19hZGRyID0gdmIyX2RtYV9jb250aWdfcGxhbmVf ZG1hX2FkZHIoJnNyY19tYi0+Yi0NCj4gPnZiMl9idWYsIDEpOw0KPiA+ICsJaWYgKGN0eC0+c3Jj X2ZtdC0+Zm91cmNjID09IFY0TDJfUElYX0ZNVF9ZVVY0MjBNIHx8DQo+ID4gKwkJCWN0eC0+c3Jj X2ZtdC0+Zm91cmNjID09IFY0TDJfUElYX0ZNVF9ZVlU0MjBNKQ0KPiA+ICsJCXNyY19jXzFfYWRk ciA9DQo+ID4gKwkJCXZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9hZGRyKCZzcmNfbWItPmItDQo+ ID52YjJfYnVmLCAyKTsNCj4gPiArCWVsc2UNCj4gPiArCQlzcmNfY18xX2FkZHIgPSAwOw0KPiA+ ICAJczVwX21mY19od19jYWxsKGRldi0+bWZjX29wcywgc2V0X2VuY19mcmFtZV9idWZmZXIsIGN0 eCwNCj4gPiAtCQkJCQkJCXNyY195X2FkZHIsDQo+IHNyY19jX2FkZHIpOw0KPiA+ICsJCQkJCXNy Y195X2FkZHIsIHNyY19jX2FkZHIsDQo+IHNyY19jXzFfYWRkcik7DQo+ID4NCj4gPiAgCWRzdF9t YiA9IGxpc3RfZW50cnkoY3R4LT5kc3RfcXVldWUubmV4dCwgc3RydWN0IHM1cF9tZmNfYnVmLCBs aXN0KTsNCj4gPiAgCWRzdF9hZGRyID0gdmIyX2RtYV9jb250aWdfcGxhbmVfZG1hX2FkZHIoJmRz dF9tYi0+Yi0NCj4gPnZiMl9idWYsIDApOyBAQA0KPiA+IC0xMjE1LDggKzEyMzUsOCBAQCBzdGF0 aWMgaW50IGVuY19wb3N0X2ZyYW1lX3N0YXJ0KHN0cnVjdCBzNXBfbWZjX2N0eA0KPiA+ICpjdHgp ICB7DQo+ID4gIAlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IGN0eC0+ZGV2Ow0KPiA+ICAJc3Ry dWN0IHM1cF9tZmNfYnVmICptYl9lbnRyeTsNCj4gPiAtCXVuc2lnbmVkIGxvbmcgZW5jX3lfYWRk ciA9IDAsIGVuY19jX2FkZHIgPSAwOw0KPiA+IC0JdW5zaWduZWQgbG9uZyBtYl95X2FkZHIsIG1i X2NfYWRkcjsNCj4gPiArCXVuc2lnbmVkIGxvbmcgZW5jX3lfYWRkciA9IDAsIGVuY19jX2FkZHIg PSAwLCBlbmNfY18xX2FkZHIgPSAwOw0KPiA+ICsJdW5zaWduZWQgbG9uZyBtYl95X2FkZHIsIG1i X2NfYWRkciwgbWJfY18xX2FkZHI7DQo+ID4gIAlpbnQgc2xpY2VfdHlwZTsNCj4gPiAgCXVuc2ln bmVkIGludCBzdHJtX3NpemU7DQo+ID4gIAlib29sIHNyY19yZWFkeTsNCj4gPiBAQCAtMTIyOSwx NCArMTI0OSwyMSBAQCBzdGF0aWMgaW50IGVuY19wb3N0X2ZyYW1lX3N0YXJ0KHN0cnVjdA0KPiBz NXBfbWZjX2N0eCAqY3R4KQ0KPiA+ICAJCSAgbWZjX3JlYWQoZGV2LCBTNVBfRklNVl9FTkNfU0lf UElDX0NOVCkpOw0KPiA+ICAJaWYgKHNsaWNlX3R5cGUgPj0gMCkgew0KPiA+ICAJCXM1cF9tZmNf aHdfY2FsbChkZXYtPm1mY19vcHMsIGdldF9lbmNfZnJhbWVfYnVmZmVyLA0KPiBjdHgsDQo+ID4g LQkJCQkmZW5jX3lfYWRkciwgJmVuY19jX2FkZHIpOw0KPiA+ICsJCQkJJmVuY195X2FkZHIsICZl bmNfY19hZGRyLA0KPiAmZW5jX2NfMV9hZGRyKTsNCj4gPiAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5 KG1iX2VudHJ5LCAmY3R4LT5zcmNfcXVldWUsIGxpc3QpIHsNCj4gPiAgCQkJbWJfeV9hZGRyID0g dmIyX2RtYV9jb250aWdfcGxhbmVfZG1hX2FkZHIoDQo+ID4gIAkJCQkJJm1iX2VudHJ5LT5iLT52 YjJfYnVmLCAwKTsNCj4gPiAgCQkJbWJfY19hZGRyID0gdmIyX2RtYV9jb250aWdfcGxhbmVfZG1h X2FkZHIoDQo+ID4gIAkJCQkJJm1iX2VudHJ5LT5iLT52YjJfYnVmLCAxKTsNCj4gPiAtCQkJaWYg KChlbmNfeV9hZGRyID09IG1iX3lfYWRkcikgJiYNCj4gPiAtCQkJCQkJKGVuY19jX2FkZHIgPT0g bWJfY19hZGRyKSkNCj4gew0KPiA+ICsJCQlpZiAoY3R4LT5zcmNfZm10LT5mb3VyY2MgPT0NCj4g VjRMMl9QSVhfRk1UX1lVVjQyME0gfHwNCj4gPiArCQkJCWN0eC0+c3JjX2ZtdC0+Zm91cmNjID09 DQo+IFY0TDJfUElYX0ZNVF9ZVlU0MjBNKQ0KPiA+ICsJCQkJbWJfY18xX2FkZHIgPQ0KPiB2YjJf ZG1hX2NvbnRpZ19wbGFuZV9kbWFfYWRkcg0KPiA+ICsJCQkJCQkoJm1iX2VudHJ5LT5iLT52YjJf YnVmLA0KPiAyKTsNCj4gPiArCQkJZWxzZQ0KPiA+ICsJCQkJbWJfY18xX2FkZHIgPSAwOw0KPiA+ ICsJCQlpZiAoKGVuY195X2FkZHIgPT0gbWJfeV9hZGRyKQ0KPiA+ICsJCQkJCSYmIChlbmNfY19h ZGRyID09IG1iX2NfYWRkcikNCj4gPiArCQkJCQkmJiAoZW5jX2NfMV9hZGRyID09DQo+IG1iX2Nf MV9hZGRyKSkgew0KPiA+ICAJCQkJbGlzdF9kZWwoJm1iX2VudHJ5LT5saXN0KTsNCj4gPiAgCQkJ CWN0eC0+c3JjX3F1ZXVlX2NudC0tOw0KPiA+ICAJCQkJdmIyX2J1ZmZlcl9kb25lKCZtYl9lbnRy eS0+Yi0+dmIyX2J1ZiwNCj4gPiBAQCAtMTI0OSw4ICsxMjc2LDE1IEBAIHN0YXRpYyBpbnQgZW5j X3Bvc3RfZnJhbWVfc3RhcnQoc3RydWN0DQo+IHM1cF9tZmNfY3R4ICpjdHgpDQo+ID4gIAkJCQkJ Jm1iX2VudHJ5LT5iLT52YjJfYnVmLCAwKTsNCj4gPiAgCQkJbWJfY19hZGRyID0gdmIyX2RtYV9j b250aWdfcGxhbmVfZG1hX2FkZHIoDQo+ID4gIAkJCQkJJm1iX2VudHJ5LT5iLT52YjJfYnVmLCAx KTsNCj4gPiAtCQkJaWYgKChlbmNfeV9hZGRyID09IG1iX3lfYWRkcikgJiYNCj4gPiAtCQkJCQkJ KGVuY19jX2FkZHIgPT0gbWJfY19hZGRyKSkNCj4gew0KPiA+ICsJCQlpZiAoY3R4LT5zcmNfZm10 LT5mb3VyY2MgPT0NCj4gVjRMMl9QSVhfRk1UX1lVVjQyME0gfHwNCj4gPiArCQkJCWN0eC0+c3Jj X2ZtdC0+Zm91cmNjID09DQo+IFY0TDJfUElYX0ZNVF9ZVlU0MjBNKQ0KPiA+ICsJCQkJbWJfY18x X2FkZHIgPQ0KPiB2YjJfZG1hX2NvbnRpZ19wbGFuZV9kbWFfYWRkcigNCj4gPiArCQkJCQkJJm1i X2VudHJ5LT5iLT52YjJfYnVmLCAyKTsNCj4gPiArCQkJZWxzZQ0KPiA+ICsJCQkJbWJfY18xX2Fk ZHIgPSAwOw0KPiA+ICsJCQlpZiAoKGVuY195X2FkZHIgPT0gbWJfeV9hZGRyKQ0KPiA+ICsJCQkJ CSYmIChlbmNfY19hZGRyID09IG1iX2NfYWRkcikNCj4gPiArCQkJCQkmJiAoZW5jX2NfMV9hZGRy ID09DQo+IG1iX2NfMV9hZGRyKSkgew0KPiA+ICAJCQkJbGlzdF9kZWwoJm1iX2VudHJ5LT5saXN0 KTsNCj4gPiAgCQkJCWN0eC0+cmVmX3F1ZXVlX2NudC0tOw0KPiA+ICAJCQkJdmIyX2J1ZmZlcl9k b25lKCZtYl9lbnRyeS0+Yi0+dmIyX2J1ZiwNCj4gPiBAQCAtMTM4MSwxMCArMTQxNSwxNSBAQCBz dGF0aWMgaW50IHZpZGlvY19nX2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZA0KPiAqcHJpdiwg c3RydWN0IHY0bDJfZm9ybWF0ICpmKQ0KPiA+ICAJCXBpeF9mbXRfbXAtPnBpeGVsZm9ybWF0ID0g Y3R4LT5zcmNfZm10LT5mb3VyY2M7DQo+ID4gIAkJcGl4X2ZtdF9tcC0+bnVtX3BsYW5lcyA9IGN0 eC0+c3JjX2ZtdC0+bnVtX3BsYW5lczsNCj4gPg0KPiA+IC0JCXBpeF9mbXRfbXAtPnBsYW5lX2Zt dFswXS5ieXRlc3BlcmxpbmUgPSBjdHgtPmJ1Zl93aWR0aDsNCj4gPiArCQlwaXhfZm10X21wLT5w bGFuZV9mbXRbMF0uYnl0ZXNwZXJsaW5lID0gY3R4LT5zdHJpZGVbMF07DQo+ID4gIAkJcGl4X2Zt dF9tcC0+cGxhbmVfZm10WzBdLnNpemVpbWFnZSA9IGN0eC0+bHVtYV9zaXplOw0KPiA+IC0JCXBp eF9mbXRfbXAtPnBsYW5lX2ZtdFsxXS5ieXRlc3BlcmxpbmUgPSBjdHgtPmJ1Zl93aWR0aDsNCj4g PiArCQlwaXhfZm10X21wLT5wbGFuZV9mbXRbMV0uYnl0ZXNwZXJsaW5lID0gY3R4LT5zdHJpZGVb MV07DQo+ID4gIAkJcGl4X2ZtdF9tcC0+cGxhbmVfZm10WzFdLnNpemVpbWFnZSA9IGN0eC0+Y2hy b21hX3NpemU7DQo+ID4gKwkJaWYgKGN0eC0+c3JjX2ZtdC0+Zm91cmNjID09IFY0TDJfUElYX0ZN VF9ZVVY0MjBNIHx8DQo+ID4gKwkJCQljdHgtPnNyY19mbXQtPmZvdXJjYyA9PQ0KPiBWNEwyX1BJ WF9GTVRfWVZVNDIwTSkgew0KPiA+ICsJCQlwaXhfZm10X21wLT5wbGFuZV9mbXRbMl0uYnl0ZXNw ZXJsaW5lID0gY3R4LQ0KPiA+c3RyaWRlWzJdOw0KPiA+ICsJCQlwaXhfZm10X21wLT5wbGFuZV9m bXRbMl0uc2l6ZWltYWdlID0gY3R4LQ0KPiA+Y2hyb21hX3NpemVfMTsNCj4gPiArCQl9DQo+ID4g IAl9IGVsc2Ugew0KPiA+ICAJCW1mY19lcnIoImludmFsaWQgYnVmIHR5cGVcbiIpOw0KPiA+ICAJ CXJldHVybiAtRUlOVkFMOw0KPiA+IEBAIC0xNDY4LDkgKzE1MDcsMTQgQEAgc3RhdGljIGludCB2 aWRpb2Nfc19mbXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQNCj4gPiAqcHJpdiwgc3RydWN0IHY0 bDJfZm9ybWF0ICpmKQ0KPiA+DQo+ID4gIAkJczVwX21mY19od19jYWxsKGRldi0+bWZjX29wcywg ZW5jX2NhbGNfc3JjX3NpemUsIGN0eCk7DQo+ID4gIAkJcGl4X2ZtdF9tcC0+cGxhbmVfZm10WzBd LnNpemVpbWFnZSA9IGN0eC0+bHVtYV9zaXplOw0KPiA+IC0JCXBpeF9mbXRfbXAtPnBsYW5lX2Zt dFswXS5ieXRlc3BlcmxpbmUgPSBjdHgtPmJ1Zl93aWR0aDsNCj4gPiArCQlwaXhfZm10X21wLT5w bGFuZV9mbXRbMF0uYnl0ZXNwZXJsaW5lID0gY3R4LT5zdHJpZGVbMF07DQo+ID4gIAkJcGl4X2Zt dF9tcC0+cGxhbmVfZm10WzFdLnNpemVpbWFnZSA9IGN0eC0+Y2hyb21hX3NpemU7DQo+ID4gLQkJ cGl4X2ZtdF9tcC0+cGxhbmVfZm10WzFdLmJ5dGVzcGVybGluZSA9IGN0eC0+YnVmX3dpZHRoOw0K PiA+ICsJCXBpeF9mbXRfbXAtPnBsYW5lX2ZtdFsxXS5ieXRlc3BlcmxpbmUgPSBjdHgtPnN0cmlk ZVsxXTsNCj4gPiArCQlpZiAoY3R4LT5zcmNfZm10LT5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX1lV VjQyME0gfHwNCj4gPiArCQkJCWN0eC0+c3JjX2ZtdC0+Zm91cmNjID09DQo+IFY0TDJfUElYX0ZN VF9ZVlU0MjBNKSB7DQo+ID4gKwkJCXBpeF9mbXRfbXAtPnBsYW5lX2ZtdFsyXS5ieXRlc3Blcmxp bmUgPSBjdHgtDQo+ID5zdHJpZGVbMl07DQo+ID4gKwkJCXBpeF9mbXRfbXAtPnBsYW5lX2ZtdFsy XS5zaXplaW1hZ2UgPSBjdHgtDQo+ID5jaHJvbWFfc2l6ZV8xOw0KPiA+ICsJCX0NCj4gPg0KPiA+ ICAJCWN0eC0+c3JjX2J1ZnNfY250ID0gMDsNCj4gPiAgCQljdHgtPm91dHB1dF9zdGF0ZSA9IFFV RVVFX0ZSRUU7DQo+ID4gQEAgLTI0MTQsMTAgKzI0NTgsMTYgQEAgc3RhdGljIGludCBzNXBfbWZj X3F1ZXVlX3NldHVwKHN0cnVjdA0KPiA+IHZiMl9xdWV1ZSAqdnEsDQo+ID4NCj4gPiAgCQlwc2l6 ZVswXSA9IGN0eC0+bHVtYV9zaXplOw0KPiA+ICAJCXBzaXplWzFdID0gY3R4LT5jaHJvbWFfc2l6 ZTsNCj4gPiArCQlpZiAoY3R4LT5zcmNfZm10LT5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX1lVVjQy ME0gfHwNCj4gPiArCQkJCWN0eC0+c3JjX2ZtdC0+Zm91cmNjID09DQo+IFY0TDJfUElYX0ZNVF9Z VlU0MjBNKQ0KPiA+ICsJCQlwc2l6ZVsyXSA9IGN0eC0+Y2hyb21hX3NpemVfMTsNCj4gPg0KPiA+ ICAJCWlmIChJU19NRkNWNl9QTFVTKGRldikpIHsNCj4gPiAgCQkJYWxsb2NfZGV2c1swXSA9IGN0 eC0+ZGV2LT5tZW1fZGV2W0JBTktfTF9DVFhdOw0KPiA+ICAJCQlhbGxvY19kZXZzWzFdID0gY3R4 LT5kZXYtPm1lbV9kZXZbQkFOS19MX0NUWF07DQo+ID4gKwkJCWlmIChjdHgtPnNyY19mbXQtPmZv dXJjYyA9PQ0KPiBWNEwyX1BJWF9GTVRfWVVWNDIwTSB8fA0KPiA+ICsJCQkJY3R4LT5zcmNfZm10 LT5mb3VyY2MgPT0NCj4gVjRMMl9QSVhfRk1UX1lWVTQyME0pDQo+ID4gKwkJCQlhbGxvY19kZXZz WzJdID0gY3R4LT5kZXYtDQo+ID5tZW1fZGV2W0JBTktfTF9DVFhdOw0KPiA+ICAJCX0gZWxzZSB7 DQo+ID4gIAkJCWFsbG9jX2RldnNbMF0gPSBjdHgtPmRldi0+bWVtX2RldltCQU5LX1JfQ1RYXTsN Cj4gPiAgCQkJYWxsb2NfZGV2c1sxXSA9IGN0eC0+ZGV2LT5tZW1fZGV2W0JBTktfUl9DVFhdOw0K PiBAQCAtMjQ1Niw2ICsyNTA2LDEwDQo+ID4gQEAgc3RhdGljIGludCBzNXBfbWZjX2J1Zl9pbml0 KHN0cnVjdCB2YjJfYnVmZmVyICp2YikNCj4gPg0KPiAJdmIyX2RtYV9jb250aWdfcGxhbmVfZG1h X2FkZHIodmIsIDApOw0KPiA+ICAJCWN0eC0+c3JjX2J1ZnNbaV0uY29va2llLnJhdy5jaHJvbWEg PQ0KPiA+DQo+IAl2YjJfZG1hX2NvbnRpZ19wbGFuZV9kbWFfYWRkcih2YiwgMSk7DQo+ID4gKwkJ aWYgKGN0eC0+c3JjX2ZtdC0+Zm91cmNjID09IFY0TDJfUElYX0ZNVF9ZVVY0MjBNIHx8DQo+ID4g KwkJCQljdHgtPnNyY19mbXQtPmZvdXJjYyA9PQ0KPiBWNEwyX1BJWF9GTVRfWVZVNDIwTSkNCj4g PiArCQkJY3R4LT5zcmNfYnVmc1tpXS5jb29raWUucmF3LmNocm9tYV8xID0NCj4gPiArDQo+IAl2 YjJfZG1hX2NvbnRpZ19wbGFuZV9kbWFfYWRkcih2YiwgMik7DQo+ID4gIAkJY3R4LT5zcmNfYnVm c19jbnQrKzsNCj4gPiAgCX0gZWxzZSB7DQo+ID4gIAkJbWZjX2VycigiaW52YWxpZCBxdWV1ZSB0 eXBlOiAlZFxuIiwgdnEtPnR5cGUpOyBAQCAtMjQ5Myw2DQo+ICsyNTQ3LDEyDQo+ID4gQEAgc3Rh dGljIGludCBzNXBfbWZjX2J1Zl9wcmVwYXJlKHN0cnVjdCB2YjJfYnVmZmVyICp2YikNCj4gPiAg CQkJbWZjX2VycigicGxhbmUgc2l6ZSBpcyB0b28gc21hbGwgZm9yIG91dHB1dFxuIik7DQo+ID4g IAkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICAJCX0NCj4gPiArCQlpZiAoKGN0eC0+c3JjX2ZtdC0+ Zm91cmNjID09IFY0TDJfUElYX0ZNVF9ZVVY0MjBNIHx8DQo+ID4gKwkJICAgICBjdHgtPnNyY19m bXQtPmZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfWVZVNDIwTSkgJiYNCj4gPiArCQkgICAgKHZiMl9w bGFuZV9zaXplKHZiLCAyKSA8IGN0eC0+Y2hyb21hX3NpemVfMSkpIHsNCj4gPiArCQkJbWZjX2Vy cigicGxhbmUgc2l6ZSBpcyB0b28gc21hbGwgZm9yIG91dHB1dFxuIik7DQo+ID4gKwkJCXJldHVy biAtRUlOVkFMOw0KPiA+ICsJCX0NCj4gPiAgCX0gZWxzZSB7DQo+ID4gIAkJbWZjX2VycigiaW52 YWxpZCBxdWV1ZSB0eXBlOiAlZFxuIiwgdnEtPnR5cGUpOw0KPiA+ICAJCXJldHVybiAtRUlOVkFM Ow0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NhbXN1bmcvczVwLW1m Yy9zNXBfbWZjX29wci5oDQo+ID4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NhbXN1bmcvczVw LW1mYy9zNXBfbWZjX29wci5oDQo+ID4gaW5kZXggODdhYzU2NzU2YTE2Li43YzVlODUxYzgxOTEg MTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zYW1zdW5nL3M1cC1tZmMv czVwX21mY19vcHIuaA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc2Ftc3VuZy9z NXAtbWZjL3M1cF9tZmNfb3ByLmgNCj4gPiBAQCAtMjkzLDkgKzI5MywxMSBAQCBzdHJ1Y3QgczVw X21mY19od19vcHMgew0KPiA+ICAJaW50ICgqc2V0X2VuY19zdHJlYW1fYnVmZmVyKShzdHJ1Y3Qg czVwX21mY19jdHggKmN0eCwNCj4gPiAgCQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBp bnQgc2l6ZSk7DQo+ID4gIAl2b2lkICgqc2V0X2VuY19mcmFtZV9idWZmZXIpKHN0cnVjdCBzNXBf bWZjX2N0eCAqY3R4LA0KPiA+IC0JCQl1bnNpZ25lZCBsb25nIHlfYWRkciwgdW5zaWduZWQgbG9u ZyBjX2FkZHIpOw0KPiA+ICsJCQl1bnNpZ25lZCBsb25nIHlfYWRkciwgdW5zaWduZWQgbG9uZyBj X2FkZHIsDQo+ID4gKwkJCXVuc2lnbmVkIGxvbmcgY18xX2FkZHIpOw0KPiA+ICAJdm9pZCAoKmdl dF9lbmNfZnJhbWVfYnVmZmVyKShzdHJ1Y3QgczVwX21mY19jdHggKmN0eCwNCj4gPiAtCQkJdW5z aWduZWQgbG9uZyAqeV9hZGRyLCB1bnNpZ25lZCBsb25nICpjX2FkZHIpOw0KPiA+ICsJCQl1bnNp Z25lZCBsb25nICp5X2FkZHIsIHVuc2lnbmVkIGxvbmcgKmNfYWRkciwNCj4gPiArCQkJdW5zaWdu ZWQgbG9uZyAqY18xX2FkZHIpOw0KPiA+ICAJdm9pZCAoKnRyeV9ydW4pKHN0cnVjdCBzNXBfbWZj X2RldiAqZGV2KTsNCj4gPiAgCXZvaWQgKCpjbGVhcl9pbnRfZmxhZ3MpKHN0cnVjdCBzNXBfbWZj X2RldiAqZGV2KTsNCj4gPiAgCWludCAoKmdldF9kc3BsX3lfYWRyKShzdHJ1Y3QgczVwX21mY19k ZXYgKmRldik7IGRpZmYgLS1naXQNCj4gPiBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc2Ftc3Vu Zy9zNXAtbWZjL3M1cF9tZmNfb3ByX3Y1LmMNCj4gPiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0v c2Ftc3VuZy9zNXAtbWZjL3M1cF9tZmNfb3ByX3Y1LmMNCj4gPiBpbmRleCAyOGEwNmRjMzQzZmQu LmZjZmFmMTI1YTVhMSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Nh bXN1bmcvczVwLW1mYy9zNXBfbWZjX29wcl92NS5jDQo+ID4gKysrIGIvZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9zYW1zdW5nL3M1cC1tZmMvczVwX21mY19vcHJfdjUuYw0KPiA+IEBAIC01MTYsNyAr NTE2LDggQEAgc3RhdGljIGludA0KPiBzNXBfbWZjX3NldF9lbmNfc3RyZWFtX2J1ZmZlcl92NShz dHJ1Y3QNCj4gPiBzNXBfbWZjX2N0eCAqY3R4LCAgfQ0KPiA+DQo+ID4gIHN0YXRpYyB2b2lkIHM1 cF9tZmNfc2V0X2VuY19mcmFtZV9idWZmZXJfdjUoc3RydWN0IHM1cF9tZmNfY3R4ICpjdHgsDQo+ ID4gLQkJdW5zaWduZWQgbG9uZyB5X2FkZHIsIHVuc2lnbmVkIGxvbmcgY19hZGRyKQ0KPiA+ICsJ CXVuc2lnbmVkIGxvbmcgeV9hZGRyLCB1bnNpZ25lZCBsb25nIGNfYWRkciwNCj4gPiArCQl1bnNp Z25lZCBsb25nIGNfMV9hZGRyKQ0KPiA+ICB7DQo+ID4gIAlzdHJ1Y3QgczVwX21mY19kZXYgKmRl diA9IGN0eC0+ZGV2Ow0KPiA+DQo+ID4gQEAgLTUyNSw3ICs1MjYsOCBAQCBzdGF0aWMgdm9pZA0K PiBzNXBfbWZjX3NldF9lbmNfZnJhbWVfYnVmZmVyX3Y1KHN0cnVjdA0KPiA+IHM1cF9tZmNfY3R4 ICpjdHgsICB9DQo+ID4NCj4gPiAgc3RhdGljIHZvaWQgczVwX21mY19nZXRfZW5jX2ZyYW1lX2J1 ZmZlcl92NShzdHJ1Y3QgczVwX21mY19jdHggKmN0eCwNCj4gPiAtCQl1bnNpZ25lZCBsb25nICp5 X2FkZHIsIHVuc2lnbmVkIGxvbmcgKmNfYWRkcikNCj4gPiArCQl1bnNpZ25lZCBsb25nICp5X2Fk ZHIsIHVuc2lnbmVkIGxvbmcgKmNfYWRkciwNCj4gPiArCQl1bnNpZ25lZCBsb25nICpjXzFfYWRk cikNCj4gPiAgew0KPiA+ICAJc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYgPSBjdHgtPmRldjsNCj4g Pg0KPiA+IEBAIC0xMjEwLDcgKzEyMTIsNyBAQCBzdGF0aWMgaW50IHM1cF9tZmNfcnVuX2VuY19m cmFtZShzdHJ1Y3QNCj4gczVwX21mY19jdHggKmN0eCkNCj4gPiAgCWlmIChsaXN0X2VtcHR5KCZj dHgtPnNyY19xdWV1ZSkpIHsNCj4gPiAgCQkvKiBzZW5kIG51bGwgZnJhbWUgKi8NCj4gPiAgCQlz NXBfbWZjX3NldF9lbmNfZnJhbWVfYnVmZmVyX3Y1KGN0eCwgZGV2LQ0KPiA+ZG1hX2Jhc2VbQkFO S19SX0NUWF0sDQo+ID4gLQkJCQkJCWRldi0NCj4gPmRtYV9iYXNlW0JBTktfUl9DVFhdKTsNCj4g PiArCQkJCQkJZGV2LQ0KPiA+ZG1hX2Jhc2VbQkFOS19SX0NUWF0sIDApOw0KPiA+ICAJCXNyY19t YiA9IE5VTEw7DQo+ID4gIAl9IGVsc2Ugew0KPiA+ICAJCXNyY19tYiA9IGxpc3RfZW50cnkoY3R4 LT5zcmNfcXVldWUubmV4dCwgc3RydWN0DQo+IHM1cF9tZmNfYnVmLCBAQA0KPiA+IC0xMjIwLDcg KzEyMjIsNyBAQCBzdGF0aWMgaW50IHM1cF9tZmNfcnVuX2VuY19mcmFtZShzdHJ1Y3QgczVwX21m Y19jdHgNCj4gKmN0eCkNCj4gPiAgCQkJLyogc2VuZCBudWxsIGZyYW1lICovDQo+ID4gIAkJCXM1 cF9tZmNfc2V0X2VuY19mcmFtZV9idWZmZXJfdjUoY3R4LA0KPiA+ICAJCQkJCQlkZXYtDQo+ID5k bWFfYmFzZVtCQU5LX1JfQ1RYXSwNCj4gPiAtCQkJCQkJZGV2LQ0KPiA+ZG1hX2Jhc2VbQkFOS19S X0NUWF0pOw0KPiA+ICsJCQkJCQlkZXYtDQo+ID5kbWFfYmFzZVtCQU5LX1JfQ1RYXSwgMCk7DQo+ ID4gIAkJCWN0eC0+c3RhdGUgPSBNRkNJTlNUX0ZJTklTSElORzsNCj4gPiAgCQl9IGVsc2Ugew0K PiA+ICAJCQlzcmNfeV9hZGRyID0gdmIyX2RtYV9jb250aWdfcGxhbmVfZG1hX2FkZHIoDQo+IEBA IC0xMjI4LDcgKzEyMzAsNyBAQA0KPiA+IHN0YXRpYyBpbnQgczVwX21mY19ydW5fZW5jX2ZyYW1l KHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4KQ0KPiA+ICAJCQlzcmNfY19hZGRyID0gdmIyX2RtYV9j b250aWdfcGxhbmVfZG1hX2FkZHIoDQo+ID4gIAkJCQkJJnNyY19tYi0+Yi0+dmIyX2J1ZiwgMSk7 DQo+ID4gIAkJCXM1cF9tZmNfc2V0X2VuY19mcmFtZV9idWZmZXJfdjUoY3R4LCBzcmNfeV9hZGRy LA0KPiA+IC0JCQkJCQkJCXNyY19jX2FkZHIpOw0KPiA+ICsJCQkJCQkJCXNyY19jX2FkZHIsDQo+ IDApOw0KPiA+ICAJCQlpZiAoc3JjX21iLT5mbGFncyAmIE1GQ19CVUZfRkxBR19FT1MpDQo+ID4g IAkJCQljdHgtPnN0YXRlID0gTUZDSU5TVF9GSU5JU0hJTkc7DQo+ID4gIAkJfQ0KPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NhbXN1bmcvczVwLW1mYy9zNXBfbWZjX29w cl92Ni5jDQo+ID4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NhbXN1bmcvczVwLW1mYy9zNXBf bWZjX29wcl92Ni5jDQo+ID4gaW5kZXggZmIzZjA3MTg4MjFkLi5lNTc5Yzc2NWU5MDIgMTAwNjQ0 DQo+ID4gLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zYW1zdW5nL3M1cC1tZmMvczVwX21m Y19vcHJfdjYuYw0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc2Ftc3VuZy9zNXAt bWZjL3M1cF9tZmNfb3ByX3Y2LmMNCj4gPiBAQCAtNDk0LDE2ICs0OTQsNDMgQEAgc3RhdGljIHZv aWQgczVwX21mY19kZWNfY2FsY19kcGJfc2l6ZV92NihzdHJ1Y3QNCj4gczVwX21mY19jdHggKmN0 eCkNCj4gPiAgCXN0cnVjdCBzNXBfbWZjX2RldiAqZGV2ID0gY3R4LT5kZXY7DQo+ID4gIAljdHgt PmJ1Zl93aWR0aCA9IEFMSUdOKGN0eC0+aW1nX3dpZHRoLA0KPiBTNVBfRklNVl9OVjEyTVRfSEFM SUdOX1Y2KTsNCj4gPiAgCWN0eC0+YnVmX2hlaWdodCA9IEFMSUdOKGN0eC0+aW1nX2hlaWdodCwN Cj4gUzVQX0ZJTVZfTlYxMk1UX1ZBTElHTl9WNik7DQo+ID4gKwljdHgtPmNocm9tYV9zaXplXzEg PSAwOw0KPiA+ICAJbWZjX2RlYnVnKDIsICJTRVEgRG9uZTogTW92aWUgZGltZW5zaW9ucyAlZHgl ZCxcbiINCj4gPiAgCQkJImJ1ZmZlciBkaW1lbnNpb25zOiAlZHglZFxuIiwgY3R4LT5pbWdfd2lk dGgsDQo+ID4gIAkJCWN0eC0+aW1nX2hlaWdodCwgY3R4LT5idWZfd2lkdGgsIGN0eC0+YnVmX2hl aWdodCk7DQo+ID4NCj4gPiAtCWN0eC0+bHVtYV9zaXplID0gY2FsY19wbGFuZShjdHgtPmltZ193 aWR0aCwgY3R4LT5pbWdfaGVpZ2h0KTsNCj4gPiAtCWN0eC0+Y2hyb21hX3NpemUgPSBjYWxjX3Bs YW5lKGN0eC0+aW1nX3dpZHRoLCAoY3R4LT5pbWdfaGVpZ2h0ID4+DQo+IDEpKTsNCj4gPiArCXN3 aXRjaCAoY3R4LT5kc3RfZm10LT5mb3VyY2MpIHsNCj4gPiArCWNhc2UgVjRMMl9QSVhfRk1UX05W MTJNOg0KPiA+ICsJY2FzZSBWNEwyX1BJWF9GTVRfTlYyMU06DQo+ID4gKwkJY3R4LT5zdHJpZGVb MF0gPSBBTElHTihjdHgtPmltZ193aWR0aCwNCj4gPiArCQkJCQlTNVBfRklNVl9OVjEyTVRfSEFM SUdOX1Y2KTsNCj4gPiArCQljdHgtPnN0cmlkZVsxXSA9IEFMSUdOKGN0eC0+aW1nX3dpZHRoLA0K PiA+ICsJCQkJCVM1UF9GSU1WX05WMTJNVF9IQUxJR05fVjYpOw0KPiA+ICsJCWN0eC0+bHVtYV9z aXplID0gY2FsY19wbGFuZShjdHgtPnN0cmlkZVswXSwgY3R4LT5pbWdfaGVpZ2h0KTsNCj4gPiAr CQljdHgtPmNocm9tYV9zaXplID0gY2FsY19wbGFuZShjdHgtPnN0cmlkZVsxXSwNCj4gPiArCQkJ CQkoY3R4LT5pbWdfaGVpZ2h0IC8gMikpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBWNEwy X1BJWF9GTVRfWVVWNDIwTToNCj4gPiArCWNhc2UgVjRMMl9QSVhfRk1UX1lWVTQyME06DQo+ID4g KwkJY3R4LT5zdHJpZGVbMF0gPSBBTElHTihjdHgtPmltZ193aWR0aCwNCj4gPiArCQkJCQlTNVBf RklNVl9OVjEyTVRfSEFMSUdOX1Y2KTsNCj4gPiArCQljdHgtPnN0cmlkZVsxXSA9IEFMSUdOKGN0 eC0+aW1nX3dpZHRoIC8gMiwNCj4gPiArCQkJCQlTNVBfRklNVl9OVjEyTVRfSEFMSUdOX1Y2KTsN Cj4gPiArCQljdHgtPnN0cmlkZVsyXSA9IEFMSUdOKGN0eC0+aW1nX3dpZHRoIC8gMiwNCj4gPiAr CQkJCQlTNVBfRklNVl9OVjEyTVRfSEFMSUdOX1Y2KTsNCj4gPiArCQljdHgtPmx1bWFfc2l6ZSA9 IGNhbGNfcGxhbmUoY3R4LT5zdHJpZGVbMF0sIGN0eC0+aW1nX2hlaWdodCk7DQo+ID4gKwkJY3R4 LT5jaHJvbWFfc2l6ZSA9IGNhbGNfcGxhbmUoY3R4LT5zdHJpZGVbMV0sDQo+ID4gKwkJCQkJKGN0 eC0+aW1nX2hlaWdodCAvIDIpKTsNCj4gPiArCQljdHgtPmNocm9tYV9zaXplXzEgPSBjYWxjX3Bs YW5lKGN0eC0+c3RyaWRlWzJdLA0KPiA+ICsJCQkJCShjdHgtPmltZ19oZWlnaHQgLyAyKSk7DQo+ ID4gKwkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICAJaWYgKElTX01GQ1Y4X1BMVVMoY3R4 LT5kZXYpKSB7DQo+ID4gIAkJLyogTUZDdjggbmVlZHMgYWRkaXRpb25hbCA2NCBieXRlcyBmb3Ig bHVtYSxjaHJvbWEgZHBiKi8NCj4gPiAgCQljdHgtPmx1bWFfc2l6ZSArPSBTNVBfRklNVl9EX0FM SUdOX1BMQU5FX1NJWkVfVjg7DQo+ID4gIAkJY3R4LT5jaHJvbWFfc2l6ZSArPSBTNVBfRklNVl9E X0FMSUdOX1BMQU5FX1NJWkVfVjg7DQo+ID4gKwkJY3R4LT5jaHJvbWFfc2l6ZV8xICs9DQo+IFM1 UF9GSU1WX0RfQUxJR05fUExBTkVfU0laRV9WODsNCj4gPiAgCX0NCj4gPg0KPiA+ICAJaWYgKGN0 eC0+Y29kZWNfbW9kZSA9PSBTNVBfTUZDX0NPREVDX0gyNjRfREVDIHx8IEBAIC01MzQsMTUNCj4g KzU2MSw1Mw0KPiA+IEBAIHN0YXRpYyB2b2lkIHM1cF9tZmNfZW5jX2NhbGNfc3JjX3NpemVfdjYo c3RydWN0IHM1cF9tZmNfY3R4ICpjdHgpDQo+ID4gIAltYl93aWR0aCA9IE1CX1dJRFRIKGN0eC0+ aW1nX3dpZHRoKTsNCj4gPiAgCW1iX2hlaWdodCA9IE1CX0hFSUdIVChjdHgtPmltZ19oZWlnaHQp Ow0KPiA+DQo+ID4gLQljdHgtPmJ1Zl93aWR0aCA9IEFMSUdOKGN0eC0+aW1nX3dpZHRoLA0KPiBT NVBfRklNVl9OVjEyTV9IQUxJR05fVjYpOw0KPiA+IC0JY3R4LT5sdW1hX3NpemUgPSBBTElHTigo bWJfd2lkdGggKiBtYl9oZWlnaHQpICogMjU2LCAyNTYpOw0KPiA+IC0JY3R4LT5jaHJvbWFfc2l6 ZSA9IEFMSUdOKChtYl93aWR0aCAqIG1iX2hlaWdodCkgKiAxMjgsIDI1Nik7DQo+ID4gLQ0KPiA+ IC0JLyogTUZDdjcgbmVlZHMgcGFkIGJ5dGVzIGZvciBMdW1hIGFuZCBDaHJvbWEgKi8NCj4gPiAt CWlmIChJU19NRkNWN19QTFVTKGN0eC0+ZGV2KSkgew0KPiA+ICsJaWYgKElTX01GQ1YxMihjdHgt PmRldikpIHsNCj4gPiArCQlzd2l0Y2ggKGN0eC0+c3JjX2ZtdC0+Zm91cmNjKSB7DQo+ID4gKwkJ Y2FzZSBWNEwyX1BJWF9GTVRfTlYxMk06DQo+ID4gKwkJY2FzZSBWNEwyX1BJWF9GTVRfTlYyMU06 DQo+ID4gKwkJCWN0eC0+c3RyaWRlWzBdID0gQUxJR04oY3R4LT5pbWdfd2lkdGgsDQo+ID4gKw0K PiAJUzVQX0ZJTVZfTlYxMk1fSEFMSUdOX1Y2KTsNCj4gPiArCQkJY3R4LT5zdHJpZGVbMV0gPSBB TElHTihjdHgtPmltZ193aWR0aCwNCj4gPiArDQo+IAlTNVBfRklNVl9OVjEyTV9IQUxJR05fVjYp Ow0KPiA+ICsJCQljdHgtPmx1bWFfc2l6ZSA9IGN0eC0+c3RyaWRlWzBdICoNCj4gPiArCQkJCQkJ QUxJR04oY3R4LT5pbWdfaGVpZ2h0LCAxNik7DQo+ID4gKwkJCWN0eC0+Y2hyb21hX3NpemUgPSAg Y3R4LT5zdHJpZGVbMF0gKg0KPiA+ICsJCQkJCQlBTElHTihjdHgtPmltZ19oZWlnaHQgLyAyLA0K PiAxNik7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyME06 DQo+ID4gKwkJY2FzZSBWNEwyX1BJWF9GTVRfWVZVNDIwTToNCj4gPiArCQkJY3R4LT5zdHJpZGVb MF0gPSBBTElHTihjdHgtPmltZ193aWR0aCwNCj4gPiArDQo+IAlTNVBfRklNVl9OVjEyTV9IQUxJ R05fVjYpOw0KPiA+ICsJCQljdHgtPnN0cmlkZVsxXSA9IEFMSUdOKGN0eC0+aW1nX3dpZHRoIC8g MiwNCj4gPiArDQo+IAlTNVBfRklNVl9OVjEyTV9IQUxJR05fVjYpOw0KPiA+ICsJCQljdHgtPnN0 cmlkZVsyXSA9IEFMSUdOKGN0eC0+aW1nX3dpZHRoIC8gMiwNCj4gPiArDQo+IAlTNVBfRklNVl9O VjEyTV9IQUxJR05fVjYpOw0KPiA+ICsJCQljdHgtPmx1bWFfc2l6ZSA9IGN0eC0+c3RyaWRlWzBd ICoNCj4gPiArCQkJCQkJQUxJR04oY3R4LT5pbWdfaGVpZ2h0LCAxNik7DQo+ID4gKwkJCWN0eC0+ Y2hyb21hX3NpemUgPSAgY3R4LT5zdHJpZGVbMV0gKg0KPiA+ICsJCQkJCQlBTElHTihjdHgtPmlt Z19oZWlnaHQgLyAyLA0KPiAxNik7DQo+ID4gKwkJCWN0eC0+Y2hyb21hX3NpemVfMSA9ICBjdHgt PnN0cmlkZVsyXSAqDQo+ID4gKwkJCQkJCUFMSUdOKGN0eC0+aW1nX2hlaWdodCAvIDIsDQo+IDE2 KTsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJfQ0KPiA+ICAJCWN0eC0+bHVtYV9zaXplICs9IE1G Q19MVU1BX1BBRF9CWVRFU19WNzsNCj4gPiAtCQljdHgtPmNocm9tYV9zaXplICs9IE1GQ19DSFJP TUFfUEFEX0JZVEVTX1Y3Ow0KPiA+ICsJCWN0eC0+Y2hyb21hX3NpemUgKz0gTUZDX0NIUk9NQV9Q QURfQllURVNfVjEyOw0KPiA+ICsJCWN0eC0+Y2hyb21hX3NpemVfMSArPSBNRkNfQ0hST01BX1BB RF9CWVRFU19WMTI7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWN0eC0+YnVmX3dpZHRoID0gQUxJ R04oY3R4LT5pbWdfd2lkdGgsDQo+ID4gKwkJCQkJUzVQX0ZJTVZfTlYxMk1fSEFMSUdOX1Y2KTsN Cj4gPiArCQljdHgtPnN0cmlkZVswXSA9IGN0eC0+YnVmX3dpZHRoOw0KPiA+ICsJCWN0eC0+c3Ry aWRlWzFdID0gY3R4LT5idWZfd2lkdGg7DQo+ID4gKwkJY3R4LT5sdW1hX3NpemUgPSBBTElHTigo bWJfd2lkdGggKiBtYl9oZWlnaHQpICogMjU2LA0KPiAyNTYpOw0KPiA+ICsJCWN0eC0+Y2hyb21h X3NpemUgPSBBTElHTigobWJfd2lkdGggKiBtYl9oZWlnaHQpICogMTI4LA0KPiAyNTYpOw0KPiA+ ICsJCWN0eC0+Y2hyb21hX3NpemVfMSA9IDA7DQo+ID4gKwkJLyogTUZDdjcgbmVlZHMgcGFkIGJ5 dGVzIGZvciBMdW1hIGFuZCBDaHJvbWEgKi8NCj4gPiArCQlpZiAoSVNfTUZDVjdfUExVUyhjdHgt PmRldikpIHsNCj4gPiArCQkJY3R4LT5sdW1hX3NpemUgKz0gTUZDX0xVTUFfUEFEX0JZVEVTX1Y3 Ow0KPiA+ICsJCQljdHgtPmNocm9tYV9zaXplICs9IE1GQ19MVU1BX1BBRF9CWVRFU19WNzsNCj4g PiArCQl9DQo+ID4gIAl9DQo+ID4gKw0KPiA+ICB9DQo+ID4NCj4gPiAgLyogU2V0IHJlZ2lzdGVy cyBmb3IgZGVjb2Rpbmcgc3RyZWFtIGJ1ZmZlciAqLyBAQCAtNTg4LDE1ICs2NTMsMjEgQEANCj4g PiBzdGF0aWMgaW50IHM1cF9tZmNfc2V0X2RlY19mcmFtZV9idWZmZXJfdjYoc3RydWN0IHM1cF9t ZmNfY3R4ICpjdHgpDQo+ID4gIAl3cml0ZWwoY3R4LT50b3RhbF9kcGJfY291bnQsIG1mY19yZWdz LT5kX251bV9kcGIpOw0KPiA+ICAJd3JpdGVsKGN0eC0+bHVtYV9zaXplLCBtZmNfcmVncy0+ZF9m aXJzdF9wbGFuZV9kcGJfc2l6ZSk7DQo+ID4gIAl3cml0ZWwoY3R4LT5jaHJvbWFfc2l6ZSwgbWZj X3JlZ3MtPmRfc2Vjb25kX3BsYW5lX2RwYl9zaXplKTsNCj4gPiAtDQo+ID4gKwlpZiAoY3R4LT5k c3RfZm10LT5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX1lVVjQyME0gfHwNCj4gPiArCQkJY3R4LT5k c3RfZm10LT5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX1lWVTQyME0pDQo+ID4gKwkJd3JpdGVsKGN0 eC0+Y2hyb21hX3NpemVfMSwgbWZjX3JlZ3MtDQo+ID5kX3RoaXJkX3BsYW5lX2RwYl9zaXplKTsN Cj4gPiAgCXdyaXRlbChidWZfYWRkcjEsIG1mY19yZWdzLT5kX3NjcmF0Y2hfYnVmZmVyX2FkZHIp Ow0KPiA+ICAJd3JpdGVsKGN0eC0+c2NyYXRjaF9idWZfc2l6ZSwgbWZjX3JlZ3MtPmRfc2NyYXRj aF9idWZmZXJfc2l6ZSk7DQo+ID4NCj4gPiAgCWlmIChJU19NRkNWOF9QTFVTKGRldikpIHsNCj4g PiAtCQl3cml0ZWwoY3R4LT5pbWdfd2lkdGgsDQo+ID4gKwkJd3JpdGVsKGN0eC0+c3RyaWRlWzBd LA0KPiA+ICAJCQltZmNfcmVncy0+ZF9maXJzdF9wbGFuZV9kcGJfc3RyaWRlX3NpemUpOw0KPiA+ IC0JCXdyaXRlbChjdHgtPmltZ193aWR0aCwNCj4gPiArCQl3cml0ZWwoY3R4LT5zdHJpZGVbMV0s DQo+ID4gIAkJCW1mY19yZWdzLT5kX3NlY29uZF9wbGFuZV9kcGJfc3RyaWRlX3NpemUpOw0KPiA+ ICsJCWlmIChjdHgtPmRzdF9mbXQtPmZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfWVVWNDIwTSB8fA0K PiA+ICsJCQkJY3R4LT5kc3RfZm10LT5mb3VyY2MgPT0NCj4gVjRMMl9QSVhfRk1UX1lWVTQyME0p DQo+ID4gKwkJCXdyaXRlbChjdHgtPnN0cmlkZVsyXSwNCj4gPiArCQkJCW1mY19yZWdzLT5kX3Ro aXJkX3BsYW5lX2RwYl9zdHJpZGVfc2l6ZSk7DQo+ID4gIAl9DQo+ID4NCj4gPiAgCWJ1Zl9hZGRy MSArPSBjdHgtPnNjcmF0Y2hfYnVmX3NpemU7DQo+ID4gQEAgLTYyNSw2ICs2OTYsMTMgQEAgc3Rh dGljIGludA0KPiBzNXBfbWZjX3NldF9kZWNfZnJhbWVfYnVmZmVyX3Y2KHN0cnVjdCBzNXBfbWZj X2N0eCAqY3R4KQ0KPiA+ICAJCQkJCWN0eC0+ZHN0X2J1ZnNbaV0uY29va2llLnJhdy5jaHJvbWEp Ow0KPiA+ICAJCXdyaXRlbChjdHgtPmRzdF9idWZzW2ldLmNvb2tpZS5yYXcuY2hyb21hLA0KPiA+ ICAJCQkJbWZjX3JlZ3MtPmRfc2Vjb25kX3BsYW5lX2RwYiArIGkgKiA0KTsNCj4gPiArCQlpZiAo Y3R4LT5kc3RfZm10LT5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX1lVVjQyME0gfHwNCj4gPiArCQkJ CWN0eC0+ZHN0X2ZtdC0+Zm91cmNjID09DQo+IFY0TDJfUElYX0ZNVF9ZVlU0MjBNKSB7DQo+ID4g KwkJCW1mY19kZWJ1ZygyLCAiXHRDaHJvbWFfMSAlZDogJXp4XG4iLCBpLA0KPiA+ICsJCQkJCWN0 eC0NCj4gPmRzdF9idWZzW2ldLmNvb2tpZS5yYXcuY2hyb21hXzEpOw0KPiA+ICsJCQl3cml0ZWwo Y3R4LT5kc3RfYnVmc1tpXS5jb29raWUucmF3LmNocm9tYV8xLA0KPiA+ICsJCQkJCW1mY19yZWdz LT5kX3RoaXJkX3BsYW5lX2RwYiArIGkgKg0KPiA0KTsNCj4gPiArCQl9DQo+ID4gIAl9DQo+ID4g IAlpZiAoY3R4LT5jb2RlY19tb2RlID09IFM1UF9NRkNfQ09ERUNfSDI2NF9ERUMgfHwNCj4gPiAg CQkJY3R4LT5jb2RlY19tb2RlID09DQo+IFM1UF9NRkNfQ09ERUNfSDI2NF9NVkNfREVDIHx8IEBA IC02ODMsMjANCj4gPiArNzYxLDI0IEBAIHN0YXRpYyBpbnQgczVwX21mY19zZXRfZW5jX3N0cmVh bV9idWZmZXJfdjYoc3RydWN0DQo+ID4gczVwX21mY19jdHggKmN0eCwgIH0NCj4gPg0KPiA+ICBz dGF0aWMgdm9pZCBzNXBfbWZjX3NldF9lbmNfZnJhbWVfYnVmZmVyX3Y2KHN0cnVjdCBzNXBfbWZj X2N0eCAqY3R4LA0KPiA+IC0JCXVuc2lnbmVkIGxvbmcgeV9hZGRyLCB1bnNpZ25lZCBsb25nIGNf YWRkcikNCj4gPiArCQl1bnNpZ25lZCBsb25nIHlfYWRkciwgdW5zaWduZWQgbG9uZyBjX2FkZHIs DQo+ID4gKwkJdW5zaWduZWQgbG9uZyBjXzFfYWRkcikNCj4gPiAgew0KPiA+ICAJc3RydWN0IHM1 cF9tZmNfZGV2ICpkZXYgPSBjdHgtPmRldjsNCj4gPiAgCWNvbnN0IHN0cnVjdCBzNXBfbWZjX3Jl Z3MgKm1mY19yZWdzID0gZGV2LT5tZmNfcmVnczsNCj4gPg0KPiA+ICAJd3JpdGVsKHlfYWRkciwg bWZjX3JlZ3MtPmVfc291cmNlX2ZpcnN0X3BsYW5lX2FkZHIpOw0KPiA+ICAJd3JpdGVsKGNfYWRk ciwgbWZjX3JlZ3MtPmVfc291cmNlX3NlY29uZF9wbGFuZV9hZGRyKTsNCj4gPiArCXdyaXRlbChj XzFfYWRkciwgbWZjX3JlZ3MtPmVfc291cmNlX3RoaXJkX3BsYW5lX2FkZHIpOw0KPiA+DQo+ID4g IAltZmNfZGVidWcoMiwgImVuYyBzcmMgeSBidWYgYWRkcjogMHglMDhseFxuIiwgeV9hZGRyKTsN Cj4gPiAgCW1mY19kZWJ1ZygyLCAiZW5jIHNyYyBjIGJ1ZiBhZGRyOiAweCUwOGx4XG4iLCBjX2Fk ZHIpOw0KPiA+ICsJbWZjX2RlYnVnKDIsICJlbmMgc3JjIGNyIGJ1ZiBhZGRyOiAweCUwOGx4XG4i LCBjXzFfYWRkcik7DQo+ID4gIH0NCj4gPg0KPiA+ICBzdGF0aWMgdm9pZCBzNXBfbWZjX2dldF9l bmNfZnJhbWVfYnVmZmVyX3Y2KHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4LA0KPiA+IC0JCXVuc2ln bmVkIGxvbmcgKnlfYWRkciwgdW5zaWduZWQgbG9uZyAqY19hZGRyKQ0KPiA+ICsJCXVuc2lnbmVk IGxvbmcgKnlfYWRkciwgdW5zaWduZWQgbG9uZyAqY19hZGRyLA0KPiA+ICsJCXVuc2lnbmVkIGxv bmcgKmNfMV9hZGRyKQ0KPiA+ICB7DQo+ID4gIAlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IGN0 eC0+ZGV2Ow0KPiA+ICAJY29uc3Qgc3RydWN0IHM1cF9tZmNfcmVncyAqbWZjX3JlZ3MgPSBkZXYt Pm1mY19yZWdzOyBAQCAtNzA0LDEyDQo+ID4gKzc4NiwxNyBAQCBzdGF0aWMgdm9pZCBzNXBfbWZj X2dldF9lbmNfZnJhbWVfYnVmZmVyX3Y2KHN0cnVjdA0KPiA+IHM1cF9tZmNfY3R4ICpjdHgsDQo+ ID4NCj4gPiAgCSp5X2FkZHIgPSByZWFkbChtZmNfcmVncy0+ZV9lbmNvZGVkX3NvdXJjZV9maXJz dF9wbGFuZV9hZGRyKTsNCj4gPiAgCSpjX2FkZHIgPSByZWFkbChtZmNfcmVncy0NCj4gPmVfZW5j b2RlZF9zb3VyY2Vfc2Vjb25kX3BsYW5lX2FkZHIpOw0KPiA+ICsJaWYgKGN0eC0+c3JjX2ZtdC0+ Zm91cmNjID09IFY0TDJfUElYX0ZNVF9ZVVY0MjBNIHx8DQo+ID4gKwkJCWN0eC0+c3JjX2ZtdC0+ Zm91cmNjID09IFY0TDJfUElYX0ZNVF9ZVlU0MjBNKQ0KPiA+ICsJCSpjXzFfYWRkciA9IHJlYWRs KG1mY19yZWdzLQ0KPiA+ZV9lbmNvZGVkX3NvdXJjZV90aGlyZF9wbGFuZV9hZGRyKTsNCj4gPiAr CWVsc2UNCj4gPiArCQkqY18xX2FkZHIgPSAwOw0KPiA+DQo+ID4gIAllbmNfcmVjb25feV9hZGRy ID0gcmVhZGwobWZjX3JlZ3MtPmVfcmVjb25fbHVtYV9kcGJfYWRkcik7DQo+ID4gIAllbmNfcmVj b25fY19hZGRyID0gcmVhZGwobWZjX3JlZ3MtPmVfcmVjb25fY2hyb21hX2RwYl9hZGRyKTsNCj4g Pg0KPiA+ICAJbWZjX2RlYnVnKDIsICJyZWNvbiB5IGFkZHI6IDB4JTA4bHggeV9hZGRyOiAweCUw OGx4XG4iLA0KPiBlbmNfcmVjb25feV9hZGRyLCAqeV9hZGRyKTsNCj4gPiAtCW1mY19kZWJ1Zygy LCAicmVjb24gYyBhZGRyOiAweCUwOGx4XG4iLCBlbmNfcmVjb25fY19hZGRyKTsNCj4gPiArCW1m Y19kZWJ1ZygyLCAicmVjb24gYyBhZGRyOiAweCUwOGx4IGNfYWRkcjogMHglMDhseFxuIiwNCj4g PiArZW5jX3JlY29uX2NfYWRkciwgKmNfYWRkcik7DQo+ID4gIH0NCj4gPg0KPiA+ICAvKiBTZXQg ZW5jb2RpbmcgcmVmICYgY29kZWMgYnVmZmVyICovIEBAIC04ODYsNiArOTczLDIwIEBAIHN0YXRp YyBpbnQNCj4gPiBzNXBfbWZjX3NldF9lbmNfcGFyYW1zKHN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4 KQ0KPiA+ICAJCXdyaXRlbChyZWcsIG1mY19yZWdzLT5lX2VuY19vcHRpb25zKTsNCj4gPiAgCQkv KiAwOiBOVjEyKENiQ3IpLCAxOiBOVjIxKENyQ2IpICovDQo+ID4gIAkJd3JpdGVsKDB4MCwgbWZj X3JlZ3MtPnBpeGVsX2Zvcm1hdCk7DQo+ID4gKwl9IGVsc2UgaWYgKGN0eC0+c3JjX2ZtdC0+Zm91 cmNjID09IFY0TDJfUElYX0ZNVF9ZVlU0MjBNKSB7DQo+ID4gKwkJLyogMDogTGluZWFyLCAxOiAy RCB0aWxlZCovDQo+ID4gKwkJcmVnID0gcmVhZGwobWZjX3JlZ3MtPmVfZW5jX29wdGlvbnMpOw0K PiA+ICsJCXJlZyAmPSB+KDB4MSA8PCA3KTsNCj4gPiArCQl3cml0ZWwocmVnLCBtZmNfcmVncy0+ ZV9lbmNfb3B0aW9ucyk7DQo+ID4gKwkJLyogMjogWVYxMihDckNiKSwgMzogSTQyMChDckNiKSAq Lw0KPiA+ICsJCXdyaXRlbCgweDIsIG1mY19yZWdzLT5waXhlbF9mb3JtYXQpOw0KPiA+ICsJfSBl bHNlIGlmIChjdHgtPnNyY19mbXQtPmZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfWVVWNDIwTSkgew0K PiA+ICsJCS8qIDA6IExpbmVhciwgMTogMkQgdGlsZWQqLw0KPiA+ICsJCXJlZyA9IHJlYWRsKG1m Y19yZWdzLT5lX2VuY19vcHRpb25zKTsNCj4gPiArCQlyZWcgJj0gfigweDEgPDwgNyk7DQo+ID4g KwkJd3JpdGVsKHJlZywgbWZjX3JlZ3MtPmVfZW5jX29wdGlvbnMpOw0KPiA+ICsJCS8qIDI6IFlW MTIoQ3JDYiksIDM6IEk0MjAoQ3JDYikgKi8NCj4gPiArCQl3cml0ZWwoMHgzLCBtZmNfcmVncy0+ cGl4ZWxfZm9ybWF0KTsNCj4gPiAgCX0NCj4gPg0KPiA+ICAJLyogbWVtb3J5IHN0cnVjdHVyZSBy ZWNvbi4gZnJhbWUgKi8NCj4gPiBAQCAtMTY5Niw4ICsxNzk3LDEyIEBAIHN0YXRpYyBpbnQgczVw X21mY19pbml0X2RlY29kZV92NihzdHJ1Y3QNCj4gczVwX21mY19jdHggKmN0eCkNCj4gPiAgCWVs c2UNCj4gPiAgCQl3cml0ZWwocmVnLCBtZmNfcmVncy0+ZF9kZWNfb3B0aW9ucyk7DQo+ID4NCj4g PiAtCS8qIDA6IE5WMTIoQ2JDciksIDE6IE5WMjEoQ3JDYikgKi8NCj4gPiAtCWlmIChjdHgtPmRz dF9mbXQtPmZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfTlYyMU0pDQo+ID4gKwkvKiAwOiBOVjEyKENi Q3IpLCAxOiBOVjIxKENyQ2IpLCAyOiBZVjEyKENyQ2IpLCAzOiBJNDIwKENiQ3IpICovDQo+ID4g KwlpZiAoY3R4LT5kc3RfZm10LT5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX1lVVjQyME0pDQo+ID4g KwkJd3JpdGVsKDB4MywgbWZjX3JlZ3MtPnBpeGVsX2Zvcm1hdCk7DQo+ID4gKwllbHNlIGlmIChj dHgtPmRzdF9mbXQtPmZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfWVZVNDIwTSkNCj4gPiArCQl3cml0 ZWwoMHgyLCBtZmNfcmVncy0+cGl4ZWxfZm9ybWF0KTsNCj4gPiArCWVsc2UgaWYgKGN0eC0+ZHN0 X2ZtdC0+Zm91cmNjID09IFY0TDJfUElYX0ZNVF9OVjIxTSkNCj4gPiAgCQl3cml0ZWwoMHgxLCBt ZmNfcmVncy0+cGl4ZWxfZm9ybWF0KTsNCj4gPiAgCWVsc2UNCj4gPiAgCQl3cml0ZWwoMHgwLCBt ZmNfcmVncy0+cGl4ZWxfZm9ybWF0KTsgQEAgLTE3ODEsOCArMTg4NiwxMg0KPiBAQCBzdGF0aWMN Cj4gPiBpbnQgczVwX21mY19pbml0X2VuY29kZV92NihzdHJ1Y3QgczVwX21mY19jdHggKmN0eCkN Cj4gPg0KPiA+ICAJLyogU2V0IHN0cmlkZSBsZW5ndGhzIGZvciB2NyAmIGFib3ZlICovDQo+ID4g IAlpZiAoSVNfTUZDVjdfUExVUyhkZXYpKSB7DQo+ID4gLQkJd3JpdGVsKGN0eC0+aW1nX3dpZHRo LCBtZmNfcmVncy0NCj4gPmVfc291cmNlX2ZpcnN0X3BsYW5lX3N0cmlkZSk7DQo+ID4gLQkJd3Jp dGVsKGN0eC0+aW1nX3dpZHRoLCBtZmNfcmVncy0NCj4gPmVfc291cmNlX3NlY29uZF9wbGFuZV9z dHJpZGUpOw0KPiA+ICsJCXdyaXRlbChjdHgtPnN0cmlkZVswXSwgbWZjX3JlZ3MtDQo+ID5lX3Nv dXJjZV9maXJzdF9wbGFuZV9zdHJpZGUpOw0KPiA+ICsJCXdyaXRlbChjdHgtPnN0cmlkZVsxXSwg bWZjX3JlZ3MtDQo+ID5lX3NvdXJjZV9zZWNvbmRfcGxhbmVfc3RyaWRlKTsNCj4gPiArCQlpZiAo Y3R4LT5zcmNfZm10LT5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX1lVVjQyME0gfHwNCj4gPiArCQkJ CWN0eC0+c3JjX2ZtdC0+Zm91cmNjID09DQo+IFY0TDJfUElYX0ZNVF9ZVlU0MjBNKQ0KPiA+ICsJ CQl3cml0ZWwoY3R4LT5zdHJpZGVbMl0sDQo+ID4gKwkJCQkJbWZjX3JlZ3MtDQo+ID5lX3NvdXJj ZV90aGlyZF9wbGFuZV9zdHJpZGUpOw0KPiA+ICAJfQ0KPiA+DQo+ID4gIAl3cml0ZWwoY3R4LT5p bnN0X25vLCBtZmNfcmVncy0+aW5zdGFuY2VfaWQpOyBAQCAtMTg5MSw3ICsyMDAwLDcNCj4gQEAN Cj4gPiBzdGF0aWMgaW5saW5lIGludCBzNXBfbWZjX3J1bl9lbmNfZnJhbWUoc3RydWN0IHM1cF9t ZmNfY3R4ICpjdHgpDQo+ID4gIAlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IGN0eC0+ZGV2Ow0K PiA+ICAJc3RydWN0IHM1cF9tZmNfYnVmICpkc3RfbWI7DQo+ID4gIAlzdHJ1Y3QgczVwX21mY19i dWYgKnNyY19tYjsNCj4gPiAtCXVuc2lnbmVkIGxvbmcgc3JjX3lfYWRkciwgc3JjX2NfYWRkciwg ZHN0X2FkZHI7DQo+ID4gKwl1bnNpZ25lZCBsb25nIHNyY195X2FkZHIsIHNyY19jX2FkZHIsIHNy Y19jXzFfYWRkciwgZHN0X2FkZHI7DQo+ID4gIAkvKg0KPiA+ICAJdW5zaWduZWQgaW50IHNyY195 X3NpemUsIHNyY19jX3NpemU7DQo+ID4gIAkqLw0KPiA+IEBAIC0xOTA5LDIyICsyMDE4LDI5IEBA IHN0YXRpYyBpbmxpbmUgaW50IHM1cF9tZmNfcnVuX2VuY19mcmFtZShzdHJ1Y3QNCj4gPiBzNXBf bWZjX2N0eCAqY3R4KQ0KPiA+DQo+ID4gIAlpZiAobGlzdF9lbXB0eSgmY3R4LT5zcmNfcXVldWUp KSB7DQo+ID4gIAkJLyogc2VuZCBudWxsIGZyYW1lICovDQo+ID4gLQkJczVwX21mY19zZXRfZW5j X2ZyYW1lX2J1ZmZlcl92NihjdHgsIDAsIDApOw0KPiA+ICsJCXM1cF9tZmNfc2V0X2VuY19mcmFt ZV9idWZmZXJfdjYoY3R4LCAwLCAwLCAwKTsNCj4gPiAgCQlzcmNfbWIgPSBOVUxMOw0KPiA+ICAJ fSBlbHNlIHsNCj4gPiAgCQlzcmNfbWIgPSBsaXN0X2VudHJ5KGN0eC0+c3JjX3F1ZXVlLm5leHQs IHN0cnVjdA0KPiBzNXBfbWZjX2J1ZiwgbGlzdCk7DQo+ID4gIAkJc3JjX21iLT5mbGFncyB8PSBN RkNfQlVGX0ZMQUdfVVNFRDsNCj4gPiAgCQlpZiAoc3JjX21iLT5iLT52YjJfYnVmLnBsYW5lc1sw XS5ieXRlc3VzZWQgPT0gMCkgew0KPiA+IC0JCQlzNXBfbWZjX3NldF9lbmNfZnJhbWVfYnVmZmVy X3Y2KGN0eCwgMCwgMCk7DQo+ID4gKwkJCXM1cF9tZmNfc2V0X2VuY19mcmFtZV9idWZmZXJfdjYo Y3R4LCAwLCAwLCAwKTsNCj4gPiAgCQkJY3R4LT5zdGF0ZSA9IE1GQ0lOU1RfRklOSVNISU5HOw0K PiA+ICAJCX0gZWxzZSB7DQo+ID4gIAkJCXNyY195X2FkZHIgPQ0KPiB2YjJfZG1hX2NvbnRpZ19w bGFuZV9kbWFfYWRkcigmc3JjX21iLT5iLT52YjJfYnVmLCAwKTsNCj4gPiAgCQkJc3JjX2NfYWRk ciA9DQo+IHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9hZGRyKCZzcmNfbWItPmItPnZiMl9idWYs DQo+ID4gMSk7DQo+ID4gKwkJCWlmIChjdHgtPnNyY19mbXQtPmZvdXJjYyA9PQ0KPiBWNEwyX1BJ WF9GTVRfWVVWNDIwTSB8fA0KPiA+ICsJCQkJY3R4LT5zcmNfZm10LT5mb3VyY2MgPT0NCj4gVjRM Ml9QSVhfRk1UX1lWVTQyME0pDQo+ID4gKwkJCQlzcmNfY18xX2FkZHIgPQ0KPiB2YjJfZG1hX2Nv bnRpZ19wbGFuZV9kbWFfYWRkcg0KPiA+ICsJCQkJCQkoJnNyY19tYi0+Yi0+dmIyX2J1ZiwgMik7 DQo+ID4gKwkJCWVsc2UNCj4gPiArCQkJCXNyY19jXzFfYWRkciA9IDA7DQo+ID4NCj4gPiAgCQkJ bWZjX2RlYnVnKDIsICJlbmMgc3JjIHkgYWRkcjogMHglMDhseFxuIiwNCj4gc3JjX3lfYWRkcik7 DQo+ID4gIAkJCW1mY19kZWJ1ZygyLCAiZW5jIHNyYyBjIGFkZHI6IDB4JTA4bHhcbiIsDQo+IHNy Y19jX2FkZHIpOw0KPiA+DQo+ID4gLQkJCXM1cF9tZmNfc2V0X2VuY19mcmFtZV9idWZmZXJfdjYo Y3R4LCBzcmNfeV9hZGRyLA0KPiBzcmNfY19hZGRyKTsNCj4gPiArCQkJczVwX21mY19zZXRfZW5j X2ZyYW1lX2J1ZmZlcl92NihjdHgsIHNyY195X2FkZHIsDQo+ID4gKwkJCQkJCXNyY19jX2FkZHIs IHNyY19jXzFfYWRkcik7DQo+ID4gIAkJCWlmIChzcmNfbWItPmZsYWdzICYgTUZDX0JVRl9GTEFH X0VPUykNCj4gPiAgCQkJCWN0eC0+c3RhdGUgPSBNRkNJTlNUX0ZJTklTSElORzsNCj4gPiAgCQl9 DQo+ID4gQEAgLTI0NTAsNiArMjU2Niw4IEBAIGNvbnN0IHN0cnVjdCBzNXBfbWZjX3JlZ3MNCj4g KnM1cF9tZmNfaW5pdF9yZWdzX3Y2X3BsdXMoc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYpDQo+ID4g IAkJCVM1UF9GSU1WX0VfRU5DT0RFRF9TT1VSQ0VfRklSU1RfQUREUl9WNyk7DQo+ID4gIAlSKGVf ZW5jb2RlZF9zb3VyY2Vfc2Vjb25kX3BsYW5lX2FkZHIsDQo+ID4NCj4gCVM1UF9GSU1WX0VfRU5D T0RFRF9TT1VSQ0VfU0VDT05EX0FERFJfVjcpOw0KPiA+ICsJUihlX2VuY29kZWRfc291cmNlX3Ro aXJkX3BsYW5lX2FkZHIsDQo+ID4gKwkJCVM1UF9GSU1WX0VfRU5DT0RFRF9TT1VSQ0VfVEhJUkRf QUREUl9WNyk7DQo+ID4gIAlSKGVfdnA4X29wdGlvbnMsIFM1UF9GSU1WX0VfVlA4X09QVElPTlNf VjcpOw0KPiA+DQo+ID4gIAlpZiAoIUlTX01GQ1Y4X1BMVVMoZGV2KSkNCj4gPiBAQCAtMjQ2NCwx NiArMjU4MiwyMCBAQCBjb25zdCBzdHJ1Y3QgczVwX21mY19yZWdzDQo+ICpzNXBfbWZjX2luaXRf cmVnc192Nl9wbHVzKHN0cnVjdCBzNXBfbWZjX2RldiAqZGV2KQ0KPiA+ICAJUihkX2NwYl9idWZm ZXJfb2Zmc2V0LCBTNVBfRklNVl9EX0NQQl9CVUZGRVJfT0ZGU0VUX1Y4KTsNCj4gPiAgCVIoZF9m aXJzdF9wbGFuZV9kcGJfc2l6ZSwNCj4gUzVQX0ZJTVZfRF9GSVJTVF9QTEFORV9EUEJfU0laRV9W OCk7DQo+ID4gIAlSKGRfc2Vjb25kX3BsYW5lX2RwYl9zaXplLA0KPiBTNVBfRklNVl9EX1NFQ09O RF9QTEFORV9EUEJfU0laRV9WOCk7DQo+ID4gKwlSKGRfdGhpcmRfcGxhbmVfZHBiX3NpemUsDQo+ IFM1UF9GSU1WX0RfVEhJUkRfUExBTkVfRFBCX1NJWkVfVjgpOw0KPiA+ICAJUihkX3NjcmF0Y2hf YnVmZmVyX2FkZHIsDQo+IFM1UF9GSU1WX0RfU0NSQVRDSF9CVUZGRVJfQUREUl9WOCk7DQo+ID4g IAlSKGRfc2NyYXRjaF9idWZmZXJfc2l6ZSwgUzVQX0ZJTVZfRF9TQ1JBVENIX0JVRkZFUl9TSVpF X1Y4KTsNCj4gPiAgCVIoZF9maXJzdF9wbGFuZV9kcGJfc3RyaWRlX3NpemUsDQo+ID4gIAkJCVM1 UF9GSU1WX0RfRklSU1RfUExBTkVfRFBCX1NUUklERV9TSVpFX1Y4KTsNCj4gPiAgCVIoZF9zZWNv bmRfcGxhbmVfZHBiX3N0cmlkZV9zaXplLA0KPiA+DQo+IAlTNVBfRklNVl9EX1NFQ09ORF9QTEFO RV9EUEJfU1RSSURFX1NJWkVfVjgpOw0KPiA+ICsJUihkX3RoaXJkX3BsYW5lX2RwYl9zdHJpZGVf c2l6ZSwNCj4gPiArCQkJUzVQX0ZJTVZfRF9USElSRF9QTEFORV9EUEJfU1RSSURFX1NJWkVfVjgp Ow0KPiA+ICAJUihkX212X2J1ZmZlcl9zaXplLCBTNVBfRklNVl9EX01WX0JVRkZFUl9TSVpFX1Y4 KTsNCj4gPiAgCVIoZF9udW1fbXYsIFM1UF9GSU1WX0RfTlVNX01WX1Y4KTsNCj4gPiAgCVIoZF9m aXJzdF9wbGFuZV9kcGIsIFM1UF9GSU1WX0RfRklSU1RfUExBTkVfRFBCX1Y4KTsNCj4gPiAgCVIo ZF9zZWNvbmRfcGxhbmVfZHBiLCBTNVBfRklNVl9EX1NFQ09ORF9QTEFORV9EUEJfVjgpOw0KPiA+ ICsJUihkX3RoaXJkX3BsYW5lX2RwYiwgUzVQX0ZJTVZfRF9USElSRF9QTEFORV9EUEJfVjgpOw0K PiA+ICAJUihkX212X2J1ZmZlciwgUzVQX0ZJTVZfRF9NVl9CVUZGRVJfVjgpOw0KPiA+ICAJUihk X2luaXRfYnVmZmVyX29wdGlvbnMsIFM1UF9GSU1WX0RfSU5JVF9CVUZGRVJfT1BUSU9OU19WOCk7 DQo+ID4gIAlSKGRfYXZhaWxhYmxlX2RwYl9mbGFnX2xvd2VyLA0KPiA+IFM1UF9GSU1WX0RfQVZB SUxBQkxFX0RQQl9GTEFHX0xPV0VSX1Y4KTsNCg0KDQoKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0Cmxp bnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFk Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK