xv6

port of xv6 to x86-64
git clone http://frotz.net/git/xv6.git
Log | Files | Refs | README | LICENSE

mp.h (2118B)


      1 // See MultiProcessor Specification Version 1.[14]
      2 
      3 struct mp {             // floating pointer
      4   uchar signature[4];           // "_MP_"
      5   uint  physaddr;               // phys addr of MP config table
      6   uchar length;                 // 1
      7   uchar specrev;                // [14]
      8   uchar checksum;               // all bytes must add up to 0
      9   uchar type;                   // MP system config type
     10   uchar imcrp;
     11   uchar reserved[3];
     12 };
     13 
     14 struct mpconf {         // configuration table header
     15   uchar signature[4];           // "PCMP"
     16   ushort length;                // total table length
     17   uchar version;                // [14]
     18   uchar checksum;               // all bytes must add up to 0
     19   uchar product[20];            // product id
     20   uint  oemtable;               // OEM table pointer
     21   ushort oemlength;             // OEM table length
     22   ushort entry;                 // entry count
     23   uint  lapicaddr;              // address of local APIC
     24   ushort xlength;               // extended table length
     25   uchar xchecksum;              // extended table checksum
     26   uchar reserved;
     27 };
     28 
     29 struct mpproc {         // processor table entry
     30   uchar type;                   // entry type (0)
     31   uchar apicid;                 // local APIC id
     32   uchar version;                // local APIC verison
     33   uchar flags;                  // CPU flags
     34     #define MPBOOT 0x02           // This proc is the bootstrap processor.
     35   uchar signature[4];           // CPU signature
     36   uint feature;                 // feature flags from CPUID instruction
     37   uchar reserved[8];
     38 };
     39 
     40 struct mpioapic {       // I/O APIC table entry
     41   uchar type;                   // entry type (2)
     42   uchar apicno;                 // I/O APIC id
     43   uchar version;                // I/O APIC version
     44   uchar flags;                  // I/O APIC flags
     45   uint  addr;                  // I/O APIC address
     46 };
     47 
     48 // Table entry types
     49 #define MPPROC    0x00  // One per processor
     50 #define MPBUS     0x01  // One per bus
     51 #define MPIOAPIC  0x02  // One per I/O APIC
     52 #define MPIOINTR  0x03  // One per bus interrupt source
     53 #define MPLINTR   0x04  // One per system interrupt source
     54