⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ddk_bus.c

📁 WinCE 3.0 BSP, 包含Inter SA1110, Intel_815E, Advantech_PCM9574 等
💻 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-1998  Microsoft Corporation

Module Name:  

    ceddk.c

Abstract:  

    WINCE device driver support routines.  This file supports
    a very minimal subset of the routines from ntddk.h

    
Functions:


Notes:

--*/
#include <windows.h>
#include <types.h>
#include <altoona.h>
#include "ceddk.h"
#include "pc_ddk.h"

//
// I/O driver configuration functions.
//

NTHALAPI
ULONG
HalGetBusDataByOffset(
                     IN BUS_DATA_TYPE BusDataType,
                     IN ULONG BusNumber,
                     IN ULONG SlotNumber,
                     IN PVOID Buffer,
                     IN ULONG Offset,
                     IN ULONG Length
                     )
{	
    BUSDATA_PARMS parms;
    DWORD dwBytesReturned;
    BOOL  RetCode;

    //DEBUGMSG(1, (TEXT("+--------> HalGetBusDataByOffset: Bus = %d - Slot = %d - Offset = %d - Length = %d \r\n"),
	//	BusNumber, SlotNumber, Offset, Length));

    parms.Function = IOCTL_HAL_GETBUSDATA;
    parms.ReturnCode = 0;
    parms.BusDataType = BusDataType;
    parms.BusNumber = BusNumber;
    parms.SlotNumber = SlotNumber;
    parms.Buffer = Buffer;
    parms.Offset = Offset;
    parms.Length = Length;
    RetCode = KernelIoControl( IOCTL_HAL_DDK_CALL,
                               &parms, sizeof(parms),
                               NULL, 0,
                               &dwBytesReturned);
    if ( RetCode ) {
        // The IOCTL worked, get results from parms.        
        return (parms.ReturnCode);
    } else {
        // The IOCTL failed, ignore anything in parms.
        DEBUGMSG(1, (TEXT("---------> HalGetBusDataByOffset - Failed\r\n")));
        return (0);
    }
}


NTHALAPI
ULONG
HalSetBusDataByOffset(
                     IN BUS_DATA_TYPE BusDataType,
                     IN ULONG BusNumber,
                     IN ULONG SlotNumber,
                     IN PVOID Buffer,
                     IN ULONG Offset,
                     IN ULONG Length
                     )
{	
    BUSDATA_PARMS parms;
    DWORD dwBytesReturned;
    BOOL  RetCode;

    //DEBUGMSG(1, (TEXT("+--------> HalGetBusDataByOffset: Bus = %d - Slot = %d - Offset = %d - Length = %d \r\n"),
	//	BusNumber, SlotNumber, Offset, Length));

    parms.Function = IOCTL_HAL_SETBUSDATA;
    parms.ReturnCode = 0;
    parms.BusDataType = BusDataType;
    parms.BusNumber = BusNumber;
    parms.SlotNumber = SlotNumber;
    parms.Buffer = Buffer;
    parms.Offset = Offset;
    parms.Length = Length;
    RetCode = KernelIoControl( IOCTL_HAL_DDK_CALL,
                               &parms, sizeof(parms),
                               NULL, 0,
                               &dwBytesReturned);
    if ( RetCode ) {
        // The IOCTL worked, get results from parms.        
        return (parms.ReturnCode);
    } else {
        // The IOCTL failed, ignore anything in parms.
        // RETAILMSG(1, (TEXT("---------> HalSetBusDataByOffset - Failed\r\n")));
        return (0);
    } 	
}


NTHALAPI
BOOLEAN
HalTranslateBusAddress(
                      IN INTERFACE_TYPE  InterfaceType,
                      IN ULONG BusNumber,
                      IN PHYSICAL_ADDRESS BusAddress,
                      IN OUT PULONG AddressSpace,
                      OUT PPHYSICAL_ADDRESS TranslatedAddress
                      )
{
	
    *TranslatedAddress = BusAddress;

    if (*AddressSpace == 1)
    {	
        // It is an I/O port, translate it
        RETAILMSG (1, (TEXT("PCI IO Addresss (0x%x -> "), TranslatedAddress->LowPart));
        TranslatedAddress->LowPart += PHYS_ADDR_IO_SPACE_BASE;
        *AddressSpace = 0;
        RETAILMSG (1, (TEXT("0x%x)...\r\n"), TranslatedAddress->LowPart));
    }
    else 
    {
	if (InterfaceType == PCIBus) 
	{
            RETAILMSG (1, (TEXT("PCI MEM Addresss (0x%x -> "), TranslatedAddress->LowPart));
            TranslatedAddress->LowPart += 0;
            RETAILMSG (1, (TEXT("0x%x)...\r\n"), TranslatedAddress->LowPart));
        }
    }

    return(TRUE);

}










⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -