added 3 changesets to branch 'refs/remotes/xyzzy-github/x86_64' old head: 385d69fc0177827257822eec1274f4286bc6600d new head: 12bd7812dd6b6eadb65789ca9fc2e270d7d66fd4 ---------------------------------------------------------------------------- 2865db3: Compile msi.cpp for x86_64. Needed to link the PCI module, not enabling it yet though, I'm not sure whether everything needed for it is in place yet. 9d4e925: Support x86_64 in config_manager. 12bd781: Ported PCI module to x86_64. Uses the x86 architecture code, made fixes to printf formats and a couple of 64-bit fixes. Only potentially intrusive change is that I've changed PCI.h to use uint32 rather than ulong. I don't see any way this would cause any issues, though. [ Alex Smith <alex@xxxxxxxxxxxxxxxx> ] ---------------------------------------------------------------------------- 14 files changed, 124 insertions(+), 98 deletions(-) build/jam/FloppyBootImage | 4 +- headers/os/drivers/PCI.h | 44 +++++------ .../kernel/bus_managers/config_manager/Jamfile | 3 +- .../bus_managers/config_manager/config_manager.c | 16 ++-- src/add-ons/kernel/bus_managers/pci/Jamfile | 5 +- .../kernel/bus_managers/pci/arch/x86/pci_msi.cpp | 2 +- src/add-ons/kernel/bus_managers/pci/pci.cpp | 49 +++++++----- src/add-ons/kernel/bus_managers/pci/pci.h | 4 +- src/add-ons/kernel/bus_managers/pci/pci_fixup.cpp | 22 +++--- src/add-ons/kernel/bus_managers/pci/pci_info.cpp | 63 +++++++++------- src/add-ons/kernel/bus_managers/pci/pci_module.cpp | 2 +- src/system/kernel/arch/x86/Jamfile | 2 +- src/system/kernel/arch/x86/arch_int.cpp | 2 +- src/system/kernel/arch/x86/msi.cpp | 4 + ############################################################################ Commit: 2865db34c861fc7e72d1076885e671b5b2d0e7dc Author: Alex Smith <alex@xxxxxxxxxxxxxxxx> Date: Fri Jul 20 10:53:46 2012 UTC Compile msi.cpp for x86_64. Needed to link the PCI module, not enabling it yet though, I'm not sure whether everything needed for it is in place yet. ---------------------------------------------------------------------------- diff --git a/src/system/kernel/arch/x86/Jamfile b/src/system/kernel/arch/x86/Jamfile index e95aa43..6fa9cea 100644 --- a/src/system/kernel/arch/x86/Jamfile +++ b/src/system/kernel/arch/x86/Jamfile @@ -54,7 +54,6 @@ if $(TARGET_ARCH) = x86_64 { arch_user_debugger.cpp ioapic.cpp irq_routing_table.cpp - msi.cpp syscall.S x86_signals.cpp x86_signals_asm.S @@ -90,6 +89,7 @@ local archGenericSources = arch_vm.cpp arch_vm_translation_map.cpp apic.cpp + msi.cpp pic.cpp # paging diff --git a/src/system/kernel/arch/x86/arch_int.cpp b/src/system/kernel/arch/x86/arch_int.cpp index 21dedb3..9d35513 100644 --- a/src/system/kernel/arch/x86/arch_int.cpp +++ b/src/system/kernel/arch/x86/arch_int.cpp @@ -237,8 +237,8 @@ arch_int_init_io(kernel_args* args) // TODO x86_64 #ifndef __x86_64__ ioapic_init(args); - msi_init(); #endif + msi_init(); return B_OK; } diff --git a/src/system/kernel/arch/x86/msi.cpp b/src/system/kernel/arch/x86/msi.cpp index 67b2422..62bfb84 100644 --- a/src/system/kernel/arch/x86/msi.cpp +++ b/src/system/kernel/arch/x86/msi.cpp @@ -17,6 +17,10 @@ static bool sMSISupported = false; void msi_init() { +#ifdef __x86_64__ + // TODO x86_64. + return; +#endif if (!apic_available()) { dprintf("disabling msi due to missing apic\n"); return; ############################################################################ Commit: 9d4e925cf02e98d5385b5253bce07683d378883d Author: Alex Smith <alex@xxxxxxxxxxxxxxxx> Date: Fri Jul 20 10:56:15 2012 UTC Support x86_64 in config_manager. ---------------------------------------------------------------------------- diff --git a/src/add-ons/kernel/bus_managers/config_manager/Jamfile b/src/add-ons/kernel/bus_managers/config_manager/Jamfile index b0333ca..e88370e 100644 --- a/src/add-ons/kernel/bus_managers/config_manager/Jamfile +++ b/src/add-ons/kernel/bus_managers/config_manager/Jamfile @@ -7,4 +7,5 @@ KernelAddon config_manager : : config_manager_arch.a ; -SubInclude HAIKU_TOP src add-ons kernel bus_managers config_manager arch $(TARGET_ARCH) ; +SubInclude HAIKU_TOP src add-ons kernel bus_managers config_manager arch + $(TARGET_KERNEL_ARCH) ; diff --git a/src/add-ons/kernel/bus_managers/config_manager/config_manager.c b/src/add-ons/kernel/bus_managers/config_manager/config_manager.c index 4f6ede9..ccb7a66 100644 --- a/src/add-ons/kernel/bus_managers/config_manager/config_manager.c +++ b/src/add-ons/kernel/bus_managers/config_manager/config_manager.c @@ -29,7 +29,7 @@ static pci_module_info *gPCI = NULL; static status_t driver_get_next_device_info(bus_type bus, uint64 *cookie, struct device_info *info, uint32 size) { - FUNCTION("(bus = %d, cookie = %lld)\n", bus, *cookie); + FUNCTION("(bus = %d, cookie = %" B_PRId64 ")\n", bus, *cookie); return B_ENTRY_NOT_FOUND; } @@ -37,7 +37,7 @@ driver_get_next_device_info(bus_type bus, uint64 *cookie, struct device_info *in static status_t driver_get_device_info_for(uint64 id, struct device_info *info, uint32 size) { - FUNCTION("(id = %Ld)\n", id); + FUNCTION("(id = %" B_PRId64 ")\n", id); return B_ENTRY_NOT_FOUND; } @@ -45,7 +45,7 @@ driver_get_device_info_for(uint64 id, struct device_info *info, uint32 size) static status_t driver_get_size_of_current_configuration_for(uint64 id) { - FUNCTION("(id = %Ld)\n", id); + FUNCTION("(id = %" B_PRId64 ")\n", id); return B_ENTRY_NOT_FOUND; } @@ -53,7 +53,8 @@ driver_get_size_of_current_configuration_for(uint64 id) static status_t driver_get_current_configuration_for(uint64 id, struct device_configuration *current, uint32 size) { - FUNCTION("(id = %Ld, current = %p, size = %lu)\n", id, current, size); + FUNCTION("(id = %" B_PRId64 ", current = %p, size = %" B_PRIu32 ")\n", id, + current, size); return B_ENTRY_NOT_FOUND; } @@ -61,7 +62,7 @@ driver_get_current_configuration_for(uint64 id, struct device_configuration *cur static status_t driver_get_size_of_possible_configurations_for(uint64 id) { - FUNCTION("(id = %Ld)\n", id); + FUNCTION("(id = %" B_PRId64 ")\n", id); return B_ENTRY_NOT_FOUND; } @@ -69,7 +70,8 @@ driver_get_size_of_possible_configurations_for(uint64 id) static status_t driver_get_possible_configurations_for(uint64 id, struct possible_device_configurations *possible, uint32 size) { - FUNCTION("(id = %Ld, possible = %p, size = %lu)\n", id, possible, size); + FUNCTION("(id = %" B_PRId64 ", possible = %p, size = %" B_PRIu32 ")\n", id, + possible, size); return B_ENTRY_NOT_FOUND; } @@ -86,7 +88,7 @@ static status_t driver_get_nth_resource_descriptor_of_type(const struct device_configuration *config, uint32 num, resource_type type, resource_descriptor *descr, uint32 size) { - FUNCTION("(config = %p, num = %ld)\n", config, num); + FUNCTION("(config = %p, num = %" B_PRId32 ")\n", config, num); return B_ENTRY_NOT_FOUND; } ############################################################################ Commit: 12bd7812dd6b6eadb65789ca9fc2e270d7d66fd4 Author: Alex Smith <alex@xxxxxxxxxxxxxxxx> Date: Fri Jul 20 11:00:20 2012 UTC Ported PCI module to x86_64. Uses the x86 architecture code, made fixes to printf formats and a couple of 64-bit fixes. Only potentially intrusive change is that I've changed PCI.h to use uint32 rather than ulong. I don't see any way this would cause any issues, though. ---------------------------------------------------------------------------- diff --git a/build/jam/FloppyBootImage b/build/jam/FloppyBootImage index 2bfe08f..b34dfdc 100644 --- a/build/jam/FloppyBootImage +++ b/build/jam/FloppyBootImage @@ -54,7 +54,7 @@ SYSTEM_ADD_ONS_FILE_SYSTEMS = bfs iso9660 attribute_overlay write_overlay ; if $(TARGET_ARCH) = x86_64 { AddFilesToFloppyBootArchive system add-ons kernel bus_managers - : dpc ; + : config_manager dpc pci ; } else { # modules AddFilesToFloppyBootArchive system add-ons kernel bus_managers @@ -126,7 +126,7 @@ if $(NET_BOOT) = 1 { # boot module links if $(TARGET_ARCH) = x86_64 { AddBootModuleSymlinksToFloppyBootArchive - dpc + dpc config_manager pci ; } else { AddBootModuleSymlinksToFloppyBootArchive diff --git a/headers/os/drivers/PCI.h b/headers/os/drivers/PCI.h index 84535da..ef0b506 100644 --- a/headers/os/drivers/PCI.h +++ b/headers/os/drivers/PCI.h @@ -44,15 +44,15 @@ typedef struct pci_info { uchar reserved; /* filler, for alignment */ union { struct { - ulong cardbus_cis; /* CardBus CIS pointer */ + uint32 cardbus_cis; /* CardBus CIS pointer */ ushort subsystem_id; /* subsystem (add-in card) id */ ushort subsystem_vendor_id; /* subsystem (add-in card) vendor id */ - ulong rom_base; /* rom base address, viewed from host */ - ulong rom_base_pci; /* rom base addr, viewed from pci */ - ulong rom_size; /* rom size */ - ulong base_registers[6]; /* base registers, viewed from host */ - ulong base_registers_pci[6]; /* base registers, viewed from pci */ - ulong base_register_sizes[6]; /* size of what base regs point to */ + uint32 rom_base; /* rom base address, viewed from host */ + uint32 rom_base_pci; /* rom base addr, viewed from pci */ + uint32 rom_size; /* rom size */ + uint32 base_registers[6]; /* base registers, viewed from host */ + uint32 base_registers_pci[6]; /* base registers, viewed from pci */ + uint32 base_register_sizes[6]; /* size of what base regs point to */ uchar base_register_flags[6]; /* flags from base address fields */ uchar interrupt_line; /* interrupt line */ uchar interrupt_pin; /* interrupt pin */ @@ -60,9 +60,9 @@ typedef struct pci_info { uchar max_latency; /* how often PCI access needed */ } h0; struct { - ulong base_registers[2]; /* base registers, viewed from host */ - ulong base_registers_pci[2]; /* base registers, viewed from pci */ - ulong base_register_sizes[2]; /* size of what base regs point to */ + uint32 base_registers[2]; /* base registers, viewed from host */ + uint32 base_registers_pci[2]; /* base registers, viewed from pci */ + uint32 base_register_sizes[2]; /* size of what base regs point to */ uchar base_register_flags[2]; /* flags from base address fields */ uchar primary_bus; uchar secondary_bus; @@ -75,12 +75,12 @@ typedef struct pci_info { ushort memory_limit; ushort prefetchable_memory_base; ushort prefetchable_memory_limit; - ulong prefetchable_memory_base_upper32; - ulong prefetchable_memory_limit_upper32; + uint32 prefetchable_memory_base_upper32; + uint32 prefetchable_memory_limit_upper32; ushort io_base_upper16; ushort io_limit_upper16; - ulong rom_base; /* rom base address, viewed from host */ - ulong rom_base_pci; /* rom base addr, viewed from pci */ + uint32 rom_base; /* rom base address, viewed from host */ + uint32 rom_base_pci; /* rom base addr, viewed from pci */ uchar interrupt_line; /* interrupt line */ uchar interrupt_pin; /* interrupt pin */ ushort bridge_control; @@ -98,14 +98,14 @@ typedef struct pci_info { uchar subordinate_bus; uchar secondary_latency; ushort reserved; - ulong memory_base; - ulong memory_limit; - ulong memory_base_upper32; - ulong memory_limit_upper32; - ulong io_base; - ulong io_limit; - ulong io_base_upper32; - ulong io_limit_upper32; + uint32 memory_base; + uint32 memory_limit; + uint32 memory_base_upper32; + uint32 memory_limit_upper32; + uint32 io_base; + uint32 io_limit; + uint32 io_base_upper32; + uint32 io_limit_upper32; ushort secondary_status; ushort bridge_control; #endif /* __HAIKU_PCI_BUS_MANAGER_TESTING */ diff --git a/src/add-ons/kernel/bus_managers/pci/Jamfile b/src/add-ons/kernel/bus_managers/pci/Jamfile index 79d1b0e..c4ea478 100644 --- a/src/add-ons/kernel/bus_managers/pci/Jamfile +++ b/src/add-ons/kernel/bus_managers/pci/Jamfile @@ -3,7 +3,7 @@ SubDir HAIKU_TOP src add-ons kernel bus_managers pci ; UsePrivateKernelHeaders ; UsePrivateHeaders shared ; UsePrivateHeaders [ FDirName kernel util ] ; -UseHeaders [ FDirName $(SUBDIR) arch $(TARGET_ARCH) ] ; +UseHeaders [ FDirName $(SUBDIR) arch $(TARGET_KERNEL_ARCH) ] ; KernelAddon pci : pci.cpp @@ -20,4 +20,5 @@ ObjectHdrs [ FGristFiles pci_info$(SUFOBJ) ] : [ FDirName $(TARGET_COMMON_DEBUG_OBJECT_DIR) apps devices ] ; Includes [ FGristFiles pci_info.cpp ] : <src!apps!devices>pcihdr.h ; -SubInclude HAIKU_TOP src add-ons kernel bus_managers pci arch $(TARGET_ARCH) ; +SubInclude HAIKU_TOP src add-ons kernel bus_managers pci arch + $(TARGET_KERNEL_ARCH) ; diff --git a/src/add-ons/kernel/bus_managers/pci/arch/x86/pci_msi.cpp b/src/add-ons/kernel/bus_managers/pci/arch/x86/pci_msi.cpp index 880c0c8..719c490 100644 --- a/src/add-ons/kernel/bus_managers/pci/arch/x86/pci_msi.cpp +++ b/src/add-ons/kernel/bus_managers/pci/arch/x86/pci_msi.cpp @@ -163,7 +163,7 @@ pci_enable_msi(uint8 virtualBus, uint8 _device, uint8 function) gPCI->WriteConfig(device, info->capability_offset + PCI_msi_control, 2, info->control_value); - dprintf("msi enabled: 0x%04lx\n", + dprintf("msi enabled: 0x%04" B_PRIx32 "\n", gPCI->ReadConfig(device, info->capability_offset + PCI_msi_control, 2)); return B_OK; } diff --git a/src/add-ons/kernel/bus_managers/pci/pci.cpp b/src/add-ons/kernel/bus_managers/pci/pci.cpp index 93bb755..c91ce3d 100644 --- a/src/add-ons/kernel/bus_managers/pci/pci.cpp +++ b/src/add-ons/kernel/bus_managers/pci/pci.cpp @@ -350,7 +350,7 @@ display_io(int argc, char **argv) if (i != 0) kprintf("\n"); - kprintf("[0x%lx] ", address + i * itemSize); + kprintf("[0x%" B_PRIx32 "] ", address + i * itemSize); if (num > displayWidth) { // make sure the spacing in the last line is correct @@ -362,13 +362,13 @@ display_io(int argc, char **argv) switch (itemSize) { case 1: - kprintf(" %02x", pci_read_io_8(address + i * itemSize)); + kprintf(" %02" B_PRIx8, pci_read_io_8(address + i * itemSize)); break; case 2: - kprintf(" %04x", pci_read_io_16(address + i * itemSize)); + kprintf(" %04" B_PRIx16, pci_read_io_16(address + i * itemSize)); break; case 4: - kprintf(" %08lx", pci_read_io_32(address + i * itemSize)); + kprintf(" %08" B_PRIx32, pci_read_io_32(address + i * itemSize)); break; } } @@ -569,7 +569,7 @@ PCI::~PCI() status_t PCI::_CreateVirtualBus(int domain, uint8 bus, uint8 *virtualBus) { -#if defined(__INTEL__) +#if defined(__INTEL__) || defined(__x86_64__) // IA32 doesn't use domains if (domain) @@ -607,7 +607,7 @@ PCI::_CreateVirtualBus(int domain, uint8 bus, uint8 *virtualBus) status_t PCI::ResolveVirtualBus(uint8 virtualBus, int *domain, uint8 *bus) { -#if defined(__INTEL__) +#if defined(__INTEL__) || defined(__x86_64__) // IA32 doesn't use domains *bus = virtualBus; @@ -739,8 +739,11 @@ PCI::_EnumerateBus(int domain, uint8 bus, uint8 *subordinateBus) if (baseClass != PCI_bridge || subClass != PCI_pci) continue; - TRACE(("PCI: found PCI-PCI bridge: domain %u, bus %u, dev %u, func %u\n", domain, bus, dev, function)); - TRACE(("PCI: original settings: pcicmd %04lx, primary-bus %lu, secondary-bus %lu, subordinate-bus %lu\n", + TRACE(("PCI: found PCI-PCI bridge: domain %u, bus %u, dev %u, func %u\n", + domain, bus, dev, function)); + TRACE(("PCI: original settings: pcicmd %04" B_PRIx32 ", primary-bus " + "%" B_PRIu32 ", secondary-bus %" B_PRIu32 ", subordinate-bus " + "%" B_PRIu32 "\n", ReadConfig(domain, bus, dev, function, PCI_command, 2), ReadConfig(domain, bus, dev, function, PCI_primary_bus, 1), ReadConfig(domain, bus, dev, function, PCI_secondary_bus, 1), @@ -758,7 +761,9 @@ PCI::_EnumerateBus(int domain, uint8 bus, uint8 *subordinateBus) WriteConfig(domain, bus, dev, function, PCI_secondary_bus, 1, 0); WriteConfig(domain, bus, dev, function, PCI_subordinate_bus, 1, 0); - TRACE(("PCI: disabled settings: pcicmd %04lx, primary-bus %lu, secondary-bus %lu, subordinate-bus %lu\n", + TRACE(("PCI: disabled settings: pcicmd %04" B_PRIx32 ", primary-bus " + "%" B_PRIu32 ", secondary-bus %" B_PRIu32 ", subordinate-bus " + "%" B_PRIu32 "\n", ReadConfig(domain, bus, dev, function, PCI_command, 2), ReadConfig(domain, bus, dev, function, PCI_primary_bus, 1), ReadConfig(domain, bus, dev, function, PCI_secondary_bus, 1), @@ -803,7 +808,9 @@ PCI::_EnumerateBus(int domain, uint8 bus, uint8 *subordinateBus) pcicmd |= PCI_command_io | PCI_command_memory | PCI_command_master; WriteConfig(domain, bus, dev, function, PCI_command, 2, pcicmd); - TRACE(("PCI: probing settings: pcicmd %04lx, primary-bus %lu, secondary-bus %lu, subordinate-bus %lu\n", + TRACE(("PCI: probing settings: pcicmd %04" B_PRIx32 ", primary-bus " + "%" B_PRIu32 ", secondary-bus %" B_PRIu32 ", subordinate-bus " + "%" B_PRIu32 "\n", ReadConfig(domain, bus, dev, function, PCI_command, 2), ReadConfig(domain, bus, dev, function, PCI_primary_bus, 1), ReadConfig(domain, bus, dev, function, PCI_secondary_bus, 1), @@ -815,7 +822,9 @@ PCI::_EnumerateBus(int domain, uint8 bus, uint8 *subordinateBus) // close Scheunentor WriteConfig(domain, bus, dev, function, PCI_subordinate_bus, 1, lastUsedBusNumber); - TRACE(("PCI: configured settings: pcicmd %04lx, primary-bus %lu, secondary-bus %lu, subordinate-bus %lu\n", + TRACE(("PCI: configured settings: pcicmd %04" B_PRIx32 ", primary-bus " + "%" B_PRIu32 ", secondary-bus %" B_PRIu32 ", subordinate-bus " + "%" B_PRIu32 "\n", ReadConfig(domain, bus, dev, function, PCI_command, 2), ReadConfig(domain, bus, dev, function, PCI_primary_bus, 1), ReadConfig(domain, bus, dev, function, PCI_secondary_bus, 1), @@ -1236,11 +1245,11 @@ PCI::_ReadHeaderInfo(PCIDev *dev) WriteConfig(dev->domain, dev->bus, dev->device, dev->function, PCI_command, 2, pcicmd); - dev->info.u.h0.rom_base = (ulong)pci_ram_address( - (void *)dev->info.u.h0.rom_base_pci); + dev->info.u.h0.rom_base = (addr_t)pci_ram_address( + (void *)(addr_t)dev->info.u.h0.rom_base_pci); for (int i = 0; i < 6; i++) { - dev->info.u.h0.base_registers[i] = (ulong)pci_ram_address( - (void *)dev->info.u.h0.base_registers_pci[i]); + dev->info.u.h0.base_registers[i] = (addr_t)pci_ram_address( + (void *)(addr_t)dev->info.u.h0.base_registers_pci[i]); } dev->info.u.h0.cardbus_cis = ReadConfig(dev->domain, dev->bus, @@ -1282,11 +1291,11 @@ PCI::_ReadHeaderInfo(PCIDev *dev) WriteConfig(dev->domain, dev->bus, dev->device, dev->function, PCI_command, 2, pcicmd); - dev->info.u.h1.rom_base = (ulong)pci_ram_address( - (void *)dev->info.u.h1.rom_base_pci); + dev->info.u.h1.rom_base = (addr_t)pci_ram_address( + (void *)(addr_t)dev->info.u.h1.rom_base_pci); for (int i = 0; i < 2; i++) { - dev->info.u.h1.base_registers[i] = (ulong)pci_ram_address( - (void *)dev->info.u.h1.base_registers_pci[i]); + dev->info.u.h1.base_registers[i] = (addr_t)pci_ram_address( + (void *)(addr_t)dev->info.u.h1.base_registers_pci[i]); } dev->info.u.h1.primary_bus = ReadConfig(dev->domain, dev->bus, @@ -1397,7 +1406,7 @@ PCI::_RefreshDeviceInfo(PCIBus *bus) for (PCIDev *dev = bus->child; dev; dev = dev->next) { _ReadBasicInfo(dev); _ReadHeaderInfo(dev); -#ifdef __INTEL__ +#if defined(__INTEL__) || defined(__x86_64__) pci_read_arch_info(dev); #endif if (dev->child) diff --git a/src/add-ons/kernel/bus_managers/pci/pci.h b/src/add-ons/kernel/bus_managers/pci/pci.h index 626ed79..a75fcfe 100644 --- a/src/add-ons/kernel/bus_managers/pci/pci.h +++ b/src/add-ons/kernel/bus_managers/pci/pci.h @@ -15,7 +15,7 @@ #include "pci_controller.h" -#ifdef __INTEL__ +#if defined(__INTEL__) || defined(__x86_64__) #include "pci_arch_info.h" #endif @@ -47,7 +47,7 @@ struct PCIDev { uint8 device; uint8 function; pci_info info; -#ifdef __INTEL__ +#if defined(__INTEL__) || defined(__x86_64__) pci_arch_info arch_info; #endif }; diff --git a/src/add-ons/kernel/bus_managers/pci/pci_fixup.cpp b/src/add-ons/kernel/bus_managers/pci/pci_fixup.cpp index ac1365a..7ab20f6 100644 --- a/src/add-ons/kernel/bus_managers/pci/pci_fixup.cpp +++ b/src/add-ons/kernel/bus_managers/pci/pci_fixup.cpp @@ -44,7 +44,7 @@ jmicron_fixup_ahci(PCI *pci, int domain, uint8 bus, uint8 device, // Read controller control register (0x40). uint32 val = pci->ReadConfig(domain, bus, device, function, 0x40, 4); - dprintf("jmicron_fixup_ahci: Register 0x40 : 0x%08lx\n", val); + dprintf("jmicron_fixup_ahci: Register 0x40 : 0x%08" B_PRIx32 "\n", val); // Clear bits. val &= ~(1 << 1); @@ -67,7 +67,7 @@ jmicron_fixup_ahci(PCI *pci, int domain, uint8 bus, uint8 device, val |= (1 << 14); val |= (1 << 23); - dprintf("jmicron_fixup_ahci: Register 0x40 : 0x%08lx\n", val); + dprintf("jmicron_fixup_ahci: Register 0x40 : 0x%08" B_PRIx32 "\n", val); pci->WriteConfig(domain, bus, device, function, 0x40, 4, val); // Read IRQ from controller at function 0 and assign this IRQ to the @@ -108,9 +108,9 @@ intel_fixup_ahci(PCI *pci, int domain, uint8 bus, uint8 device, uint8 function, dprintf("intel_fixup_ahci: domain %u, bus %u, device %u, function %u, " "deviceId 0x%04x\n", domain, bus, device, function, deviceId); - dprintf("intel_fixup_ahci: 0x24: 0x%08lx\n", + dprintf("intel_fixup_ahci: 0x24: 0x%08" B_PRIx32 "\n", pci->ReadConfig(domain, bus, device, function, 0x24, 4)); - dprintf("intel_fixup_ahci: 0x90: 0x%02lx\n", + dprintf("intel_fixup_ahci: 0x90: 0x%02" B_PRIx32 "\n", pci->ReadConfig(domain, bus, device, function, 0x90, 1)); uint8 map = pci->ReadConfig(domain, bus, device, function, 0x90, 1); @@ -125,10 +125,10 @@ intel_fixup_ahci(PCI *pci, int domain, uint8 bus, uint8 device, uint8 function, pcicmd & ~(PCI_command_io | PCI_command_memory)); pci->WriteConfig(domain, bus, device, function, 0x24, 4, 0xffffffff); - dprintf("intel_fixup_ahci: ide-bar5 bits-1: 0x%08lx\n", + dprintf("intel_fixup_ahci: ide-bar5 bits-1: 0x%08" B_PRIx32 "\n", pci->ReadConfig(domain, bus, device, function, 0x24, 4)); pci->WriteConfig(domain, bus, device, function, 0x24, 4, 0); - dprintf("intel_fixup_ahci: ide-bar5 bits-0: 0x%08lx\n", + dprintf("intel_fixup_ahci: ide-bar5 bits-0: 0x%08" B_PRIx32 "\n", pci->ReadConfig(domain, bus, device, function, 0x24, 4)); map &= ~0x03; @@ -136,10 +136,10 @@ intel_fixup_ahci(PCI *pci, int domain, uint8 bus, uint8 device, uint8 function, pci->WriteConfig(domain, bus, device, function, 0x90, 1, map); pci->WriteConfig(domain, bus, device, function, 0x24, 4, 0xffffffff); - dprintf("intel_fixup_ahci: ahci-bar5 bits-1: 0x%08lx\n", + dprintf("intel_fixup_ahci: ahci-bar5 bits-1: 0x%08" B_PRIx32 "\n", pci->ReadConfig(domain, bus, device, function, 0x24, 4)); pci->WriteConfig(domain, bus, device, function, 0x24, 4, 0); - dprintf("intel_fixup_ahci: ahci-bar5 bits-0: 0x%08lx\n", + dprintf("intel_fixup_ahci: ahci-bar5 bits-0: 0x%08" B_PRIx32 "\n", pci->ReadConfig(domain, bus, device, function, 0x24, 4)); if (deviceId == 0x27c0 || deviceId == 0x27c4) // restore on ICH7 @@ -148,9 +148,9 @@ intel_fixup_ahci(PCI *pci, int domain, uint8 bus, uint8 device, uint8 function, pci->WriteConfig(domain, bus, device, function, PCI_command, 2, pcicmd); } - dprintf("intel_fixup_ahci: 0x24: 0x%08lx\n", + dprintf("intel_fixup_ahci: 0x24: 0x%08" B_PRIx32 "\n", pci->ReadConfig(domain, bus, device, function, 0x24, 4)); - dprintf("intel_fixup_ahci: 0x90: 0x%02lx\n", + dprintf("intel_fixup_ahci: 0x90: 0x%02" B_PRIx32 "\n", pci->ReadConfig(domain, bus, device, function, 0x90, 1)); } @@ -158,7 +158,7 @@ intel_fixup_ahci(PCI *pci, int domain, uint8 bus, uint8 device, uint8 function, static void ati_fixup_ixp(PCI *pci, int domain, uint8 bus, uint8 device, uint8 function, uint16 deviceId) { -#ifdef __INTEL__ +#if defined(__INTEL__) || defined(__x86_64__) /* ATI Technologies Inc, IXP chipset: * This chipset seems broken, at least on my laptop I must force * the timer IRQ trigger mode, else no interrupt comes in. diff --git a/src/add-ons/kernel/bus_managers/pci/pci_info.cpp b/src/add-ons/kernel/bus_managers/pci/pci_info.cpp index c869d92..ba748a0 100644 --- a/src/add-ons/kernel/bus_managers/pci/pci_info.cpp +++ b/src/add-ons/kernel/bus_managers/pci/pci_info.cpp @@ -13,7 +13,7 @@ #include "pci.h" #define PCI_VERBOSE 1 -#ifdef __INTEL__ +#if defined(__INTEL__) || defined(__x86_64__) // enabling it makes the pci bus_manager binary about 1MB // some other platforms have issues with floppy image size... // TODO: Move this define to BuildSetup? @@ -42,11 +42,13 @@ print_pci2pci_bridge_info(const pci_info *info, bool verbose) uint32 io_limit = (((uint32)info->u.h1.io_limit & 0xf0) << 8) + 0xfff; if (info->u.h1.io_limit & 1) io_limit += info->u.h1.io_limit_upper16 << 16; - TRACE(("PCI: I/O window %04lx-%04lx\n", io_base, io_limit)); + TRACE(("PCI: I/O window %04" B_PRIx32 "-%04" B_PRIx32 "\n", io_base, + io_limit)); uint32 memory_base = ((uint32)info->u.h1.memory_base & 0xfff0) << 16; uint32 memory_limit = (((uint32)info->u.h1.memory_limit & 0xfff0) << 16) + 0xfffff; - TRACE(("PCI: memory window %04lx-%04lx\n", memory_base, memory_limit)); + TRACE(("PCI: memory window %04" B_PRIx32 "-%04" B_PRIx32 "\n", + memory_base, memory_limit)); uint64 prefetchable_memory_base = ((uint32)info->u.h1.prefetchable_memory_base & 0xfff0) << 16; if (info->u.h1.prefetchable_memory_base & 1) { @@ -60,18 +62,19 @@ print_pci2pci_bridge_info(const pci_info *info, bool verbose) prefetchable_memory_limit += (uint64)info->u.h1.prefetchable_memory_limit_upper32 << 32; } - TRACE(("PCI: prefetchable memory window %016llx-%016llx\n", + TRACE(("PCI: prefetchable memory window %016" B_PRIx64 "-%016" B_PRIx64 "\n", prefetchable_memory_base, prefetchable_memory_limit)); TRACE(("PCI: bridge_control %04x, secondary_status %04x\n", info->u.h1.bridge_control, info->u.h1.secondary_status)); TRACE(("PCI: interrupt_line %02x, interrupt_pin %02x\n", info->u.h1.interrupt_line, info->u.h1.interrupt_pin)); - TRACE(("PCI: ROM base host %08lx, pci %08lx, size ??\n", + TRACE(("PCI: ROM base host %08" B_PRIx32 ", pci %08" B_PRIx32 ", size ??\n", info->u.h1.rom_base, info->u.h1.rom_base_pci)); for (int i = 0; i < 2; i++) - TRACE(("PCI: base reg %d: host %08lx, pci %08lx, size %08lx, flags %02x\n", - i, info->u.h1.base_registers[i], info->u.h1.base_registers_pci[i], - info->u.h1.base_register_sizes[i], info->u.h1.base_register_flags[i])); + TRACE(("PCI: base reg %d: host %08" B_PRIx32 ", pci %08" B_PRIx32 ", " + "size %08" B_PRIx32 ", flags %02x\n", i, info->u.h1.base_registers[i], + info->u.h1.base_registers_pci[i], info->u.h1.base_register_sizes[i], + info->u.h1.base_register_flags[i])); } @@ -79,18 +82,20 @@ static void print_pci2cardbus_bridge_info(const pci_info *info, bool verbose) { TRACE(("PCI: subsystem_id %04x, subsystem_vendor_id %04x\n", - info->u.h2.subsystem_id, info->u.h2.subsystem_vendor_id)); - TRACE(("PCI: primary_bus %02x, secondary_bus %02x, subordinate_bus %02x, secondary_latency %02x\n", - info->u.h2.primary_bus, info->u.h2.secondary_bus, info->u.h2.subordinate_bus, info->u.h2.secondary_latency)); + info->u.h2.subsystem_id, info->u.h2.subsystem_vendor_id)); + TRACE(("PCI: primary_bus %02x, secondary_bus %02x, subordinate_bus %02x, " + "secondary_latency %02x\n", info->u.h2.primary_bus, + info->u.h2.secondary_bus, info->u.h2.subordinate_bus, + info->u.h2.secondary_latency)); TRACE(("PCI: bridge_control %04x, secondary_status %04x\n", - info->u.h2.bridge_control, info->u.h2.secondary_status)); - TRACE(("PCI: memory_base_upper32 %08lx, memory_base %08lx\n", - info->u.h2.memory_base_upper32, info->u.h2.memory_base)); - TRACE(("PCI: memory_limit_upper32 %08lx, memory_limit %08lx\n", - info->u.h2.memory_limit_upper32, info->u.h2.memory_limit)); - TRACE(("PCI: io_base_upper32 %08lx, io_base %08lx\n", + info->u.h2.bridge_control, info->u.h2.secondary_status)); + TRACE(("PCI: memory_base_upper32 %08" B_PRIx32 ", memory_base %08" + B_PRIx32 "\n", info->u.h2.memory_base_upper32, info->u.h2.memory_base)); + TRACE(("PCI: memory_limit_upper32 %08" B_PRIx32 ", memory_limit %08" + B_PRIx32 "\n", info->u.h2.memory_limit_upper32, info->u.h2.memory_limit)); + TRACE(("PCI: io_base_upper32 %08" B_PRIx32 ", io_base %08" B_PRIx32 "\n", info->u.h2.io_base_upper32, info->u.h2.io_base)); - TRACE(("PCI: io_limit_upper32 %08lx, io_limit %08lx\n", + TRACE(("PCI: io_limit_upper32 %08" B_PRIx32 ", io_limit %08" B_PRIx32 "\n", info->u.h2.io_limit_upper32, info->u.h2.io_limit)); } @@ -98,16 +103,20 @@ print_pci2cardbus_bridge_info(const pci_info *info, bool verbose) static void print_generic_info(const pci_info *info, bool verbose) { - TRACE(("PCI: ROM base host %08lx, pci %08lx, size %08lx\n", - info->u.h0.rom_base, info->u.h0.rom_base_pci, info->u.h0.rom_size)); - TRACE(("PCI: cardbus_CIS %08lx, subsystem_id %04x, subsystem_vendor_id %04x\n", - info->u.h0.cardbus_cis, info->u.h0.subsystem_id, info->u.h0.subsystem_vendor_id)); - TRACE(("PCI: interrupt_line %02x, interrupt_pin %02x, min_grant %02x, max_latency %02x\n", - info->u.h0.interrupt_line, info->u.h0.interrupt_pin, info->u.h0.min_grant, info->u.h0.max_latency)); + TRACE(("PCI: ROM base host %08" B_PRIx32 ", pci %08" B_PRIx32 ", size " + "%08" B_PRIx32 "\n", info->u.h0.rom_base, info->u.h0.rom_base_pci, + info->u.h0.rom_size)); + TRACE(("PCI: cardbus_CIS %08" B_PRIx32 ", subsystem_id %04x, " + "subsystem_vendor_id %04x\n", info->u.h0.cardbus_cis, + info->u.h0.subsystem_id, info->u.h0.subsystem_vendor_id)); + TRACE(("PCI: interrupt_line %02x, interrupt_pin %02x, min_grant %02x, " + "max_latency %02x\n", info->u.h0.interrupt_line, info->u.h0.interrupt_pin, + info->u.h0.min_grant, info->u.h0.max_latency)); for (int i = 0; i < 6; i++) - TRACE(("PCI: base reg %d: host %08lx, pci %08lx, size %08lx, flags %02x\n", - i, info->u.h0.base_registers[i], info->u.h0.base_registers_pci[i], - info->u.h0.base_register_sizes[i], info->u.h0.base_register_flags[i])); + TRACE(("PCI: base reg %d: host %08" B_PRIx32 ", pci %08" B_PRIx32 ", " + "size %08" B_PRIx32 ", flags %02x\n", i, info->u.h0.base_registers[i], + info->u.h0.base_registers_pci[i], info->u.h0.base_register_sizes[i], + info->u.h0.base_register_flags[i])); } diff --git a/src/add-ons/kernel/bus_managers/pci/pci_module.cpp b/src/add-ons/kernel/bus_managers/pci/pci_module.cpp index 8685fdb..fc71f6c 100644 --- a/src/add-ons/kernel/bus_managers/pci/pci_module.cpp +++ b/src/add-ons/kernel/bus_managers/pci/pci_module.cpp @@ -89,7 +89,7 @@ module_info *modules[] = { (module_info *)&gPCIRootModule, (module_info *)&gPCIDeviceModule, (module_info *)&gPCILegacyDriverModule, -#ifdef __INTEL__ +#if defined(__INTEL__) || defined(__x86_64__) // add platforms when they provide an arch specific module (module_info *)&gPCIArchModule, #endif