From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KE44F-0006uJ-Vz for qemu-devel@nongnu.org; Wed, 02 Jul 2008 11:16:24 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KE44F-0006tP-G0 for qemu-devel@nongnu.org; Wed, 02 Jul 2008 11:16:23 -0400 Received: from [199.232.76.173] (port=41671 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KE44F-0006t3-8M for qemu-devel@nongnu.org; Wed, 02 Jul 2008 11:16:23 -0400 Received: from savannah.gnu.org ([199.232.41.3]:53854 helo=sv.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1KE44D-00018a-IO for qemu-devel@nongnu.org; Wed, 02 Jul 2008 11:16:22 -0400 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.63) (envelope-from ) id 1KE44C-0002ZY-JC for qemu-devel@nongnu.org; Wed, 02 Jul 2008 15:16:20 +0000 Received: from blueswir1 by cvs.savannah.gnu.org with local (Exim 4.63) (envelope-from ) id 1KE44C-0002ZA-3P for qemu-devel@nongnu.org; Wed, 02 Jul 2008 15:16:20 +0000 MIME-Version: 1.0 Errors-To: blueswir1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Blue Swirl Message-Id: Date: Wed, 02 Jul 2008 15:16:20 +0000 Subject: [Qemu-devel] [4821] Add rigid and flexible disk geometry page support Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Revision: 4821 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=4821 Author: blueswir1 Date: 2008-07-02 15:16:18 +0000 (Wed, 02 Jul 2008) Log Message: ----------- Add rigid and flexible disk geometry page support Modified Paths: -------------- trunk/hw/scsi-disk.c Modified: trunk/hw/scsi-disk.c =================================================================== --- trunk/hw/scsi-disk.c 2008-07-01 23:16:53 UTC (rev 4820) +++ trunk/hw/scsi-disk.c 2008-07-02 15:16:18 UTC (rev 4821) @@ -532,7 +532,76 @@ outbuf[2] = 0x80; /* Readonly. */ } p += 4; - if ((page == 8 || page == 0x3f)) { + if (page == 4) { + int cylinders, heads, secs; + + /* Rigid disk device geometry page. */ + p[0] = 4; + p[1] = 0x16; + /* if a geometry hint is available, use it */ + bdrv_get_geometry_hint(s->bdrv, &cylinders, &heads, &secs); + p[2] = (cylinders >> 16) & 0xff; + p[3] = (cylinders >> 8) & 0xff; + p[4] = cylinders & 0xff; + p[5] = heads & 0xff; + /* Write precomp start cylinder, disabled */ + p[6] = (cylinders >> 16) & 0xff; + p[7] = (cylinders >> 8) & 0xff; + p[8] = cylinders & 0xff; + /* Reduced current start cylinder, disabled */ + p[9] = (cylinders >> 16) & 0xff; + p[10] = (cylinders >> 8) & 0xff; + p[11] = cylinders & 0xff; + /* Device step rate [ns], 200ns */ + p[12] = 0; + p[13] = 200; + /* Landing zone cylinder */ + p[14] = 0xff; + p[15] = 0xff; + p[16] = 0xff; + /* Medium rotation rate [rpm], 5400 rpm */ + p[20] = (5400 >> 8) & 0xff; + p[21] = 5400 & 0xff; + p += 0x16; + } else if (page == 5) { + int cylinders, heads, secs; + + /* Flexible disk device geometry page. */ + p[0] = 5; + p[1] = 0x1e; + /* Transfer rate [kbit/s], 5Mbit/s */ + p[2] = 5000 >> 8; + p[3] = 5000 & 0xff; + /* if a geometry hint is available, use it */ + bdrv_get_geometry_hint(s->bdrv, &cylinders, &heads, &secs); + p[4] = heads & 0xff; + p[5] = secs & 0xff; + p[6] = s->cluster_size * 2; + p[8] = (cylinders >> 8) & 0xff; + p[9] = cylinders & 0xff; + /* Write precomp start cylinder, disabled */ + p[10] = (cylinders >> 8) & 0xff; + p[11] = cylinders & 0xff; + /* Reduced current start cylinder, disabled */ + p[12] = (cylinders >> 8) & 0xff; + p[13] = cylinders & 0xff; + /* Device step rate [100us], 100us */ + p[14] = 0; + p[15] = 1; + /* Device step pulse width [us], 1us */ + p[16] = 1; + /* Device head settle delay [100us], 100us */ + p[17] = 0; + p[18] = 1; + /* Motor on delay [0.1s], 0.1s */ + p[19] = 1; + /* Motor off delay [0.1s], 0.1s */ + p[20] = 1; + /* Medium rotation rate [rpm], 5400 rpm */ + p[28] = (5400 >> 8) & 0xff; + p[29] = 5400 & 0xff; + p += 0x1e; + } else if ((page == 8 || page == 0x3f)) { /* Caching page. */ memset(p,0,20); p[0] = 8;