Changeset 8cd140f2 in mainline for kernel/arch/ia32xen/include


Ignore:
Timestamp:
2006-12-11T14:14:46Z (19 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
134877d
Parents:
b82a13c
Message:

update for Xen

Location:
kernel/arch/ia32xen/include
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia32xen/include/boot/boot.h

    rb82a13c r8cd140f2  
    118118        pfn_t store_mfn;            /**< Shared page (machine page) */
    119119        evtchn_t store_evtchn;      /**< Event channel for store communication */
    120         pfn_t console_mfn;          /**< Console page (machine page) */
    121         evtchn_t console_evtchn;    /**< Event channel for console messages */
     120       
     121        union {
     122        struct {
     123                        pfn_t mfn;          /**< Console page (machine page) */
     124                        evtchn_t evtchn;    /**< Event channel for console messages */
     125        } domU;
     126               
     127        struct {
     128            uint32_t info_off;  /**< Offset of console_info struct */
     129            uint32_t info_size; /**< Size of console_info struct from start */
     130        } dom0;
     131    } console;
     132       
    122133        pte_t *ptl0;                /**< Boot PTL0 (kernel address) */
    123134        uint32_t pt_frames;         /**< Number of bootstrap page table frames */
     
    127138        int8_t cmd_line[GUEST_CMDLINE];
    128139} start_info_t;
     140
     141#define XEN_CONSOLE_VGA         0x03
     142#define XEN_CONSOLE_VESA        0x23
     143
     144typedef struct {
     145    uint8_t video_type; 
     146
     147    union {
     148        struct {
     149            uint16_t font_height;
     150            uint16_t cursor_x;
     151                        uint16_t cursor_y;
     152            uint16_t rows;
     153                        uint16_t columns;
     154        } vga;
     155
     156        struct {
     157            uint16_t width;
     158                        uint16_t height;
     159            uint16_t bytes_per_line;
     160            uint16_t bits_per_pixel;
     161            uint32_t lfb_base;
     162            uint32_t lfb_size;
     163            uint8_t red_pos;
     164                        uint8_t red_size;
     165            uint8_t green_pos;
     166                        uint8_t green_size;
     167            uint8_t blue_pos;
     168                        uint8_t blue_size;
     169            uint8_t rsvd_pos;
     170                        uint8_t rsvd_size;
     171        } vesa_lfb;
     172    } info;
     173} console_info_t;
    129174
    130175typedef struct {
  • kernel/arch/ia32xen/include/hypercall.h

    rb82a13c r8cd140f2  
    6262#define XEN_VERSION                             17
    6363#define XEN_CONSOLE_IO                  18
    64 #define XEN_VM_ASSIST                   21
    6564#define XEN_MMUEXT_OP                   26
    6665
     
    102101
    103102
    104 /*
    105  * Commands to XEN_VM_ASSIST
    106  */
    107 #define VMASST_CMD_ENABLE                               0
    108 #define VMASST_CMD_DISABLE                              1
    109 #define VMASST_TYPE_4GB_SEGMENTS                0
    110 #define VMASST_TYPE_4GB_SEGMENTS_NOTIFY 1
    111 #define VMASST_TYPE_WRITABLE_PAGETABLES 2
    112 
    113 
    114103#define DOMID_SELF (0x7FF0U)
    115104#define DOMID_IO   (0x7FF1U)
     
    219208{
    220209        return hypercall3(XEN_CONSOLE_IO, cmd, count, str);
    221 }
    222 
    223 static inline int xen_vm_assist(const unsigned int cmd, const unsigned int type)
    224 {
    225     return hypercall2(XEN_VM_ASSIST, cmd, type);
    226210}
    227211
  • kernel/arch/ia32xen/include/mm/page.h

    rb82a13c r8cd140f2  
    7777        mmu_ext.cmd = MMUEXT_NEW_BASEPTR; \
    7878        mmu_ext.mfn = ADDR2PFN(PA2MA(ptl0)); \
    79         xen_mmuext_op(&mmu_ext, 1, NULL, DOMID_SELF); \
     79        ASSERT(xen_mmuext_op(&mmu_ext, 1, NULL, DOMID_SELF) == 0); \
    8080}
    8181
    8282#define SET_PTL1_ADDRESS_ARCH(ptl0, i, a) { \
     83        mmuext_op_t mmu_ext; \
     84        \
     85        mmu_ext.cmd = MMUEXT_PIN_L1_TABLE; \
     86        mmu_ext.mfn = ADDR2PFN(PA2MA(a)); \
     87        ASSERT(xen_mmuext_op(&mmu_ext, 1, NULL, DOMID_SELF) == 0); \
     88        \
    8389        mmu_update_t update; \
    8490        \
    8591        update.ptr = PA2MA(KA2PA(&((pte_t *) (ptl0))[(i)])); \
    86         update.val = PA2MA(a) | 0x0003; \
    87         xen_mmu_update(&update, 1, NULL, DOMID_SELF); \
    88 }
     92        update.val = PA2MA(a); \
     93        ASSERT(xen_mmu_update(&update, 1, NULL, DOMID_SELF) == 0); \
     94}
     95
    8996#define SET_PTL2_ADDRESS_ARCH(ptl1, i, a)
    9097#define SET_PTL3_ADDRESS_ARCH(ptl2, i, a)
    91 #define SET_FRAME_ADDRESS_ARCH(ptl3, i, a)      (((pte_t *) (ptl3))[(i)].frame_address = PA2MA(a) >> 12)
     98#define SET_FRAME_ADDRESS_ARCH(ptl3, i, a) { \
     99        mmu_update_t update; \
     100        \
     101        update.ptr = PA2MA(KA2PA(&((pte_t *) (ptl3))[(i)])); \
     102        update.val = PA2MA(a); \
     103        ASSERT(xen_mmu_update(&update, 1, NULL, DOMID_SELF) == 0); \
     104}
    92105
    93106#define GET_PTL1_FLAGS_ARCH(ptl0, i)            get_pt_flags((pte_t *) (ptl0), (index_t)(i))
     
    197210static inline void set_pt_flags(pte_t *pt, index_t i, int flags)
    198211{
    199         pte_t *p = &pt[i];
    200        
    201         p->page_cache_disable = !(flags & PAGE_CACHEABLE);
    202         p->present = !(flags & PAGE_NOT_PRESENT);
    203         p->uaccessible = (flags & PAGE_USER) != 0;
    204         p->writeable = (flags & PAGE_WRITE) != 0;
    205         p->global = (flags & PAGE_GLOBAL) != 0;
     212        pte_t p = pt[i];
     213       
     214        p.page_cache_disable = !(flags & PAGE_CACHEABLE);
     215        p.present = !(flags & PAGE_NOT_PRESENT);
     216        p.uaccessible = (flags & PAGE_USER) != 0;
     217        p.writeable = (flags & PAGE_WRITE) != 0;
     218        p.global = (flags & PAGE_GLOBAL) != 0;
    206219       
    207220        /*
    208221         * Ensure that there is at least one bit set even if the present bit is cleared.
    209222         */
    210         p->soft_valid = true;
     223        p.soft_valid = true;
     224       
     225        mmu_update_t update;
     226       
     227        update.ptr = PA2MA(KA2PA(&(pt[i])));
     228        update.pte = p;
     229        xen_mmu_update(&update, 1, NULL, DOMID_SELF);
    211230}
    212231
Note: See TracChangeset for help on using the changeset viewer.