update for HEAD-2003050101
[reactos.git] / ntoskrnl / include / internal / hal / bus.h
1 /*
2
3  */
4
5 #ifndef __INTERNAL_HAL_BUS_H
6 #define __INTERNAL_HAL_BUS_H
7
8 struct _BUS_HANDLER;
9
10 typedef NTSTATUS (STDCALL *pAdjustResourceList) (
11         IN struct _BUS_HANDLER *BusHandler,
12         IN ULONG BusNumber,
13         IN OUT PCM_RESOURCE_LIST Resources
14         );
15
16 typedef NTSTATUS (STDCALL *pAssignSlotResources) (
17         IN struct _BUS_HANDLER *BusHandler,
18         IN ULONG BusNumber,
19         IN PUNICODE_STRING RegistryPath,
20         IN PUNICODE_STRING DriverClassName,
21         IN PDRIVER_OBJECT DriverObject,
22         IN PDEVICE_OBJECT DeviceObject,
23         IN ULONG SlotNumber,
24         IN OUT PCM_RESOURCE_LIST *AllocatedResources
25         );
26
27 typedef ULONG (STDCALL *pGetSetBusData) (
28         IN struct _BUS_HANDLER *BusHandler,
29         IN ULONG BusNumber,
30         IN ULONG SlotNumber,
31         OUT PVOID Buffer,
32         IN ULONG Offset,
33         IN ULONG Length
34         );
35
36 typedef ULONG (STDCALL *pGetInterruptVector) (
37         IN struct _BUS_HANDLER *BusHandler,
38         IN ULONG BusNumber,
39         IN ULONG BusInterruptLevel,
40         IN ULONG BusInterruptVector,
41         OUT PKIRQL Irql,
42         OUT PKAFFINITY Affinity
43         );
44
45 typedef ULONG (STDCALL *pTranslateBusAddress) (
46         IN struct _BUS_HANDLER *BusHandler,
47         IN ULONG BusNumber,
48         IN PHYSICAL_ADDRESS BusAddress,
49         IN OUT PULONG AddressSpace,
50         OUT PPHYSICAL_ADDRESS TranslatedAddress
51         );
52
53 typedef struct _BUS_HANDLER
54 {
55    LIST_ENTRY Entry;
56    INTERFACE_TYPE InterfaceType;
57    BUS_DATA_TYPE BusDataType;
58    ULONG BusNumber;
59    ULONG RefCount;
60
61    pGetSetBusData       GetBusData;
62    pGetSetBusData       SetBusData;
63    pAdjustResourceList  AdjustResourceList;
64    pAssignSlotResources AssignSlotResources;
65    pGetInterruptVector  GetInterruptVector;
66    pTranslateBusAddress TranslateBusAddress;
67 } BUS_HANDLER, *PBUS_HANDLER;
68
69
70 /* FUNCTIONS *****************************************************************/
71
72 /* bus.c */
73 PBUS_HANDLER
74 HalpAllocateBusHandler(INTERFACE_TYPE InterfaceType,
75                        BUS_DATA_TYPE BusDataType,
76                        ULONG BusNumber);
77
78 /* sysbus.h */
79 ULONG STDCALL
80 HalpGetSystemInterruptVector(PVOID BusHandler,
81                              ULONG BusNumber,
82                              ULONG BusInterruptLevel,
83                              ULONG BusInterruptVector,
84                              PKIRQL Irql,
85                              PKAFFINITY Affinity);
86
87 BOOLEAN STDCALL
88 HalpTranslateSystemBusAddress(PBUS_HANDLER BusHandler,
89                               ULONG BusNumber,
90                               PHYSICAL_ADDRESS BusAddress,
91                               PULONG AddressSpace,
92                               PPHYSICAL_ADDRESS TranslatedAddress);
93
94 /* isa.c */
95 BOOLEAN STDCALL
96 HalpTranslateIsaBusAddress(PBUS_HANDLER BusHandler,
97                            ULONG BusNumber,
98                            PHYSICAL_ADDRESS BusAddress,
99                            PULONG AddressSpace,
100                            PPHYSICAL_ADDRESS TranslatedAddress);
101
102 /* time.c */
103 ULONG STDCALL
104 HalpGetCmosData(PBUS_HANDLER BusHandler,
105                 ULONG BusNumber,
106                 ULONG SlotNumber,
107                 PVOID Buffer,
108                 ULONG Offset,
109                 ULONG Length);
110
111 ULONG STDCALL
112 HalpSetCmosData(PBUS_HANDLER BusHandler,
113                 ULONG BusNumber,
114                 ULONG SlotNumber,
115                 PVOID Buffer,
116                 ULONG Offset,
117                 ULONG Length);
118
119 #endif /* __INTERNAL_HAL_BUS_H */
120
121 /* EOF */