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

📄 ddk_bus.c

📁 WinCE 3.0 BSP, 包含Inter SA1110, Intel_815E, Advantech_PCM9574 等
💻 C
字号:
/* -*-C-*-
 *
 * $Revision: 1.2 $
 *   $Author: kwelton $
 *     $Date: 2000/05/10 16:53:58 $
 *
 *  Module Name:   ceddk.c
 *
 *  Abstract:
 *
 *     WINCE device driver support routines.  This file supports
 *     a very minimal subset of the routines from ntddk.h
 *
 * 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
 * Copyright (c) 2000 ARM Limited
 * All Rights Reserved
 */

#include <windows.h>
#include <types.h>
#include <ceddk.h>
#include <arm_ddk.h>
#include <board.h>
#include <platform.h>


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

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

    DEBUGMSG(1, (TEXT("+HalGetBusDataByOffset\r\n")));

    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.
        DEBUGMSG(1, (TEXT("-HalGetBusDataByOffset %d\r\n"),
                     parms.ReturnCode));
        return parms.ReturnCode;
    }
    else
    {
        // The IOCTL failed, ignore anything in parms.
        DEBUGMSG(1, (TEXT("-HalGetBusDataByOffset - Failed\r\n")));
        return 0;
    }
}

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

    DEBUGMSG(1, (TEXT("+HalSetBusDataByOffset\r\n")));

    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.
        DEBUGMSG(1, (TEXT("-HalSetBusDataByOffset %d\r\n"),
                     parms.ReturnCode));
        return parms.ReturnCode;
    }
    else
    {
        // The IOCTL failed, ignore anything in parms.
        DEBUGMSG(1, (TEXT("-HalSetBusDataByOffset - Failed\r\n")));
        return 0;
    }
}

BOOLEAN HalTranslateBusAddress(INTERFACE_TYPE InterfaceType,
                               ULONG BusNumber, PHYSICAL_ADDRESS BusAddress,
                               PULONG AddressSpace,
                               PPHYSICAL_ADDRESS TranslatedAddress)
{

    DEBUGMSG(1, (TEXT("+HalTranslateBusAddress\r\n")));

    *TranslatedAddress = BusAddress;

    if (*AddressSpace)
    {
        // This is a PCI IO address.  Unlike PCI memory addresses, the range
        // of PCI IO addresses we assign to a device's BAR aren't equal to
        // their corresponding addresses on the system bus.  Furthermore, 
        // the caller isn't going to call MmMapIoSpace or VirtualCopy unless we
        // override AddressSpace (set it to 0).  Instead, we'll add the
        // VA offset to rebase the address into the correct range and the
        // caller can access the range directly.
        //
        TranslatedAddress->LowPart += VA_PCI_IO_BASE;
    }

    DEBUGMSG(1, (TEXT("-HalTranslateBusAddress\r\n")));

    return(TRUE);
}

/* EOF ddk_bus.c */

⌨️ 快捷键说明

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