Листинг 7-3. EMMTYPES.H
------------------------------------------------------------------
/*
Структуры, используемые для связи с менеджером расширенной памяти
*/
#define PCONTEXT unsigned char
#define PMAP unsigned char
typedef struct handle_page { /*структура страницы обработчика*/
unsigned int emm_handle; /*размещенный обработчик
менеджера расширенной памяти*/
unsigned int pages_alloc_to_handle; /*логические страницы
принадлежащие обработчику*/
} HANDLE_PAGE;
typedef struct ppmap { /*структура запроса частичного контекста*/
unsigned int seg_cnt; /*количество отображаемых сег-
ментов, которое требуется получить*/
unsigned int seg_addr[PAGE_FRAMES]; /*адрес отображае-
мого сегмента, который требуется получить*/
} PPMAP;
typedef struct log_to_phys { /*структура отображения логических
на физические страницы*/
unsigned int log_page_no; /*номер логической страницы*/
unsigned int phys_page_no; /*номер кадра страниц/адрес
отображаемого сегмента*/
} LOG_TO_PHYS;
typedef struct handle_names { /*элемент массива имен обработчика*/
unsigned int handle_value; /*обработчик*/
char handle_name[HANDLE_NAME_LENGTH]; /*имя, связанное
с обработчиком*/
} HANDLE_NAMES;
typedef struct map_phys_page { /*отображение отображаемого сег-
мента в номер физическ. страницы
*/
unsigned int phys_page_segment; /*адрес сегмента физи-
ческ.
страни-
цы*/
unsigned int phys_page_number; /*номер физическ. страницы*/
} MAP_PHYS_PAGE;
typedef struct hardware_info { /*структура данных об аппаратуре
спецификации расширенной памяти
*/
unsigned int raw_page_size; /*кол-во байт в исх. странице*/
unsigned int alt_reg_sets; /*кол-во альтернативных на-
боров регистров отображения*/
unsigned int ctx_savearea_size; /*кол-во байт в области
сохранения контекста*/
unsigned int dma_reg_sets; /*кол-во наборов рег-ров
ПДП*/
unsigned int dma_chan_op; /*0: работа ПДП по
станд. LIM,
1: только один канал ПДП*/
} HARDWARE_INFO;
#define CONV_MEM 0 /*обычная память*/
#define EXP_MEM 1 /*расширенная память*/
typedef struct mregn { /*дескриптор области памяти*/
unsigned char memory_type; /*CONV_MEM / EXP_MEM*/
unsignedint handle; /*CONV_MEM: 0, EXP_MEM: обработчик*/
unsigned int inutial_offset; /*CONV_MEM: 0 -65535,
EXP_MEM: 0 - 16383*/
unsigned int initial_seg_page; /*CONV_MEM: адрес сегмента,
EXP_MEM: номер страницы*/
} MREGN;
typedef struct move_xchg { /*структура передвижки/обмена*/
long region_length; /*0 - 1 Мбайт*/
MREGN source; /*дискриптор области-источника*/
MREGN dest; /*дескриптор области -приемника*/
} MOVE_XCHG;
-------------------------------------------------------------------
|