+++ /dev/null
-/*
- * General data structures and routines for segmentation
- * Copyright (c) 2001, David H. Hovemeyer <daveho@cs.umd.edu>
- * $Revision: 1.1 $
- *
- * This is free software. You are permitted to use,
- * redistribute, and modify it as specified in the file "COPYING".
- */
-
-/*
- * Source: _Protected Mode Software Architecture_ by Tom Shanley,
- * ISBN 020155447X.
- */
-
-#ifndef GEEKOS_SEGMENT_H
-#define GEEKOS_SEGMENT_H
-
-#include <geekos/ktypes.h>
-
-struct TSS;
-
-#if __TINYC__
-#define PACKED
-#else
-#define PACKED __attribute__((packed))
-#endif
-
-/*
- * The general format of a segment descriptor.
- */
-struct Segment_Descriptor {
- ushort_t sizeLow PACKED ;
- uint_t baseLow : 24 PACKED ;
- uint_t type : 4 PACKED ;
- uint_t system : 1 PACKED ;
- uint_t dpl : 2 PACKED ;
- uint_t present : 1 PACKED ;
- uint_t sizeHigh : 4 PACKED ;
- uint_t avail : 1 PACKED ;
- uint_t reserved : 1 PACKED ; /* set to zero */
- uint_t dbBit : 1 PACKED ;
- uint_t granularity : 1 PACKED ;
- uchar_t baseHigh PACKED ;
-};
-
-/**
- * Construct a segment selector.
- * @param rpl requestor privilege level; should be KERNEL_PRIVILEGE
- * for kernel segments and USER_PRIVILEGE for user segments
- * @param segmentIsInGDT true if the referenced segment descriptor
- * is defined in the GDT, false if it is defined in the LDT
- * @param index index of the segment descriptor
- * @return the segment selector
- */
-static __inline__ ushort_t Selector(int rpl, bool segmentIsInGDT, int index)
-{
- ushort_t selector = 0;
- selector = (rpl & 0x3) | ((segmentIsInGDT ? 0 : 1) << 2) | ((index & 0x1FFF) << 3);
- return selector;
-}
-
-/*
- * Routines to initialize segment descriptors.
- * Code and data segments must start on a page-aligned address
- * and are sized in pages.
- */
-
-void Init_Null_Segment_Descriptor(struct Segment_Descriptor* desc);
-
-void Init_Code_Segment_Descriptor(
- struct Segment_Descriptor* desc,
- ulong_t baseAddr,
- ulong_t numPages,
- int privilegeLevel
-);
-void Init_Data_Segment_Descriptor(
- struct Segment_Descriptor* desc,
- ulong_t baseAddr,
- ulong_t numPages,
- int privilegeLevel
-);
-void Init_TSS_Descriptor(struct Segment_Descriptor* desc, struct TSS* theTSS);
-
-void Init_LDT_Descriptor(
- struct Segment_Descriptor* desc,
- struct Segment_Descriptor theLDT[],
- int numEntries
-);
-
-#endif /* GEEKOS_SEGMENT_H */