window.c
来自「WinCE 3.0 BSP, 包含Inter SA1110, Intel_815」· C语言 代码 · 共 555 行 · 第 1/2 页
C
555 行
/*++
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-2000 Microsoft Corporation. All rights reserved.
Module Name:
Abstract:
Platform dependent PCMCIA memory and I/O window functions and data.
Notes:
--*/
#include <windows.h>
#include <types.h>
#include <cardserv.h>
#include <sockserv.h>
#include <sockpd.h>
//
// Memory (attribute and common) starting at 0xd0000
//
#define PCMCIA_MEM_WIN_BASE0 0x0D0000
#define PCMCIA_MEM_WIN_BASE1 PCMCIA_MEM_WIN_BASE0+PCMCIA_MEM_WIN_SIZE
#ifdef MAX_WINDOWS
#define PCMCIA_MEM_WIN_BASE2 PCMCIA_MEM_WIN_BASE1+PCMCIA_MEM_WIN_SIZE
#define PCMCIA_MEM_WIN_BASE3 PCMCIA_MEM_WIN_BASE2+PCMCIA_MEM_WIN_SIZE
#define PCMCIA_MEM_WIN_BASE4 PCMCIA_MEM_WIN_BASE3+PCMCIA_MEM_WIN_SIZE
#define PCMCIA_MEM_WIN_BASE5 PCMCIA_MEM_WIN_BASE4+PCMCIA_MEM_WIN_SIZE
#define PCMCIA_MEM_WIN_BASE6 PCMCIA_MEM_WIN_BASE5+PCMCIA_MEM_WIN_SIZE
#define PCMCIA_MEM_WIN_BASE7 PCMCIA_MEM_WIN_BASE6+PCMCIA_MEM_WIN_SIZE
#define PCMCIA_MEM_WIN_BASE8 PCMCIA_MEM_WIN_BASE7+PCMCIA_MEM_WIN_SIZE
#define PCMCIA_MEM_WIN_BASE9 PCMCIA_MEM_WIN_BASE8+PCMCIA_MEM_WIN_SIZE
#else
#define PCMCIA_MEM_WIN_BASE2 PCMCIA_MEM_WIN_BASE1+PCMCIA_MEM_WIN_SIZE
#define PCMCIA_MEM_WIN_BASE3 PCMCIA_MEM_WIN_BASE2+PCMCIA_MEM_WIN_SIZE
#define PCMCIA_MEM_WIN_BASE5 PCMCIA_MEM_WIN_BASE3+PCMCIA_MEM_WIN_SIZE
#define PCMCIA_MEM_WIN_BASE6 PCMCIA_MEM_WIN_BASE5+PCMCIA_MEM_WIN_SIZE
#define PCMCIA_MEM_WIN_BASE7 PCMCIA_MEM_WIN_BASE6+PCMCIA_MEM_WIN_SIZE
#define PCMCIA_MEM_WIN_BASE8 PCMCIA_MEM_WIN_BASE7+PCMCIA_MEM_WIN_SIZE
#endif
#define PCMCIA_MEM_WIN_SIZE 0x02000
#define MEM_WIN0_START_ADDR_LO (PCMCIA_MEM_WIN_BASE0 >> 12)
#define MEM_WIN0_END_ADDR_LO (PCMCIA_MEM_WIN_SIZE >> 12)
#define PCMCIA_IO_WIN_BASE0 0
#define PCMCIA_IO_WIN_BASE1 0
#define PCMCIA_IO_WIN_BASE2 0
#define PCMCIA_IO_WIN_BASE3 0
#define PCMCIA_IO_WIN_SIZE 65536
#ifdef MAX_WINDOWS
#define PCMCIA_NUM_WINDOWS 14
UCHAR EnableMask[PCMCIA_NUM_WINDOWS] = {
WIN_MEM_MAP0_ENABLE,
WIN_MEM_MAP1_ENABLE,
WIN_MEM_MAP2_ENABLE,
WIN_MEM_MAP3_ENABLE,
WIN_MEM_MAP4_ENABLE,
WIN_MEM_MAP0_ENABLE,
WIN_MEM_MAP1_ENABLE,
WIN_MEM_MAP2_ENABLE,
WIN_MEM_MAP3_ENABLE,
WIN_MEM_MAP4_ENABLE,
WIN_IO_MAP0_ENABLE,
WIN_IO_MAP1_ENABLE,
WIN_IO_MAP0_ENABLE,
WIN_IO_MAP1_ENABLE
};
#else
#define PCMCIA_NUM_WINDOWS 12
UCHAR EnableMask[PCMCIA_NUM_WINDOWS] = {
WIN_MEM_MAP0_ENABLE,
WIN_MEM_MAP1_ENABLE,
WIN_MEM_MAP2_ENABLE,
WIN_MEM_MAP3_ENABLE,
WIN_MEM_MAP0_ENABLE,
WIN_MEM_MAP1_ENABLE,
WIN_MEM_MAP2_ENABLE,
WIN_MEM_MAP3_ENABLE,
WIN_IO_MAP0_ENABLE,
WIN_IO_MAP1_ENABLE,
WIN_IO_MAP0_ENABLE,
WIN_IO_MAP1_ENABLE
};
#endif
// @doc DRIVERS
PDCARD_WINDOW_STATE v_WinState[PCMCIA_NUM_WINDOWS] = {
//
// Window state for the attribute and common memory windows.
//
{ // Window 0 - socket 0 attribute or common window
0, // socket number
WIN_STATE_ENABLED, // state flags
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA_MEM_WIN_SIZE,
PCMCIA_MEM_WIN_BASE0,
0
},
{ // Window 1 - socket 0 attribute or common window
0, // socket number
WIN_STATE_ENABLED, // state flags
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA_MEM_WIN_SIZE,
PCMCIA_MEM_WIN_BASE1,
0
},
{ // Window 2 - socket 0 attribute or common window
0, // socket number
WIN_STATE_ENABLED, // state flags
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA_MEM_WIN_SIZE,
PCMCIA_MEM_WIN_BASE2,
0
},
{ // Window 3 - socket 0 attribute or common window
0, // socket number
WIN_STATE_ENABLED, // state flags
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA_MEM_WIN_SIZE,
PCMCIA_MEM_WIN_BASE3,
0
},
#ifdef MAX_WINDOWS
{ // Window 4 - socket 0 attribute or common window
0, // socket number
WIN_STATE_ENABLED, // state flags
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA_MEM_WIN_SIZE,
PCMCIA_MEM_WIN_BASE4,
0
},
#endif
{ // Window 5 - socket 1 attribute or common window
1, // socket number
WIN_STATE_ENABLED, // state flags
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA_MEM_WIN_SIZE,
PCMCIA_MEM_WIN_BASE5,
0
},
{ // Window 6 - socket 1 attribute or common window
1, // socket number
WIN_STATE_ENABLED, // state flags
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA_MEM_WIN_SIZE,
PCMCIA_MEM_WIN_BASE6,
0
},
{ // Window 7 - socket 1 attribute or common window
1, // socket number
WIN_STATE_ENABLED, // state flags
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA_MEM_WIN_SIZE,
PCMCIA_MEM_WIN_BASE7,
0
},
{ // Window 8 - socket 1 attribute or common window
1, // socket number
WIN_STATE_ENABLED, // state flags
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA_MEM_WIN_SIZE,
PCMCIA_MEM_WIN_BASE8,
0
},
#ifdef MAX_WINDOWS
{ // Window 9 - socket 1 attribute or common window
1, // socket number
WIN_STATE_ENABLED, // state flags
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA_MEM_WIN_SIZE,
PCMCIA_MEM_WIN_BASE9,
0
},
#endif
//
// Window state for the I/O windows.
//
{ // Window 10 - socket 0 I/O window
0, // socket number
WIN_STATE_MAPS_IO,
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA_IO_WIN_SIZE,
PCMCIA_IO_WIN_BASE0,
0
},
{ // Window 11 - socket 0 I/O window
0, // socket number
WIN_STATE_MAPS_IO,
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA_IO_WIN_SIZE,
PCMCIA_IO_WIN_BASE1,
0
},
{ // Window 12 - socket 1 I/O window
1, // socket number
WIN_STATE_MAPS_IO,
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA_IO_WIN_SIZE,
PCMCIA_IO_WIN_BASE2,
0
},
{ // Window 13 - socket 1 I/O window
1, // socket number
WIN_STATE_MAPS_IO,
WIN_SPEED_EXP_1NS|WIN_SPEED_MANT_10|WIN_SPEED_USE_WAIT,
PCMCIA_IO_WIN_SIZE,
PCMCIA_IO_WIN_BASE3,
0
}
};
//
// PDCardGetWindow
//
// @func STATUS | PDCardGetWindow | Report the current state of a memory or I/O window
// @rdesc Returns one of the CERR_* error codes in cardserv.h
//
STATUS
PDCardGetWindow(
UINT32 uWindow, // @parm Window number (the first window is 0)
PPDCARD_WINDOW_STATE pWindowState // @parm Pointer to a PDCARD_WINDOW_STATE structure.
)
{
if (uWindow >= PCMCIA_NUM_WINDOWS) {
return CERR_BAD_WINDOW;
}
memcpy(pWindowState, &(v_WinState[uWindow]), sizeof(PDCARD_WINDOW_STATE));
return CERR_SUCCESS;
}
//
// PDCardSetWindow
//
// @func STATUS | PDCardSetWindow | Change the characteristics of a memory or I/O window
// @rdesc Returns one of the CERR_* error codes in cardserv.h
//
STATUS
PDCardSetWindow(
UINT32 uWindow, // @parm Window number (the first window is 0)
PPDCARD_WINDOW_STATE pWindowState // @parm Pointer to a PDCARD_WINDOW_STATE structure.
)
{
//
// base_reg will be added to a base register index to get the
// correct window register index for the specified window.
//
UINT8 base_reg;
UINT8 tmp;
UINT8 tmp_mask;
UINT32 start;
UINT32 address;
UINT sock;
BOOL bUserMode = TRUE;
if ( uWindow & ADP_STATE_KERNEL_MODE) { // check the kernel-mode bit
ASSERT( !(PCMCIA_NUM_WINDOWS & ADP_STATE_KERNEL_MODE) );
uWindow &= ~ADP_STATE_KERNEL_MODE; // clear it
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?