ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

bus.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.