s1xser.c
来自「WinCE 3.0 BSP, 包含Inter SA1110, Intel_815」· C语言 代码 · 共 258 行
C
258 行
/*
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
Module Name: s1xser.c
Abstract:
based serial device.
Functions: serial driver
*/
#include <windows.h>
#include <serhw.h>
#include <hw16550.h>
#include <serdbg.h>
#include <ceddk.h>
#include "sa1100.h"
//#include "sa11x0.h"
//#include "s1xuart.h"
#include "sa1xser.h"
#include "macros.h"
//#include "sa11x0bd.h"
//#include "sa11x1db.h"
#include "ser_pdd.h"
#include <nkintr.h>
#include "OALINTR.H"
#define IC_BASE_VIRTUAL 0xA9050000
#define PPC_BASE_VIRTUAL 0xA9060000
extern HW_VTBL SerVTbl;
// Viersion with MODEM Signal enable
ReadSA1100MSR(
PSER_HW_INFO pHWHead
)
{
pHWHead->MSR |= (SERIAL_MSR_CTS | SERIAL_MSR_DSR);
}
VOID HW_SA1100ClearDTR(PVOID pHead) {
RETAILMSG(1,(TEXT("\t**** HW_SA1100ClearDTR Modem Controls Not Implemented ******\r\n")));
}
VOID HW_SA1100SetDTR(PVOID pHead) {
RETAILMSG(1,(TEXT("\t**** HW_SA1100SetDTR Modem Controls Not Implemented ******\r\n")));
}
VOID HW_SA1100ClearRTS(PVOID pHead) {
RETAILMSG(1,(TEXT("\t**** HW_SA1100ClearRTS Modem Controls Not Implemented ******\r\n")));
}
VOID HW_SA1100SetRTS(PVOID pHead) {
RETAILMSG(1,(TEXT("\t**** HW_SA1100SetRTS Modem Controls Not Implemented ******\r\n")));
}
VOID
HW_SA1100GetModemStatus(
PVOID pHead, // @parm PVOID returned by HWInit.
PULONG pModemStatus // @parm PULONG passed in by user.
)
{
DEBUGMSG (ZONE_FUNCTION,
(TEXT("+HW_SA1100GetModemStatus 0x%X\r\n"), pHead));
*pModemStatus |= MS_CTS_ON;
*pModemStatus |= MS_RLSD_ON;
DEBUGMSG (ZONE_FUNCTION,
(TEXT("-HW_SA1100GetModemStatus 0x%X\r\n"), pHead));
};
BOOL IsModemDsrOn( PVOID pHead)
{
return TRUE;
}
BOOL IsModemCtsOn(PVOID pHead)
{
return TRUE;
}
VOID HW_SA1100OtherIntr(PVOID pHead) {
RETAILMSG(1,(TEXT("\t**** HW_SA1100OtherIntr Modem Controls Not Implemented ******\r\n")));
}
DWORD GetModemCapabilities ()
{
return 0;
}
// Common part
// Miscellaneous internal routines.
// ****************************************************************
//
// @doc INTERNAL
//
// @func VOID | HW_InternalMapRegisterAddresses |
// This routine maps the ASIC registers. It's an artifact of this
// implementation.
//
// @rdesc None.
//
void SerPDDInternalMapRegisterAddresses(
PSER_PDD_INFO pHWHead
)
{
PUCHAR pVMem;
BOOL bMapReturn;
ULONG err = 0;
//RETAILMSG(1,(TEXT("+SerPDDInternalMapRegisterAddresses\r\n")));
// Map CSR registers.
pVMem = (PUCHAR)VirtualAlloc(
0,
#ifdef SCOPE_TRIGGER_CODE
PAGE_SIZE*5,
#else
PAGE_SIZE*4,
#endif
MEM_RESERVE,
PAGE_NOACCESS);
if ( pVMem ) {
DEBUGMSG(ZONE_INIT, (TEXT("VirtualAlloc Succeeded\r\n")));
bMapReturn = VirtualCopy((LPVOID)pVMem,
(LPVOID)pHWHead->dwIOBase,
PAGE_SIZE,
PAGE_READWRITE | PAGE_NOCACHE);
if ( !bMapReturn ) {
err = GetLastError();
DEBUGMSG(ZONE_INIT, (TEXT("Virtual Copy: Serial SPACE FAILED\r\n")));
}
pHWHead->pBaseAddress=pVMem;
pVMem+=PAGE_SIZE;
bMapReturn = VirtualCopy((LPVOID)pVMem,
(LPVOID)IC_BASE_VIRTUAL,
PAGE_SIZE,
PAGE_READWRITE | PAGE_NOCACHE);
if ( !bMapReturn ) {
err = GetLastError();
DEBUGMSG(ZONE_INIT, (TEXT("Virtual Copy: IRQ SPACE FAILED\r\n")));
}
pHWHead->pIrqCtrlAddr=(volatile struct icreg *)pVMem;
pVMem+=PAGE_SIZE;
bMapReturn = VirtualCopy((LPVOID)pVMem,
(LPVOID)PPC_BASE_VIRTUAL,
PAGE_SIZE,
PAGE_READWRITE | PAGE_NOCACHE);
if ( !bMapReturn ) {
err = GetLastError();
DEBUGMSG(ZONE_INIT, (TEXT("Virtual Copy: HEX LEDS SPACE FAILED\r\n")));
}
pHWHead->pSA1100PPCReg=pVMem;
pVMem+=PAGE_SIZE;
#ifdef SCOPE_TRIGGER_CODE
bMapReturn = VirtualCopy((LPVOID)pVMem,
(LPVOID)SA1100MM_REGS_BASE,
PAGE_SIZE,
PAGE_READWRITE | PAGE_NOCACHE);
if ( !bMapReturn ) {
err = GetLastError();
DEBUGMSG(ZONE_INIT, (TEXT("Virtual Copy: HEX LEDS SPACE FAILED\r\n")));
}
TestKbdReg=pVMem+4;
#endif
} else {
DEBUGMSG(ZONE_INIT, (TEXT("Virtual Alloc: FAILED\r\n")));
}
DEBUGMSG(ZONE_INIT, (TEXT("VirtualCopy Succeeded, pVMem:%x\r\n"), pVMem));
}
/* Baudraet & Devider table */
#define BAUD_TABLE_SIZE 24
static const PAIRS LS_BaudPairs[BAUD_TABLE_SIZE] = {
{50, 4608},
{75, 3072},
{110, 2095},
{135, 1707},
{150, 1536},
{300, 768},
{600, 384},
{1200, 192},
{1800, 128},
{2000, 115},
{2400, 96},
{3600, 64},
{4800, 48},
{7200, 32},
{9600, 24},
{12800, 18},
{14400, 16},
{19200, 12},
{23040, 10},
{28800, 8},
{38400, 6},
{57600, 4},
{115200, 2},
{230400, 1}
};
const LOOKUP_TBL LS_BaudTable = {BAUD_TABLE_SIZE, (PAIRS *) LS_BaudPairs};
const extern HW_VTBL IRVTbl;
extern const HW_VTBL SerCardIoVTbl;
extern const HW_VTBL IRVTbl;
//
// Declare HWOBJS for all serial devices supported by the MDD
//
extern DEVICE_LIST SerDL;
HWOBJ SerObj = {
&SerDL,
THREAD_AT_OPEN,
SYSINTR_SERIAL,
NULL,
(PHW_VTBL) &SerVTbl
};
HWOBJ SerObj2 = {
&SerDL,
THREAD_AT_OPEN,
SYSINTR_SERIAL, // was SYSINTR_SERIAL1
NULL,
(PHW_VTBL) &SerVTbl
};
HWOBJ SerObj3 = {
&SerDL,
THREAD_AT_OPEN,
SYSINTR_IR,
NULL,
(PHW_VTBL) &SerVTbl
};
PHWOBJ rgpHWObjects[] = {
&SerObj
,&SerObj2
,&SerObj3
};
DEVICE_LIST SerDL = {
"sa1x_serial.dll",
sizeof(rgpHWObjects)/sizeof(PHWOBJ),
rgpHWObjects
};
PDEVICE_LIST
GetSerialObject(
VOID
)
{
return (&SerDL);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?