OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [newlib-1.10.0/] [newlib/] [libc/] [sys/] [go32/] [dpmi.h] - Diff between revs 1010 and 1765

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 1010 Rev 1765
/* This is file dpmi.h */
/* This is file dpmi.h */
/*
/*
** Copyright (C) 1993 DJ Delorie
** Copyright (C) 1993 DJ Delorie
**
**
** This file is distributed under the terms listed in the document
** This file is distributed under the terms listed in the document
** "copying.dj".
** "copying.dj".
** A copy of "copying.dj" should accompany this file; if not, a copy
** A copy of "copying.dj" should accompany this file; if not, a copy
** should be available from where this file was obtained.  This file
** should be available from where this file was obtained.  This file
** may not be distributed without a verbatim copy of "copying.dj".
** may not be distributed without a verbatim copy of "copying.dj".
**
**
** This file is distributed WITHOUT ANY WARRANTY; without even the implied
** This file is distributed WITHOUT ANY WARRANTY; without even the implied
** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
*/
 
 
#ifndef _DPMI_H_
#ifndef _DPMI_H_
#define _DPMI_H_
#define _DPMI_H_
 
 
 
 
#include <sys/types.h>
#include <sys/types.h>
 
 
#ifdef __cplusplus
#ifdef __cplusplus
extern "C" {
extern "C" {
#endif
#endif
 
 
typedef union {
typedef union {
  struct {
  struct {
    u_long edi;
    u_long edi;
    u_long esi;
    u_long esi;
    u_long ebp;
    u_long ebp;
    u_long res;
    u_long res;
    u_long ebx;
    u_long ebx;
    u_long edx;
    u_long edx;
    u_long ecx;
    u_long ecx;
    u_long eax;
    u_long eax;
  } d;
  } d;
  struct {
  struct {
    u_short di, di_hi;
    u_short di, di_hi;
    u_short si, si_hi;
    u_short si, si_hi;
    u_short bp, bp_hi;
    u_short bp, bp_hi;
    u_short res, res_hi;
    u_short res, res_hi;
    u_short bx, bx_hi;
    u_short bx, bx_hi;
    u_short dx, dx_hi;
    u_short dx, dx_hi;
    u_short cx, cx_hi;
    u_short cx, cx_hi;
    u_short ax, ax_hi;
    u_short ax, ax_hi;
    u_short flags;
    u_short flags;
    u_short es;
    u_short es;
    u_short ds;
    u_short ds;
    u_short fs;
    u_short fs;
    u_short gs;
    u_short gs;
    u_short ip;
    u_short ip;
    u_short cs;
    u_short cs;
    u_short sp;
    u_short sp;
    u_short ss;
    u_short ss;
  } x;
  } x;
  struct {
  struct {
    u_char edi[4];
    u_char edi[4];
    u_char esi[4];
    u_char esi[4];
    u_char ebp[4];
    u_char ebp[4];
    u_char res[4];
    u_char res[4];
    u_char bl, bh, ebx_b2, ebx_b3;
    u_char bl, bh, ebx_b2, ebx_b3;
    u_char dl, dh, edx_b2, edx_b3;
    u_char dl, dh, edx_b2, edx_b3;
    u_char cl, ch, ecx_b2, ecx_b3;
    u_char cl, ch, ecx_b2, ecx_b3;
    u_char al, ah, eax_b2, eax_b3;
    u_char al, ah, eax_b2, eax_b3;
  } h;
  } h;
} _go32_dpmi_registers;
} _go32_dpmi_registers;
 
 
typedef struct {
typedef struct {
  u_long  size;
  u_long  size;
  u_long  pm_offset;
  u_long  pm_offset;
  u_short pm_selector;
  u_short pm_selector;
  u_short rm_offset;
  u_short rm_offset;
  u_short rm_segment;
  u_short rm_segment;
} _go32_dpmi_seginfo;
} _go32_dpmi_seginfo;
 
 
typedef struct {
typedef struct {
  u_long available_memory;
  u_long available_memory;
  u_long available_pages;
  u_long available_pages;
  u_long available_lockable_pages;
  u_long available_lockable_pages;
  u_long linear_space;
  u_long linear_space;
  u_long unlocked_pages;
  u_long unlocked_pages;
  u_long available_physical_pages;
  u_long available_physical_pages;
  u_long total_physical_pages;
  u_long total_physical_pages;
  u_long free_linear_space;
  u_long free_linear_space;
  u_long max_pages_in_paging_file;
  u_long max_pages_in_paging_file;
  u_long reserved[3];
  u_long reserved[3];
} _go32_dpmi_meminfo;
} _go32_dpmi_meminfo;
 
 
/* returns zero if success, else dpmi error and info->size is max size */
/* returns zero if success, else dpmi error and info->size is max size */
int _go32_dpmi_allocate_dos_memory(_go32_dpmi_seginfo *info);
int _go32_dpmi_allocate_dos_memory(_go32_dpmi_seginfo *info);
        /* set size to bytes/16, call, use rm_segment.  Do not
        /* set size to bytes/16, call, use rm_segment.  Do not
           change anthing but size until the memory is freed.
           change anthing but size until the memory is freed.
           If error, max size is returned in size as bytes/16. */
           If error, max size is returned in size as bytes/16. */
int _go32_dpmi_free_dos_memory(_go32_dpmi_seginfo *info);
int _go32_dpmi_free_dos_memory(_go32_dpmi_seginfo *info);
        /* set new size to bytes/16, call.  If error, max size
        /* set new size to bytes/16, call.  If error, max size
           is returned in size as bytes/16 */
           is returned in size as bytes/16 */
int _go32_dpmi_resize_dos_memory(_go32_dpmi_seginfo *info);
int _go32_dpmi_resize_dos_memory(_go32_dpmi_seginfo *info);
        /* uses pm_selector to free memory */
        /* uses pm_selector to free memory */
 
 
/* These both use the rm_segment:rm_offset fields only */
/* These both use the rm_segment:rm_offset fields only */
int _go32_dpmi_get_real_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);
int _go32_dpmi_get_real_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);
int _go32_dpmi_set_real_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);
int _go32_dpmi_set_real_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);
 
 
/* These do NOT wrap the function in pm_offset in an iret handler.
/* These do NOT wrap the function in pm_offset in an iret handler.
   You must provide an assembler interface yourself, or alloc one below.
   You must provide an assembler interface yourself, or alloc one below.
   You may NOT longjmp out of an interrupt handler. */
   You may NOT longjmp out of an interrupt handler. */
