Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenbus.h
Go to the documentation of this file.
00001 #pragma once 00002 00003 // 00004 // Helper Macros 00005 // 00006 #define PASTE2(x,y) x ## y 00007 #define POINTER_TO_(x) PASTE2(P,x) 00008 #define READ_FROM(x) PASTE2(READ_PORT_, x) 00009 #define WRITE_TO(x) PASTE2(WRITE_PORT_, x) 00010 00011 // 00012 // Declares a PCI Register Read/Write Routine 00013 // 00014 #define TYPE_DEFINE(x, y) \ 00015 ULONG \ 00016 NTAPI \ 00017 x( \ 00018 IN PPCIPBUSDATA BusData, \ 00019 IN y PciCfg, \ 00020 IN PUCHAR Buffer, \ 00021 IN ULONG Offset \ 00022 ) 00023 #define TYPE1_DEFINE(x) TYPE_DEFINE(x, PPCI_TYPE1_CFG_BITS); 00024 #define TYPE2_DEFINE(x) TYPE_DEFINE(x, PPCI_TYPE2_ADDRESS_BITS); 00025 00026 // 00027 // Defines a PCI Register Read/Write Type 1 Routine Prologue and Epilogue 00028 // 00029 #define TYPE1_START(x, y) \ 00030 TYPE_DEFINE(x, PPCI_TYPE1_CFG_BITS) \ 00031 { \ 00032 ULONG i = Offset % sizeof(ULONG); \ 00033 PciCfg->u.bits.RegisterNumber = Offset / sizeof(ULONG); \ 00034 WRITE_PORT_ULONG(BusData->Config.Type1.Address, PciCfg->u.AsULONG); 00035 #define TYPE1_END(y) \ 00036 return sizeof(y); } 00037 #define TYPE2_END TYPE1_END 00038 00039 // 00040 // PCI Register Read Type 1 Routine 00041 // 00042 #define TYPE1_READ(x, y) \ 00043 TYPE1_START(x, y) \ 00044 *((POINTER_TO_(y))Buffer) = \ 00045 READ_FROM(y)((POINTER_TO_(y))(BusData->Config.Type1.Data + i)); \ 00046 TYPE1_END(y) 00047 00048 // 00049 // PCI Register Write Type 1 Routine 00050 // 00051 #define TYPE1_WRITE(x, y) \ 00052 TYPE1_START(x, y) \ 00053 WRITE_TO(y)((POINTER_TO_(y))(BusData->Config.Type1.Data + i), \ 00054 *((POINTER_TO_(y))Buffer)); \ 00055 TYPE1_END(y) 00056 00057 // 00058 // Defines a PCI Register Read/Write Type 2 Routine Prologue and Epilogue 00059 // 00060 #define TYPE2_START(x, y) \ 00061 TYPE_DEFINE(x, PPCI_TYPE2_ADDRESS_BITS) \ 00062 { \ 00063 PciCfg->u.bits.RegisterNumber = (USHORT)Offset; 00064 00065 // 00066 // PCI Register Read Type 2 Routine 00067 // 00068 #define TYPE2_READ(x, y) \ 00069 TYPE2_START(x, y) \ 00070 *((POINTER_TO_(y))Buffer) = \ 00071 READ_FROM(y)((POINTER_TO_(y))(ULONG)PciCfg->u.AsUSHORT); \ 00072 TYPE2_END(y) 00073 00074 // 00075 // PCI Register Write Type 2 Routine 00076 // 00077 #define TYPE2_WRITE(x, y) \ 00078 TYPE2_START(x, y) \ 00079 WRITE_TO(y)((POINTER_TO_(y))(ULONG)PciCfg->u.AsUSHORT, \ 00080 *((POINTER_TO_(y))Buffer)); \ 00081 TYPE2_END(y) 00082 00083 typedef struct _PCIPBUSDATA 00084 { 00085 PCIBUSDATA CommonData; 00086 union 00087 { 00088 struct 00089 { 00090 PULONG Address; 00091 ULONG Data; 00092 } Type1; 00093 struct 00094 { 00095 PUCHAR CSE; 00096 PUCHAR Forward; 00097 ULONG Base; 00098 } Type2; 00099 } Config; 00100 ULONG MaxDevice; 00101 } PCIPBUSDATA, *PPCIPBUSDATA; 00102 00103 typedef ULONG 00104 (NTAPI *FncConfigIO)( 00105 IN PPCIPBUSDATA BusData, 00106 IN PVOID State, 00107 IN PUCHAR Buffer, 00108 IN ULONG Offset 00109 ); 00110 00111 typedef VOID 00112 (NTAPI *FncSync)( 00113 IN PBUS_HANDLER BusHandler, 00114 IN PCI_SLOT_NUMBER Slot, 00115 IN PKIRQL Irql, 00116 IN PVOID State 00117 ); 00118 00119 typedef VOID 00120 (NTAPI *FncReleaseSync)( 00121 IN PBUS_HANDLER BusHandler, 00122 IN KIRQL Irql 00123 ); 00124 00125 typedef struct _PCI_CONFIG_HANDLER 00126 { 00127 FncSync Synchronize; 00128 FncReleaseSync ReleaseSynchronzation; 00129 FncConfigIO ConfigRead[3]; 00130 FncConfigIO ConfigWrite[3]; 00131 } PCI_CONFIG_HANDLER, *PPCI_CONFIG_HANDLER; 00132 00133 typedef struct _PCI_REGISTRY_INFO_INTERNAL 00134 { 00135 UCHAR MajorRevision; 00136 UCHAR MinorRevision; 00137 UCHAR NoBuses; 00138 UCHAR HardwareMechanism; 00139 ULONG ElementCount; 00140 PCI_CARD_DESCRIPTOR CardList[ANYSIZE_ARRAY]; 00141 } PCI_REGISTRY_INFO_INTERNAL, *PPCI_REGISTRY_INFO_INTERNAL; 00142 00143 /* FUNCTIONS *****************************************************************/ 00144 00145 VOID 00146 NTAPI 00147 HalpPCISynchronizeType1( 00148 IN PBUS_HANDLER BusHandler, 00149 IN PCI_SLOT_NUMBER Slot, 00150 IN PKIRQL Irql, 00151 IN PPCI_TYPE1_CFG_BITS PciCfg 00152 ); 00153 00154 VOID 00155 NTAPI 00156 HalpPCIReleaseSynchronzationType1( 00157 IN PBUS_HANDLER BusHandler, 00158 IN KIRQL Irql 00159 ); 00160 00161 VOID 00162 NTAPI 00163 HalpPCISynchronizeType2( 00164 IN PBUS_HANDLER BusHandler, 00165 IN PCI_SLOT_NUMBER Slot, 00166 IN PKIRQL Irql, 00167 IN PPCI_TYPE2_ADDRESS_BITS PciCfg 00168 ); 00169 00170 VOID 00171 NTAPI 00172 HalpPCIReleaseSynchronzationType2( 00173 IN PBUS_HANDLER BusHandler, 00174 IN KIRQL Irql 00175 ); 00176 00177 TYPE1_DEFINE(HalpPCIReadUcharType1); 00178 TYPE1_DEFINE(HalpPCIReadUshortType1); 00179 TYPE1_DEFINE(HalpPCIReadUlongType1); 00180 TYPE2_DEFINE(HalpPCIReadUcharType2); 00181 TYPE2_DEFINE(HalpPCIReadUshortType2); 00182 TYPE2_DEFINE(HalpPCIReadUlongType2); 00183 TYPE1_DEFINE(HalpPCIWriteUcharType1); 00184 TYPE1_DEFINE(HalpPCIWriteUshortType1); 00185 TYPE1_DEFINE(HalpPCIWriteUlongType1); 00186 TYPE2_DEFINE(HalpPCIWriteUcharType2); 00187 TYPE2_DEFINE(HalpPCIWriteUshortType2); 00188 TYPE2_DEFINE(HalpPCIWriteUlongType2); 00189 00190 BOOLEAN 00191 NTAPI 00192 HalpValidPCISlot( 00193 IN PBUS_HANDLER BusHandler, 00194 IN PCI_SLOT_NUMBER Slot 00195 ); 00196 00197 VOID 00198 NTAPI 00199 HalpReadPCIConfig( 00200 IN PBUS_HANDLER BusHandler, 00201 IN PCI_SLOT_NUMBER Slot, 00202 IN PVOID Buffer, 00203 IN ULONG Offset, 00204 IN ULONG Length 00205 ); 00206 00207 VOID 00208 NTAPI 00209 HalpWritePCIConfig( 00210 IN PBUS_HANDLER BusHandler, 00211 IN PCI_SLOT_NUMBER Slot, 00212 IN PVOID Buffer, 00213 IN ULONG Offset, 00214 IN ULONG Length 00215 ); 00216 00217 ULONG 00218 NTAPI 00219 HalpGetSystemInterruptVector( 00220 ULONG BusNumber, 00221 ULONG BusInterruptLevel, 00222 ULONG BusInterruptVector, 00223 PKIRQL Irql, 00224 PKAFFINITY Affinity 00225 ); 00226 00227 ULONG 00228 NTAPI 00229 HalpGetCmosData( 00230 IN ULONG BusNumber, 00231 IN ULONG SlotNumber, 00232 IN PVOID Buffer, 00233 IN ULONG Length 00234 ); 00235 00236 ULONG 00237 NTAPI 00238 HalpSetCmosData( 00239 IN ULONG BusNumber, 00240 IN ULONG SlotNumber, 00241 IN PVOID Buffer, 00242 IN ULONG Length 00243 ); 00244 00245 ULONG 00246 NTAPI 00247 HalpGetPCIData( 00248 IN PBUS_HANDLER BusHandler, 00249 IN PBUS_HANDLER RootBusHandler, 00250 IN PCI_SLOT_NUMBER SlotNumber, 00251 IN PUCHAR Buffer, 00252 IN ULONG Offset, 00253 IN ULONG Length 00254 ); 00255 00256 ULONG 00257 NTAPI 00258 HalpSetPCIData( 00259 IN PBUS_HANDLER BusHandler, 00260 IN PBUS_HANDLER RootBusHandler, 00261 IN PCI_SLOT_NUMBER SlotNumber, 00262 IN PUCHAR Buffer, 00263 IN ULONG Offset, 00264 IN ULONG Length 00265 ); 00266 00267 NTSTATUS 00268 NTAPI 00269 HalpAssignPCISlotResources( 00270 IN PBUS_HANDLER BusHandler, 00271 IN PBUS_HANDLER RootHandler, 00272 IN PUNICODE_STRING RegistryPath, 00273 IN PUNICODE_STRING DriverClassName OPTIONAL, 00274 IN PDRIVER_OBJECT DriverObject, 00275 IN PDEVICE_OBJECT DeviceObject OPTIONAL, 00276 IN ULONG Slot, 00277 IN OUT PCM_RESOURCE_LIST *pAllocatedResources 00278 ); 00279 00280 VOID 00281 NTAPI 00282 HalpInitializePciBus( 00283 VOID 00284 ); 00285 00286 extern ULONG HalpBusType; 00287 extern BOOLEAN HalpPCIConfigInitialized; 00288 extern BUS_HANDLER HalpFakePciBusHandler; 00289 extern ULONG HalpMinPciBus, HalpMaxPciBus; 00290 00291 /* EOF */ Generated on Sun May 27 2012 04:28:41 for ReactOS by
1.7.6.1
|