/* * COPYRIGHT: GPLv2+ - See COPYING in the top level directory * PROJECT: ReactOS Virtual DOS Machine * FILE: subsystems/mvdm/ntvdm/dos/dos32krnl/emsdrv.h * PURPOSE: DOS EMS Driver * PROGRAMMERS: Aleksandar Andrejevic */ #ifndef _EMSDRV_H_ #define _EMSDRV_H_ /* DEFINITIONS ****************************************************************/ #define EMS_VERSION_NUM 0x40 #define EMS_INTERRUPT_NUM 0x67 #define EMS_SEGMENT 0xD000 // Default segment // Specification: Operating system handle 0x0000; user handles from 0x0001 to 0x00FE #define EMS_MAX_HANDLES 255 #define EMS_PAGE_BITS 14 #define EMS_PAGE_SIZE (1 << EMS_PAGE_BITS) #define EMS_PHYSICAL_PAGES 4 /* 16 MB of EMS memory */ #define EMS_TOTAL_PAGES 1024 #define EMS_STATUS_SUCCESS 0x00 #define EMS_STATUS_INTERNAL_ERROR 0x80 #define EMS_STATUS_INVALID_HANDLE 0x83 #define EMS_STATUS_UNKNOWN_FUNCTION 0x84 #define EMS_STATUS_NO_MORE_HANDLES 0x85 #define EMS_STATUS_INSUFFICIENT_PAGES 0x88 #define EMS_STATUS_ZERO_PAGES 0x89 #define EMS_STATUS_INV_LOGICAL_PAGE 0x8A #define EMS_STATUS_INV_PHYSICAL_PAGE 0x8B #define EMS_STATUS_INVALID_SUBFUNCTION 0x8F #define EMS_STATUS_HANDLE_NOT_FOUND 0xA0 #define EMS_STATUS_UNNAMED_HANDLE 0xA1 #define EMS_STATUS_HANDLE_ALREADY_EXISTS 0xA1 typedef struct _EMS_HANDLE { BOOLEAN Allocated; USHORT PageCount; LIST_ENTRY PageList; UCHAR Name[8]; } EMS_HANDLE, *PEMS_HANDLE; typedef struct _EMS_PAGE { LIST_ENTRY Entry; USHORT Handle; } EMS_PAGE, *PEMS_PAGE; #pragma pack(push, 1) typedef struct _EMS_HANDLE_PAGE_INFO { USHORT Handle; USHORT PageCount; } EMS_HANDLE_PAGE_INFO, *PEMS_HANDLE_PAGE_INFO; typedef struct _EMS_HANDLE_DIR_ENTRY { USHORT Handle; UCHAR Name[8]; } EMS_HANDLE_DIR_ENTRY, *PEMS_HANDLE_DIR_ENTRY; typedef struct _EMS_COPY_DATA { ULONG RegionLength; UCHAR SourceType; USHORT SourceHandle; USHORT SourceOffset; USHORT SourceSegment; UCHAR DestType; USHORT DestHandle; USHORT DestOffset; USHORT DestSegment; } EMS_COPY_DATA, *PEMS_COPY_DATA; typedef struct _EMS_MAPPABLE_PHYS_PAGE { USHORT PageSegment; USHORT PageNumber; } EMS_MAPPABLE_PHYS_PAGE, *PEMS_MAPPABLE_PHYS_PAGE; typedef struct _EMS_HARDWARE_INFO { WORD RawPageSize; WORD AlternateRegSets; WORD ContextAreaSize; WORD DmaRegisterSets; WORD DmaChannelOperation; } EMS_HARDWARE_INFO, *PEMS_HARDWARE_INFO; #pragma pack(pop) /* FUNCTIONS ******************************************************************/ BOOLEAN EmsDrvInitialize(USHORT Segment, ULONG TotalPages); VOID EmsDrvCleanup(VOID); #endif /* _EMSDRV_H_ */