summaryrefslogtreecommitdiffstats
path: root/usr.bin/doscmd/xms.h
diff options
context:
space:
mode:
authorjlemon <jlemon@FreeBSD.org>1997-08-15 23:41:26 +0000
committerjlemon <jlemon@FreeBSD.org>1997-08-15 23:41:26 +0000
commitd637f4f507efd469c196718fb89e0b3eb445a20d (patch)
tree33d2032c2c6a52ff1d5f64c89c5cd8bbfd3d65b2 /usr.bin/doscmd/xms.h
parent3bc0e3d9d18baa98ce9fc4f6ee87c1e48d91f530 (diff)
downloadFreeBSD-src-d637f4f507efd469c196718fb89e0b3eb445a20d.zip
FreeBSD-src-d637f4f507efd469c196718fb89e0b3eb445a20d.tar.gz
Add support for XMS memory to doscmd.
Submitted by: Helmut F. Wirth <hfwirth@ping.at>
Diffstat (limited to 'usr.bin/doscmd/xms.h')
-rw-r--r--usr.bin/doscmd/xms.h145
1 files changed, 145 insertions, 0 deletions
diff --git a/usr.bin/doscmd/xms.h b/usr.bin/doscmd/xms.h
new file mode 100644
index 0000000..14a223f
--- /dev/null
+++ b/usr.bin/doscmd/xms.h
@@ -0,0 +1,145 @@
+/*-
+ * Copyright (c) 1997 Helmut Wirth <hfwirth@ping.at>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, witout modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $Id$
+ */
+
+#ifndef XMS_H
+#define XMS_H
+
+#define XMS_VERSION 0x0300 /* version 3.00 */
+#define XMS_REVISION 0x0100 /* driver revision 1.0 */
+
+#define NUM_HANDLES 64 /* number of available handles */
+#define FIRST_HANDLE 1 /* number of firts valid handle */
+#define PARAGRAPH 16 /* bytes in a paragraph */
+#define MAX_BLOCK_LOCKS 256 /* number of locks on a block */
+#define DEFAULT_EMM_SIZE 512 * 1024 /* default EMM size */
+
+/* Register AH codes for XMS functions */
+#define XMS_GET_VERSION 0x00
+#define XMS_ALLOCATE_HIGH_MEMORY 0x01
+#define XMS_FREE_HIGH_MEMORY 0x02
+#define XMS_GLOBAL_ENABLE_A20 0x03
+#define XMS_GLOBAL_DISABLE_A20 0x04
+#define XMS_LOCAL_ENABLE_A20 0x05
+#define XMS_LOCAL_DISABLE_A20 0x06
+#define XMS_QUERY_A20 0x07
+#define XMS_QUERY_FREE_EXTENDED_MEMORY 0x08
+#define XMS_ALLOCATE_EXTENDED_MEMORY 0x09
+#define XMS_FREE_EXTENDED_MEMORY 0x0a
+#define XMS_MOVE_EXTENDED_MEMORY_BLOCK 0x0b
+#define XMS_LOCK_EXTENDED_MEMORY_BLOCK 0x0c
+#define XMS_UNLOCK_EXTENDED_MEMORY_BLOCK 0x0d
+#define XMS_GET_EMB_HANDLE_INFORMATION 0x0e
+#define XMS_RESIZE_EXTENDED_MEMORY_BLOCK 0x0f
+#define XMS_ALLOCATE_UMB 0x10
+#define XMS_DEALLOCATE_UMB 0x11
+#define XMS_REALLOCATE_UMB 0x12
+/* New functions for values bigger than 65MB, not implented yet */
+#define XMS_QUERY_FREE_EXTENDED_MEMORY_LARGE 0x88
+#define XMS_ALLOCATE_EXTENDED_MEMORY_LARGE 0x89
+#define XMS_FREE_EXTENDED_MEMORY_LARGE 0x8a
+
+
+/* XMS error return codes */
+#define XMS_SUCCESS 0x0
+#define XMS_NOT_IMPLEMENTED 0x80
+#define XMS_VDISK 0x81 /* If vdisk.sys is present */
+#define XMS_A20_ERROR 0x82
+#define XMS_GENERAL_ERROR 0x8e
+#define XMS_HMA_NOT_MANAGED 0x90
+#define XMS_HMA_ALREADY_USED 0x91
+#define XMS_HMA_NOT_ALLOCATED 0x93
+#define XMS_A20_STILL_ENABLED 0x94
+#define XMS_FULL 0xa0
+#define XMS_OUT_OF_HANDLES 0xa1
+#define XMS_INVALID_HANDLE 0xa2
+#define XMS_INVALID_SOURCE_HANDLE 0xa3
+#define XMS_INVALID_SOURCE_OFFSET 0xa4
+#define XMS_INVALID_DESTINATION_HANDLE 0xa5
+#define XMS_INVALID_DESTINATION_OFFSET 0xa6
+#define XMS_INVALID_LENGTH 0xa7
+#define XMS_BLOCK_NOT_LOCKED 0xaa
+#define XMS_BLOCK_IS_LOCKED 0xab
+#define XMS_BLOCK_LOCKCOUNT_OVERFLOW 0xac
+#define XMS_REQUESTED_UMB_TOO_BIG 0xb0
+#define XMS_NO_UMBS_AVAILABLE 0xb1
+#define XMS_INVALID_UMB_SEGMENT 0xb2
+
+
+/*
+ * EMM structure for data exchange with DOS caller, hence the
+ * packed format
+ */
+
+struct EMM {
+ u_long nbytes;
+ u_short src_handle __attribute__ ((packed));
+ u_long src_offset __attribute__ ((packed));
+ u_short dst_handle __attribute__ ((packed));
+ u_long dst_offset __attribute__ ((packed));
+} ;
+
+/*
+ * XMS info structure, only used to pass information to and from
+ * DOS
+ */
+
+struct XMSinfo {
+ u_char handle; /* the handle */
+ u_char num_locks __attribute__ ((packed)); /* number of locks */
+ u_long size __attribute__ ((packed)); /* size of memory */
+ u_long phys_addr __attribute__ ((packed)); /* "physical" address */
+};
+
+/*
+ * Handle management inside the emulator for extendend memory pages,
+ * invisible to DOS
+ */
+
+typedef struct {
+ u_long addr; /* address inside emulator, from malloc() */
+ u_long size; /* size in bytes */
+ u_char num_locks; /* lock count for this handle */
+} XMS_handle;
+
+/*
+ * Managment of UMB memory paragraphs (16 bytes). UMB blocks are
+ * directly accessible by VM86 applications and lie between 0xd0000 and
+ * 0xefff0 in VM86 memory space.
+ */
+
+struct _UMB_block {
+ u_long addr; /* Start address of block */
+ u_long size; /* Size in bytes */
+ struct _UMB_block *next;
+};
+
+typedef struct _UMB_block UMB_block;
+
+#endif /* XMS_H */
OpenPOWER on IntegriCloud