int _go32_dpmi_get_protected_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);
int _go32_dpmi_get_protected_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);
        /* puts vector in pm_selector:pm_offset. */
        /* puts vector in pm_selector:pm_offset. */
int _go32_dpmi_set_protected_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);
int _go32_dpmi_set_protected_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);
        /* sets vector from pm_offset and pm_selector */
        /* sets vector from pm_offset and pm_selector */
int _go32_dpmi_chain_protected_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);
int _go32_dpmi_chain_protected_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);
        /* sets up wrapper that calls function in pm_offset, chaining to old
        /* sets up wrapper that calls function in pm_offset, chaining to old
           handler when it returns */
           handler when it returns */
 
 
/* These can be used to generate assember IRET-style wrappers for functions */
/* These can be used to generate assember IRET-style wrappers for functions */
int _go32_dpmi_allocate_iret_wrapper(_go32_dpmi_seginfo *info);
int _go32_dpmi_allocate_iret_wrapper(_go32_dpmi_seginfo *info);
        /* Put function ptr in pm_offset, call, returns wrapper entry in pm_offset. */
        /* Put function ptr in pm_offset, call, returns wrapper entry in pm_offset. */
int _go32_dpmi_free_iret_wrapper(_go32_dpmi_seginfo *info);
int _go32_dpmi_free_iret_wrapper(_go32_dpmi_seginfo *info);
        /* assumes pm_offset points to wrapper, frees it */
        /* assumes pm_offset points to wrapper, frees it */
 
 
/* simulate real mode calls.  CS:IP from regs for non-interrupt */
/* simulate real mode calls.  CS:IP from regs for non-interrupt */
int _go32_dpmi_simulate_int(int vector, _go32_dpmi_registers *regs);
int _go32_dpmi_simulate_int(int vector, _go32_dpmi_registers *regs);
int _go32_dpmi_simulate_fcall(_go32_dpmi_registers *regs);
int _go32_dpmi_simulate_fcall(_go32_dpmi_registers *regs);
int _go32_dpmi_simulate_fcall_iret(_go32_dpmi_registers *regs);
int _go32_dpmi_simulate_fcall_iret(_go32_dpmi_registers *regs);
 
 
/* These automatically handle the tasks of restructuring the
/* These automatically handle the tasks of restructuring the
   real-mode stack for the proper return type.  The callback
   real-mode stack for the proper return type.  The callback
   (info->pm_offset) is called as (*pmcb)(_go32_dpmi_registers *regs); */
   (info->pm_offset) is called as (*pmcb)(_go32_dpmi_registers *regs); */
int _go32_dpmi_allocate_real_mode_callback_retf(_go32_dpmi_seginfo *info, _go32_dpmi_registers *regs);
int _go32_dpmi_allocate_real_mode_callback_retf(_go32_dpmi_seginfo *info, _go32_dpmi_registers *regs);
        /* points callback at pm_offset, returns seg:ofs of callback addr
        /* points callback at pm_offset, returns seg:ofs of callback addr
           in rm_segment:rm_offset.  Do not change any fields until freed.
           in rm_segment:rm_offset.  Do not change any fields until freed.
           Interface is added to simulate far return */
           Interface is added to simulate far return */
int _go32_dpmi_allocate_real_mode_callback_iret(_go32_dpmi_seginfo *info, _go32_dpmi_registers *regs);
int _go32_dpmi_allocate_real_mode_callback_iret(_go32_dpmi_seginfo *info, _go32_dpmi_registers *regs);
        /* same, but simulates iret */
        /* same, but simulates iret */
int _go32_dpmi_free_real_mode_callback(_go32_dpmi_seginfo *info);
int _go32_dpmi_free_real_mode_callback(_go32_dpmi_seginfo *info);
        /* frees callback */
        /* frees callback */
 
 
/* Only available_memory is guaranteed to be valid.  Try
/* Only available_memory is guaranteed to be valid.  Try
   available_physical_pages for phys mem left */
   available_physical_pages for phys mem left */
int _go32_dpmi_get_free_memory_information(_go32_dpmi_meminfo *info);
int _go32_dpmi_get_free_memory_information(_go32_dpmi_meminfo *info);
 
 
/* Convenience functions.  These use the above memory info call.
/* Convenience functions.  These use the above memory info call.
   The return value is *bytes* */
   The return value is *bytes* */
u_long _go32_dpmi_remaining_physical_memory(void);
u_long _go32_dpmi_remaining_physical_memory(void);
u_long _go32_dpmi_remaining_virtual_memory(void);
u_long _go32_dpmi_remaining_virtual_memory(void);
 
 
 
 
#ifdef __cplusplus
#ifdef __cplusplus
}
}
#endif
#endif
 
 
#endif
#endif
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.