www.pudn.com > COS0.0.1.rar > tss.h


/*
 tss.h - TSS definitions
  
 Created:       31/08/04
 Last Modified: 02/09/04

	This stuff is taken from GeekOS,
		see "COPYING-GEEKOS"

	Modified for COS by Paul Barker.
*/

#ifndef _COS_TSS_H_
#define _COS_TSS_H_

/*
 The TSS struct is taken directly from GeekOS, my only addition
	is the typedef.

 Source for GeekOS: "Protected Mode Software Architecture" by Tom Shanley,
	ISBN 020155447X.
*/

// NOTE: all reserved fields must be set to zero.

// I should change the types but there's no real point

typedef struct _tss {
    // Link to nested task.  For example, if an interrupt is handled
    // by a task gate, the link field will contain the selector for
    // the TSS of the interrupted task.
    unsigned short link;
    unsigned short reserved1;

    // Stacks for privilege levels.  esp0/ss0 specifies the kernel stack.
    unsigned long esp0;
    unsigned short ss0;
    unsigned short reserved2;
    unsigned long esp1;
    unsigned short ss1;
    unsigned short reserved3;
    unsigned long esp2;
    unsigned short ss2;
    unsigned short reserved4;

    // Page directory register.
    unsigned long cr3;

    // General processor registers.
    unsigned long eip;
    unsigned long eflags;
    unsigned long eax;
    unsigned long ecx;
    unsigned long edx;
    unsigned long ebx;
    unsigned long esp;
    unsigned long ebp;
    unsigned long esi;
    unsigned long edi;

    // Segment registers and padding.
    unsigned short es;
    unsigned short reserved5;
    unsigned short cs;
    unsigned short reserved6;
    unsigned short ss;
    unsigned short reserved7;
    unsigned short ds;
    unsigned short reserved8;
    unsigned short fs;
    unsigned short reserved9;
    unsigned short gs;
    unsigned short reserved10;

    // GDT selector for the LDT descriptor.
    unsigned short ldt;
    unsigned short reserved11;

    // The debug trap bit causes a debug exception upon a switch
    // to the task specified by this TSS.
    unsigned int debugTrap : 1;
    unsigned int reserved12 : 15;

    // Offset in the TSS specifying where the io map is located.
    unsigned short ioMapBase;
}
tss_t;

typedef struct tss_segment
{
	tss_t	main_tss;
}
tss_segment_t;

#endif // !_COS_TSS_H_