#define TRANSLATION_RANGE_SPARSE        0x0001
#define TRANSLATION_DATA_PARENT_ADDRESS 0x6000

#define TRANSLATION_MEM_TO_IO           0x20
#define TRANSLATION_IO_TO_MEM           0x40


typedef struct {
    UCHAR               ParentType;
    UCHAR               ChildType;
    PHYSICAL_ADDRESS    ParentAddress;
    PHYSICAL_ADDRESS    ChildAddress;
    ULONGLONG           Length;
} BRIDGE_WINDOW, *PBRIDGE_WINDOW;

typedef struct {
    PNSOBJ          AcpiObject;
    ULONG           RangeCount;
    PBRIDGE_WINDOW  Ranges;
    PIO_RESOURCE_REQUIREMENTS_LIST  IoList;
} BRIDGE_TRANSLATOR, *PBRIDGE_TRANSLATOR;

NTSTATUS
TranslateEjectInterface(
    PDEVICE_OBJECT  DeviceObject,
    PIRP            Irp
    );

NTSTATUS
TranslateBridgeResources(
    IN PVOID Context,
    IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source,
    IN RESOURCE_TRANSLATION_DIRECTION Direction,
    IN ULONG AlternativesCount, OPTIONAL
    IN IO_RESOURCE_DESCRIPTOR Alternatives[], OPTIONAL
    IN PDEVICE_OBJECT PhysicalDeviceObject,
    OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
    );

NTSTATUS
TranslateBridgeRequirements(
    IN PVOID Context,
    IN PIO_RESOURCE_DESCRIPTOR Source,
    IN PDEVICE_OBJECT PhysicalDeviceObject,
    OUT PULONG TargetCount,
    OUT PIO_RESOURCE_DESCRIPTOR *Target
    );
    
NTSTATUS
PciBusEjectInterface(
    PDEVICE_OBJECT  DeviceObject,
    PIRP            Irp
    );

VOID
AcpiNullReference(
    PVOID Context
    );

    
extern HAL_PORT_RANGE_INTERFACE HalPortRangeInterface;