Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 22 Sep 2002 23:48:00 -0700 (PDT)
From:      Peter Wemm <peter@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 17972 for review
Message-ID:  <200209230648.g8N6m0KY056730@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://people.freebsd.org/~peter/p4db/chv.cgi?CH=17972

Change 17972 by peter@peter_overcee on 2002/09/22 23:47:03

	split up the memory and system descriptors.  They have
	different sizes in 64 bit mode.

Affected files ...

.. //depot/projects/hammer/sys/x86_64/include/segments.h#6 edit

Differences ...

==== //depot/projects/hammer/sys/x86_64/include/segments.h#6 (text+ko) ====

@@ -42,7 +42,7 @@
 #define	_MACHINE_SEGMENTS_H_
 
 /*
- * 386 Segmentation Data Structures and definitions
+ * x86-64 Segmentation Data Structures and definitions
  *	William F. Jolitz (william@ernie.berkeley.edu) 6/20/1989
  */
 
@@ -60,7 +60,25 @@
 #define	GSEL(s,r)	(((s)<<3) | r)			/* a global selector */
 
 /*
- * Memory and System segment descriptors
+ * Memory segment descriptors (%cs, %ds etc for compatability apps. 32 bit wide)
+ */
+struct	segment_descriptor	{
+	unsigned sd_lolimit:16 ;	/* segment extent (lsb) */
+	unsigned sd_lobase:24 __attribute__ ((packed));
+					/* segment base address (lsb) */
+	unsigned sd_type:5 ;		/* segment type */
+	unsigned sd_dpl:2 ;		/* segment descriptor priority level */
+	unsigned sd_p:1 ;		/* segment descriptor present */
+	unsigned sd_hilimit:4 ;		/* segment extent (msb) */
+	unsigned sd_xx:1 ;		/* unused */
+	unsigned sd_l:2 ;		/* long mode (cs only) */
+	unsigned sd_def32:1 ;		/* default 32 vs 16 bit size */
+	unsigned sd_gran:1 ;		/* limit granularity (byte/page units)*/
+	unsigned sd_hibase:8 ;		/* segment base address  (msb) */
+};
+
+/*
+ * System segment descriptors (64 bit wide)
  */
 struct	segment_descriptor	{
 	unsigned sd_lolimit:16 ;	/* segment extent (lsb) */
@@ -75,10 +93,10 @@
 	unsigned sd_def32:1 ;		/* default 32 vs 16 bit size */
 	unsigned sd_gran:1 ;		/* limit granularity (byte/page units)*/
 	unsigned sd_hibase:8 ;		/* segment base address  (msb) */
-} ;
+};
 
 /*
- * Gate descriptors (e.g. indirect descriptors)
+ * Gate descriptors (e.g. indirect descriptors, trap, interrupt etc. 64 bit)
  */
 struct	gate_descriptor	{
 	unsigned gd_looffset:16 ;	/* gate offset (lsb) */
@@ -91,14 +109,6 @@
 	unsigned gd_hioffset:16 ;	/* gate offset (msb) */
 	unsigned gd_hihioffset:32 ;	/* gate offset (bits 32-63) */
 	unsigned gd_rsvd:32 ;		/* reserved */
-} ;
-
-/*
- * Generic descriptor
- */
-union	descriptor	{
-	struct	segment_descriptor sd;
-	struct	gate_descriptor gd;
 };
 
 	/* system segments and gate types */

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe p4-projects" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200209230648.g8N6m0KY056730>