📄 window.c
字号:
/*++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.
Copyright (c) 1995, 1996, 1997 Microsoft Corporation
Copyright (c) 1998 NEC Electronics Inc.
Module Name:
window.c
Abstract:
This file implements the PCMCIA platform dependent window control
functions and window definitions.
Functions:
PDCardGetWindow()
PDCardSetWindow()
PDCardInquireWindow()
Notes:
--*/
#include <windows.h>
#include <types.h>
#include <cardserv.h>
#include <sockserv.h>
#include <sockpd.h>
#include <memory.h>
//#include <eagle.h>
#define PCMCIA_NUM_WINDOWS 14
#define PCMCIA0_8_ATTR_WIN_BASE 0x10010000
#define PCMCIA0_8_ATTR_WIN_SIZE 0x00010000
#define PCMCIA0_16_ATTR_WIN_BASE 0x10020000
#define PCMCIA0_16_ATTR_WIN_SIZE 0x00010000
#define PCMCIA0_MEM1_WIN_BASE 0x10030000
#define PCMCIA0_MEM1_WIN_SIZE 0x000BE000
#define PCMCIA0_MEM2_WIN_BASE 0x100EE000
#define PCMCIA0_MEM2_WIN_SIZE 0x00008000
#define PCMCIA0_MEM3_WIN_BASE 0x100F7000
#define PCMCIA0_MEM3_WIN_SIZE 0x00008000
#define PCMCIA0_IO0_WIN_BASE 0x16000000
#define PCMCIA0_IO0_WIN_SIZE 0x00010000
#define PCMCIA0_IO1_WIN_BASE 0x16000000
#define PCMCIA0_IO1_WIN_SIZE 0x00010000
#define PCMCIA1_8_ATTR_WIN_BASE 0x10110000
#define PCMCIA1_8_ATTR_WIN_SIZE 0x00010000
#define PCMCIA1_16_ATTR_WIN_BASE 0x10120000
#define PCMCIA1_16_ATTR_WIN_SIZE 0x00010000
#define PCMCIA1_MEM1_WIN_BASE 0x10130000
#define PCMCIA1_MEM1_WIN_SIZE 0x000BE000
#define PCMCIA1_MEM2_WIN_BASE 0x101EE000
#define PCMCIA1_MEM2_WIN_SIZE 0x00008000
#define PCMCIA1_MEM3_WIN_BASE 0x101F7000
#define PCMCIA1_MEM3_WIN_SIZE 0x00008000
#define PCMCIA1_IO0_WIN_BASE 0x16000000
#define PCMCIA1_IO0_WIN_SIZE 0x00010000
#define PCMCIA1_IO1_WIN_BASE 0x16000000
#define PCMCIA1_IO1_WIN_SIZE 0x00010000
#define SLOT0_WINDOW_NUM_ATTRIBUTE8 0
#define SLOT0_WINDOW_NUM_ATTRIBUTE16 1
#define SLOT1_WINDOW_NUM_ATTRIBUTE8 2
#define SLOT1_WINDOW_NUM_ATTRIBUTE16 3
#define SLOT0_WINDOW_NUM_COMMON1 4
#define SLOT0_WINDOW_NUM_COMMON2 5
#define SLOT1_WINDOW_NUM_COMMON1 6
#define SLOT1_WINDOW_NUM_COMMON2 7
#define SLOT0_WINDOW_NUM_COMMON3 8
#define SLOT0_WINDOW_NUM_IO0 9
#define SLOT1_WINDOW_NUM_COMMON3 10
#define SLOT1_WINDOW_NUM_IO0 11
#define SLOT0_WINDOW_NUM_IO1 12
#define SLOT1_WINDOW_NUM_IO1 13
// @doc DRIVERS
PDCARD_WINDOW_STATE v_WinState[PCMCIA_NUM_WINDOWS] = {
{ // PCMCIA window 0 - 8bit attribute memory on socket 0
0, // socket number
WIN_STATE_ENABLED|WIN_STATE_ATTRIBUTE, // state flags
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA0_8_ATTR_WIN_SIZE,
PCMCIA0_8_ATTR_WIN_BASE,
0 // card offset
},
{ // PCMCIA window 1 - 16bit attribute memory on socket 0
0, // socket number
WIN_STATE_ENABLED|WIN_STATE_ATTRIBUTE|WIN_STATE_16BIT, // state flags
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA0_16_ATTR_WIN_SIZE,
PCMCIA0_16_ATTR_WIN_BASE,
0
},
{ // PCMCIA window 2 - 8bit attribute memory on socket 1
1, // socket number
WIN_STATE_ENABLED|WIN_STATE_ATTRIBUTE, // state flags
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA1_8_ATTR_WIN_SIZE,
PCMCIA1_8_ATTR_WIN_BASE,
0 // card offset
},
{ // PCMCIA window 3 - 16bit attribute memory on socket 1
1, // socket number
WIN_STATE_ENABLED|WIN_STATE_ATTRIBUTE|WIN_STATE_16BIT, // state flags
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA1_16_ATTR_WIN_SIZE,
PCMCIA1_16_ATTR_WIN_BASE,
0
},
{ // PCMCIA window 4 common memory window on socket 0
0, // socket number
WIN_STATE_ENABLED, // state flags
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA0_MEM1_WIN_SIZE,
PCMCIA0_MEM1_WIN_BASE,
0
},
{ // PCMCIA window 5 common memory window on socket 0
0, // socket number
WIN_STATE_ENABLED, // state flags
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA0_MEM2_WIN_SIZE,
PCMCIA0_MEM2_WIN_BASE,
0
},
{ // PCMCIA window 6 common memory window on socket 1
1, // socket number
WIN_STATE_ENABLED, // state flags
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA1_MEM1_WIN_SIZE,
PCMCIA1_MEM1_WIN_BASE,
0
},
{ // PCMCIA window 7 common memory window on socket 1
1, // socket number
WIN_STATE_ENABLED, // state flags
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA1_MEM2_WIN_SIZE,
PCMCIA1_MEM2_WIN_BASE,
0
},
{ // PCMCIA window 8 comon memory window on socket 0
0, // socket number
WIN_STATE_ENABLED, // state flags
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA0_MEM3_WIN_SIZE,
PCMCIA0_MEM3_WIN_BASE,
0
},
{ // PCMCIA window 9 I/O window 0 on socket 0
0, // socket number
WIN_STATE_ENABLED|WIN_STATE_MAPS_IO,
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA0_IO0_WIN_SIZE,
PCMCIA0_IO0_WIN_BASE,
0
},
{ // PCMCIA window 10 comon memory window on socket 1
1, // socket number
WIN_STATE_ENABLED, // state flags
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA1_MEM3_WIN_SIZE,
PCMCIA1_MEM3_WIN_BASE,
0
},
{ // PCMCIA window 11 I/O window 0 on socket 1
1, // socket number
WIN_STATE_ENABLED|WIN_STATE_MAPS_IO,
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA1_IO0_WIN_SIZE,
PCMCIA1_IO0_WIN_BASE,
0
},
{ // PCMCIA window 12 I/O window 1 on socket 0
0, // socket number
WIN_STATE_ENABLED|WIN_STATE_MAPS_IO,
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA0_IO1_WIN_SIZE,
PCMCIA0_IO1_WIN_BASE,
0
},
{ // PCMCIA window 13 I/O window 1 on socket 1
1, // socket number
WIN_STATE_ENABLED|WIN_STATE_MAPS_IO,
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA1_IO1_WIN_SIZE,
PCMCIA1_IO1_WIN_BASE,
0
}
};
//
// Stuff to make PDCardSetWindow smaller and more readable
//
//
// The format of each of these tables is RegisterIndex:Data
//
const UINT8 Socket0AttributeMemoryWindowRegisters8[] = {
INDEX_MEMORY_MAP0_START_ADDRESS_LOW, 0x10,
INDEX_MEMORY_MAP0_START_ADDRESS_HI, 0x0,
INDEX_MEMORY_MAP0_END_ADDRESS_LOW, 0x1F,
INDEX_MEMORY_MAP0_END_ADDRESS_HI, 0x0,
INDEX_MEMORY_MAP0_ADDRESS_OFFSET_LOW,0xF0,
INDEX_MEMORY_MAP0_ADDRESS_OFFSET_HI, 0x7F
};
const UINT8 Socket0AttributeMemoryWindowRegisters16[] = {
INDEX_MEMORY_MAP1_START_ADDRESS_LOW, 0x20,
INDEX_MEMORY_MAP1_START_ADDRESS_HI, 0x0,
INDEX_MEMORY_MAP1_END_ADDRESS_LOW, 0x2F,
INDEX_MEMORY_MAP1_END_ADDRESS_HI, 0x0,
INDEX_MEMORY_MAP1_ADDRESS_OFFSET_LOW,0xE0,
INDEX_MEMORY_MAP1_ADDRESS_OFFSET_HI, 0x7F
};
const UINT8 Socket0CommonMemoryWindowRegisters1[] = {
INDEX_MEMORY_MAP2_START_ADDRESS_LOW, 0x30,
INDEX_MEMORY_MAP2_START_ADDRESS_HI, 0x0,
INDEX_MEMORY_MAP2_END_ADDRESS_LOW, 0xED,
INDEX_MEMORY_MAP2_END_ADDRESS_HI, 0x0,
INDEX_MEMORY_MAP2_ADDRESS_OFFSET_LOW,0xD0,
INDEX_MEMORY_MAP2_ADDRESS_OFFSET_HI, 0x3F
};
const UINT8 Socket0CommonMemoryWindowRegisters2[] = {
INDEX_MEMORY_MAP3_START_ADDRESS_LOW, 0xEE,
INDEX_MEMORY_MAP3_START_ADDRESS_HI, 0x0,
INDEX_MEMORY_MAP3_END_ADDRESS_LOW, 0xF6,
INDEX_MEMORY_MAP3_END_ADDRESS_HI, 0x0,
};
const UINT8 Socket0CommonMemoryWindowRegisters3[] = {
INDEX_MEMORY_MAP4_START_ADDRESS_LOW, 0xF7,
INDEX_MEMORY_MAP4_START_ADDRESS_HI, 0x0,
INDEX_MEMORY_MAP4_END_ADDRESS_LOW, 0xFF,
INDEX_MEMORY_MAP4_END_ADDRESS_HI, 0x0,
};
const UINT8 Socket0IOMemoryWindowRegisters[] = {
INDEX_IO_MAP0_START_ADDRESS_LOW, 0x00,
INDEX_IO_MAP0_START_ADDRESS_HI, 0x00,
INDEX_IO_MAP0_END_ADDRESS_LOW, 0xFF,
INDEX_IO_MAP0_END_ADDRESS_HI, 0x7F,
INDEX_IO_MAP1_START_ADDRESS_LOW, 0x00,
INDEX_IO_MAP1_START_ADDRESS_HI, 0x80,
INDEX_IO_MAP1_END_ADDRESS_LOW, 0xFF,
INDEX_IO_MAP1_END_ADDRESS_HI, 0xFF
};
const UINT8 Socket1AttributeMemoryWindowRegisters8[] = {
INDEX_MEMORY_MAP0_START_ADDRESS_LOW, 0x10,
INDEX_MEMORY_MAP0_START_ADDRESS_HI, 0x1,
INDEX_MEMORY_MAP0_END_ADDRESS_LOW, 0x1F,
INDEX_MEMORY_MAP0_END_ADDRESS_HI, 0x1,
INDEX_MEMORY_MAP0_ADDRESS_OFFSET_LOW,0xF0,
INDEX_MEMORY_MAP0_ADDRESS_OFFSET_HI, 0x7E
};
const UINT8 Socket1AttributeMemoryWindowRegisters16[] = {
INDEX_MEMORY_MAP1_START_ADDRESS_LOW, 0x20,
INDEX_MEMORY_MAP1_START_ADDRESS_HI, 0x1,
INDEX_MEMORY_MAP1_END_ADDRESS_LOW, 0x2F,
INDEX_MEMORY_MAP1_END_ADDRESS_HI, 0x1,
INDEX_MEMORY_MAP1_ADDRESS_OFFSET_LOW,0xE0,
INDEX_MEMORY_MAP1_ADDRESS_OFFSET_HI, 0x7E
};
const UINT8 Socket1CommonMemoryWindowRegisters1[] = {
INDEX_MEMORY_MAP2_START_ADDRESS_LOW, 0x30,
INDEX_MEMORY_MAP2_START_ADDRESS_HI, 0x1,
INDEX_MEMORY_MAP2_END_ADDRESS_LOW, 0xED,
INDEX_MEMORY_MAP2_END_ADDRESS_HI, 0x1,
INDEX_MEMORY_MAP2_ADDRESS_OFFSET_LOW,0xD0,
INDEX_MEMORY_MAP2_ADDRESS_OFFSET_HI, 0x3E
};
const UINT8 Socket1CommonMemoryWindowRegisters2[] = {
INDEX_MEMORY_MAP3_START_ADDRESS_LOW, 0xEE,
INDEX_MEMORY_MAP3_START_ADDRESS_HI, 0x1,
INDEX_MEMORY_MAP3_END_ADDRESS_LOW, 0xF6,
INDEX_MEMORY_MAP3_END_ADDRESS_HI, 0x1,
};
const UINT8 Socket1CommonMemoryWindowRegisters3[] = {
INDEX_MEMORY_MAP4_START_ADDRESS_LOW, 0xF7,
INDEX_MEMORY_MAP4_START_ADDRESS_HI, 0x1,
INDEX_MEMORY_MAP4_END_ADDRESS_LOW, 0xFF,
INDEX_MEMORY_MAP4_END_ADDRESS_HI, 0x1,
};
const UINT8 Socket1IOMemoryWindowRegisters[] = {
INDEX_IO_MAP0_START_ADDRESS_LOW, 0x00,
INDEX_IO_MAP0_START_ADDRESS_HI, 0x00,
INDEX_IO_MAP0_END_ADDRESS_LOW, 0xFF,
INDEX_IO_MAP0_END_ADDRESS_HI, 0x7F,
INDEX_IO_MAP1_START_ADDRESS_LOW, 0x00,
INDEX_IO_MAP1_START_ADDRESS_HI, 0x80,
INDEX_IO_MAP1_END_ADDRESS_LOW, 0xFF,
INDEX_IO_MAP1_END_ADDRESS_HI, 0xFF
};
//
// Structure to track memory window registers
//
typedef struct _WINDOW_REG_DESCR {
const UINT8 *pRegisters;
INT RegSize;
INT EnableBits;
} WINDOW_REG_DESCR, * PWINDOW_REG_DESCR;
const WINDOW_REG_DESCR SetWindowRegisters[PCMCIA_NUM_WINDOWS] = {
{ Socket0AttributeMemoryWindowRegisters8,
sizeof(Socket0AttributeMemoryWindowRegisters8),
DATA_MEMORY_MAP0_ENABLE
},
{ Socket0AttributeMemoryWindowRegisters16,
sizeof(Socket0AttributeMemoryWindowRegisters16),
DATA_MEMORY_MAP1_ENABLE
},
{ Socket1AttributeMemoryWindowRegisters8,
sizeof(Socket1AttributeMemoryWindowRegisters8),
DATA_MEMORY_MAP0_ENABLE
},
{ Socket1AttributeMemoryWindowRegisters16,
sizeof(Socket1AttributeMemoryWindowRegisters16),
DATA_MEMORY_MAP1_ENABLE
},
{ Socket0CommonMemoryWindowRegisters1,
sizeof(Socket0CommonMemoryWindowRegisters1),
DATA_MEMORY_MAP2_ENABLE
},
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -