diff --git a/headers/os/drivers/KernelExport.h b/headers/os/drivers/KernelExport.h index af692bb0d7..b88a206e4f 100644 --- a/headers/os/drivers/KernelExport.h +++ b/headers/os/drivers/KernelExport.h @@ -79,8 +79,8 @@ struct timer { #define B_READ_DEVICE 0x00000002 typedef struct { - void *address; /* address in physical memory */ - ulong size; /* size of block */ + phys_addr_t address; /* address in physical memory */ + phys_size_t size; /* size of block */ } physical_entry; /* address specifications for mapping physical memory */ @@ -156,7 +156,7 @@ extern status_t get_memory_map_etc(team_id team, const void *address, extern long get_memory_map(const void *buffer, ulong size, physical_entry *table, long numEntries); extern area_id map_physical_memory(const char *areaName, - void *physicalAddress, size_t size, uint32 flags, + phys_addr_t physicalAddress, size_t size, uint32 flags, uint32 protection, void **_mappedAddress); /* kernel debugging facilities */ diff --git a/headers/private/graphics/intel_extreme/AreaKeeper.h b/headers/private/graphics/intel_extreme/AreaKeeper.h index 2ca69bcd17..8e17dec24a 100644 --- a/headers/private/graphics/intel_extreme/AreaKeeper.h +++ b/headers/private/graphics/intel_extreme/AreaKeeper.h @@ -60,8 +60,8 @@ area_id AreaKeeper::Map(const char *name, void *physicalAddress, size_t numBytes, uint32 spec, uint32 protection, void **_virtualAddress) { - fArea = map_physical_memory(name, physicalAddress, numBytes, spec, protection, - _virtualAddress); + fArea = map_physical_memory(name, (addr_t)physicalAddress, numBytes, spec, + protection, _virtualAddress); return fArea; } diff --git a/headers/private/graphics/radeon_hd/AreaKeeper.h b/headers/private/graphics/radeon_hd/AreaKeeper.h index 2ca69bcd17..8e17dec24a 100644 --- a/headers/private/graphics/radeon_hd/AreaKeeper.h +++ b/headers/private/graphics/radeon_hd/AreaKeeper.h @@ -60,8 +60,8 @@ area_id AreaKeeper::Map(const char *name, void *physicalAddress, size_t numBytes, uint32 spec, uint32 protection, void **_virtualAddress) { - fArea = map_physical_memory(name, physicalAddress, numBytes, spec, protection, - _virtualAddress); + fArea = map_physical_memory(name, (addr_t)physicalAddress, numBytes, spec, + protection, _virtualAddress); return fArea; } diff --git a/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c b/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c index 76e209bdeb..7c22bbc5fb 100644 --- a/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c +++ b/src/add-ons/kernel/bus_managers/acpi/acpi_busman.c @@ -584,7 +584,7 @@ prepare_sleep_state(uint8 state, void (*wakeFunc)(void), size_t size) if (status != B_OK) return status; - status = AcpiSetFirmwareWakingVector((addr_t)wakeVector.address); + status = AcpiSetFirmwareWakingVector(wakeVector.address); if (status != AE_OK) return B_ERROR; } @@ -626,7 +626,7 @@ reboot(void) status = AcpiReset(); if (status == AE_NOT_EXIST) return B_UNSUPPORTED; - + if (status != AE_OK) { ERROR("Reset failed, status = %d\n", status); return B_ERROR; diff --git a/src/add-ons/kernel/bus_managers/acpi/oshaiku.c b/src/add-ons/kernel/bus_managers/acpi/oshaiku.c index 0ead4a795f..a28b2fe66d 100644 --- a/src/add-ons/kernel/bus_managers/acpi/oshaiku.c +++ b/src/add-ons/kernel/bus_managers/acpi/oshaiku.c @@ -439,9 +439,8 @@ AcpiOsMapMemory(ACPI_PHYSICAL_ADDRESS where, ACPI_SIZE length) { #ifdef _KERNEL_MODE void *there; - area_id area = map_physical_memory("acpi_physical_mem_area", (void *)where, - length, B_ANY_KERNEL_ADDRESS, - B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA, &there); + area_id area = map_physical_memory("acpi_physical_mem_area", where, length, + B_ANY_KERNEL_ADDRESS, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA, &there); DEBUG_FUNCTION_F("addr: 0x%08lx; length: %lu; mapped: %p; area: %ld", (addr_t)where, (size_t)length, there, area); diff --git a/src/add-ons/kernel/bus_managers/agp_gart/agp_gart.cpp b/src/add-ons/kernel/bus_managers/agp_gart/agp_gart.cpp index 0833823b88..48bf3ad6f3 100644 --- a/src/add-ons/kernel/bus_managers/agp_gart/agp_gart.cpp +++ b/src/add-ons/kernel/bus_managers/agp_gart/agp_gart.cpp @@ -640,7 +640,7 @@ Aperture::BindMemory(aperture_memory *memory, addr_t address, size_t size) TRACE("bind %ld bytes at %lx\n", size, base); for (addr_t offset = 0; offset < size; offset += B_PAGE_SIZE) { - addr_t physicalAddress = 0; + phys_addr_t physicalAddress = 0; status_t status; if (!physical) { @@ -650,7 +650,7 @@ Aperture::BindMemory(aperture_memory *memory, addr_t address, size_t size) if (status < B_OK) return status; - physicalAddress = (addr_t)entry.address; + physicalAddress = entry.address; } else { #ifdef __HAIKU__ uint32 index = offset >> PAGE_SHIFT; @@ -1008,6 +1008,7 @@ static status_t allocate_memory(aperture_id id, size_t size, size_t alignment, uint32 flags, addr_t *_apertureBase, addr_t *_physicalBase) { +// TODO: _physicalBase should be a phys_addr_t*! if ((flags & ~APERTURE_PUBLIC_FLAGS_MASK) != 0 || _apertureBase == NULL) return B_BAD_VALUE; @@ -1042,7 +1043,7 @@ allocate_memory(aperture_id id, size_t size, size_t alignment, uint32 flags, return status; } - *_physicalBase = (addr_t)entry.address; + *_physicalBase = entry.address; #endif } diff --git a/src/add-ons/kernel/bus_managers/ata/ATAChannel.cpp b/src/add-ons/kernel/bus_managers/ata/ATAChannel.cpp index 33b7f298fe..09cc5da048 100644 --- a/src/add-ons/kernel/bus_managers/ata/ATAChannel.cpp +++ b/src/add-ons/kernel/bus_managers/ata/ATAChannel.cpp @@ -974,7 +974,7 @@ ATAChannel::_TransferPIOBlock(ATARequest *request, size_t length, uint32 currentLength = MIN(entry->size - offset, length); status_t result = _TransferPIOPhysical(request, - (addr_t)entry->address + offset, currentLength, transferred); + entry->address + offset, currentLength, transferred); if (result != B_OK) { request->SetSense(SCSIS_KEY_HARDWARE_ERROR, SCSIS_ASC_INTERNAL_FAILURE); diff --git a/src/add-ons/kernel/bus_managers/ata/ATAHelper.cpp b/src/add-ons/kernel/bus_managers/ata/ATAHelper.cpp index c6fdc51fdf..1e0d62f21d 100644 --- a/src/add-ons/kernel/bus_managers/ata/ATAHelper.cpp +++ b/src/add-ons/kernel/bus_managers/ata/ATAHelper.cpp @@ -50,11 +50,11 @@ copy_sg_data(scsi_ccb *ccb, uint offset, uint allocationLength, bytes = MIN(bytes, sgList->size); if (toBuffer) { - vm_memcpy_from_physical(buffer, (addr_t)sgList->address + offset, - bytes, false); + vm_memcpy_from_physical(buffer, sgList->address + offset, bytes, + false); } else { - vm_memcpy_to_physical((addr_t)sgList->address + offset, buffer, - bytes, false); + vm_memcpy_to_physical(sgList->address + offset, buffer, bytes, + false); } buffer = (char *)buffer + bytes; diff --git a/src/add-ons/kernel/bus_managers/firewire/util.c b/src/add-ons/kernel/bus_managers/firewire/util.c index d0ca0d750d..00c8cc2621 100644 --- a/src/add-ons/kernel/bus_managers/firewire/util.c +++ b/src/add-ons/kernel/bus_managers/firewire/util.c @@ -37,6 +37,7 @@ area_id alloc_mem(void **virt, void **phy, size_t size, uint32 protection, const char *name) { +// TODO: phy should be phys_addr_t*! physical_entry pe; void *virtadr; area_id area; @@ -61,7 +62,7 @@ alloc_mem(void **virt, void **phy, size_t size, uint32 protection, if (virt) *virt = virtadr; if (phy) - *phy = pe.address; + *phy = (void*)(addr_t)pe.address; TRACE("area = %ld, size = %ld, virt = %p, phy = %p\n", area, size, virtadr, pe.address); return area; @@ -83,8 +84,8 @@ map_mem(void **virt, void *phy, size_t size, uint32 protection, offset = (uint32)phy & (B_PAGE_SIZE - 1); phyadr = (char *)phy - offset; size = round_to_pagesize(size + offset); - area = map_physical_memory(name, phyadr, size, B_ANY_KERNEL_BLOCK_ADDRESS, - protection, &mapadr); + area = map_physical_memory(name, (addr_t)phyadr, size, + B_ANY_KERNEL_BLOCK_ADDRESS, protection, &mapadr); if (area < B_OK) { ERROR("mapping '%s' failed, error 0x%lx (%s)\n", name, area, strerror(area)); diff --git a/src/add-ons/kernel/bus_managers/ide/emulation.c b/src/add-ons/kernel/bus_managers/ide/emulation.c index 03ce5f9eb0..046d5f823a 100644 --- a/src/add-ons/kernel/bus_managers/ide/emulation.c +++ b/src/add-ons/kernel/bus_managers/ide/emulation.c @@ -95,11 +95,11 @@ copy_sg_data(scsi_ccb *request, uint offset, uint allocationLength, buffer, (void *)(sgList->address + offset), (int)bytes, toBuffer); if (toBuffer) { - vm_memcpy_from_physical(buffer, (addr_t)sgList->address + offset, - bytes, false); + vm_memcpy_from_physical(buffer, sgList->address + offset, bytes, + false); } else { - vm_memcpy_to_physical((addr_t)sgList->address + offset, buffer, - bytes, false); + vm_memcpy_to_physical(sgList->address + offset, buffer, bytes, + false); } buffer = (char *)buffer + bytes; diff --git a/src/add-ons/kernel/bus_managers/scsi/dma_buffer.c b/src/add-ons/kernel/bus_managers/scsi/dma_buffer.c index b04a092237..f4c2b7b4c6 100644 --- a/src/add-ons/kernel/bus_managers/scsi/dma_buffer.c +++ b/src/add-ons/kernel/bus_managers/scsi/dma_buffer.c @@ -56,29 +56,28 @@ is_sg_list_dma_safe(scsi_ccb *request) // argh - controller is a bit picky, so make sure he likes us for (cur_idx = sg_count; cur_idx >= 1; --cur_idx, ++sg_list) { - addr_t max_len; + phys_addr_t max_len; // calculate space upto next dma boundary crossing and // verify that it isn't crossed - max_len = (dma_boundary + 1) - - ((addr_t)sg_list->address & dma_boundary); + max_len = (dma_boundary + 1) - (sg_list->address & dma_boundary); if (max_len < sg_list->size) { - SHOW_FLOW(0, "S/G-entry crosses DMA boundary @0x%x", - (int)sg_list->address + (int)max_len); + SHOW_FLOW(0, "S/G-entry crosses DMA boundary @%" B_PRIxPHYSADDR, + sg_list->address + max_len); return false; } // check both begin and end of entry for alignment - if (((addr_t)sg_list->address & alignment) != 0) { - SHOW_FLOW(0, "S/G-entry has bad alignment @0x%x", - (int)sg_list->address); + if ((sg_list->address & alignment) != 0) { + SHOW_FLOW(0, "S/G-entry has bad alignment @%#" B_PRIxPHYSADDR, + sg_list->address); return false; } - if ((((addr_t)sg_list->address + sg_list->size) & alignment) != 0) { - SHOW_FLOW(0, "end of S/G-entry has bad alignment @0x%x", - (int)sg_list->address + (int)sg_list->size); + if (((sg_list->address + sg_list->size) & alignment) != 0) { + SHOW_FLOW(0, "end of S/G-entry has bad alignment @%" B_PRIxPHYSADDR, + sg_list->address + sg_list->size); return false; } @@ -118,12 +117,10 @@ scsi_copy_dma_buffer(scsi_ccb *request, uint32 size, bool to_buffer) bytes = min( size, sg_list->size ); if (to_buffer) { - vm_memcpy_from_physical(buffer_data, (addr_t)sg_list->address, - bytes, false); - } else { - vm_memcpy_to_physical((addr_t)sg_list->address, buffer_data, - bytes, false); - } + vm_memcpy_from_physical(buffer_data, sg_list->address, bytes, + false); + } else + vm_memcpy_to_physical(sg_list->address, buffer_data, bytes, false); buffer_data += bytes; } @@ -345,7 +342,7 @@ dump_sg_table(const physical_entry *sg_list, SHOW_FLOW(1, "count=%d", (int)sg_list_count); for (cur_idx = sg_list_count; cur_idx >= 1; --cur_idx, ++sg_list) { - SHOW_FLOW(1, "addr=%x, size=%d", (int)sg_list->address, + SHOW_FLOW(1, "addr=%" B_PRIxPHYSADDR ", size=%d", sg_list->address, (int)sg_list->size); } } diff --git a/src/add-ons/kernel/bus_managers/scsi/emulation.c b/src/add-ons/kernel/bus_managers/scsi/emulation.c index 9b0dc929a5..86cadaa584 100644 --- a/src/add-ons/kernel/bus_managers/scsi/emulation.c +++ b/src/add-ons/kernel/bus_managers/scsi/emulation.c @@ -54,7 +54,8 @@ status_t scsi_init_emulation_buffer(scsi_device_info *device, size_t buffer_size) { physical_entry map[1]; - addr_t unaligned_phys, aligned_phys, aligned_addr, unaligned_addr; + phys_addr_t unaligned_phys, aligned_phys; + addr_t aligned_addr, unaligned_addr; size_t total_size; SHOW_FLOW0(3, ""); @@ -82,7 +83,7 @@ scsi_init_emulation_buffer(scsi_device_info *device, size_t buffer_size) get_memory_map((void *)unaligned_addr, B_PAGE_SIZE, map, 1); // get aligned part - unaligned_phys = (addr_t)map[0].address; + unaligned_phys = map[0].address; aligned_phys = (unaligned_phys + buffer_size - 1) & ~(buffer_size - 1); aligned_addr = unaligned_addr + (aligned_phys - unaligned_phys); @@ -490,14 +491,14 @@ copy_sg_data(scsi_ccb *request, uint offset, uint allocation_length, bytes = min(bytes, sg_list->size); SHOW_FLOW(0, "buffer = %p, virt_addr = %#lx, bytes = %lu, to_buffer = %d", - buffer, (addr_t)sg_list->address + offset, bytes, to_buffer); + buffer, sg_list->address + offset, bytes, to_buffer); if (to_buffer) { - vm_memcpy_from_physical(buffer, (addr_t)sg_list->address + offset, - bytes, false); + vm_memcpy_from_physical(buffer, sg_list->address + offset, bytes, + false); } else { - vm_memcpy_to_physical((addr_t)sg_list->address + offset, buffer, - bytes, false); + vm_memcpy_to_physical(sg_list->address + offset, buffer, bytes, + false); } buffer = (char *)buffer + bytes; diff --git a/src/add-ons/kernel/bus_managers/scsi/scatter_gather.c b/src/add-ons/kernel/bus_managers/scsi/scatter_gather.c index 6313d9f6ad..830dbd3ccb 100644 --- a/src/add-ons/kernel/bus_managers/scsi/scatter_gather.c +++ b/src/add-ons/kernel/bus_managers/scsi/scatter_gather.c @@ -59,13 +59,14 @@ fill_temp_sg(scsi_ccb *ccb) // calculate space upto next dma boundary crossing max_len = (dma_boundary + 1) - - ((addr_t)temp_sg[cur_idx].address & dma_boundary); + (temp_sg[cur_idx].address & dma_boundary); // restrict size per sg item max_len = min(max_len, max_sg_block_size); - SHOW_FLOW(4, "addr=%p, size=%x, max_len=%x, idx=%d, num=%d", - temp_sg[cur_idx].address, (int)temp_sg[cur_idx].size, - (int)max_len, (int)cur_idx, (int)num_entries); + SHOW_FLOW(4, "addr=%#" B_PRIxPHYSADDR ", size=%x, max_len=%x, " + "idx=%d, num=%d", temp_sg[cur_idx].address, + (int)temp_sg[cur_idx].size, (int)max_len, (int)cur_idx, + (int)num_entries); if (max_len < temp_sg[cur_idx].size) { // split sg block @@ -76,7 +77,8 @@ fill_temp_sg(scsi_ccb *ccb) (num_entries - 1 - cur_idx) * sizeof(physical_entry)); temp_sg[cur_idx].size = max_len; - temp_sg[cur_idx + 1].address = (void *)((addr_t)temp_sg[cur_idx + 1].address + max_len); + temp_sg[cur_idx + 1].address + = temp_sg[cur_idx + 1].address + max_len; temp_sg[cur_idx + 1].size -= max_len; } } diff --git a/src/add-ons/kernel/bus_managers/scsi/virtual_memory.c b/src/add-ons/kernel/bus_managers/scsi/virtual_memory.c index b8ffbb40a2..d1ee61ad0f 100644 --- a/src/add-ons/kernel/bus_managers/scsi/virtual_memory.c +++ b/src/add-ons/kernel/bus_managers/scsi/virtual_memory.c @@ -94,7 +94,8 @@ get_iovec_memory_map(iovec *vec, size_t vec_count, size_t vec_offset, size_t len // try to combine with previous sg block if (cur_num_entries > 0 && cur_idx > 0 - && map[cur_idx].address == (char *)map[cur_idx - 1].address + map[cur_idx - 1].size) { + && map[cur_idx].address + == map[cur_idx - 1].address + map[cur_idx - 1].size) { SHOW_FLOW0( 3, "combine with previous chunk" ); map[cur_idx - 1].size += map[cur_idx].size; memcpy(&map[cur_idx], &map[cur_idx + 1], (cur_num_entries - 1) * sizeof(map[0])); diff --git a/src/add-ons/kernel/bus_managers/usb/PhysicalMemoryAllocator.cpp b/src/add-ons/kernel/bus_managers/usb/PhysicalMemoryAllocator.cpp index a3d0852788..0872d3ccbe 100644 --- a/src/add-ons/kernel/bus_managers/usb/PhysicalMemoryAllocator.cpp +++ b/src/add-ons/kernel/bus_managers/usb/PhysicalMemoryAllocator.cpp @@ -128,6 +128,7 @@ status_t PhysicalMemoryAllocator::Allocate(size_t size, void **logicalAddress, void **physicalAddress) { +// TODO: physicalAddress should be a phys_addr_t*! #ifdef HAIKU_TARGET_PLATFORM_HAIKU if (debug_debugger_running()) { for (int32 i = 0; i < 64; i++) { @@ -136,7 +137,7 @@ PhysicalMemoryAllocator::Allocate(size_t size, void **logicalAddress, fDebugUseMap |= mask; *logicalAddress = (void *)((uint8 *)fLogicalBase + fDebugBase + i * fDebugChunkSize); - *physicalAddress = (void *)((uint8 *)fPhysicalBase + fDebugBase + *physicalAddress = (void *)(fPhysicalBase + fDebugBase + i * fDebugChunkSize); return B_OK; } @@ -199,7 +200,7 @@ PhysicalMemoryAllocator::Allocate(size_t size, void **logicalAddress, _Unlock(); size_t offset = fBlockSize[arrayToUse] * i; *logicalAddress = (void *)((uint8 *)fLogicalBase + offset); - *physicalAddress = (void *)((uint8 *)fPhysicalBase + offset); + *physicalAddress = (void *)(fPhysicalBase + offset); return B_OK; } } @@ -222,6 +223,7 @@ status_t PhysicalMemoryAllocator::Deallocate(size_t size, void *logicalAddress, void *physicalAddress) { +// TODO: physicalAddress should be a phys_addr_t! #ifdef HAIKU_TARGET_PLATFORM_HAIKU if (debug_debugger_running()) { uint32 index = ((uint8 *)logicalAddress - (uint8 *)fLogicalBase @@ -248,7 +250,7 @@ PhysicalMemoryAllocator::Deallocate(size_t size, void *logicalAddress, if (logicalAddress) offset = (uint32)logicalAddress - (uint32)fLogicalBase; else if (physicalAddress) - offset = (uint32)physicalAddress - (uint32)fPhysicalBase; + offset = (addr_t)physicalAddress - fPhysicalBase; else { TRACE_ERROR(("PMA: no value given for either physical or logical address\n")); return B_BAD_VALUE; diff --git a/src/add-ons/kernel/bus_managers/usb/PhysicalMemoryAllocator.h b/src/add-ons/kernel/bus_managers/usb/PhysicalMemoryAllocator.h index 3d1e801ca3..eb47330a19 100644 --- a/src/add-ons/kernel/bus_managers/usb/PhysicalMemoryAllocator.h +++ b/src/add-ons/kernel/bus_managers/usb/PhysicalMemoryAllocator.h @@ -50,7 +50,7 @@ private: mutex fLock; area_id fArea; void *fLogicalBase; - void *fPhysicalBase; + phys_addr_t fPhysicalBase; int32 fArrayCount; size_t *fBlockSize; diff --git a/src/add-ons/kernel/bus_managers/usb/Stack.cpp b/src/add-ons/kernel/bus_managers/usb/Stack.cpp index 5ccdac141b..689b346e52 100644 --- a/src/add-ons/kernel/bus_managers/usb/Stack.cpp +++ b/src/add-ons/kernel/bus_managers/usb/Stack.cpp @@ -294,6 +294,7 @@ area_id Stack::AllocateArea(void **logicalAddress, void **physicalAddress, size_t size, const char *name) { +// TODO: physicalAddress should be a phys_addr_t*! TRACE("allocating %ld bytes for %s\n", size, name); void *logAddress; @@ -319,9 +320,9 @@ Stack::AllocateArea(void **logicalAddress, void **physicalAddress, size_t size, *logicalAddress = logAddress; if (physicalAddress) - *physicalAddress = physicalEntry.address; + *physicalAddress = (void*)(addr_t)physicalEntry.address; - TRACE("area = %ld, size = %ld, log = %p, phy = %p\n", + TRACE("area = %ld, size = %ld, log = %p, phy = %#" B_PRIxPHYSADDR "\n", area, size, logAddress, physicalEntry.address); return area; } diff --git a/src/add-ons/kernel/busses/agp_gart/intel_gart.cpp b/src/add-ons/kernel/busses/agp_gart/intel_gart.cpp index f5f818a8b4..42f6d110a0 100644 --- a/src/add-ons/kernel/busses/agp_gart/intel_gart.cpp +++ b/src/add-ons/kernel/busses/agp_gart/intel_gart.cpp @@ -92,7 +92,7 @@ struct intel_info { size_t aperture_size; size_t aperture_stolen_size; - addr_t scratch_page; + phys_addr_t scratch_page; area_id scratch_area; }; @@ -165,7 +165,7 @@ determine_memory_sizes(intel_info &info, size_t >tSize, size_t &stolenSize) break; case G4X_GTT_4M_IVT: gttSize = 4 << 20; - break; + break; } } else { // older models have the GTT as large as their frame buffer mapping @@ -282,7 +282,7 @@ intel_map(intel_info &info) mmioIndex = 0; fbIndex = 2; } - + AreaKeeper mmioMapper; info.registers_area = mmioMapper.Map("intel GMCH mmio", (void *)info.display.u.h0.base_registers[mmioIndex], @@ -352,7 +352,7 @@ intel_map(intel_info &info) info.aperture_stolen_size = stolenSize; if (info.aperture_size == 0) info.aperture_size = info.display.u.h0.base_register_sizes[fbIndex]; - + dprintf("intel_gart: detected %ld MB of stolen memory, aperture " "size %ld MB, GTT size %ld KB\n", (stolenSize + (1023 << 10)) >> 20, info.aperture_size >> 20, gttSize >> 10); @@ -380,7 +380,7 @@ intel_map(intel_info &info) return info.aperture_area; } - info.scratch_page = (addr_t)entry.address; + info.scratch_page = entry.address; gttMapper.Detach(); mmioMapper.Detach(); diff --git a/src/add-ons/kernel/busses/ata/silicon_image_3112/silicon_image_3112.c b/src/add-ons/kernel/busses/ata/silicon_image_3112/silicon_image_3112.c index 3a9ec05168..d7ec21dc40 100644 --- a/src/add-ons/kernel/busses/ata/silicon_image_3112/silicon_image_3112.c +++ b/src/add-ons/kernel/busses/ata/silicon_image_3112/silicon_image_3112.c @@ -94,7 +94,7 @@ typedef struct channel_data { area_id prd_area; prd_entry * prdt; - void * prdt_phys; + phys_addr_t prdt_phys; uint32 dma_active; uint32 lost; } channel_data; @@ -272,9 +272,9 @@ controller_init(device_node *node, void **_controllerCookie) FLOW("controller %p\n", controller); - mmioArea = map_physical_memory("Silicon Image SATA regs", - (void *)mmioBase, kASICData[asicIndex].mmio_bar_size, - B_ANY_KERNEL_ADDRESS, 0, (void **)&mmioAddr); + mmioArea = map_physical_memory("Silicon Image SATA regs", mmioBase, + kASICData[asicIndex].mmio_bar_size, B_ANY_KERNEL_ADDRESS, 0, + (void **)&mmioAddr); if (mmioArea < B_OK) { TRACE("controller_init: mapping memory failed\n"); free(controller); @@ -683,7 +683,7 @@ dma_prepare(void *channelCookie, const physical_entry *sg_list, for (i = sg_list_count - 1, prd = channel->prdt; i >= 0; --i, ++prd, ++sg_list ) { prd->address = B_HOST_TO_LENDIAN_INT32(pci->ram_address(device, - sg_list->address)); + (void*)(addr_t)sg_list->address)); // 0 means 64K - this is done automatically by discarding upper 16 bits prd->count = B_HOST_TO_LENDIAN_INT16((uint16)sg_list->size); @@ -695,7 +695,7 @@ dma_prepare(void *channelCookie, const physical_entry *sg_list, // XXX move this to chan init? temp = (*channel->bm_prdt_address) & 3; temp |= B_HOST_TO_LENDIAN_INT32(pci->ram_address(device, - (void *)channel->prdt_phys)) & ~3; + (void *)(addr_t)channel->prdt_phys)) & ~3; *channel->bm_prdt_address = temp; *channel->dev_ctrl; // read altstatus to flush diff --git a/src/add-ons/kernel/busses/ide/silicon_image_3112/silicon_image_3112.c b/src/add-ons/kernel/busses/ide/silicon_image_3112/silicon_image_3112.c index bebacc349e..b00ad51e30 100644 --- a/src/add-ons/kernel/busses/ide/silicon_image_3112/silicon_image_3112.c +++ b/src/add-ons/kernel/busses/ide/silicon_image_3112/silicon_image_3112.c @@ -103,7 +103,7 @@ typedef struct channel_data { area_id prd_area; prd_entry * prdt; - void * prdt_phys; + phys_addr_t prdt_phys; uint32 dma_active; uint32 lost; } channel_data; @@ -278,9 +278,9 @@ controller_init(device_node *node, void **_controllerCookie) FLOW("controller %p\n", controller); - mmioArea = map_physical_memory("Silicon Image SATA regs", - (void *)mmioBase, kASICData[asicIndex].mmio_bar_size, - B_ANY_KERNEL_ADDRESS, 0, (void **)&mmioAddr); + mmioArea = map_physical_memory("Silicon Image SATA regs", mmioBase, + kASICData[asicIndex].mmio_bar_size, B_ANY_KERNEL_ADDRESS, 0, + (void **)&mmioAddr); if (mmioArea < B_OK) { TRACE("controller_init: mapping memory failed\n"); free(controller); @@ -691,7 +691,7 @@ dma_prepare(void *channelCookie, const physical_entry *sg_list, for (i = sg_list_count - 1, prd = channel->prdt; i >= 0; --i, ++prd, ++sg_list ) { prd->address = B_HOST_TO_LENDIAN_INT32(pci->ram_address(device, - sg_list->address)); + (void*)(addr_t)sg_list->address)); // 0 means 64K - this is done automatically by discarding upper 16 bits prd->count = B_HOST_TO_LENDIAN_INT16((uint16)sg_list->size); @@ -703,7 +703,7 @@ dma_prepare(void *channelCookie, const physical_entry *sg_list, // XXX move this to chan init? temp = (*channel->bm_prdt_address) & 3; temp |= B_HOST_TO_LENDIAN_INT32(pci->ram_address(device, - (void *)channel->prdt_phys)) & ~3; + (void *)(addr_t)channel->prdt_phys)) & ~3; *channel->bm_prdt_address = temp; *channel->dev_ctrl; // read altstatus to flush diff --git a/src/add-ons/kernel/busses/scsi/53c8xx/53c8xx.c b/src/add-ons/kernel/busses/scsi/53c8xx/53c8xx.c index 6188542fa7..4e331d7882 100644 --- a/src/add-ons/kernel/busses/scsi/53c8xx/53c8xx.c +++ b/src/add-ons/kernel/busses/scsi/53c8xx/53c8xx.c @@ -43,7 +43,7 @@ #include "53c8xx.h" #include "symbios.h" - + #if USE_STATFS #include @@ -51,15 +51,15 @@ static int32 stat_controller(void *stats, char **buf) { Symbios *s = (Symbios *) stats; - + if(*buf = (char *) malloc(256)){ - sprintf(*buf, + sprintf(*buf, "Chipset: %s\n" "IO Base: 0x%08x\n" "SRAM Base: 0x%08x\n" "IRQ Line: %d\n" "SCSI Bus: %s\n", - s->name, s->iobase, s->sram_phys, s->irq, + s->name, s->iobase, s->sram_phys, s->irq, s->max_targ_id > 7 ? "Wide" : "Narrow"); return strlen(*buf); } else { @@ -76,7 +76,7 @@ stat_target(void *stats, char **buf) *buf = NULL; return 0; } - + if(*buf = (char *) malloc(256)){ if(st->offset){ sprintf(*buf, @@ -106,9 +106,9 @@ static void register_stats(Symbios *s) char buf[128]; stat_module_info_t *stats; int i; - + if(s->registered) return; - + if(get_module("generic/stat_module", (module_info**) &stats) == B_OK){ sprintf(buf,"scsi/53c8xx/%d/info",s->num); stats->register_statistics(buf, s, stat_controller); @@ -128,7 +128,7 @@ static void register_stats(Symbios *s) #endif /* -** Constants for the SIM +** Constants for the SIM */ #define SIM_VERSION 0x01 #define HBA_VERSION 0x01 @@ -143,7 +143,7 @@ static char cam_name[] = B_CAM_FOR_SIM_MODULE_NAME; static char pci_name[] = B_PCI_MODULE_NAME; /* -** Supported Device / Device Attributes table +** Supported Device / Device Attributes table */ #define symf_sram 0x0001 /* on board SCRIPTS ram */ #define symf_doubler 0x0002 /* SCLK doubler available */ @@ -168,34 +168,34 @@ static struct { { 0x000f, 0x02, "53c875", symf_wide | symf_sram | symf_doubler }, { 0x000f, 0x00, "53c875", symf_wide | symf_sram }, { 0x008f, 0x00, "53c875j", symf_wide | symf_sram | symf_doubler }, - { 0x000d, 0x00, "53c885", symf_wide | symf_sram | symf_untested }, + { 0x000d, 0x00, "53c885", symf_wide | symf_sram | symf_untested }, { 0x000c, 0x00, "53c895", symf_wide | symf_sram | symf_quadrupler | symf_untested }, { 0x000b, 0x00, "53c896", symf_wide | symf_sram | symf_untested }, { 0, 0, NULL, 0 } }; -#include "scripts.c" +#include "scripts.c" static void setparams(SymTarg *t, uint period, uint offset, uint wide) { Symbios *s = t->adapter; - + if(wide){ if(!t->wide) kprintf("symbios%ld: target %ld wide\n",s->num,t->id); t->wide = 1; } else { t->wide = 0; } - + if(period){ int i; for(i=0;isyncsize;i++){ if(period <= s->syncinfo[i].period){ t->period = s->syncinfo[i].period; t->offset = offset; - - t->device[3] = s->syncinfo[i].scntl3; + + t->device[3] = s->syncinfo[i].scntl3; if(t->wide) t->device[3] |= 0x08; t->device[2] = t->id; t->device[1] = s->syncinfo[i].sxfer | (offset & 0x0f); @@ -206,10 +206,10 @@ setparams(SymTarg *t, uint period, uint offset, uint wide) } } } - + t->period = 0; t->offset = 0; - + t->device[3] = s->scntl3; /* scntl3 - clock divisor */ if(t->wide) t->device[3] |= 0x08; t->device[2] = t->id; /* dest id */ @@ -254,50 +254,50 @@ static void prep_io(SymPriv *sp, uint32 phys) { sp->syncmsg.address = LE(PPHADDR(sp->_syncmsg)); sp->syncmsg.count = LE(3); - + sp->widemsg.address = LE(PPHADDR(sp->_widemsg)); sp->widemsg.count = LE(2); - + sp->sendmsg.address = LE(PPHADDR(sp->_sendmsg)); - + sp->recvmsg.address = LE(PPHADDR(sp->_recvmsg)); sp->recvmsg.count = LE(1); - + sp->status.address = LE(PPHADDR(sp->_status)); sp->status.count = LE(1); - + sp->extdmsg.address = LE(PPHADDR(sp->_extdmsg)); sp->extdmsg.count = LE(1); sp->command.address = LE(PPHADDR(sp->_command)); } -/* +/* * actually execute an io transaction via SCRIPTS * you MUST hold st->sem_targ before calling this * */ -static void exec_io(SymTarg *st, void *cmd, int cmdlen, void *msg, int msglen, +static void exec_io(SymTarg *st, void *cmd, int cmdlen, void *msg, int msglen, void *data, int datalen, int sg) { cpu_status former; Symbios *s = st->adapter; - + memcpy((void *) &(st->priv->device.count), st->device, 4); - + st->priv->sendmsg.count = LE(msglen); memcpy(st->priv->_sendmsg, msg, msglen); st->priv->command.count = LE(cmdlen); memcpy(st->priv->_command, cmd, cmdlen); st->table_phys = st->priv_phys + ADJUST_PRIV_TO_TABLE; - + if(datalen){ int i,sgcount; uint32 opcode; SymInd *t = st->priv->table; physical_entry *pe = (physical_entry *) &(st->priv->table[1]); - + if(st->inbound){ opcode = s->op_in; st->datain_phys = st->table_phys; @@ -305,9 +305,9 @@ static void exec_io(SymTarg *st, void *cmd, int cmdlen, void *msg, int msglen, } else { opcode = s->op_out; st->dataout_phys = st->table_phys; - st->datain_phys = s->sram_phys + Ent_phase_dataerr; + st->datain_phys = s->sram_phys + Ent_phase_dataerr; } - + if(sg) { iovec *vec = (iovec *) data; for(sgcount=0,i=0;idatain_phys = s->sram_phys + Ent_phase_dataerr; st->dataout_phys = s->sram_phys + Ent_phase_dataerr; } - + // dprintf("sym: pp = %08x di = %08x do = %08x\n",st->priv_phys,st->datain_phys,st->dataout_phys); - + st->status = status_queued; - + /* dprintf("symbios: enqueueing %02x %02x %02x ... for %d (%d bytes %s)\n", ((uchar *)cmd)[0],((uchar *)cmd)[1],((uchar *)cmd)[2], st->device[2],datalen,st->inbound?"IN":"OUT"); -*/ +*/ former = disable_interrupts(); acquire_spinlock(&(s->hwlock)); @@ -358,18 +358,18 @@ static void exec_io(SymTarg *st, void *cmd, int cmdlen, void *msg, int msglen, s->startqueue = st; } st->next = NULL; - s->startqueuetail = st; - + s->startqueuetail = st; + /* If the adapter is idle, signal it so that this request may be started */ if(s->status == IDLE) outb(sym_istat, sym_istat_sigp); - + release_spinlock(&(s->hwlock)); restore_interrupts(former); /* wait for completion */ acquire_sem(st->sem_done); -#if 0 +#if 0 if(acquire_sem_etc(st->sem_done, 1, B_TIMEOUT, 10*1000000) != B_OK){ kprintf("sym: targ %d never finished, argh...\n",st->device[2]); init_symbios(st->adapter,1); @@ -392,25 +392,25 @@ scsi_int_dispatch(void *data) Symbios *s = (Symbios *) data; int reselected = 0; uchar istat; - + if(s->reset) return B_UNHANDLED_INTERRUPT; - + acquire_spinlock(&(s->hwlock)); istat = inb(sym_istat); - + if(istat & sym_istat_dip){ uchar dstat = inb(sym_dstat); if(dstat & sym_dstat_sir){ /* Handle and interrupt from the SCRIPTS program */ - uint32 status = HE(in32(sym_dsps)); + uint32 status = HE(in32(sym_dsps)); // kprintf("<%02x>",status); - + switch(status){ case status_ready: kp("sym: ready\n"); break; - + case status_iocomplete: kp("sym: done %08x\n",s->active); if(s->active){ @@ -419,7 +419,7 @@ scsi_int_dispatch(void *data) s->active->dataout_phys = s->sram_phys + Ent_phase_dataerr; } break; - + case status_reselected:{ uint32 id = inb(sym_ssid); if(id & sym_ssid_val) { @@ -436,7 +436,7 @@ scsi_int_dispatch(void *data) } break; } - + case status_timeout: /* inform the unlucky party and dequeue it */ kp("sym: timeout %08lx\n",s->startqueue); @@ -448,7 +448,7 @@ scsi_int_dispatch(void *data) } } break; - + case status_selected: /* selection succeeded. Remove from start queue and make active */ kp("sym: selected %08lx\n",s->startqueue); @@ -460,23 +460,23 @@ scsi_int_dispatch(void *data) } } break; - + case status_syncin: setparams(s->active, s->active->priv->_syncmsg[1]*4, s->active->priv->_syncmsg[2], s->active->wide); break; - + case status_widein: setparams(s->active, s->active->period, s->active->offset, s->active->priv->_widemsg[1]); break; - + case status_ignore_residue: kprintf("ignore residue 0x%02x\n",s->active->priv->_extdmsg[0]); break; - + case status_disconnect: kp("sym: disc %08lx\n",s->active); /* device disconnected. make inactive */ @@ -485,11 +485,11 @@ scsi_int_dispatch(void *data) s->active = NULL; } break; - + case status_badmsg: kp("sym: badmsg %02x\n",s->active->priv->_recvmsg[0]); - - case status_complete: + + case status_complete: case status_badstatus: case status_overrun: case status_underrun: @@ -503,31 +503,31 @@ scsi_int_dispatch(void *data) s->active = NULL; } break; - + case status_selftest: /* signal a response to the selftest ... don't actually start up the SCRIPTS like we normally do */ s->status = OFFLINE; goto done; break; - + default: kp("sym: int 0x%08lx ...\n",status); } goto reschedule; } else { - kprintf("symbios: weird error, dstat = %02x\n",dstat); + kprintf("symbios: weird error, dstat = %02x\n",dstat); } } - + if(istat & sym_istat_sip){ uchar sist0; sist0 = inb(sym_sist1); - + if(sist0 & sym_sist1_sbmc){ kprintf("sym: SBMC %02x!\n",inb(sym_stest4) & 0xc0); } - + if(sist0 & sym_sist1_sto){ /* select timeout */ kp("sym: Timeout %08lx\n",s->startqueue); @@ -541,23 +541,23 @@ scsi_int_dispatch(void *data) } else { kprintf("symbios: ghost target timed out\n"); } - inb(sym_sist0); // apparently we MUST read sist0 as well - goto reschedule; + inb(sym_sist0); // apparently we MUST read sist0 as well + goto reschedule; } - + sist0 = inb(sym_sist0) & 0x8f; - + if(sist0 && s->active){ if(sist0 & sym_sist0_ma){ /* phase mismatch -- we experienced a disconnect while in - a DataIn or DataOut... gotta figure out how much we + a DataIn or DataOut... gotta figure out how much we transferred, update the sgtable, take the FIFOs into account, etc (see 9-9 in Symbios PCI-SCSI Programming Guide) */ SymInd *t; uint32 dfifo_val, bytesleft, dbc; uint32 dsp = HE(in32(sym_dsp)); - uint32 n = (dsp - s->active->table_phys) / 8 - 1; - + uint32 n = (dsp - s->active->table_phys) / 8 - 1; + if((dsp < s->active->priv_phys) || (n > 129)) { /* we mismatched during some other phase ?! */ kprintf("Phase Mismatch (dsp = 0x%08lx)\n",dsp); @@ -566,23 +566,23 @@ scsi_int_dispatch(void *data) t = &(s->active->priv->table[n]); -#if 0 +#if 0 t->count = HE(t->count); t->address = HE(t->count); -#endif +#endif /* dbc initially = table[n].count, counts down */ dbc = (uint32) HE(in32(sym_dbc)) & 0x00ffffffL; - + t->count &= 0xffffff; -#if DEBUG_PM +#if DEBUG_PM kprintf("PM(%s) dbc=0x%08x, n=%02d, a=0x%08x, l=0x%08x\n", s->active->inbound ? " in" : "out", dbc, n, t->address, t->count); #endif if(s->active->inbound){ /* data in is easy... flush happens automatically */ t->address += t->count - dbc; - t->count = dbc; -#if DEBUG_PM + t->count = dbc; +#if DEBUG_PM kprintf(" a=0x%08x, l=0x%08x\n", t->address, t->count); #endif @@ -591,7 +591,7 @@ scsi_int_dispatch(void *data) #if 0 t->count = LE(t->count); t->address = LE(t->address); -#endif +#endif goto reschedule; } else { if(inb(sym_ctest5) & 0x20){ @@ -606,17 +606,17 @@ scsi_int_dispatch(void *data) if(inb(sym_sstat2) & 0x20) bytesleft++; if(inb(sym_sstat0) & 0x40) bytesleft++; if(inb(sym_sstat2) & 0x40) bytesleft++; - + /* clear fifo */ outb(sym_ctest3, 0x04); - + t->address += t->count - dbc; t->count = dbc; - + /* adjust for data that didn't make it to the target */ t->address -= bytesleft; t->count += bytesleft; -#if DEBUG_PM +#if DEBUG_PM kprintf(" a=0x%08x, l=0x%08x\n", t->address, t->count); #endif @@ -625,32 +625,32 @@ scsi_int_dispatch(void *data) #if 0 t->count = LE(t->count); t->address = LE(t->address); -#endif - spin(10); +#endif + spin(10); goto reschedule; - } - } - + } + } + if(sist0 & sym_sist0_udc){ kprintf("symbios: Unexpected Disconnect (dsp = 0x%08lx)\n", in32(sym_dsp)); } - + if(sist0 & sym_sist0_sge){ kprintf("symbios: SCSI Gross Error\n"); } - + if(sist0 & sym_sist0_rst){ kprintf("symbios: SCSI Reset\n"); } - + if(sist0 & sym_sist0_par){ kprintf("symbios: Parity Error\n"); } - + s->active->status = status_badphase; - release_sem_etc(s->active->sem_done, 1, B_DO_NOT_RESCHEDULE); + release_sem_etc(s->active->sem_done, 1, B_DO_NOT_RESCHEDULE); s->active = NULL; - + goto reschedule; } } else { @@ -658,9 +658,9 @@ scsi_int_dispatch(void *data) release_spinlock(&(s->hwlock)); return B_UNHANDLED_INTERRUPT; } - -reschedule: - /* start the SCRIPTS processor at one of three places, depending on state + +reschedule: + /* start the SCRIPTS processor at one of three places, depending on state ** ** 1. If there is an active transaction, insure that the script is patched ** correctly, the DSA is loaded, and start up at "switch". @@ -670,14 +670,14 @@ reschedule: ** transaction ** ** 3. If there is nothing else to do, go to "idle" and wait for signal or - ** reselection + ** reselection */ if(s->active){ out32(sym_dsa, s->active->priv_phys + ADJUST_PRIV_TO_DSA); s->script[PATCH_DATAIN] = LE(s->active->datain_phys); s->script[PATCH_DATAOUT] = LE(s->active->dataout_phys); - + s->active->status = status_active; s->status = ACTIVE; if(reselected){ @@ -690,7 +690,7 @@ reschedule: } else { if(s->startqueue){ out32(sym_dsa, LE(s->startqueue->priv_phys + ADJUST_PRIV_TO_DSA)); - + s->startqueue->status = status_selecting; s->status = START; out32(sym_dsp, LE(s->sram_phys + Ent_start)); @@ -699,10 +699,10 @@ reschedule: s->status = IDLE; out32(sym_dsp, LE(s->sram_phys + Ent_idle)); //kp("sym: restart @ %08x / idle\n", Ent_idle); - } + } } - -done: + +done: release_spinlock(&(s->hwlock)); return B_HANDLED_INTERRUPT; } @@ -718,15 +718,15 @@ static long init_symbios(Symbios *s, int restarting) } else { s->reset = 0; } - + if(!restarting){ /* reset the SCSI bus */ dprintf("symbios%ld: scsi bus reset\n",s->num); outb(sym_scntl1, sym_scntl1_rst); spin(25); outb(sym_scntl1, 0); - spin(250000); - + spin(250000); + /* clear ints */ inb(sym_istat); inb(sym_sist0); @@ -736,12 +736,12 @@ static long init_symbios(Symbios *s, int restarting) install_io_interrupt_handler(s->irq, scsi_int_dispatch, s, 0); d_printf("symbios%ld: registered interrupt handler for irq %ld\n",s->num,s->irq); } - + /* enable irqs, prefetch, no 53c700 compat */ outb(sym_dcntl, sym_dcntl_com); /* enable all DMA ints */ - outb(sym_dien, sym_dien_sir | sym_dien_mdpe | sym_dien_bf | sym_dien_abrt + outb(sym_dien, sym_dien_sir | sym_dien_mdpe | sym_dien_bf | sym_dien_abrt | sym_dien_iid); /* enable all fatal SCSI ints */ outb(sym_sien0, sym_sien0_ma | sym_sien0_sge | sym_sien0_udc | sym_sien0_rst | @@ -750,24 +750,24 @@ static long init_symbios(Symbios *s, int restarting) /* sel / hth timeouts */ outb(sym_stime0, 0xbb); - + /* clear ints */ inb(sym_istat); inb(sym_sist0); inb(sym_sist1); - inb(sym_dstat); - + inb(sym_dstat); + /* clear ints */ inb(sym_sist0); inb(sym_sist1); inb(sym_dstat); - + if(restarting){ s->reset = 0; } else { int i; s->status = TEST; - + dprintf("symbios%ld: selftest ",s->num); out32(sym_dsp, LE(s->sram_phys + Ent_test)); for(i=0;(s->status == TEST) && i<10;i++) { @@ -780,8 +780,8 @@ static long init_symbios(Symbios *s, int restarting) } else { dprintf("PASS\n"); } - } - + } + s->status = IDLE; out32(sym_dsp, LE(s->sram_phys + Ent_idle)); d_printf("symbios%ld: started script\n",s->num); @@ -789,7 +789,7 @@ static long init_symbios(Symbios *s, int restarting) return B_NO_ERROR; } -/* When an inquiry succeeds the negotiator gets the option to attempt to +/* When an inquiry succeeds the negotiator gets the option to attempt to ** request a better transfer agreement with the target. */ static void negotiator(Symbios *s, SymTarg *targ, uchar *ident, uchar *msg) @@ -798,34 +798,34 @@ static void negotiator(Symbios *s, SymTarg *targ, uchar *ident, uchar *msg) if(targ->flags & tf_ask_wide){ uchar cmd[6] = { 0, 0, 0, 0, 0, 0 }; targ->flags &= (~tf_ask_wide); /* only ask once */ - + dprintf("symbios%ld: negotiating wide xfer with target %ld\n", s->num,targ->id); - + msg[1] = 0x01; /* extended message */ msg[2] = 0x02; /* length */ msg[3] = 0x03; /* sync negotiate */ msg[4] = 0x01; /* 16 bit wide */ - + exec_io(targ, cmd, 6, msg, 5, NULL, 0, 0); } } - + if(ident[7] & 0x10){ /* sync supported */ if(targ->flags & tf_ask_sync) { uchar cmd[6] = { 0, 0, 0, 0, 0, 0 }; - + targ->flags &= (~tf_ask_sync); /* only ask once */ - + dprintf("symbios%ld: negotiating sync xfer with target %ld\n", s->num,targ->id); - + msg[1] = 0x01; /* extended message */ msg[2] = 0x03; /* length */ msg[3] = 0x01; /* sync negotiate */ msg[4] = s->syncinfo[0].period / 4; /* sync period / 4 */ msg[5] = s->maxoffset; - + exec_io(targ, cmd, 6, msg, 6, NULL, 0, 0); } } @@ -841,14 +841,14 @@ static long sim_execute_scsi_io(Symbios *s, CCB_HEADER *ccbh) physical_entry pe[2]; SymTarg *targ; uchar msg[8]; - + targ = s->targ + ccb->cam_ch.cam_target_id; - + if(targ->flags & tf_ignore){ ccbh->cam_status = CAM_SEL_TIMEOUT; return B_OK; } - + if(ccb->cam_ch.cam_flags & CAM_CDB_POINTER) { cdb = ccb->cam_cdb_io.cam_cdb_ptr; } else { @@ -856,55 +856,55 @@ static long sim_execute_scsi_io(Symbios *s, CCB_HEADER *ccbh) } get_memory_map((void*) (ccb->cam_sim_priv), 1536, pe, 2); - + /* identify message */ msg[0] = 0xC0 | (ccb->cam_ch.cam_target_lun & 0x07); /* fill out table */ prep_io((SymPriv *) ccb->cam_sim_priv, (uint32) pe[0].address); - + /* insure only one transaction at a time for any given target */ acquire_sem(targ->sem_targ); - + targ->priv = (SymPriv *) ccb->cam_sim_priv;; targ->priv_phys = (uint32 ) pe[0].address; - + targ->inbound = (ccb->cam_ch.cam_flags & CAM_DIR_IN) ? 1 : 0; - + if(ccb->cam_ch.cam_flags & CAM_SCATTER_VALID){ - exec_io(targ, cdb, ccb->cam_cdb_len, msg, 1, + exec_io(targ, cdb, ccb->cam_cdb_len, msg, 1, ccb->cam_data_ptr, ccb->cam_sglist_cnt, 1); - } else { - exec_io(targ, cdb, ccb->cam_cdb_len, msg, 1, + } else { + exec_io(targ, cdb, ccb->cam_cdb_len, msg, 1, ccb->cam_data_ptr, ccb->cam_dxfer_len, 0); } - + /* dprintf("symbios%d: state = 0x%02x, status = 0x%02x\n", s->num,targ->state,targ->priv->status[0]);*/ /* decode status */ switch(targ->status){ - case status_complete: + case status_complete: if((ccb->cam_scsi_status=targ->priv->_status[0]) != 0) { ccbh->cam_status = CAM_REQ_CMP_ERR; - + /* nonzero status is an error ... 0x02 = check condition */ if((ccb->cam_scsi_status == 0x02) && !(ccb->cam_ch.cam_flags & CAM_DIS_AUTOSENSE) && ccb->cam_sense_ptr && ccb->cam_sense_len){ uchar command[6]; - + command[0] = 0x03; /* request_sense */ command[1] = ccb->cam_ch.cam_target_lun << 5; command[2] = 0; command[3] = 0; command[4] = ccb->cam_sense_len; - command[5] = 0; - + command[5] = 0; + targ->inbound = 1; exec_io(targ, command, 6, msg, 1, ccb->cam_sense_ptr, ccb->cam_sense_len, 0); - + if(targ->priv->_status[0]){ ccb->cam_ch.cam_status |= CAM_AUTOSENSE_FAIL; } else { @@ -913,7 +913,7 @@ static long sim_execute_scsi_io(Symbios *s, CCB_HEADER *ccbh) } } else { ccbh->cam_status = CAM_REQ_CMP; - + if(cdb[0] == 0x12) { /* inquiry just succeeded ... is it non SG and with enough data to snoop the support bits? */ @@ -923,28 +923,28 @@ static long sim_execute_scsi_io(Symbios *s, CCB_HEADER *ccbh) } } break; - + case status_timeout: ccbh->cam_status = CAM_SEL_TIMEOUT; break; - + default: // XXX ccbh->cam_status = CAM_SEL_TIMEOUT; } - + targ->status = status_inactive; // dprintf("symbios%d: releasing targ @ 0x%08x\n",s->num,targ); release_sem(targ->sem_targ); return B_OK; } -/* +/* ** sim_path_inquiry returns info on the target/lun. */ static long sim_path_inquiry(Symbios *s, CCB_HEADER *ccbh) { CCB_PATHINQ *ccb; - ccb = (CCB_PATHINQ *) ccbh; + ccb = (CCB_PATHINQ *) ccbh; ccb->cam_version_num = SIM_VERSION; ccb->cam_target_sprt = 0; ccb->cam_hba_eng_cnt = 0; @@ -968,7 +968,7 @@ static long sim_path_inquiry(Symbios *s, CCB_HEADER *ccbh) static long sim_extended_path_inquiry(Symbios *s, CCB_HEADER *ccbh) { CCB_EXTENDED_PATHINQ *ccb; - + sim_path_inquiry(s, ccbh); ccb = (CCB_EXTENDED_PATHINQ *) ccbh; sprintf(ccb->cam_sim_version, "%d.0", SIM_VERSION); @@ -1004,14 +1004,14 @@ static void reloc_script(Symbios *s) { int i; ulong *scr = s->script; - + memcpy(scr, SCRIPT, sizeof(SCRIPT)); for(i=0;isram_phys; } d_printf("symbios%ld: loaded %ld byte SCRIPT, relocated %ld labels\n", s->num, sizeof(SCRIPT), PATCHES); - + /* disable scsi ints */ outb(sym_scratcha, 0x42); outb(sym_scratcha+1, 0x00); @@ -1019,12 +1019,12 @@ static void reloc_script(Symbios *s) outb(sym_sien0, 0); outb(sym_sien1, 0); outb(sym_dien, sym_dien_sir); - + /* clear ints */ inb(sym_sist0); inb(sym_sist1); inb(sym_dstat); - + outb(sym_dmode, ( sym_dmode_diom | sym_dmode_siom, 0 )); /* FIXME: ??? */ } @@ -1032,35 +1032,35 @@ static uint32 sym_readclock(Symbios *s) { uint32 ms,a,i; bigtime_t t0,t1; - + outw(sym_sien0 , 0); /* mask all scsi interrupts */ outb(sym_dien , 0); /* mask all dma interrupts */ inw(sym_sist0); /* clear pending scsi interrupts */ - outb(sym_scntl3, 4); /* set pre-scaler to divide by 3 */ - - for(a=0,i=0;i<5;i++){ + outb(sym_scntl3, 4); /* set pre-scaler to divide by 3 */ + + for(a=0,i=0;i<5;i++){ ms = 0; outb(sym_stime1, 0); /* disable general purpose timer */ spin(10000); /* let it all settle for 10ms */ inw(sym_sist0); /* another one, just to be sure :) */ - + t0 = system_time(); outb(sym_stime1, 11); /* delay of 128ms */ while (!(inb(sym_sist1) & sym_sist1_gen)) snooze(250); t1 = system_time(); ms = (t1-t0)/1000 + 10; /* we seem to be off by 10ms typically */ - + a += ((1 << 11) * 4400) / ms; } - + outb(sym_stime1, 0); /* disable general purpose timer */ return a / 5; } static uchar id_bits[8] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; - + /* -** Allocate the actual memory for the cardinfo object +** Allocate the actual memory for the cardinfo object */ static Symbios *create_cardinfo(int num, pci_info *pi, int flags) { @@ -1075,7 +1075,7 @@ static Symbios *create_cardinfo(int num, pci_info *pi, int flags) } if(!(s = (Symbios *) malloc(sizeof(Symbios)))) return NULL; - + s->num = num; s->iobase = pi->u.h0.base_registers[0]; s->irq = pi->u.h0.interrupt_line; @@ -1083,17 +1083,17 @@ static Symbios *create_cardinfo(int num, pci_info *pi, int flags) s->startqueue = NULL; s->startqueuetail = NULL; s->active = NULL; - + sprintf(name,"sym%d:sram",num); if(flags & symf_sram){ unsigned char *c; s->sram_phys = pi->u.h0.base_registers[2]; - if((aid=map_physical_memory(name, (void *) s->sram_phys, 4096, + if((aid=map_physical_memory(name, s->sram_phys, 4096, B_ANY_KERNEL_ADDRESS, B_READ_AREA + B_WRITE_AREA, (void **) &(s->script))) < 0){ free(s); return NULL; - } + } /* memory io test */ c = (unsigned char *) s->script; for(i=0;i<4096;i++) c[i] = (255 - (i & 0xff)); @@ -1116,21 +1116,21 @@ static Symbios *create_cardinfo(int num, pci_info *pi, int flags) s->sram_phys = (uint32) entries[0].address; s->script = (uint32 *) a; } - + d_printf("symbios%d: scripts ram @ 0x%08lx, mapped to 0x%08lx (%s)\n", num, s->sram_phys, (uint32) s->script, flags & symf_sram ? "onboard" : "offboard" ); - + /* what are we set at now? */ s->host_targ_id = inb(sym_scid) & 0x07; dprintf("symbios%ld: host id %ld\n",s->num,s->host_targ_id); s->host_targ_id = 7; /* XXX figure this out somehow... */ - s->max_targ_id = (flags & symf_wide) ? 15 : 7; - + s->max_targ_id = (flags & symf_wide) ? 15 : 7; + stest2 = inb(sym_stest2); stest4 = inb(sym_stest4); - + /* software reset */ outb(sym_istat, sym_istat_srst); spin(10000); @@ -1139,32 +1139,32 @@ static Symbios *create_cardinfo(int num, pci_info *pi, int flags) /* initiator mode, full arbitration */ outb(sym_scntl0, sym_scntl0_arb0 | sym_scntl0_arb1); - + outb(sym_scntl1, 0); outb(sym_scntl2, 0); - + /* initiator id=7, respond to reselection */ /* respond to reselect of id 7 */ outb(sym_respid, id_bits[s->host_targ_id]); outb(sym_scid, sym_scid_rre | s->host_targ_id); - + outb(sym_dmode, 0); - + dprintf("symbios%ld: stest2 = 0x%02lx, stest4 = 0x%02lx\n",s->num,stest2,stest4); - + /* no differential, no loopback, no hiz, no always-wide, no filter, no lowlevel */ outb(sym_stest2, 0); // save diff bit - outb(sym_stest3, 0); + outb(sym_stest3, 0); // if(flags & symf_quadrupler){ // outb(sym_stest4, sym_stest4_lvd); // } - - outb(sym_stest1, 0); /* make sure clock doubler is OFF */ - s->sclk = sym_readclock(s); + outb(sym_stest1, 0); /* make sure clock doubler is OFF */ + + s->sclk = sym_readclock(s); dprintf("symbios%ld: clock is %ldKHz\n",s->num,s->sclk); - + if(flags & symf_doubler){ /* if we have a doubler and we don't already have an 80MHz clock */ if((s->sclk > 35000) && (s->sclk < 45000)){ @@ -1175,13 +1175,13 @@ static Symbios *create_cardinfo(int num, pci_info *pi, int flags) outb(sym_scntl3, 0x05); /* SCLK/4 */ outb(sym_stest1, 0x0c); /* engage doubler */ outb(sym_stest3, 0x80); /* reenable sclk, leave TolerANT on */ - + spin(3000); - - s->sclk = sym_readclock(s); + + s->sclk = sym_readclock(s); dprintf("symbios%ld: clock is %ldKHz\n",s->num,s->sclk); } - } + } if(flags & symf_quadrupler){ if((s->sclk > 35000) && (s->sclk < 45000)){ dprintf("symbios%ld: enabling clock quadrupler...\n",s->num); @@ -1191,17 +1191,17 @@ static Symbios *create_cardinfo(int num, pci_info *pi, int flags) outb(sym_scntl3, 0x05); /* SCLK/4 */ outb(sym_stest1, 0x0c); /* engage doubler */ outb(sym_stest3, 0x80); /* reenable sclk, leave TolerANT on */ - + spin(3000); - - s->sclk = sym_readclock(s); + + s->sclk = sym_readclock(s); dprintf("symbios%ld: clock is %ldKHz\n",s->num,s->sclk); s->sclk = 160000; - } + } } outb(sym_stest3, 0x80); /* leave TolerANT on */ - scf = 0; + scf = 0; /* set CCF / SCF according to specs */ if(s->sclk < 25010) { dprintf("symbios%ld: unsupported clock frequency\n",s->num); @@ -1218,18 +1218,18 @@ static Symbios *create_cardinfo(int num, pci_info *pi, int flags) goto err; // s->scntl3 = 0x04; } else if(s->sclk < 85000){ /* 80 MHz - divide by 2, 4*/ - scf = 0x30; + scf = 0x30; s->scntl3 = 0x05; } else { /* 160 MHz - divide by 4, 8 */ scf = 0x50; s->scntl3 = 0x07; } - - - s->maxoffset = (flags & symf_short) ? 8 : 15 ; + + + s->maxoffset = (flags & symf_short) ? 8 : 15 ; s->syncsize = 0; - + if(scf == 0x50){ /* calculate values for 160MHz clock */ for(i=0;i<4;i++){ @@ -1240,7 +1240,7 @@ static Symbios *create_cardinfo(int num, pci_info *pi, int flags) s->syncsize++; } } - + if(scf >= 0x30){ /* calculate values for 80MHz clock */ for(i=0;i<4;i++){ @@ -1250,13 +1250,13 @@ static Symbios *create_cardinfo(int num, pci_info *pi, int flags) } else { s->syncinfo[s->syncsize].scntl3 = s->scntl3 | 0xb0; /* /4, Ultra2 */ } - + s->syncinfo[s->syncsize].period_ns = (125 * (i+4)) / 10; s->syncinfo[s->syncsize].period = 4 * (s->syncinfo[s->syncsize].period_ns / 4); s->syncsize++; } } - + /* calculate values for 40MHz clock */ for(i=0;i<8;i++){ s->syncinfo[s->syncsize].sxfer = i << 5; @@ -1264,39 +1264,39 @@ static Symbios *create_cardinfo(int num, pci_info *pi, int flags) s->syncinfo[s->syncsize].period_ns = 25 * (i+4); s->syncinfo[s->syncsize].period = 4 * (s->syncinfo[s->syncsize].period_ns / 4); s->syncsize++; - } - - for(i=0;isyncsize;i++){ - dprintf("symbios%ld: syncinfo[%d] = { %02x, %02x, %d ns, %d ns }\n", - s->num, i, - s->syncinfo[i].sxfer, s->syncinfo[i].scntl3, - s->syncinfo[i].period_ns, s->syncinfo[i].period); } - - for(i=0;i<16;i++){ + + for(i=0;isyncsize;i++){ + dprintf("symbios%ld: syncinfo[%d] = { %02x, %02x, %d ns, %d ns }\n", + s->num, i, + s->syncinfo[i].sxfer, s->syncinfo[i].scntl3, + s->syncinfo[i].period_ns, s->syncinfo[i].period); + } + + for(i=0;i<16;i++){ s->targ[i].id = i; s->targ[i].adapter = s; s->targ[i].wide = 0; s->targ[i].offset = 0; s->targ[i].status = status_inactive; - + if((i == s->host_targ_id) || (i > s->max_targ_id)){ s->targ[i].flags = tf_ignore; } else { s->targ[i].flags = tf_ask_sync; if(flags & symf_wide) s->targ[i].flags |= tf_ask_wide; // s->targ[i].flags = 0; - + setparams(s->targ + i, 0, 0, 0); - + sprintf(name,"sym%ld:%02d:lock",s->num,i); s->targ[i].sem_targ = create_sem(1,name); - + sprintf(name,"sym%ld:%02d:done",s->num,i); - s->targ[i].sem_done = create_sem(0,name); + s->targ[i].sem_done = create_sem(0,name); } } - + if(flags & symf_wide){ s->idmask = 15; s->op_in = OP_WDATA_IN; @@ -1306,10 +1306,10 @@ static Symbios *create_cardinfo(int num, pci_info *pi, int flags) s->op_in = OP_NDATA_IN; s->op_out = OP_NDATA_OUT; } - + reloc_script(s); return s; - + err: free(s); delete_area(aid); @@ -1334,7 +1334,7 @@ static long sim_action2(CCB_HEADER *ccbh) { return sim_action(cardinfo[2],ccbh) static long sim_action3(CCB_HEADER *ccbh) { return sim_action(cardinfo[3],ccbh); } static long (*sim_init_funcs[MAXCARDS])(void) = { - sim_init0, sim_init1, sim_init2, sim_init3 + sim_init0, sim_init1, sim_init2, sim_init3 }; static long (*sim_action_funcs[MAXCARDS])(CCB_HEADER *) = { @@ -1353,7 +1353,7 @@ sim_install_symbios(void) int cardcount = 0; pci_info h; CAM_SIM_ENTRY entry; - + dprintf("symbios: sim_install()\n"); for (i = 0; ; i++) { @@ -1361,7 +1361,7 @@ sim_install_symbios(void) /*if(!cardcount) d_printf("symbios: no controller found\n");*/ break; } - + // d_printf("scan: %04x %04x %02x\n", h.device_id, h.vendor_id, h.revision); #define PCI_VENDOR_SYMBIOS 0x1000 @@ -1373,19 +1373,19 @@ sim_install_symbios(void) irq = h.u.h0.interrupt_line; d_printf("symbios%d: %s controller @ 0x%08x, irq %d\n", cardcount, devinfo[j].name, iobase, irq); - + if(cardcount == MAXCARDS){ d_printf("symbios: too many controllers!\n"); return cardcount; } - + if((cardinfo[cardcount]=create_cardinfo(cardcount,&h,devinfo[j].flags)) != NULL){ cardinfo[cardcount]->name = devinfo[j].name; entry.sim_init = sim_init_funcs[cardcount]; entry.sim_action = sim_action_funcs[cardcount]; cardinfo[cardcount]->registered = 0; register_stats(cardinfo[cardcount]); - + (*cam->xpt_bus_register)(&entry); cardcount++; } else { @@ -1408,7 +1408,7 @@ static status_t std_ops(int32 op, ...) set_dprintf_enabled(true); #endif load_driver_symbols("53c8xx"); - + if (get_module(pci_name, (module_info **) &pci) != B_OK) return B_ERROR; @@ -1416,20 +1416,20 @@ static status_t std_ops(int32 op, ...) put_module(pci_name); return B_ERROR; } - + if(sim_install_symbios()){ return B_OK; - } + } put_module(pci_name); put_module(cam_name); return B_ERROR; - + case B_MODULE_UNINIT: put_module(pci_name); put_module(cam_name); return B_OK; - + default: return B_ERROR; } @@ -1441,7 +1441,7 @@ sim_module_info sim_symbios_module = { }; _EXPORT -module_info *modules[] = +module_info *modules[] = { (module_info *) &sim_symbios_module, NULL diff --git a/src/add-ons/kernel/busses/scsi/ahci/ahci_port.cpp b/src/add-ons/kernel/busses/scsi/ahci/ahci_port.cpp index 419549b42b..e82bce708c 100644 --- a/src/add-ons/kernel/busses/scsi/ahci/ahci_port.cpp +++ b/src/add-ons/kernel/busses/scsi/ahci/ahci_port.cpp @@ -452,10 +452,11 @@ AHCIPort::FillPrdTable(volatile prd *prdTable, int *prdCount, int prdMax, *prdCount = 0; while (sgCount > 0 && dataSize > 0) { size_t size = min_c(sgTable->size, dataSize); - void *address = sgTable->address; + phys_addr_t address = sgTable->address; T_PORT(AHCIPortPrdTable(fController, fIndex, address, size)); - FLOW("FillPrdTable: sg-entry addr %p, size %lu\n", address, size); - if ((uint32)address & 1) { + FLOW("FillPrdTable: sg-entry addr %#" B_PRIxPHYSADDR ", size %lu\n", + address, size); + if (address & 1) { TRACE("AHCIPort::FillPrdTable: data alignment error\n"); return B_ERROR; } @@ -475,7 +476,7 @@ AHCIPort::FillPrdTable(volatile prd *prdTable, int *prdCount, int prdMax, prdTable->dbc = bytes - 1; *prdCount += 1; prdTable++; - address = (char *)address + bytes; + address = address + bytes; size -= bytes; } sgTable++; diff --git a/src/add-ons/kernel/busses/scsi/ahci/util.c b/src/add-ons/kernel/busses/scsi/ahci/util.c index b8184aac22..617c16c90d 100644 --- a/src/add-ons/kernel/busses/scsi/ahci/util.c +++ b/src/add-ons/kernel/busses/scsi/ahci/util.c @@ -25,6 +25,7 @@ area_id alloc_mem(void **virt, void **phy, size_t size, uint32 protection, const char *name) { +// TODO: phy should be phys_addr_t*! physical_entry pe; void * virtadr; area_id areaid; @@ -48,7 +49,7 @@ alloc_mem(void **virt, void **phy, size_t size, uint32 protection, if (virt) *virt = virtadr; if (phy) - *phy = pe.address; + *phy = (void*)(addr_t)pe.address; TRACE("area = %ld, size = %ld, virt = %p, phy = %p\n", areaid, size, virtadr, pe.address); return areaid; } @@ -68,8 +69,8 @@ map_mem(void **virt, void *phy, size_t size, uint32 protection, offset = (uint32)phy & (B_PAGE_SIZE - 1); phyadr = (char *)phy - offset; size = round_to_pagesize(size + offset); - area = map_physical_memory(name, phyadr, size, B_ANY_KERNEL_BLOCK_ADDRESS, - protection, &mapadr); + area = map_physical_memory(name, (addr_t)phyadr, size, + B_ANY_KERNEL_BLOCK_ADDRESS, protection, &mapadr); if (area < B_OK) { ERROR("mapping '%s' failed, error 0x%lx (%s)\n", name, area, strerror(area)); return area; @@ -92,9 +93,10 @@ sg_memcpy(const physical_entry *sgTable, int sgCount, const void *data, for (i = 0; i < sgCount && dataSize > 0; i++) { size_t size = min_c(dataSize, sgTable[i].size); - TRACE("sg_memcpy phyAddr %p, size %lu\n", sgTable[i].address, size); + TRACE("sg_memcpy phyAddr %#" B_PRIxPHYSADDR ", size %lu\n", + sgTable[i].address, size); - vm_memcpy_to_physical((addr_t)sgTable[i].address, data, size, false); + vm_memcpy_to_physical(sgTable[i].address, data, size, false); data = (char *)data + size; dataSize -= size; diff --git a/src/add-ons/kernel/busses/scsi/buslogic/buslogic.c b/src/add-ons/kernel/busses/scsi/buslogic/buslogic.c index 112d813459..857faec676 100644 --- a/src/add-ons/kernel/busses/scsi/buslogic/buslogic.c +++ b/src/add-ons/kernel/busses/scsi/buslogic/buslogic.c @@ -1,6 +1,6 @@ /* ** $Id: sim_buslogic.c,v 1.8 1998/04/21 00:54:52 swetland Exp $ -** +** ** SCSI Interface Module for BusLogic MultiMaster Controllers ** Copyright 1998, Brian J. Swetland ** @@ -14,7 +14,7 @@ #include /* -** Debug options: +** Debug options: */ #define DEBUG_BUSLOGIC /* Print Debugging Messages */ #define xDEBUG_TRANSACTIONS @@ -43,8 +43,8 @@ #endif /* TODO: -** -** - endian issues: the MultiMaster is little endian, should use swap() +** +** - endian issues: the MultiMaster is little endian, should use swap() ** macro for PPC compatibility whenever exchanging addresses with it (DONE) ** - wrap phys addrs with ram_address() ** - support scatter-gather in the ccb_scsiio struct (DONE) @@ -66,7 +66,7 @@ #include "buslogic.h" /* -** Constants for the SIM +** Constants for the SIM */ #define SIM_VERSION 0x01 #define HBA_VERSION 0x01 @@ -119,13 +119,13 @@ scsi_int_dispatch(void *data) if(intstat & BL_INT_RSTS){ kprintf("buslogic_irq: BUS RESET\n"); } - + /* have we got mail? */ if(intstat & BL_INT_IMBL){ while(bl->in_boxes[bl->in_nextbox].completion_code){ bl_ccb = (BL_CCB32 *) PhysToVirt(unLE(bl->in_boxes[bl->in_nextbox].ccb_phys)); - + #ifdef VERBOSE_IRQ kprintf("buslogic_irq: CCB %08x (%08x) done, cc=0x%02x\n", unLE(bl->in_boxes[bl->in_nextbox].ccb_phys), (uint32) bl_ccb, @@ -141,12 +141,12 @@ scsi_int_dispatch(void *data) /* acknowledge the irq */ outb(BL_CONTROL_REG, BL_CONTROL_RINT); - + return B_HANDLED_INTERRUPT; } -/* Execute a command, with optional params send (in[in_len]) and +/* Execute a command, with optional params send (in[in_len]) and ** results received (out[out_len]) */ static int bl_execute(BusLogic *bl, uchar command, @@ -158,18 +158,18 @@ static int bl_execute(BusLogic *bl, uchar command, #ifdef TIMEOUT int timeout; #endif - + _in = (uchar *) in; _out = (uchar *) out; - + if(!(inb(BL_STATUS_REG) & BL_STATUS_HARDY)) { d_printf("buslogic: command 0x%02x %d/%d, not ready\n", - command, in_len, out_len); + command, in_len, out_len); return 1; } outb(BL_COMMAND_REG, command); - + #ifdef TIMEOUT timeout = 100; #endif @@ -197,7 +197,7 @@ static int bl_execute(BusLogic *bl, uchar command, } #ifdef TIMEOUT - timeout = 100; + timeout = 100; #endif while(out_len){ status = inb(BL_STATUS_REG); @@ -239,7 +239,7 @@ static int bl_execute(BusLogic *bl, uchar command, return 0; } -/* Initialize the BT-9X8 and confirm that it is operating as expected +/* Initialize the BT-9X8 and confirm that it is operating as expected */ static long init_buslogic(BusLogic *bl) { @@ -247,7 +247,7 @@ static long init_buslogic(BusLogic *bl) uchar id[16]; int i; char *str = bl->productname; - + d_printf("buslogic: init_buslogic()\n"); dprintf("buslogic: reset: "); @@ -278,21 +278,21 @@ static long init_buslogic(BusLogic *bl) dprintf(" TIMEOUT\n"); return -1; } - + if(bl_execute(bl, 0x04, NULL, 0, id, 4)){ d_printf("buslogic: can't id?\n"); return B_ERROR; - } + } d_printf("buslogic: Firmware Rev %c.%c\n",id[2],id[3]); id[0]=14; id[14]=id[2]; - + if(bl_execute(bl, 0x8d, id, 1, id, 14)){ d_printf("buslogic: cannot read extended config\n"); return B_ERROR; - } - + } + d_printf("buslogic: rev = %c.%c%c%c mb = %d, sgmax = %d, flags = 0x%02x\n", id[14], id[10], id[11], id[12], id[4], id[2] | (id[3]<<8), id[13]); if(id[13] & 0x01) bl->wide = 1; @@ -316,14 +316,14 @@ static long init_buslogic(BusLogic *bl) *str++ = 0; } else { strcpy(str,"unknown"); - } + } if(bl_execute(bl, 0x0B, NULL, 0, id, 3)){ d_printf("buslogic: cannot read config\n"); return B_ERROR; } bl->scsi_id = id[2]; d_printf("buslogic: Adapter SCSI ID = %d\n",bl->scsi_id); - + if(install_io_interrupt_handler(bl->irq, scsi_int_dispatch, bl, 0) == B_ERROR) d_printf("buslogic: can't install irq handler\n"); @@ -338,7 +338,7 @@ static long init_buslogic(BusLogic *bl) d_printf("buslogic: interrupt test failed\n"); return B_ERROR; } - + /* strict round-robin on */ id[0] = 0; if(bl_execute(bl,0x8F, id, 1, NULL, 0)){ @@ -346,7 +346,7 @@ static long init_buslogic(BusLogic *bl) return B_ERROR; } - + id[0] = bl->box_count; { int mbaddr = toLE(bl->phys_mailboxes); memcpy(id + 1, &(mbaddr),4); @@ -357,7 +357,7 @@ static long init_buslogic(BusLogic *bl) } d_printf("buslogic: %d mailboxes @ 0x%08xv/0x%08lxp\n", bl->box_count, (uint) bl->out_boxes, bl->phys_mailboxes); - + return B_NO_ERROR; } @@ -376,7 +376,7 @@ static long sim_invalid(BusLogic *bl, CCB_HEADER *ccbh) /* Convert a CCB_SCSIIO into a BL_CCB32 and (possibly SG array). -** +** ** */ @@ -392,13 +392,13 @@ static long sim_execute_scsi_io(BusLogic *bl, CCB_HEADER *ccbh) physical_entry *scratch; uint32 tmp; int i,t,req; - + ccb = (CCB_SCSIIO *) ccbh; #ifdef DEBUG_BUSLOGIC req = atomic_add(&(bl->reqid),1); #endif - + /* valid cdb len? */ cdb_len = ccb->cam_cdb_len; if (cdb_len != 6 && cdb_len != 10 && cdb_len != 12) { @@ -420,10 +420,10 @@ static long sim_execute_scsi_io(BusLogic *bl, CCB_HEADER *ccbh) /* get contiguous area for bl_ccb in the private data area */ get_memory_map((void *)ccb->cam_sim_priv, 4096, entries, 2); - + priv_phys = (uint32) entries[0].address; priv = (BL_PRIV *) ccb->cam_sim_priv; - + /* copy over the CDB */ if(ccb->cam_ch.cam_flags & CAM_CDB_POINTER) { memcpy(bl_ccb->cdb, ccb->cam_cdb_io.cam_cdb_ptr, cdb_len); @@ -446,7 +446,7 @@ static long sim_execute_scsi_io(BusLogic *bl, CCB_HEADER *ccbh) /* okay, this is really disgusting and could potentially break if physical_entry{} changes format... we use the sg list as a scratchpad. Disgusting, but a start */ - + scratch = (physical_entry *) priv->sg; @@ -454,12 +454,12 @@ static long sim_execute_scsi_io(BusLogic *bl, CCB_HEADER *ccbh) /* we're using scatter gather -- things just got trickier */ iovec *iov = (iovec *) ccb->cam_data_ptr; int j,sgcount = 0; - + /* dprintf("buslogic: sg count = %d\n",ccb->cam_sglist_cnt);*/ /* multiple entries, use SG */ bl_ccb->opcode = BL_CCB_OP_INITIATE_RETLEN_SG; bl_ccb->data = toLE(priv_phys + 256); - + /* for each entry in the sglist we were given ... */ for(t=0,i=0;icam_sglist_cnt;i++){ /* map it ... */ @@ -472,12 +472,12 @@ static long sim_execute_scsi_io(BusLogic *bl, CCB_HEADER *ccbh) sgcount++; dt_printf("buslogic/%d: SG %03d - 0x%08x (%d)\n",req, j, (uint32) scratch[j].address, scratch[j].size); - + tmp = priv->sg[j].length; priv->sg[j].length = toLE(priv->sg[j].phys); priv->sg[j].phys = toLE(tmp); } - + if(scratch[j].size) panic("egads! sgseg overrun in BusLogic SIM"); } if(t != ccb->cam_dxfer_len){ @@ -493,7 +493,7 @@ static long sim_execute_scsi_io(BusLogic *bl, CCB_HEADER *ccbh) return B_ERROR; } /* total bytes in DataSegList */ - bl_ccb->length_data = toLE(sgcount * 8); + bl_ccb->length_data = toLE(sgcount * 8); } else { get_memory_map((void *)ccb->cam_data_ptr, ccb->cam_dxfer_len, scratch, MAX_SCATTER); @@ -506,7 +506,7 @@ static long sim_execute_scsi_io(BusLogic *bl, CCB_HEADER *ccbh) t += scratch[i].size; dt_printf("buslogic/%d: SG %03d - 0x%08x (%d)\n",req, i, (uint32) scratch[i].address, scratch[i].size); - + tmp = priv->sg[i].length; priv->sg[i].length = toLE(priv->sg[i].phys); priv->sg[i].phys = toLE(tmp); @@ -514,7 +514,7 @@ static long sim_execute_scsi_io(BusLogic *bl, CCB_HEADER *ccbh) if(t != ccb->cam_dxfer_len){ dt_printf("buslogic/%d: error, %d != %d\n",req,t,ccb->cam_dxfer_len); ccb->cam_ch.cam_status = CAM_REQ_INVALID; - + /* put the CCB32 back on the freelist and release our lock */ acquire_sem(bl->ccb_lock); bl_ccb->next = bl->first_ccb; @@ -525,7 +525,7 @@ static long sim_execute_scsi_io(BusLogic *bl, CCB_HEADER *ccbh) } /* total bytes in DataSegList */ bl_ccb->length_data = toLE(i * 8); - + } else { bl_ccb->opcode = BL_CCB_OP_INITIATE_RETLEN; /* single entry, use direct */ @@ -533,17 +533,17 @@ static long sim_execute_scsi_io(BusLogic *bl, CCB_HEADER *ccbh) bl_ccb->data = toLE((uint32) scratch[0].address); } } - + dt_printf("buslogic/%d: targ %d, dxfr %d, scsi op = 0x%02x\n",req, bl_ccb->target_id, t, bl_ccb->cdb[0]); - + acquire_sem(bl->hw_lock); /* check for box in use state XXX */ bl->out_boxes[bl->out_nextbox].ccb_phys = toLE(bl_ccb_phys); bl->out_boxes[bl->out_nextbox].action_code = BL_ActionCode_Start; bl->out_nextbox++; - if(bl->out_nextbox == bl->box_count) bl->out_nextbox = 0; + if(bl->out_nextbox == bl->box_count) bl->out_nextbox = 0; outb(BL_COMMAND_REG, 0x02); #ifndef SERIALIZE_REQS @@ -554,7 +554,7 @@ static long sim_execute_scsi_io(BusLogic *bl, CCB_HEADER *ccbh) acquire_sem(bl_ccb->done); /* d_printf("buslogic/%d: CCB %08x (%08xv) done\n", req, bl_ccb_phys, (uint32) bl_ccb);*/ - + #ifdef SERIALIZE_REQS release_sem(bl->hw_lock); #endif @@ -579,21 +579,21 @@ static long sim_execute_scsi_io(BusLogic *bl, CCB_HEADER *ccbh) ccb->cam_ch.cam_status = CAM_UNCOR_PARITY; break; default: - ccb->cam_ch.cam_status = CAM_REQ_INVALID; + ccb->cam_ch.cam_status = CAM_REQ_INVALID; } dt_printf("buslogic/%d: error stat %02x\n",req,bl_ccb->btstat); } else { dt_printf("buslogic/%d: data %d/%d, sense %d/%d\n", req, bl_ccb->length_data, ccb->cam_dxfer_len, bl_ccb->length_sense, ccb->cam_sense_len); - + ccb->cam_resid = bl_ccb->length_data; /* under what condition should we do this? */ memcpy(ccb->cam_sense_ptr, priv->sensedata, ccb->cam_sense_len); ccb->cam_scsi_status = bl_ccb->sdstat; - + if(bl_ccb->sdstat == 02){ ccb->cam_ch.cam_status = CAM_REQ_CMP_ERR | CAM_AUTOSNS_VALID; ccb->cam_sense_resid = 0; @@ -609,10 +609,10 @@ static long sim_execute_scsi_io(BusLogic *bl, CCB_HEADER *ccbh) release_sem(bl->ccb_lock); release_sem(bl->ccb_count); return 0; - + } } - + /* put the CCB32 back on the freelist and release our lock */ acquire_sem(bl->ccb_lock); bl_ccb->next = bl->first_ccb; @@ -623,16 +623,16 @@ static long sim_execute_scsi_io(BusLogic *bl, CCB_HEADER *ccbh) } -/* +/* ** sim_path_inquiry returns info on the target/lun. */ static long sim_path_inquiry(BusLogic *bl, CCB_HEADER *ccbh) { CCB_PATHINQ *ccb; d_printf("buslogic: sim_path_inquiry()\n"); - + ccb = (CCB_PATHINQ *) ccbh; - + ccb->cam_version_num = SIM_VERSION; ccb->cam_target_sprt = 0; ccb->cam_hba_eng_cnt = 0; @@ -655,7 +655,7 @@ static long sim_path_inquiry(BusLogic *bl, CCB_HEADER *ccbh) static long sim_extended_path_inquiry(BusLogic *bl, CCB_HEADER *ccbh) { CCB_EXTENDED_PATHINQ *ccb; - + sim_path_inquiry(bl, ccbh); ccb = (CCB_EXTENDED_PATHINQ *) ccbh; sprintf(ccb->cam_sim_version, "%d.0", SIM_VERSION); @@ -763,9 +763,9 @@ static long sim_action(BusLogic *bl, CCB_HEADER *ccbh) sim_terminate_process /* terminate an i/o process */ }; uchar op; - + /* d_printf("buslogic: sim_execute(), op = %d\n", ccbh->cam_func_code); */ - + /* check for function codes out of range of dispatch table */ op = ccbh->cam_func_code; if ((op >= sizeof (sim_functions) / sizeof (long (*)())) && @@ -774,7 +774,7 @@ static long sim_action(BusLogic *bl, CCB_HEADER *ccbh) ccbh->cam_status = CAM_REQ_INVALID; return -1; } - + ccbh->cam_status = CAM_REQ_INPROG; if (op == XPT_EXTENDED_PATH_INQ) { return sim_extended_path_inquiry(bl, ccbh); @@ -787,7 +787,7 @@ static long sim_action(BusLogic *bl, CCB_HEADER *ccbh) static char *hextab = "0123456789ABCDEF"; /* -** Allocate the actual memory for the cardinfo object +** Allocate the actual memory for the cardinfo object */ static BusLogic *create_cardinfo(int num, int iobase, int irq) { @@ -796,18 +796,18 @@ static BusLogic *create_cardinfo(int num, int iobase, int irq) int i; physical_entry entries[5]; char name[9] = { 'b', 'l', '_', 'c', 'c', 'b', '0', '0', 0 }; - + BusLogic *bl = (BusLogic *) malloc(sizeof(BusLogic)); - + #ifndef __INTEL__ - i = map_physical_memory("bl_regs",(void*) iobase, 4096, + i = map_physical_memory("bl_regs", iobase, 4096, B_ANY_KERNEL_ADDRESS, B_READ_AREA | B_WRITE_AREA, &a); iobase = (uint32) a; if(i < 0) { dprintf("buslogic: can't map registers...\n"); } #endif - + bl->id = num; bl->iobase = iobase; bl->irq = irq; @@ -838,19 +838,19 @@ static BusLogic *create_cardinfo(int num, int iobase, int irq) return NULL; } get_memory_map(a, 4096*5, entries, 2); -#endif +#endif /* figure virtual <-> physical translations */ bl->phys_to_virt = ((uint) a) - ((uint) entries[0].address); bl->virt_to_phys = (((uint) entries[0].address - (uint) a)); - bl->phys_mailboxes = (uint) entries[0].address; + bl->phys_mailboxes = (uint) entries[0].address; /* initialize all mailboxes to empty */ bl->out_boxes = (BL_Out_Mailbox32 *) a; bl->in_boxes = (BL_In_Mailbox32 *) (a + (8 * bl->box_count)); for(i=0;ibox_count;i++){ bl->out_boxes[i].action_code = BL_ActionCode_NotInUse; - bl->in_boxes[i].completion_code = BL_CompletionCode_NotInUse; + bl->in_boxes[i].completion_code = BL_CompletionCode_NotInUse; } /* setup the CCB32 cache */ @@ -858,7 +858,7 @@ static BusLogic *create_cardinfo(int num, int iobase, int irq) bl->ccb = (BL_CCB32 *) (((uchar *)a) + 1024); #else bl->ccb = (BL_CCB32 *) (((uchar *)a) + 4096); -#endif +#endif bl->first_ccb = NULL; for(i=0;ibox_count;i++){ name[6] = hextab[(i & 0xF0) >> 4]; @@ -867,12 +867,12 @@ static BusLogic *create_cardinfo(int num, int iobase, int irq) bl->ccb[i].next = bl->first_ccb; bl->first_ccb = &(bl->ccb[i]); } - + bl->hw_lock = create_sem(1, "bl_hw_lock"); bl->ccb_lock = create_sem(1, "bl_ccb_lock"); bl->ccb_count = create_sem(MAX_CCB_COUNT, "bl_ccb_count"); bl->reqid = 0; - + return bl; } @@ -895,7 +895,7 @@ static long sim_action3(CCB_HEADER *ccbh) { return sim_action(cardinfo[3],ccbh) static long (*sim_init_funcs[MAXCARDS])(void) = { - sim_init0, sim_init1, sim_init2, sim_init3 + sim_init0, sim_init1, sim_init2, sim_init3 }; static long (*sim_action_funcs[MAXCARDS])(CCB_HEADER *) = { @@ -914,7 +914,7 @@ sim_install_buslogic(void) int cardcount = 0; pci_info h; CAM_SIM_ENTRY entry; - + /* d_printf("buslogic: sim_install()\n"); */ for (i = 0; ; i++) { @@ -938,8 +938,8 @@ sim_install_buslogic(void) if((irq == 0) || (irq > 128)) { dprintf("buslogic%d: bad irq %d\n",cardcount,irq); continue; - } - + } + if(cardcount == MAXCARDS){ d_printf("buslogic: too many controllers!\n"); return cardcount; @@ -978,12 +978,12 @@ static status_t std_ops(int32 op, ...) put_module(pci_name); put_module(cam_name); return B_ERROR; - + case B_MODULE_UNINIT: put_module(pci_name); put_module(cam_name); return B_OK; - + default: return B_ERROR; } diff --git a/src/add-ons/kernel/busses/usb/ehci.cpp b/src/add-ons/kernel/busses/usb/ehci.cpp index 696a6af82f..ede5be33f9 100644 --- a/src/add-ons/kernel/busses/usb/ehci.cpp +++ b/src/add-ons/kernel/busses/usb/ehci.cpp @@ -154,7 +154,7 @@ EHCI::EHCI(pci_info *info, Stack *stack) fPCIInfo->u.h0.base_register_sizes[0]); fRegisterArea = map_physical_memory("EHCI memory mapped registers", - (void *)physicalAddress, mapSize, B_ANY_KERNEL_BLOCK_ADDRESS, + physicalAddress, mapSize, B_ANY_KERNEL_BLOCK_ADDRESS, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA | B_READ_AREA | B_WRITE_AREA, (void **)&fCapabilityRegisters); if (fRegisterArea < B_OK) { diff --git a/src/add-ons/kernel/busses/usb/ohci.cpp b/src/add-ons/kernel/busses/usb/ohci.cpp index ec67e3168d..16c8c47541 100644 --- a/src/add-ons/kernel/busses/usb/ohci.cpp +++ b/src/add-ons/kernel/busses/usb/ohci.cpp @@ -101,7 +101,7 @@ OHCI::OHCI(pci_info *info, Stack *stack) offset &= PCI_address_memory_32_mask; TRACE_ALWAYS("iospace offset: 0x%lx\n", offset); fRegisterArea = map_physical_memory("OHCI memory mapped registers", - (void *)offset, B_PAGE_SIZE, B_ANY_KERNEL_BLOCK_ADDRESS, + offset, B_PAGE_SIZE, B_ANY_KERNEL_BLOCK_ADDRESS, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA | B_READ_AREA | B_WRITE_AREA, (void **)&fOperationalRegisters); if (fRegisterArea < B_OK) { @@ -1595,7 +1595,7 @@ OHCI::_CreateDescriptorChain(ohci_general_td **_firstDescriptor, | OHCI_TD_BUFFER_ROUNDING | OHCI_TD_SET_CONDITION_CODE(OHCI_TD_CONDITION_NOT_ACCESSED) | OHCI_TD_SET_DELAY_INTERRUPT(OHCI_TD_INTERRUPT_NONE) - | OHCI_TD_TOGGLE_CARRY; + | OHCI_TD_TOGGLE_CARRY; // link to previous if (lastDescriptor) diff --git a/src/add-ons/kernel/console/vga_text/vga_text.c b/src/add-ons/kernel/console/vga_text/vga_text.c index 260f57755e..2dfe8c7da7 100644 --- a/src/add-ons/kernel/console/vga_text/vga_text.c +++ b/src/add-ons/kernel/console/vga_text/vga_text.c @@ -41,7 +41,7 @@ text_init(void) return -1; } - map_physical_memory("video_mem", (void *)SCREEN_START, SCREEN_END - SCREEN_START, + map_physical_memory("video_mem", SCREEN_START, SCREEN_END - SCREEN_START, B_ANY_KERNEL_ADDRESS, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA, (void *)&sOrigin); dprintf("console/text: mapped vid mem to virtual address %p\n", sOrigin); diff --git a/src/add-ons/kernel/drivers/audio/ac97/ali5451/util.c b/src/add-ons/kernel/drivers/audio/ac97/ali5451/util.c index eeeaa79fc4..f7c14b3851 100644 --- a/src/add-ons/kernel/drivers/audio/ac97/ali5451/util.c +++ b/src/add-ons/kernel/drivers/audio/ac97/ali5451/util.c @@ -35,6 +35,7 @@ round_to_pagesize(uint32 size) static area_id alloc_mem(void **phy, void **log, size_t size, const char *name) { +// TODO: phy should be phys_addr_t*! physical_entry pe; void *logadr; area_id areaid; @@ -57,7 +58,7 @@ alloc_mem(void **phy, void **log, size_t size, const char *name) if (log) *log = logadr; if (phy) - *phy = pe.address; + *phy = (void*)(addr_t)pe.address; return areaid; } @@ -97,7 +98,7 @@ void * ali_mem_alloc(ali_dev *card, size_t size) { ali_mem *mem; - + mem = ali_mem_new(card, size); if (!mem) return NULL; @@ -112,13 +113,13 @@ void ali_mem_free(ali_dev *card, void *ptr) { ali_mem *mem; - + LIST_FOREACH(mem, &card->mems, next) { if (mem->log_base != ptr) continue; LIST_REMOVE(mem, next); - + ali_mem_delete(mem); break; } diff --git a/src/add-ons/kernel/drivers/audio/ac97/auich/util.c b/src/add-ons/kernel/drivers/audio/ac97/auich/util.c index cce3cd2499..f6dbb05e0f 100644 --- a/src/add-ons/kernel/drivers/audio/ac97/auich/util.c +++ b/src/add-ons/kernel/drivers/audio/ac97/auich/util.c @@ -66,6 +66,7 @@ round_to_pagesize(uint32 size) area_id alloc_mem(void **phy, void **log, size_t size, const char *name) { +// TODO: phy should be phys_addr_t*! physical_entry pe; void * logadr; area_id area; @@ -90,7 +91,7 @@ alloc_mem(void **phy, void **log, size_t size, const char *name) if (log) *log = logadr; if (phy) - *phy = pe.address; + *phy = (void*)(addr_t)pe.address; LOG(("area = %d, size = %d, log = %#08X, phy = %#08X\n", area, size, logadr, pe.address)); return area; @@ -110,7 +111,8 @@ map_mem(void **log, void *phy, size_t size, const char *name) offset = (uint32)phy & (B_PAGE_SIZE - 1); phyadr = phy - offset; size = round_to_pagesize(size + offset); - area = map_physical_memory(name, phyadr, size, B_ANY_KERNEL_ADDRESS, 0, &mapadr); + area = map_physical_memory(name, (addr_t)phyadr, size, B_ANY_KERNEL_ADDRESS, + 0, &mapadr); *log = mapadr + offset; LOG(("physical = %p, logical = %p, offset = %#x, phyadr = %p, mapadr = %p, size = %#x, area = %#x\n", diff --git a/src/add-ons/kernel/drivers/audio/ac97/auvia/util.c b/src/add-ons/kernel/drivers/audio/ac97/auvia/util.c index d0bd3c6af7..86369c4645 100644 --- a/src/add-ons/kernel/drivers/audio/ac97/auvia/util.c +++ b/src/add-ons/kernel/drivers/audio/ac97/auvia/util.c @@ -66,6 +66,7 @@ round_to_pagesize(uint32 size) area_id alloc_mem(void **phy, void **log, size_t size, const char *name) { +// TODO: phy should be phys_addr_t*! physical_entry pe; void * logadr; area_id areaid; @@ -90,7 +91,7 @@ alloc_mem(void **phy, void **log, size_t size, const char *name) if (log) *log = logadr; if (phy) - *phy = pe.address; + *phy = (void*)(addr_t)pe.address; LOG(("area = %d, size = %d, log = %#08X, phy = %#08X\n",areaid,size,logadr,pe.address)); return areaid; } diff --git a/src/add-ons/kernel/drivers/audio/ac97/es1370/util.c b/src/add-ons/kernel/drivers/audio/ac97/es1370/util.c index 11d684d856..cc464e580b 100644 --- a/src/add-ons/kernel/drivers/audio/ac97/es1370/util.c +++ b/src/add-ons/kernel/drivers/audio/ac97/es1370/util.c @@ -66,6 +66,7 @@ round_to_pagesize(uint32 size) area_id alloc_mem(void **phy, void **log, size_t size, const char *name) { +// TODO: phy should be phys_addr_t*! physical_entry pe; void * logadr; area_id areaid; @@ -90,7 +91,7 @@ alloc_mem(void **phy, void **log, size_t size, const char *name) if (log) *log = logadr; if (phy) - *phy = pe.address; + *phy = (void*)(addr_t)pe.address; LOG(("area = %d, size = %d, log = %#08X, phy = %#08X\n", areaid, size, logadr, pe.address)); return areaid; @@ -115,8 +116,8 @@ map_mem(void **log, void *phy, size_t size, const char *name) offset = (uint32)phy & (B_PAGE_SIZE - 1); phyadr = phy - offset; size = round_to_pagesize(size + offset); - area = map_physical_memory(name, phyadr, size, B_ANY_KERNEL_BLOCK_ADDRESS, - B_READ_AREA | B_WRITE_AREA, &mapadr); + area = map_physical_memory(name, (addr_t)phyadr, size, + B_ANY_KERNEL_BLOCK_ADDRESS, B_READ_AREA | B_WRITE_AREA, &mapadr); *log = mapadr + offset; LOG(("physical = %p, logical = %p, offset = %#x, phyadr = %p, mapadr = %p, size = %#x, area = %#x\n", diff --git a/src/add-ons/kernel/drivers/audio/ac97/geode/geode_controller.cpp b/src/add-ons/kernel/drivers/audio/ac97/geode/geode_controller.cpp index 3e59bc9a29..e4f685b775 100644 --- a/src/add-ons/kernel/drivers/audio/ac97/geode/geode_controller.cpp +++ b/src/add-ons/kernel/drivers/audio/ac97/geode/geode_controller.cpp @@ -39,7 +39,7 @@ geode_codec_wait(geode_controller *controller) int i; #define GCSCAUDIO_WAIT_READY_CODEC_TIMEOUT 500 - for (i = GCSCAUDIO_WAIT_READY_CODEC_TIMEOUT; (i >= 0) + for (i = GCSCAUDIO_WAIT_READY_CODEC_TIMEOUT; (i >= 0) && (controller->Read32(ACC_CODEC_CNTL) & ACC_CODEC_CNTL_CMD_NEW); i--) snooze(10); @@ -53,15 +53,15 @@ geode_codec_read(geode_controller *controller, uint8 regno) uint32 v; ASSERT(regno >= 0); - controller->Write32(ACC_CODEC_CNTL, + controller->Write32(ACC_CODEC_CNTL, ACC_CODEC_CNTL_READ_CMD | ACC_CODEC_CNTL_CMD_NEW | ACC_CODEC_REG2ADDR(regno)); - + if (geode_codec_wait(controller) != B_OK) { dprintf("codec busy (2)\n"); return 0xffff; } - + #define GCSCAUDIO_READ_CODEC_TIMEOUT 50 for (i = GCSCAUDIO_READ_CODEC_TIMEOUT; i >= 0; i--) { v = controller->Read32(ACC_CODEC_STATUS); @@ -108,7 +108,7 @@ stream_handle_interrupt(geode_controller* controller, geode_stream* stream) return; status = stream->Read8(STREAM_STATUS); - + if (status & ACC_BMx_STATUS_BM_EOP_ERR) { dprintf("geode: stream status bus master error\n"); } @@ -140,13 +140,13 @@ geode_interrupt_handler(geode_controller* controller) return B_UNHANDLED_INTERRUPT; for (uint32 index = 0; index < GEODE_MAX_STREAMS; index++) { - if (controller->streams[index] + if (controller->streams[index] && (intr & controller->streams[index]->status) != 0) { stream_handle_interrupt(controller, controller->streams[index]); } } - + return B_HANDLED_INTERRUPT; } @@ -164,9 +164,9 @@ reset_controller(geode_controller* controller) // stop streams // stop DMA - + // reset DMA position buffer - + return B_OK; } @@ -246,9 +246,9 @@ geode_stream_start(geode_stream* stream) else value = ACC_BMx_CMD_READ; - stream->Write8(STREAM_CMD, value | ACC_BMx_CMD_BYTE_ORD_EL + stream->Write8(STREAM_CMD, value | ACC_BMx_CMD_BYTE_ORD_EL | ACC_BMx_CMD_BM_CTL_ENABLE); - + stream->running = true; return B_OK; } @@ -262,7 +262,7 @@ geode_stream_stop(geode_stream* stream) { dprintf("geode_stream_stop()\n"); stream->Write8(STREAM_CMD, ACC_BMx_CMD_BM_CTL_DISABLE); - + stream->running = false; delete_sem(stream->buffer_ready_sem); stream->buffer_ready_sem = -1; @@ -274,13 +274,13 @@ geode_stream_stop(geode_stream* stream) status_t geode_stream_setup_buffers(geode_stream* stream, const char* desc) { - uint32 bufferSize, bufferPhysicalAddress, alloc; + uint32 bufferSize, alloc; uint32 index; physical_entry pe; struct acc_prd* bufferDescriptors; uint8* buffer; status_t rc; - + /* Clear previously allocated memory */ if (stream->buffer_area >= B_OK) { delete_area(stream->buffer_area); @@ -317,7 +317,7 @@ geode_stream_setup_buffers(geode_stream* stream, const char* desc) return rc; } - bufferPhysicalAddress = (uint32)pe.address; + phys_addr_t bufferPhysicalAddress = pe.address; dprintf("%s(%s): Allocated %lu bytes for %ld buffers\n", __func__, desc, alloc, stream->num_buffers); @@ -349,7 +349,7 @@ geode_stream_setup_buffers(geode_stream* stream, const char* desc) return rc; } - stream->physical_buffer_descriptors = (uint32)pe.address; + stream->physical_buffer_descriptors = pe.address; dprintf("%s(%s): Allocated %ld bytes for %ld BDLEs\n", __func__, desc, alloc, stream->num_buffers); @@ -390,7 +390,7 @@ geode_hw_init(geode_controller* controller) { uint16 cmd; status_t status; - + cmd = (gPci->read_pci_config)(controller->pci_info.bus, controller->pci_info.device, controller->pci_info.function, PCI_command, 2); if (!(cmd & PCI_command_master)) { @@ -416,12 +416,12 @@ geode_hw_init(geode_controller* controller) goto reset_failed; } - /* attach the codec */ - ac97_attach(&controller->ac97, (codec_reg_read)geode_codec_read, + /* attach the codec */ + ac97_attach(&controller->ac97, (codec_reg_read)geode_codec_read, (codec_reg_write)geode_codec_write, controller, controller->pci_info.u.h0.subsystem_vendor_id, controller->pci_info.u.h0.subsystem_id); - + snooze(1000); controller->multi = (geode_multi*)calloc(1, sizeof(geode_multi)); diff --git a/src/add-ons/kernel/drivers/audio/ac97/ich/util.c b/src/add-ons/kernel/drivers/audio/ac97/ich/util.c index 86d1df9bc4..eb9e55aa11 100644 --- a/src/add-ons/kernel/drivers/audio/ac97/ich/util.c +++ b/src/add-ons/kernel/drivers/audio/ac97/ich/util.c @@ -66,6 +66,7 @@ round_to_pagesize(uint32 size) area_id alloc_mem(void **log, void **phy, size_t size, const char *name) { +// TODO: phy should be phys_addr_t*! physical_entry pe; void * logadr; area_id areaid; @@ -90,7 +91,7 @@ alloc_mem(void **log, void **phy, size_t size, const char *name) if (log) *log = logadr; if (phy) - *phy = pe.address; + *phy = (void*)(addr_t)pe.address; LOG(("area = %d, size = %d, log = %#08X, phy = %#08X\n",areaid,size,logadr,pe.address)); return areaid; } @@ -114,7 +115,8 @@ map_mem(void **log, void *phy, size_t size, const char *name) offset = (uint32)phy & (B_PAGE_SIZE - 1); phyadr = (char *)phy - offset; size = round_to_pagesize(size + offset); - area = map_physical_memory(name, phyadr, size, B_ANY_KERNEL_BLOCK_ADDRESS, B_READ_AREA | B_WRITE_AREA, &mapadr); + area = map_physical_memory(name, (addr_t)phyadr, size, + B_ANY_KERNEL_BLOCK_ADDRESS, B_READ_AREA | B_WRITE_AREA, &mapadr); *log = (char *)mapadr + offset; LOG(("physical = %p, logical = %p, offset = %#x, phyadr = %p, mapadr = %p, size = %#x, area = %#x\n", diff --git a/src/add-ons/kernel/drivers/audio/ac97/ichaudio/lala/util.c b/src/add-ons/kernel/drivers/audio/ac97/ichaudio/lala/util.c index f09cec2a72..f57754d493 100644 --- a/src/add-ons/kernel/drivers/audio/ac97/ichaudio/lala/util.c +++ b/src/add-ons/kernel/drivers/audio/ac97/ichaudio/lala/util.c @@ -47,6 +47,7 @@ area_id alloc_mem(void **virt, void **phy, size_t size, uint32 protection, const char *name) { +// TODO: phy should be phys_addr_t*! physical_entry pe; void * virtadr; area_id areaid; @@ -71,7 +72,7 @@ alloc_mem(void **virt, void **phy, size_t size, uint32 protection, if (virt) *virt = virtadr; if (phy) - *phy = pe.address; + *phy = (void*)(addr_t)pe.address; LOG(("area = %ld, size = %ld, virt = %p, phy = %p\n", areaid, size, virtadr, pe.address)); return areaid; } @@ -95,7 +96,8 @@ map_mem(void **virt, void *phy, size_t size, uint32 protection, const char *name offset = (uint32)phy & (B_PAGE_SIZE - 1); phyadr = (char *)phy - offset; size = round_to_pagesize(size + offset); - area = map_physical_memory(name, phyadr, size, B_ANY_KERNEL_BLOCK_ADDRESS, protection, &mapadr); + area = map_physical_memory(name, (addr_t)phyadr, size, + B_ANY_KERNEL_BLOCK_ADDRESS, protection, &mapadr); *virt = (char *)mapadr + offset; LOG(("physical = %p, virtual = %p, offset = %ld, phyadr = %p, mapadr = %p, size = %ld, area = 0x%08lx\n", diff --git a/src/add-ons/kernel/drivers/audio/cmedia/cm.c b/src/add-ons/kernel/drivers/audio/cmedia/cm.c index 68f09a69ba..cf211482a6 100644 --- a/src/add-ons/kernel/drivers/audio/cmedia/cm.c +++ b/src/add-ons/kernel/drivers/audio/cmedia/cm.c @@ -96,7 +96,7 @@ PCI_IO_WR (int offset, uint8 val) /* detect presence of our hardware */ -status_t +status_t init_hardware(void) { int ix=0; @@ -132,7 +132,7 @@ init_hardware(void) io_base = area.address; } #endif - + put_module(pci_name); return err; @@ -141,11 +141,11 @@ init_hardware(void) void set_direct( cmedia_pci_dev * card, int regno, uchar value, uchar mask) { - if (mask == 0) + if (mask == 0) { return; } - if (mask != 0xff) + if (mask != 0xff) { uchar old = PCI_IO_RD(card->enhanced+regno); value = (value&mask)|(old&~mask); @@ -167,11 +167,11 @@ void set_indirect(cmedia_pci_dev * card, int regno, uchar value, uchar mask) { PCI_IO_WR(card->enhanced+0x23, regno); EIEIO(); - if (mask == 0) + if (mask == 0) { return; } - if (mask != 0xff) + if (mask != 0xff) { uchar old = PCI_IO_RD(card->enhanced+0x22); value = (value&mask)|(old&~mask); @@ -254,7 +254,7 @@ set_default_registers( 0x1a, 0x00, 0x20, /* SPD32SEL disable */ 0x1a, 0x00, 0x10, /* SPDFLOOPI disable */ - + 0x1b, 0x04, 0x04, /* dual channel mode enable */ 0x1a, 0x00, 0x80, /* Double DAC structure disable */ @@ -352,7 +352,7 @@ find_low_memory( ddprintf(("cmedia_pci: no memory map\n")); goto allocate; } - if ((uint32)where.address & 0xff000000) { + if ((where.address & ~(phys_addr_t)0xffffff) != 0) { ddprintf(("cmedia_pci: bad physical address\n")); goto allocate; } @@ -360,7 +360,8 @@ find_low_memory( ddprintf(("cmedia_pci: lock not contiguous\n")); goto allocate; } -dprintf("cmedia_pci: physical %p logical %p\n", where.address, ainfo.address); +dprintf("cmedia_pci: physical %#" B_PRIxPHYSADDR " logical %p\n", +where.address, ainfo.address); goto a_o_k; } @@ -371,9 +372,9 @@ allocate: } ddprintf(("cmedia_pci: allocating new low area\n")); - curarea = create_area(name, &addr, B_ANY_KERNEL_ADDRESS, + curarea = create_area(name, &addr, B_ANY_KERNEL_ADDRESS, trysize, B_LOMEM, B_READ_AREA | B_WRITE_AREA); - ddprintf(("cmedia_pci: create_area(%lx) returned %lx logical %p\n", + ddprintf(("cmedia_pci: create_area(%lx) returned %lx logical %p\n", trysize, curarea, addr)); if (curarea < 0) { goto oops; @@ -384,12 +385,12 @@ allocate: goto oops; } ddprintf(("cmedia_pci: physical %p\n", where.address)); - if ((uint32)where.address & 0xff000000) { + if ((where.address & ~(phys_addr_t)0xffffff) != 0) { delete_area(curarea); curarea = B_ERROR; goto oops; } - if ((((uint32)where.address)+low_size) & 0xff000000) { + if (((where.address + low_size) & ~(phys_addr_t)0xffffff) != 0) { delete_area(curarea); curarea = B_ERROR; goto oops; @@ -408,7 +409,7 @@ a_o_k: ddprintf(("cmedia_pci: successfully found or created low area!\n")); card->low_size = low_size; card->low_mem = addr; - card->low_phys = (vuchar *)where.address; + card->low_phys = (vuchar *)(addr_t)where.address; card->map_low = curarea; return B_OK; } @@ -461,7 +462,7 @@ setup_cmedia_pci( dprintf("cmedia pci: can't setup DMA\n"); goto bail6; } - + set_default_registers(card); //release_spinlock(&card->hardware); @@ -470,7 +471,7 @@ setup_cmedia_pci( return B_OK; bail6: - // deallocate low memory + // deallocate low memory bail5: (*gameport->delete_device)(card->joy.driver); bail4: @@ -495,12 +496,12 @@ debug_cmedia( dprintf("cmedia_pci: dude, you gotta watch your syntax!\n"); return -1; } - dprintf("%s: enhanced registers at 0x%x\n", cards[ix].name, + dprintf("%s: enhanced registers at 0x%x\n", cards[ix].name, cards[ix].enhanced); - dprintf("%s: open %ld dma_a at 0x%x dma_c 0x%x\n", cards[ix].pcm.name, + dprintf("%s: open %ld dma_a at 0x%x dma_c 0x%x\n", cards[ix].pcm.name, cards[ix].pcm.open_count, cards[ix].pcm.dma_a, cards[ix].pcm.dma_c); if (cards[ix].pcm.open_count) { - dprintf(" dma_a: 0x%lx+0x%lx dma_c: 0x%lx+0x%lx\n", + dprintf(" dma_a: 0x%lx+0x%lx dma_c: 0x%lx+0x%lx\n", PCI_IO_RD_32((int)cards[ix].pcm.dma_a), PCI_IO_RD_32((int)cards[ix].pcm.dma_a+4), PCI_IO_RD_32((int)cards[ix].pcm.dma_c), PCI_IO_RD_32((int)cards[ix].pcm.dma_c+4)); } @@ -741,12 +742,12 @@ cmedia_pci_interrupt( ** But not bother setting the midi interrupt bit in the ISR. ** Thanks a lot, S3. */ - if(handled == B_UNHANDLED_INTERRUPT){ + if(handled == B_UNHANDLED_INTERRUPT){ if (midi_interrupt(card)) { handled = B_INVOKE_SCHEDULER; } } - + /* KTRACE(); / * */ release_spinlock(&card->hardware); restore_interrupts(cp); diff --git a/src/add-ons/kernel/drivers/audio/echo/util.c b/src/add-ons/kernel/drivers/audio/echo/util.c index 43624031bd..a9216b568a 100644 --- a/src/add-ons/kernel/drivers/audio/echo/util.c +++ b/src/add-ons/kernel/drivers/audio/echo/util.c @@ -66,6 +66,7 @@ round_to_pagesize(uint32 size) area_id alloc_mem(void **phy, void **log, size_t size, const char *name) { +// TODO: phy should be phys_addr_t*! physical_entry pe; void * logadr; area_id area; @@ -90,7 +91,7 @@ alloc_mem(void **phy, void **log, size_t size, const char *name) if (log) *log = logadr; if (phy) - *phy = pe.address; + *phy = (void*)(addr_t)pe.address; LOG(("area = %d, size = %d, log = %#08X, phy = %#08X\n", area, size, logadr, pe.address)); return area; @@ -110,7 +111,8 @@ map_mem(void **log, void *phy, size_t size, const char *name) offset = (uint32)phy & (B_PAGE_SIZE - 1); phyadr = (void*)((uint32)phy - offset); size = round_to_pagesize(size + offset); - area = map_physical_memory(name, phyadr, size, B_ANY_KERNEL_ADDRESS, 0, &mapadr); + area = map_physical_memory(name, (addr_t)phyadr, size, B_ANY_KERNEL_ADDRESS, + 0, &mapadr); *log = (void*) ((uint32)mapadr + offset); LOG(("physical = %p, logical = %p, offset = %#x, phyadr = %p, mapadr = %p, size = %#x, area = %#x\n", diff --git a/src/add-ons/kernel/drivers/audio/emuxki/util.c b/src/add-ons/kernel/drivers/audio/emuxki/util.c index d0bd3c6af7..86369c4645 100644 --- a/src/add-ons/kernel/drivers/audio/emuxki/util.c +++ b/src/add-ons/kernel/drivers/audio/emuxki/util.c @@ -66,6 +66,7 @@ round_to_pagesize(uint32 size) area_id alloc_mem(void **phy, void **log, size_t size, const char *name) { +// TODO: phy should be phys_addr_t*! physical_entry pe; void * logadr; area_id areaid; @@ -90,7 +91,7 @@ alloc_mem(void **phy, void **log, size_t size, const char *name) if (log) *log = logadr; if (phy) - *phy = pe.address; + *phy = (void*)(addr_t)pe.address; LOG(("area = %d, size = %d, log = %#08X, phy = %#08X\n",areaid,size,logadr,pe.address)); return areaid; } diff --git a/src/add-ons/kernel/drivers/audio/hda/driver.h b/src/add-ons/kernel/drivers/audio/hda/driver.h index 699cc4d18d..56f6da4531 100644 --- a/src/add-ons/kernel/drivers/audio/hda/driver.h +++ b/src/add-ons/kernel/drivers/audio/hda/driver.h @@ -149,7 +149,7 @@ struct hda_stream { uint32 sample_size; uint8* buffers[STREAM_MAX_BUFFERS]; /* Virtual addresses for buffer */ - uint32 physical_buffers[STREAM_MAX_BUFFERS]; + phys_addr_t physical_buffers[STREAM_MAX_BUFFERS]; /* Physical addresses for buffer */ volatile bigtime_t real_time; diff --git a/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp b/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp index 4cde5729d4..7878007eeb 100644 --- a/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp +++ b/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp @@ -214,7 +214,7 @@ hda_interrupt_handler(hda_controller* controller) codec->unsol_responses[codec->unsol_response_write++] = response; codec->unsol_response_write %= MAX_CODEC_UNSOL_RESPONSES; - release_sem_etc(codec->unsol_response_sem, 1, + release_sem_etc(codec->unsol_response_sem, 1, B_DO_NOT_RESCHEDULE); handled = B_INVOKE_SCHEDULER; continue; @@ -411,14 +411,17 @@ init_corb_rirb_pos(hda_controller* controller) /* Program CORB/RIRB for these locations */ controller->Write32(HDAC_CORB_BASE_LOWER, (uint32)pe.address); - controller->Write32(HDAC_CORB_BASE_UPPER, 0); + controller->Write32(HDAC_CORB_BASE_UPPER, + (uint32)((uint64)pe.address >> 32)); controller->Write32(HDAC_RIRB_BASE_LOWER, (uint32)pe.address + rirbOffset); - controller->Write32(HDAC_RIRB_BASE_UPPER, 0); + controller->Write32(HDAC_RIRB_BASE_UPPER, + (uint32)(((uint64)pe.address + rirbOffset) >> 32)); /* Program DMA position update */ controller->Write32(HDAC_DMA_POSITION_BASE_LOWER, (uint32)pe.address + posOffset); - controller->Write32(HDAC_DMA_POSITION_BASE_UPPER, 0); + controller->Write32(HDAC_DMA_POSITION_BASE_UPPER, + (uint32)(((uint64)pe.address + posOffset) >> 32)); controller->stream_positions = (uint32*) ((uint8*)controller->corb + posOffset); @@ -567,7 +570,6 @@ status_t hda_stream_setup_buffers(hda_audio_group* audioGroup, hda_stream* stream, const char* desc) { - uint32 bufferPhysicalAddress; uint32 response[2]; physical_entry pe; bdl_entry_t* bufferDescriptors; @@ -635,7 +637,7 @@ hda_stream_setup_buffers(hda_audio_group* audioGroup, hda_stream* stream, return rc; } - bufferPhysicalAddress = (uint32)pe.address; + phys_addr_t bufferPhysicalAddress = pe.address; dprintf("%s(%s): Allocated %lu bytes for %ld buffers\n", __func__, desc, alloc, stream->num_buffers); @@ -678,8 +680,9 @@ hda_stream_setup_buffers(hda_audio_group* audioGroup, hda_stream* stream, uint32 fragments = 0; for (uint32 index = 0; index < stream->num_buffers; index++, bufferDescriptors++) { - bufferDescriptors->lower = stream->physical_buffers[index]; - bufferDescriptors->upper = 0; + bufferDescriptors->lower = (uint32)stream->physical_buffers[index]; + bufferDescriptors->upper + = (uint32)((uint64)stream->physical_buffers[index] >> 32); fragments++; bufferDescriptors->length = stream->buffer_size; bufferDescriptors->ioc = 1; @@ -780,7 +783,7 @@ hda_hw_init(hda_controller* controller) /* Map MMIO registers */ controller->regs_area = map_physical_memory("hda_hw_regs", - (void*)controller->pci_info.u.h0.base_registers[0], + controller->pci_info.u.h0.base_registers[0], controller->pci_info.u.h0.base_register_sizes[0], B_ANY_KERNEL_ADDRESS, 0, (void**)&controller->regs); if (controller->regs_area < B_OK) { diff --git a/src/add-ons/kernel/drivers/audio/ice1712/util.c b/src/add-ons/kernel/drivers/audio/ice1712/util.c index 84210ec7c9..0e56f6207e 100644 --- a/src/add-ons/kernel/drivers/audio/ice1712/util.c +++ b/src/add-ons/kernel/drivers/audio/ice1712/util.c @@ -48,6 +48,7 @@ round_to_pagesize(uint32 size) area_id alloc_mem(void **phy, void **log, size_t size, const char *name) { +// TODO: phy should be phys_addr_t*! physical_entry pe; void * logadr; area_id areaid; @@ -72,7 +73,7 @@ alloc_mem(void **phy, void **log, size_t size, const char *name) if (log) *log = logadr; if (phy) - *phy = pe.address; + *phy = (void*)(addr_t)pe.address; TRACE("area = %d, size = %#08X, log = %#08X, phy = %#08X\n", (int)areaid, (int)size, (int)logadr, (int)pe.address); return areaid; } diff --git a/src/add-ons/kernel/drivers/audio/sis7018/sis7018.c b/src/add-ons/kernel/drivers/audio/sis7018/sis7018.c index 51b3f4d6f5..edcfaacb2f 100644 --- a/src/add-ons/kernel/drivers/audio/sis7018/sis7018.c +++ b/src/add-ons/kernel/drivers/audio/sis7018/sis7018.c @@ -7,7 +7,7 @@ */ #include //sprintf #include -#include //posix file i/o - create, write, close +#include //posix file i/o - create, write, close #include #include "sis7018.h" #include "sis7018hw.h" @@ -44,8 +44,8 @@ static sem_id loglock; static void reload_sis7018_setting() { - void *settingshandle; - settingshandle = load_driver_settings(CHIPNAME); + void *settingshandle; + settingshandle = load_driver_settings(CHIPNAME); #if !DEBUG b_log = get_driver_boolean_parameter(settingshandle, "debug_output", b_log, true); #endif @@ -109,14 +109,14 @@ card_type card_types[]= {{SPA_PCI_ID}, "SiS 7018"}, }; -#ifdef DEBUG -int _assert_(char *a, int b, char *c) +#ifdef DEBUG +int _assert_(char *a, int b, char *c) { char sz[1024]; sprintf(sz, CHIPNAME":tripped assertion in %s/%d (%s)", a, b, c); - TRACE("tripped assertion in %s/%d (%s)\n", a, b, c); - kernel_debugger(sz); - return 0; + TRACE("tripped assertion in %s/%d (%s)\n", a, b, c); + kernel_debugger(sz); + return 0; } #endif @@ -159,17 +159,17 @@ static status_t setup_hardware( sis7018_dev * card) #endif //DO_MIDI make_device_names(card); - - command_reg = (*pci->read_pci_config)(card->info.bus, card->info.device, card->info.function, - PCI_command, 2); + + command_reg = (*pci->read_pci_config)(card->info.bus, card->info.device, card->info.function, + PCI_command, 2); // TRACE("PCI command config was: %lx\n", command_reg); - command_reg |= PCI_command_io | PCI_command_memory | PCI_command_master; + command_reg |= PCI_command_io | PCI_command_memory | PCI_command_master; (*pci->write_pci_config)(card->info.bus, card->info.device, card->info.function, - PCI_command, 2, command_reg); + PCI_command, 2, command_reg); // TRACE("PCI command config set to: %lx\n", command_reg); - + if(use_io_regs) - { + { card->io_base = card->info.u.h0.base_registers[0]; TRACE("%s base at %x\n", card->name, card->io_base); } @@ -177,9 +177,9 @@ static status_t setup_hardware( sis7018_dev * card) { TRACE("%s memory %lx length %lx\n", card->name, card->info.u.h0.base_registers[1], card->info.u.h0.base_register_sizes[1]); card->regs_area = map_physical_memory("Regs sis7018", - (void *)card->info.u.h0.base_registers[1], - card->info.u.h0.base_register_sizes[1], - B_ANY_KERNEL_ADDRESS, + card->info.u.h0.base_registers[1], + card->info.u.h0.base_register_sizes[1], + B_ANY_KERNEL_ADDRESS, B_READ_AREA + B_WRITE_AREA, &card->regs_mem_base); @@ -189,7 +189,7 @@ static status_t setup_hardware( sis7018_dev * card) err = hw_initialize(card); return err; -#if DO_MIDI +#if DO_MIDI bail3: #endif //DO_MIDI delete_sem(card->pcm.init_sem); @@ -200,18 +200,18 @@ bail: #if DEBUG static int debug_sis7018(int argc, char * argv[]) { - int err = (argc < 2 || argc > 3); + int err = (argc < 2 || argc > 3); int card_id = 0; - + if(!err) { if(argc == 3) card_id = parse_expression(argv[2]); - + if(card_id < 0 || card_id > num_cards-1) { - kprintf("ERROR: Wrong card_id: %d\n", card_id); - kprintf("\n"); + kprintf("ERROR: Wrong card_id: %d\n", card_id); + kprintf("\n"); err = 1; } else @@ -227,26 +227,26 @@ static int debug_sis7018(int argc, char * argv[]) default: kprintf("ERROR: Wrong command: %s\n",argv[1]); kprintf("\n"); - err=1; + err=1; break; } } } - if (err) - { - kprintf("Syntax: "CHIPNAME" < command > [card id]\n"); - kprintf(" - where commands is:\n"); - kprintf(" d - dump device info\n"); - kprintf(" i - dump pci_info\n"); - kprintf(" p - dump pcm info\n"); - kprintf(" m - dump midi info\n"); - kprintf(" c - dump playback channel info\n"); - kprintf(" a - dump AC'97 registers info\n"); - kprintf(" - and card id is zero-based id of card to be investigated\n"); + if (err) + { + kprintf("Syntax: "CHIPNAME" < command > [card id]\n"); + kprintf(" - where commands is:\n"); + kprintf(" d - dump device info\n"); + kprintf(" i - dump pci_info\n"); + kprintf(" p - dump pcm info\n"); + kprintf(" m - dump midi info\n"); + kprintf(" c - dump playback channel info\n"); + kprintf(" a - dump AC'97 registers info\n"); + kprintf(" - and card id is zero-based id of card to be investigated\n"); kprintf(" default card id is 0\n"); - kprintf(" current cards count is %ld\n", num_cards); - kprintf("\n"); + kprintf(" current cards count is %ld\n", num_cards); + kprintf("\n"); } return 0; @@ -265,7 +265,7 @@ status_t init_hardware (void) status_t err = ENODEV; TRACE("init_hardware()\n"); - + if (get_module(B_PCI_MODULE_NAME, (module_info **)&pci)) return ENOSYS; @@ -279,7 +279,7 @@ status_t init_hardware (void) } ix++; } - + put_module(B_PCI_MODULE_NAME); return err; } @@ -294,7 +294,7 @@ init_driver(void) reload_sis7018_setting(); create_log(); - + TRACE("\n>>> init_driver()\n"); if (get_module(B_PCI_MODULE_NAME, (module_info **) &pci)) @@ -321,7 +321,7 @@ init_driver(void) TRACE_ALWAYS("Too many cards installed! Only %d will be used.\n", NUM_CARDS); break; } - + memset(&cards[num_cards], 0, sizeof(sis7018_dev)); cards[num_cards].info = info; cards[num_cards].type = &card_types[jx]; @@ -331,7 +331,7 @@ init_driver(void) } else num_cards++; - + TRACE_ALWAYS("%s found.\n", card_types[jx].chip_name, card_types[jx].ids.ids.vendor_id, @@ -339,10 +339,10 @@ init_driver(void) } ix++; } - + if (!num_cards) { -#if DO_MIDI +#if DO_MIDI put_module(B_MPU_401_MODULE_NAME); #endif //DO_MIDI put_module(B_PCI_MODULE_NAME); @@ -377,7 +377,7 @@ void uninit_driver (void) TRACE("<<< uninit_driver()\n\n"); -#if DEBUG +#if DEBUG remove_debugger_command(CHIPNAME, debug_sis7018); #endif @@ -389,7 +389,7 @@ void uninit_driver (void) memset(&cards, 0, sizeof(cards)); #if DO_MIDI put_module(B_MPU_401_MODULE_NAME); -#endif // DO_MIDI +#endif // DO_MIDI put_module(B_PCI_MODULE_NAME); } @@ -402,7 +402,7 @@ const char** publish_devices() for (ix=0; names[ix]; ix++) TRACE("publish %s\n", names[ix]); - + return (const char **)names; } @@ -427,14 +427,14 @@ device_hooks* find_device(const char* name) { return &pcm_hooks; } - + if (!strcmp(cards[ix].pcm.oldname, name)) { return &pcm_hooks; } #endif //DO_PCM } - + TRACE("find_device(%s) failed\n", name); return NULL; } diff --git a/src/add-ons/kernel/drivers/audio/sis7018/sis7018hw.c b/src/add-ons/kernel/drivers/audio/sis7018/sis7018hw.c index 220e96e00d..243b655acb 100644 --- a/src/add-ons/kernel/drivers/audio/sis7018/sis7018hw.c +++ b/src/add-ons/kernel/drivers/audio/sis7018/sis7018hw.c @@ -81,7 +81,7 @@ static void hw_enaint(sis7018_ch *ch, int enable) int32 i, reg; int bank, chan; cpu_status cp; - + cp = disable_interrupts(); acquire_spinlock(&dev->hardware); @@ -172,10 +172,10 @@ static void hw_wrch(sis7018_ch *ch) cr[2]=((ch->delta>>8)<<24) | (ch->eso); cr[3]|=(ch->alpha<<20) | (ch->fms<<16) | (ch->fmc<<14); break; - } + } cp = disable_interrupts(); acquire_spinlock(&dev->hardware); - + hw_selch(ch); for (i=0; icard; int32 cr[5], i; cpu_status cp; - + cp = disable_interrupts(); acquire_spinlock(&dev->hardware); @@ -209,13 +209,13 @@ void hw_rdch(sis7018_ch *ch) ch->vol= (cr[4] & 0x00ff0000) >> 16; ch->ctrl= (cr[4] & 0x0000f000) >> 12; ch->ec= (cr[4] & 0x00000fff); - + switch(ch->card->type->ids.chip_id) { case SPA_PCI_ID: case ALI_PCI_ID: - case TDX_PCI_ID: - case xDX_PCI_ID: + case TDX_PCI_ID: + case xDX_PCI_ID: ch->cso= (cr[0] & 0xffff0000) >> 16; ch->alpha= (cr[0] & 0x0000fff0) >> 4; ch->fms= (cr[0] & 0x0000000f); @@ -238,11 +238,11 @@ status_t hw_pchannel_init(pcm_dev *dev) sis7018_ch *ch = &dev->play_channel; ch->index = PCHANNEL_ID; hw_pchannel_setblocksize(dev, 8192); - ch->ctrl = 0x0f; // 16-bit stereo signed + loop mode enabled + ch->ctrl = 0x0f; // 16-bit stereo signed + loop mode enabled ch->delta = (48000 << 12 ) / 48000; ch->card = dev->card; ch->areaid=-1; - + ch->wr_lock = 0; ch->write_waiting = 0; sprintf(name_buf, "WS:%s", dev->name); @@ -269,7 +269,7 @@ void hw_pchannel_free(pcm_dev *dev) if(ch->areaid >= 0){ delete_area(ch->areaid); ch->areaid = -1; - + delete_sem(ch->write_sem); delete_sem(ch->wr_entry); ch->write_sem = -1; @@ -283,18 +283,18 @@ void hw_start(pcm_dev *dev) if(ch->active) return; - + /* start out with a clean slate */ TRACE("hw_start()\n"); /* if (port->config.format == 0x11) { - memset((void*)port->card->low_mem, 0x80, port->config.play_buf_size + + memset((void*)port->card->low_mem, 0x80, port->config.play_buf_size + port->config.rec_buf_size); } else {*/ - + // TODO? - // memset((void *)port->card->low_mem, 0, port->config.play_buf_size + + // memset((void *)port->card->low_mem, 0, port->config.play_buf_size + // port->config.rec_buf_size); //} @@ -302,7 +302,7 @@ void hw_start(pcm_dev *dev) ch->wr_silence = ch->mem_size; ch->was_written = 0; ch->wr_total = 0; - + ch->fmc = 3; ch->fms = 0; ch->ec = 0; @@ -327,7 +327,7 @@ void hw_stop(pcm_dev *dev) sis7018_ch *ch = &dev->play_channel; if(!ch->active) return; - + hw_stopch(ch); ch->active = 0; } @@ -339,7 +339,7 @@ static int32 hw_interrupt_handler(void * data) sis7018_ch *ch; int32 handled = B_UNHANDLED_INTERRUPT; intrs++; - + acquire_spinlock(&card->hardware); intsrc = hw_read(card, TR_REG_MISCINT, 4); @@ -396,10 +396,10 @@ void hw_decrement_interrupt_handler(sis7018_dev * card) status_t hw_initialize(sis7018_dev *card) { status_t err = B_OK; - + cpu_status cp = disable_interrupts(); acquire_spinlock(&card->hardware); - + switch (card->type->ids.chip_id){ case SPA_PCI_ID: hw_write(card, SPA_REG_GPIO, 0, 4); @@ -413,7 +413,7 @@ status_t hw_initialize(sis7018_dev *card) hw_write(card, TNX_REG_CODECST, TNX_CDC_ON, 4); break; } - + hw_write(card, TR_REG_CIR, TR_CIR_MIDENA | TR_CIR_ADDRENA, 4); release_spinlock(&card->hardware); @@ -490,13 +490,13 @@ static status_t hw_find_memory(sis7018_ch *ch, size_t blocksize) delete_area(curarea); curarea = -1; } - + TRACE("allocating new area\n"); - curarea = create_area(name, &addr, B_ANY_KERNEL_ADDRESS, + curarea = create_area(name, &addr, B_ANY_KERNEL_ADDRESS, trysize, B_LOMEM, B_READ_AREA | B_WRITE_AREA); TRACE("create_area(%lx) returned %lx logical %p\n", trysize, curarea, addr); - + if (curarea < 0) goto oops; @@ -505,13 +505,13 @@ static status_t hw_find_memory(sis7018_ch *ch, size_t blocksize) curarea = B_ERROR; goto oops; } - TRACE("physical %p\n", where.address); - if ((uint32)where.address & 0xff000000){ + TRACE("physical %#" B_PRIxPHYSADDR "\n", where.address); + if ((where.address & ~(phys_addr_t)0xffffff) != 0){ delete_area(curarea); curarea = B_ERROR; goto oops; } - if ((((uint32)where.address)+low_size) & 0xff000000){ + if (((where.address + low_size) & ~(phys_addr_t)0xffffff) != 0){ delete_area(curarea); curarea = B_ERROR; goto oops; @@ -530,19 +530,19 @@ oops: ch->mem_size = low_size; ch->mem_ptr = addr; - ch->mem_phys = (vuchar *)where.address; - + ch->mem_phys = (vuchar *)(adrr_t)where.address; + ch->wr_1 = ch->mem_ptr; ch->wr_2 = ch->wr_1+ch->mem_size/2; ch->wr_size = ch->mem_size/2; - + ch->areaid = curarea; - + if(ch->active){ hw_stop(&ch->card->pcm); - hw_start(&ch->card->pcm); + hw_start(&ch->card->pcm); } - + return B_OK; } diff --git a/src/add-ons/kernel/drivers/dvb/cx23882/util.c b/src/add-ons/kernel/drivers/dvb/cx23882/util.c index c96595c33a..94407e473e 100644 --- a/src/add-ons/kernel/drivers/dvb/cx23882/util.c +++ b/src/add-ons/kernel/drivers/dvb/cx23882/util.c @@ -51,8 +51,8 @@ map_mem(void **virt, void *phy, size_t size, uint32 protection, offset = (uint32)phy & (B_PAGE_SIZE - 1); phyadr = (char *)phy - offset; size = ROUNDUP(size + offset, B_PAGE_SIZE); - area = map_physical_memory(name, phyadr, size, B_ANY_KERNEL_BLOCK_ADDRESS, - protection, &mapadr); + area = map_physical_memory(name, (addr_t)phyadr, size, + B_ANY_KERNEL_BLOCK_ADDRESS, protection, &mapadr); if (area < B_OK) { TRACE("mapping '%s' failed, error 0x%lx (%s)\n", name, area, strerror(area)); return area; @@ -71,6 +71,7 @@ area_id alloc_mem(void **virt, void **phy, size_t size, uint32 protection, const char *name) { +// TODO: phy should be phys_addr_t*! physical_entry pe; void * virtadr; area_id areaid; @@ -94,7 +95,7 @@ alloc_mem(void **virt, void **phy, size_t size, uint32 protection, if (virt) *virt = virtadr; if (phy) - *phy = pe.address; + *phy = (void*)(addr_t)pe.address; TRACE("area = %ld, size = %ld, virt = %p, phy = %p\n", areaid, size, virtadr, pe.address); return areaid; } diff --git a/src/add-ons/kernel/drivers/graphics/ati/driver.cpp b/src/add-ons/kernel/drivers/graphics/ati/driver.cpp index af50e2f30f..28b2768fb7 100644 --- a/src/add-ons/kernel/drivers/graphics/ati/driver.cpp +++ b/src/add-ons/kernel/drivers/graphics/ati/driver.cpp @@ -396,7 +396,7 @@ Mach64_GetBiosParameters(DeviceInfo& di, uint8& clockType) uint8* romAddr; area_id romArea = map_physical_memory("ATI Mach64 ROM", - (void*)0x000c0000, + 0x000c0000, M64_BIOS_SIZE, B_ANY_KERNEL_ADDRESS, B_READ_AREA, @@ -475,7 +475,7 @@ Rage128_GetBiosParameters(DeviceInfo& di) uint8* romAddr; area_id romArea = map_physical_memory("ATI Rage128 ROM", - (void*)0x000c0000, + 0x000c0000, R128_BIOS_SIZE, B_ANY_KERNEL_ADDRESS, B_READ_AREA, @@ -573,7 +573,7 @@ MapDevice(DeviceInfo& di) si.videoMemArea = map_physical_memory( frameBufferAreaName, - (void*)videoRamAddr, + videoRamAddr, videoRamSize, B_ANY_KERNEL_BLOCK_ADDRESS | B_MTR_WC, B_READ_AREA + B_WRITE_AREA, @@ -583,7 +583,7 @@ MapDevice(DeviceInfo& di) // Try to map this time without write combining. si.videoMemArea = map_physical_memory( frameBufferAreaName, - (void*)videoRamAddr, + videoRamAddr, videoRamSize, B_ANY_KERNEL_BLOCK_ADDRESS, B_READ_AREA + B_WRITE_AREA, @@ -623,7 +623,7 @@ MapDevice(DeviceInfo& di) } si.regsArea = map_physical_memory("ATI mmio registers", - (void*)regsBase, + regsBase, regAreaSize, B_ANY_KERNEL_ADDRESS, 0, // neither read nor write, to hide it from user space apps diff --git a/src/add-ons/kernel/drivers/graphics/et6x00/driver.c b/src/add-ons/kernel/drivers/graphics/et6x00/driver.c index bf956080d7..594134ddc2 100644 --- a/src/add-ons/kernel/drivers/graphics/et6x00/driver.c +++ b/src/add-ons/kernel/drivers/graphics/et6x00/driver.c @@ -395,7 +395,7 @@ pci_info *pcii = &(di->pcii); * (B_MTR_WC) and the memory mapped registers with B_MTR_UC. */ si->memoryArea = map_physical_memory(buffer, - (void *)di->pcii.u.h0.base_registers[0], + di->pcii.u.h0.base_registers[0], di->pcii.u.h0.base_register_sizes[0], B_ANY_KERNEL_BLOCK_ADDRESS | B_MTR_UC, B_READ_AREA + B_WRITE_AREA, diff --git a/src/add-ons/kernel/drivers/graphics/matrox/driver.c b/src/add-ons/kernel/drivers/graphics/matrox/driver.c index ab3270f4e4..8a14fe92a1 100644 --- a/src/add-ons/kernel/drivers/graphics/matrox/driver.c +++ b/src/add-ons/kernel/drivers/graphics/matrox/driver.c @@ -360,7 +360,7 @@ static status_t map_device(device_info *di) /* get a virtual memory address for the registers*/ si->regs_area = map_physical_memory( buffer, - (void *) di->pcii.u.h0.base_registers[registers], + di->pcii.u.h0.base_registers[registers], di->pcii.u.h0.base_register_sizes[registers], B_ANY_KERNEL_ADDRESS, B_USER_CLONEABLE_AREA | (si->use_clone_bugfix ? B_READ_AREA|B_WRITE_AREA : 0), @@ -382,7 +382,7 @@ static status_t map_device(device_info *di) rom_area = map_physical_memory( buffer, - (void *)di->pcii.u.h0.base_registers[frame_buffer], + di->pcii.u.h0.base_registers[frame_buffer], 32768, B_ANY_KERNEL_ADDRESS, B_READ_AREA, @@ -451,7 +451,7 @@ static status_t map_device(device_info *di) /* map the pseudo dma into vmem (write-only)*/ si->pseudo_dma_area = map_physical_memory( buffer, - (void *) di->pcii.u.h0.base_registers[pseudo_dma], + di->pcii.u.h0.base_registers[pseudo_dma], di->pcii.u.h0.base_register_sizes[pseudo_dma], B_ANY_KERNEL_ADDRESS, B_WRITE_AREA, @@ -500,7 +500,7 @@ static status_t map_device(device_info *di) /* map the framebuffer into vmem, using Write Combining*/ si->fb_area = map_physical_memory( buffer, - (void *) di->pcii.u.h0.base_registers[frame_buffer], + di->pcii.u.h0.base_registers[frame_buffer], di->pcii.u.h0.base_register_sizes[frame_buffer], B_ANY_KERNEL_BLOCK_ADDRESS | B_MTR_WC, B_READ_AREA | B_WRITE_AREA, @@ -510,7 +510,7 @@ static status_t map_device(device_info *di) if (si->fb_area < 0) { si->fb_area = map_physical_memory( buffer, - (void *) di->pcii.u.h0.base_registers[frame_buffer], + di->pcii.u.h0.base_registers[frame_buffer], di->pcii.u.h0.base_register_sizes[frame_buffer], B_ANY_KERNEL_BLOCK_ADDRESS, B_READ_AREA | B_WRITE_AREA, @@ -603,7 +603,7 @@ static void copy_rom(device_info *di) rom_area = map_physical_memory( buffer, - (void *)di->pcii.u.h0.base_registers[frame_buffer], + di->pcii.u.h0.base_registers[frame_buffer], 32768, B_ANY_KERNEL_ADDRESS, B_READ_AREA, diff --git a/src/add-ons/kernel/drivers/graphics/neomagic/driver.c b/src/add-ons/kernel/drivers/graphics/neomagic/driver.c index 31c313bb7d..fad85ad153 100644 --- a/src/add-ons/kernel/drivers/graphics/neomagic/driver.c +++ b/src/add-ons/kernel/drivers/graphics/neomagic/driver.c @@ -113,7 +113,7 @@ static uint16 nm_device_list[] = { 0x0016, /* MagicMedia 256XL+ (NM2380) */ 0 }; - + static struct { uint16 vendor; uint16 *devices; @@ -122,7 +122,7 @@ static struct { {0x0000, NULL} }; -static settings current_settings = { // see comments in nm.settings +static settings current_settings = { // see comments in nm.settings // for driver DRIVER_PREFIX ".accelerant", false, // dumprom @@ -137,7 +137,7 @@ static void dumprom (void *rom, uint32 size) { int fd; uint32 cnt; - + fd = open ("/boot/home/" DRIVER_PREFIX ".rom", O_WRONLY | O_CREAT, 0666); if (fd < 0) return; @@ -182,7 +182,7 @@ init_hardware(void) { long pci_index = 0; pci_info pcii; bool found_one = FALSE; - + /* choke if we can't find the PCI bus */ if (get_module(B_PCI_MODULE_NAME, (module_info **)&pci_bus) != B_OK) return B_ERROR; @@ -197,7 +197,7 @@ init_hardware(void) { /* while there are more pci devices */ while ((*pci_bus->get_nth_pci_info)(pci_index, &pcii) == B_NO_ERROR) { int vendor = 0; - + /* if we match a supported vendor */ while (SupportedDevices[vendor].vendor) { if (SupportedDevices[vendor].vendor == pcii.vendor_id) { @@ -206,7 +206,7 @@ init_hardware(void) { while (*devices) { /* if we match a supported device */ if (*devices == pcii.device_id ) { - + found_one = TRUE; goto done; } @@ -238,7 +238,7 @@ init_driver(void) { const char *item; char *end; uint32 value; - + // for driver item = get_driver_parameter (settings_handle, "accelerant", "", ""); if ((strlen (item) > 0) && (strlen (item) < sizeof (current_settings.accelerant) - 1)) { @@ -374,7 +374,7 @@ static status_t map_device(device_info *di) /* get a virtual memory address for the registers*/ si->regs_area = map_physical_memory( buffer, - (void *) di->pcii.u.h0.base_registers[registers], + di->pcii.u.h0.base_registers[registers], di->pcii.u.h0.base_register_sizes[registers], B_ANY_KERNEL_ADDRESS, (si->use_clone_bugfix ? B_READ_AREA|B_WRITE_AREA : 0), @@ -391,7 +391,7 @@ static status_t map_device(device_info *di) si->regs2_area = map_physical_memory( buffer, - (void *) di->pcii.u.h0.base_registers[registers2], + di->pcii.u.h0.base_registers[registers2], di->pcii.u.h0.base_register_sizes[registers2], B_ANY_KERNEL_ADDRESS, (si->use_clone_bugfix ? B_READ_AREA|B_WRITE_AREA : 0), @@ -424,7 +424,7 @@ static status_t map_device(device_info *di) rom_area = map_physical_memory( buffer, - (void *)di->pcii.u.h0.rom_base_pci, + di->pcii.u.h0.rom_base_pci, di->pcii.u.h0.rom_size, B_ANY_KERNEL_ADDRESS, B_READ_AREA, @@ -447,7 +447,7 @@ static status_t map_device(device_info *di) /* ROM was not assigned an adress, fetch it from ISA legacy memory map! */ rom_area = map_physical_memory( buffer, - (void *)0x000c0000, + 0x000c0000, 65536, B_ANY_KERNEL_ADDRESS, B_READ_AREA, @@ -490,7 +490,7 @@ static status_t map_device(device_info *di) /* map the framebuffer into vmem, using Write Combining*/ si->fb_area = map_physical_memory( buffer, - (void *) di->pcii.u.h0.base_registers[frame_buffer], + di->pcii.u.h0.base_registers[frame_buffer], di->pcii.u.h0.base_register_sizes[frame_buffer], B_ANY_KERNEL_BLOCK_ADDRESS | B_MTR_WC, B_READ_AREA + B_WRITE_AREA, @@ -500,13 +500,13 @@ static status_t map_device(device_info *di) if (si->fb_area < 0) { si->fb_area = map_physical_memory( buffer, - (void *) di->pcii.u.h0.base_registers[frame_buffer], + di->pcii.u.h0.base_registers[frame_buffer], di->pcii.u.h0.base_register_sizes[frame_buffer], B_ANY_KERNEL_BLOCK_ADDRESS, B_READ_AREA + B_WRITE_AREA, &(si->framebuffer)); } - + /* if there was an error, delete our other areas and pass on error*/ if (si->fb_area < 0) { @@ -543,7 +543,7 @@ static status_t map_device(device_info *di) si->framebuffer_pci = (void *) di->pcii.u.h0.base_registers_pci[frame_buffer]; // remember settings for use here and in accelerant - si->settings = current_settings; + si->settings = current_settings; /* in any case, return the result */ return si->fb_area; @@ -575,7 +575,7 @@ static void probe_devices(void) { /* while there are more pci devices */ while ((count < MAX_DEVICES) && ((*pci_bus->get_nth_pci_info)(pci_index, &(di->pcii)) == B_NO_ERROR)) { int vendor = 0; - + /* if we match a supported vendor */ while (SupportedDevices[vendor].vendor) { if (SupportedDevices[vendor].vendor == di->pcii.vendor_id) { @@ -662,7 +662,7 @@ nm_interrupt(void *data) atomic_and(flags, ~SKD_HANDLER_INSTALLED); exit0: - return handled; + return handled; } static status_t open_hook (const char* name, uint32 flags, void** cookie) { @@ -768,7 +768,7 @@ mark_as_open: /* send the cookie to the opener */ *cookie = di; - + goto done; @@ -879,7 +879,7 @@ control_hook (void* dev, uint32 msg, void *buf, size_t len) { strcpy(sig, current_settings.accelerant); result = B_OK; } break; - + /* PRIVATE ioctl from here on */ case NM_GET_PRIVATE_DATA: { nm_get_private_data *gpd = (nm_get_private_data *)buf; diff --git a/src/add-ons/kernel/drivers/graphics/nvidia/driver.c b/src/add-ons/kernel/drivers/graphics/nvidia/driver.c index 96e6add62d..06dd913d21 100644 --- a/src/add-ons/kernel/drivers/graphics/nvidia/driver.c +++ b/src/add-ons/kernel/drivers/graphics/nvidia/driver.c @@ -557,7 +557,7 @@ map_device(device_info *di) si->regs_area = map_physical_memory( buffer, /* WARNING: Nvidia needs to map regs as viewed from PCI space! */ - (void *) di->pcii.u.h0.base_registers_pci[registers], + di->pcii.u.h0.base_registers_pci[registers], di->pcii.u.h0.base_register_sizes[registers], B_ANY_KERNEL_ADDRESS, B_USER_CLONEABLE_AREA | (si->use_clone_bugfix ? B_READ_AREA|B_WRITE_AREA : 0), @@ -595,7 +595,7 @@ map_device(device_info *di) rom_area = map_physical_memory( buffer, - (void *)di->pcii.u.h0.rom_base_pci, + di->pcii.u.h0.rom_base_pci, di->pcii.u.h0.rom_size, B_ANY_KERNEL_ADDRESS, B_READ_AREA, @@ -619,7 +619,7 @@ map_device(device_info *di) if (!tmpUlong) { /* ROM was not assigned an adress, fetch it from ISA legacy memory map! */ - rom_area = map_physical_memory(buffer, (void *)0x000c0000, + rom_area = map_physical_memory(buffer, 0x000c0000, 65536, B_ANY_KERNEL_ADDRESS, B_READ_AREA, (void **)&(rom_temp)); } @@ -655,7 +655,7 @@ map_device(device_info *di) /* map the framebuffer into vmem, using Write Combining*/ si->fb_area = map_physical_memory(buffer, /* WARNING: Nvidia needs to map framebuffer as viewed from PCI space! */ - (void *) di->pcii.u.h0.base_registers_pci[frame_buffer], + di->pcii.u.h0.base_registers_pci[frame_buffer], di->pcii.u.h0.base_register_sizes[frame_buffer], B_ANY_KERNEL_BLOCK_ADDRESS | B_MTR_WC, B_READ_AREA | B_WRITE_AREA, @@ -665,7 +665,7 @@ map_device(device_info *di) if (si->fb_area < 0) { si->fb_area = map_physical_memory(buffer, /* WARNING: Nvidia needs to map framebuffer as viewed from PCI space! */ - (void *) di->pcii.u.h0.base_registers_pci[frame_buffer], + di->pcii.u.h0.base_registers_pci[frame_buffer], di->pcii.u.h0.base_register_sizes[frame_buffer], B_ANY_KERNEL_BLOCK_ADDRESS, B_READ_AREA | B_WRITE_AREA, @@ -917,17 +917,17 @@ open_hook(const char* name, uint32 flags, void** cookie) * even on older CPU's. */ get_memory_map(unaligned_dma_buffer, B_PAGE_SIZE, map, 1); si->dma_buffer_pci = (void*) - ((((uint32)(map[0].address)) + net_buf_size - 1) & ~(net_buf_size - 1)); + ((map[0].address + net_buf_size - 1) & ~(net_buf_size - 1)); /* map the net DMA command buffer into vmem, using Write Combining */ si->dma_area = map_physical_memory( - "NV aligned DMA cmd buffer", si->dma_buffer_pci, net_buf_size, + "NV aligned DMA cmd buffer", (addr_t)si->dma_buffer_pci, net_buf_size, B_ANY_KERNEL_BLOCK_ADDRESS | B_MTR_WC, B_READ_AREA | B_WRITE_AREA, &(si->dma_buffer)); /* if failed with write combining try again without */ if (si->dma_area < 0) { - si->dma_area = map_physical_memory( - "NV aligned DMA cmd buffer", si->dma_buffer_pci, net_buf_size, + si->dma_area = map_physical_memory("NV aligned DMA cmd buffer", + (addr_t)si->dma_buffer_pci, net_buf_size, B_ANY_KERNEL_BLOCK_ADDRESS, B_READ_AREA | B_WRITE_AREA, &(si->dma_buffer)); } diff --git a/src/add-ons/kernel/drivers/graphics/nvidia_gpgpu/driver.c b/src/add-ons/kernel/drivers/graphics/nvidia_gpgpu/driver.c index 42e75c987b..7d7f1c9200 100644 --- a/src/add-ons/kernel/drivers/graphics/nvidia_gpgpu/driver.c +++ b/src/add-ons/kernel/drivers/graphics/nvidia_gpgpu/driver.c @@ -321,7 +321,7 @@ map_device(device_info *di) si->regs_area = map_physical_memory( buffer, /* WARNING: Nvidia needs to map regs as viewed from PCI space! */ - (void *) di->pcii.u.h0.base_registers_pci[registers], + di->pcii.u.h0.base_registers_pci[registers], di->pcii.u.h0.base_register_sizes[registers], B_ANY_KERNEL_ADDRESS, B_USER_CLONEABLE_AREA | (si->use_clone_bugfix ? B_READ_AREA|B_WRITE_AREA : 0), @@ -359,7 +359,7 @@ map_device(device_info *di) rom_area = map_physical_memory( buffer, - (void *)di->pcii.u.h0.rom_base_pci, + di->pcii.u.h0.rom_base_pci, di->pcii.u.h0.rom_size, B_ANY_KERNEL_ADDRESS, B_READ_AREA, @@ -383,7 +383,7 @@ map_device(device_info *di) if (!tmpUlong) { /* ROM was not assigned an adress, fetch it from ISA legacy memory map! */ - rom_area = map_physical_memory(buffer, (void *)0x000c0000, + rom_area = map_physical_memory(buffer, 0x000c0000, 65536, B_ANY_KERNEL_ADDRESS, B_READ_AREA, (void **)&(rom_temp)); } @@ -419,7 +419,7 @@ map_device(device_info *di) /* map the framebuffer into vmem, using Write Combining*/ si->fb_area = map_physical_memory(buffer, /* WARNING: Nvidia needs to map framebuffer as viewed from PCI space! */ - (void *) di->pcii.u.h0.base_registers_pci[frame_buffer], + di->pcii.u.h0.base_registers_pci[frame_buffer], di->pcii.u.h0.base_register_sizes[frame_buffer], B_ANY_KERNEL_BLOCK_ADDRESS | B_MTR_WC, B_READ_AREA | B_WRITE_AREA, @@ -429,7 +429,7 @@ map_device(device_info *di) if (si->fb_area < 0) { si->fb_area = map_physical_memory(buffer, /* WARNING: Nvidia needs to map framebuffer as viewed from PCI space! */ - (void *) di->pcii.u.h0.base_registers_pci[frame_buffer], + di->pcii.u.h0.base_registers_pci[frame_buffer], di->pcii.u.h0.base_register_sizes[frame_buffer], B_ANY_KERNEL_BLOCK_ADDRESS, B_READ_AREA | B_WRITE_AREA, @@ -676,18 +676,18 @@ open_hook(const char* name, uint32 flags, void** cookie) * even on older CPU's. */ get_memory_map(unaligned_dma_buffer, B_PAGE_SIZE, map, 1); si->dma_buffer_pci = (void*) - ((((uint32)(map[0].address)) + net_buf_size - 1) & ~(net_buf_size - 1)); + ((map[0].address + net_buf_size - 1) & ~(net_buf_size - 1)); /* map the net DMA command buffer into vmem, using Write Combining */ si->dma_area = map_physical_memory( - "NV aligned DMA cmd buffer", si->dma_buffer_pci, net_buf_size, + "NV aligned DMA cmd buffer", (addr_t)si->dma_buffer_pci, net_buf_size, B_ANY_KERNEL_BLOCK_ADDRESS | B_MTR_WC, B_READ_AREA | B_WRITE_AREA, &(si->dma_buffer)); /* if failed with write combining try again without */ if (si->dma_area < 0) { si->dma_area = map_physical_memory( - "NV aligned DMA cmd buffer", si->dma_buffer_pci, net_buf_size, - B_ANY_KERNEL_BLOCK_ADDRESS, + "NV aligned DMA cmd buffer", (addr_t)si->dma_buffer_pci, + net_buf_size, B_ANY_KERNEL_BLOCK_ADDRESS, B_READ_AREA | B_WRITE_AREA, &(si->dma_buffer)); } /* if there was an error, delete our other areas and pass on error*/ diff --git a/src/add-ons/kernel/drivers/graphics/radeon/DMA.c b/src/add-ons/kernel/drivers/graphics/radeon/DMA.c index bb045dac98..6a423755ea 100644 --- a/src/add-ons/kernel/drivers/graphics/radeon/DMA.c +++ b/src/add-ons/kernel/drivers/graphics/radeon/DMA.c @@ -1,12 +1,12 @@ /* Copyright (c) 2002-04, Thomas Kurschel - + Part of Radeon accelerant - + DMA engine handling. - - Currently, VID DMA is always used and data is always copied from + + Currently, VID DMA is always used and data is always copied from graphics memory to other memory. */ @@ -26,12 +26,12 @@ status_t Radeon_InitDMA( device_info *di ) status_t res; // allocate descriptor table in graphics mem - // (docu says that is _must_ be in graphics mem) + // (docu says that is _must_ be in graphics mem) di->dma_desc_max_num = RADEON_MAX_DMA_SIZE / 4096; - - res = mem_alloc( di->memmgr[mt_local], di->dma_desc_max_num * sizeof( DMA_descriptor ), 0, + + res = mem_alloc( di->memmgr[mt_local], di->dma_desc_max_num * sizeof( DMA_descriptor ), 0, &di->dma_desc_handle, &di->dma_desc_offset ); - + if( res != B_OK ) return res; @@ -39,13 +39,13 @@ status_t Radeon_InitDMA( device_info *di ) OUTREGP( di->regs, RADEON_GEN_INT_CNTL, RADEON_VIDDMA_MASK, ~RADEON_VIDDMA_MASK ); // acknowledge possibly pending IRQ OUTREG( di->regs, RADEON_GEN_INT_STATUS, RADEON_VIDDMA_AK ); - + return B_OK; } // prepare DMA engine to copy data from graphics mem to other mem -static status_t Radeon_PrepareDMA( +static status_t Radeon_PrepareDMA( device_info *di, uint32 src, char *target, size_t size, bool lock_mem, bool contiguous ) { physical_entry map[16]; @@ -55,7 +55,7 @@ static status_t Radeon_PrepareDMA( if( lock_mem && !contiguous ) { res = lock_memory( target, size, B_DMA_IO | B_READ_DEVICE ); - + if( res != B_OK ) { SHOW_ERROR( 2, "Cannot lock memory (%s)", strerror( res )); return res; @@ -64,14 +64,14 @@ static status_t Radeon_PrepareDMA( // adjust virtual address for graphics card src += di->si->memory[mt_local].virtual_addr_start; - + cur_desc = (DMA_descriptor *)(di->si->local_mem + di->dma_desc_offset); num_desc = 0; - + // memory may be fragmented, so we create S/G list while( size > 0 ) { int i; - + if( contiguous ) { // if memory is contiguous, ask for start address only to reduce work get_memory_map( target, 1, map, 16 ); @@ -80,32 +80,32 @@ static status_t Radeon_PrepareDMA( } else { get_memory_map( target, size, map, 16 ); } - + for( i = 0; i < 16; ++i ) { - uint32 address = (uint32)map[i].address; + phys_addr_t address = map[i].address; size_t contig_size = map[i].size; - + if( contig_size == 0 ) break; - + target += contig_size; - + while( contig_size > 0 ) { size_t cur_size; - + cur_size = min( contig_size, RADEON_DMA_DESC_MAX_SIZE ); - + if( ++num_desc > (int)di->dma_desc_max_num ) { SHOW_ERROR( 2, "Overflow of DMA descriptors, %ld bytes left", size ); res = B_BAD_VALUE; goto err; } - + cur_desc->src_address = src; cur_desc->dest_address = address; cur_desc->command = cur_size; cur_desc->res = 0; - + ++cur_desc; address += cur_size; contig_size -= cur_size; @@ -114,23 +114,23 @@ static status_t Radeon_PrepareDMA( } } } - - // mark last descriptor as being last one + + // mark last descriptor as being last one (cur_desc - 1)->command |= RADEON_DMA_COMMAND_EOL; - + return B_OK; - + err: if( lock_mem && !contiguous ) unlock_memory( target, size, B_DMA_IO| B_READ_DEVICE ); - + return res; } // finish DMA // caller must ensure that DMA channel has stopped -static void Radeon_FinishDMA( +static void Radeon_FinishDMA( device_info *di, uint32 src, char *target, size_t size, bool lock_mem, bool contiguous ) { if( lock_mem && !contiguous ) @@ -144,34 +144,34 @@ static void Radeon_FinishDMA( // size - number of bytes to copy // lock_mem - true, if memory is not locked // contiguous - true, if memory is physically contiguous (implies lock_mem=false) -status_t Radeon_DMACopy( +status_t Radeon_DMACopy( device_info *di, uint32 src, char *target, size_t size, bool lock_mem, bool contiguous ) { status_t res; - + /*SHOW_FLOW( 0, "src=%ld, target=%p, size=%ld, lock_mem=%d, contiguous=%d", src, target, size, lock_mem, contiguous );*/ - + res = Radeon_PrepareDMA( di, src, target, size, lock_mem, contiguous ); if( res != B_OK ) return res; - + //SHOW_FLOW0( 0, "2" ); OUTREG( di->regs, RADEON_DMA_VID_TABLE_ADDR, di->si->memory[mt_local].virtual_addr_start + di->dma_desc_offset ); - + res = acquire_sem_etc( di->dma_sem, 1, B_RELATIVE_TIMEOUT, 1000000 ); - + // be sure that transmission is really finished while( (INREG( di->regs, RADEON_DMA_VID_STATUS ) & RADEON_DMA_STATUS_ACTIVE) != 0 ) { SHOW_FLOW0( 0, "DMA transmission still active" ); snooze( 1000 ); } - + Radeon_FinishDMA( di, src, target, size, lock_mem, contiguous ); - + //SHOW_FLOW0( 0, "3" ); - + return res; } diff --git a/src/add-ons/kernel/drivers/graphics/radeon/PCI_GART.c b/src/add-ons/kernel/drivers/graphics/radeon/PCI_GART.c index e3e7cd368c..3287dee142 100644 --- a/src/add-ons/kernel/drivers/graphics/radeon/PCI_GART.c +++ b/src/add-ons/kernel/drivers/graphics/radeon/PCI_GART.c @@ -5,7 +5,7 @@ PCI GART. - Currently, we use PCI DMA. Changing to AGP would + Currently, we use PCI DMA. Changing to AGP would only affect this file, but AGP-GART is specific to the chipset of the motherboard, and as DMA is really overkill for 2D, I cannot bother writing a dozen @@ -31,25 +31,25 @@ static status_t createGARTBuffer(GART_info *gart, size_t size) { SHOW_FLOW0( 3, "" ); - + gart->buffer.size = size = (size + B_PAGE_SIZE - 1) & ~(B_PAGE_SIZE - 1); // if this buffer is used for PCI BM, cache snooping // takes care of syncing memory accesses; if used for AGP, // we'll have to access via AGP aperture (and mark aperture - // as write-combined) as cache consistency doesn't need to + // as write-combined) as cache consistency doesn't need to // be guaranteed - + // the specs say that some chipsets do kind of lazy flushing // so the graphics card may read obsolete data; up to now // we use PCI only where this shouldn't happen by design; // if we change to AGP we may tweak the pre-charge time of - // the write buffer pointer - + // the write buffer pointer + // as some variables in accelerant point directly into // the DMA buffer, we have to grant access for all apps - gart->buffer.area = create_area("Radeon PCI GART buffer", - &gart->buffer.ptr, B_ANY_KERNEL_ADDRESS, + gart->buffer.area = create_area("Radeon PCI GART buffer", + &gart->buffer.ptr, B_ANY_KERNEL_ADDRESS, size, B_FULL_LOCK, #ifdef HAIKU_TARGET_PLATFORM_HAIKU // TODO: really user read/write? @@ -63,9 +63,9 @@ createGARTBuffer(GART_info *gart, size_t size) strerror(gart->buffer.area)); return gart->buffer.area; } - + gart->buffer.unaligned_area = -1; - + memset( gart->buffer.ptr, 0, size ); return B_OK; @@ -77,42 +77,42 @@ static status_t createGARTBuffer( GART_info *gart, size_t size ) { physical_entry map[1]; void *unaligned_addr, *aligned_phys; - + SHOW_FLOW0( 3, "" ); - + gart->buffer.size = size = (size + B_PAGE_SIZE - 1) & ~(B_PAGE_SIZE - 1); - + // we allocate an contiguous area having twice the size // to be able to find an aligned, contiguous range within it; // the graphics card doesn't care, but the CPU cannot // make an arbitrary area WC'ed, at least elder ones // question: is this necessary for a PCI GART because of bus snooping? - gart->buffer.unaligned_area = create_area( "Radeon PCI GART buffer", - &unaligned_addr, B_ANY_KERNEL_ADDRESS, + gart->buffer.unaligned_area = create_area( "Radeon PCI GART buffer", + &unaligned_addr, B_ANY_KERNEL_ADDRESS, 2 * size, B_CONTIGUOUS/*B_FULL_LOCK*/, B_READ_AREA | B_WRITE_AREA | B_USER_CLONEABLE_AREA ); if (gart->buffer.unaligned_area < 0) { - SHOW_ERROR( 1, "cannot create PCI GART buffer (%s)", + SHOW_ERROR( 1, "cannot create PCI GART buffer (%s)", strerror( gart->buffer.unaligned_area )); return gart->buffer.unaligned_area; } - + get_memory_map( unaligned_addr, B_PAGE_SIZE, map, 1 ); - - aligned_phys = - (void **)(((uint32)map[0].address + size - 1) & ~(size - 1)); - + + aligned_phys = + (void **)((map[0].address + size - 1) & ~(size - 1)); + SHOW_FLOW( 3, "aligned_phys=%p", aligned_phys ); - - gart->buffer.area = map_physical_memory( "Radeon aligned PCI GART buffer", - aligned_phys, - size, B_ANY_KERNEL_BLOCK_ADDRESS | B_MTR_WC, + + gart->buffer.area = map_physical_memory( "Radeon aligned PCI GART buffer", + (addr_t)aligned_phys, + size, B_ANY_KERNEL_BLOCK_ADDRESS | B_MTR_WC, B_READ_AREA | B_WRITE_AREA, &gart->buffer.ptr ); - - if( gart->buffer.area < 0 ) { + + if( gart->buffer.area < 0 ) { SHOW_ERROR0( 3, "cannot map buffer with WC" ); - gart->buffer.area = map_physical_memory( "Radeon aligned PCI GART buffer", - aligned_phys, - size, B_ANY_KERNEL_BLOCK_ADDRESS, + gart->buffer.area = map_physical_memory( "Radeon aligned PCI GART buffer", + (addr_t)aligned_phys, + size, B_ANY_KERNEL_BLOCK_ADDRESS, B_READ_AREA | B_WRITE_AREA, &gart->buffer.ptr ); } @@ -122,7 +122,7 @@ static status_t createGARTBuffer( GART_info *gart, size_t size ) gart->buffer.unaligned_area = -1; return gart->buffer.area; } - + memset( gart->buffer.ptr, 0, size ); return B_OK; @@ -141,15 +141,15 @@ static status_t initGATT( GART_info *gart ) uint32 i; uint32 *gatt_entry; size_t num_pages; - + SHOW_FLOW0( 3, "" ); - + num_pages = (gart->buffer.size + B_PAGE_SIZE - 1) & ~(B_PAGE_SIZE - 1); // GART must be contignuous gart->GATT.area = create_area("Radeon GATT", (void **)&gart->GATT.ptr, - B_ANY_KERNEL_ADDRESS, - (num_pages * sizeof( uint32 ) + B_PAGE_SIZE - 1) & ~(B_PAGE_SIZE - 1), + B_ANY_KERNEL_ADDRESS, + (num_pages * sizeof( uint32 ) + B_PAGE_SIZE - 1) & ~(B_PAGE_SIZE - 1), B_CONTIGUOUS, #ifdef HAIKU_TARGET_PLATFORM_HAIKU // TODO: really user read/write? @@ -158,15 +158,15 @@ static status_t initGATT( GART_info *gart ) 0 #endif ); - + if (gart->GATT.area < 0) { - SHOW_ERROR(1, "cannot create GATT table (%s)", + SHOW_ERROR(1, "cannot create GATT table (%s)", strerror(gart->GATT.area)); return gart->GATT.area; } get_memory_map(gart->GATT.ptr, B_PAGE_SIZE, PTB_map, 1); - gart->GATT.phys = (uint32)PTB_map[0].address; + gart->GATT.phys = PTB_map[0].address; SHOW_INFO(3, "GATT_ptr=%p, GATT_phys=%p", gart->GATT.ptr, (void *)gart->GATT.phys); @@ -175,29 +175,29 @@ static status_t initGATT( GART_info *gart ) memset(gart->GATT.ptr, 0, num_pages * sizeof(uint32)); map_count = num_pages + 1; - + // align size to B_PAGE_SIZE map_area_size = map_count * sizeof(physical_entry); if ((map_area_size / B_PAGE_SIZE) * B_PAGE_SIZE != map_area_size) map_area_size = ((map_area_size / B_PAGE_SIZE) + 1) * B_PAGE_SIZE; - + // temporary area where we fill in the memory map (deleted below) map_area = create_area("pci_gart_map_area", (void **)&map, B_ANY_ADDRESS, map_area_size, B_FULL_LOCK, B_READ_AREA | B_WRITE_AREA); dprintf("pci_gart_map_area: %ld\n", map_area); - + get_memory_map( gart->buffer.ptr, gart->buffer.size, map, map_count ); - + // the following looks a bit strange as the kernel // combines successive entries gatt_entry = gart->GATT.ptr; - + for( i = 0; i < map_count; ++i ) { - uint32 addr = (uint32)map[i].address; + phys_addr_t addr = map[i].address; size_t size = map[i].size; - + if( size == 0 ) break; - + while( size > 0 ) { *gatt_entry++ = addr; //SHOW_FLOW( 3, "%lx", *(gart_entry-1) ); @@ -205,9 +205,9 @@ static status_t initGATT( GART_info *gart ) size -= ATI_PCIGART_PAGE_SIZE; } } - + delete_area(map_area); - + if( i == map_count ) { // this case should never happen SHOW_ERROR0( 0, "memory map of GART buffer too large!" ); @@ -221,13 +221,13 @@ static status_t initGATT( GART_info *gart ) // devices in program order, so a simple final write should be sufficient // 2. if it is a PCI GART, bus snooping should provide cache coherence // 3. this function is a no-op :( - clear_caches( gart->GATT.ptr, num_pages * sizeof( uint32 ), + clear_caches( gart->GATT.ptr, num_pages * sizeof( uint32 ), B_FLUSH_DCACHE ); - // back to real live - some chipsets have write buffers that + // back to real live - some chipsets have write buffers that // proove all previous assumptions wrong // (don't know whether this really helps though) - asm volatile ( "wbinvd" ::: "memory" ); + asm volatile ( "wbinvd" ::: "memory" ); return B_OK; } @@ -236,7 +236,7 @@ static void destroyGARTBuffer( GART_info *gart ) { if( gart->buffer.area > 0 ) delete_area( gart->buffer.area ); - + if( gart->buffer.unaligned_area > 0 ) delete_area( gart->buffer.unaligned_area ); @@ -249,7 +249,7 @@ static void destroyGATT( GART_info *gart ) { if( gart->GATT.area > 0 ) delete_area( gart->GATT.area ); - + gart->GATT.area = -1; } @@ -262,16 +262,16 @@ status_t Radeon_InitPCIGART( device_info *di ) result = createGARTBuffer( &di->pci_gart, PCI_GART_SIZE ); if( result < 0 ) goto err1; - + result = initGATT( &di->pci_gart ); if( result < 0 ) goto err2; - + return B_OK; - + err2: destroyGARTBuffer( &di->pci_gart ); - + err1: return result; } @@ -281,25 +281,25 @@ err1: void Radeon_CleanupPCIGART( device_info *di ) { vuint8 *regs = di->regs; - + SHOW_FLOW0( 3, "" ); - + // perhaps we should wait for FIFO space before messing around with registers, but // 1. I don't want to add all the sync stuff to the kernel driver // 2. I doubt that these regs are buffered by FIFO - // but still: in worst case CP has written some commands to register FIFO, + // but still: in worst case CP has written some commands to register FIFO, // which can do any kind of nasty things // disable CP BM - OUTREG( regs, RADEON_CP_CSQ_CNTL, RADEON_CSQ_PRIDIS_INDDIS ); + OUTREG( regs, RADEON_CP_CSQ_CNTL, RADEON_CSQ_PRIDIS_INDDIS ); // read-back for flushing INREG( regs, RADEON_CP_CSQ_CNTL ); - - // disable bus mastering + + // disable bus mastering OUTREGP( regs, RADEON_BUS_CNTL, RADEON_BUS_MASTER_DIS, ~RADEON_BUS_MASTER_DIS ); - // disable PCI GART + // disable PCI GART OUTREGP( regs, RADEON_AIC_CNTL, 0, ~RADEON_PCIGART_TRANSLATE_EN ); - + destroyGATT( &di->pci_gart ); destroyGARTBuffer( &di->pci_gart ); } diff --git a/src/add-ons/kernel/drivers/graphics/radeon/bios.c b/src/add-ons/kernel/drivers/graphics/radeon/bios.c index 2dcf0eacf2..db5d2124f2 100644 --- a/src/add-ons/kernel/drivers/graphics/radeon/bios.c +++ b/src/add-ons/kernel/drivers/graphics/radeon/bios.c @@ -3,9 +3,9 @@ Part of Radeon kernel driver - + BIOS detection and retrieval of vital data - + Most of this data should be gathered directly, especially monitor detection should be done on demand so not all monitors need to be connected @@ -62,7 +62,7 @@ static const tmds_pll_info default_tmds_pll[14][4] = // this code is really nasty as maintaining the radeon signatures // is almost impossible (the signatures provided by ATI are always out-dated); // further, if there is more then one card built into the computer, we -// may detect the wrong BIOS! +// may detect the wrong BIOS! // we have two possible solutions: // 1. use the PCI location as stored in BIOS // 2. verify the IO-base address as stored in BIOS @@ -70,26 +70,26 @@ static const tmds_pll_info default_tmds_pll[14][4] = // unfortunately, every BIOS does the detection in a different way, // so I'm not sure which is the _right_ way of doing it static char *Radeon_FindRom( rom_info *ri ) -{ +{ uint32 segstart; uint8 *rom_base; char *rom; int i; - + for( segstart = 0x000c0000; segstart < 0x000f0000; segstart += 0x00001000 ) { bool found = false; - - // find ROM + + // find ROM rom_base = ri->bios_ptr + segstart - 0xc0000; - + if( rom_base[0] != 0x55 || rom_base[1] != 0xaa ) continue; - - // find signature of ATI + + // find signature of ATI rom = rom_base; found = false; - + for( i = 0; i < 128 - strlen( ati_rom_sig ); i++ ) { if( ati_rom_sig[0] == rom_base[i] ) { if( strncmp(ati_rom_sig, rom_base + i, strlen( ati_rom_sig )) == 0 ) { @@ -98,16 +98,16 @@ static char *Radeon_FindRom( rom_info *ri ) } } } - + if( !found ) continue; // EK don't bother looking for signiture now, due to lack of consistancy. - + SHOW_INFO( 2, "found ROM @0x%lx", segstart ); return rom_base; } - + SHOW_INFO0( 2, "no ROM found" ); return NULL; } @@ -120,7 +120,7 @@ static void Radeon_GetPLLInfo( device_info *di ) uint8 *bios_header; uint8 *tmp; PLL_BLOCK pll, *pll_info; - + bios_header = di->rom.rom_ptr + *(uint16 *)(di->rom.rom_ptr + 0x48); pll_info = (PLL_BLOCK *)(di->rom.rom_ptr + *(uint16 *)(bios_header + 0x30)); @@ -128,60 +128,60 @@ static void Radeon_GetPLLInfo( device_info *di ) tmp = bios_header + 4; - if (( *tmp == 'A' - && *(tmp+1) == 'T' - && *(tmp+2) == 'O' + if (( *tmp == 'A' + && *(tmp+1) == 'T' + && *(tmp+2) == 'O' && *(tmp+3) == 'M' - ) - || - ( *tmp == 'M' - && *(tmp+1) == 'O' - && *(tmp+2) == 'T' + ) + || + ( *tmp == 'M' + && *(tmp+1) == 'O' + && *(tmp+2) == 'T' && *(tmp+3) == 'A' )) { int bios_header, master_data_start, pll_start; di->is_atombios = true; - + bios_header = RADEON_BIOS16(0x48); master_data_start = RADEON_BIOS16(bios_header + 32); pll_start = RADEON_BIOS16(master_data_start + 12); - - di->pll.ref_div = 0; + + di->pll.ref_div = 0; di->pll.max_pll_freq = RADEON_BIOS16(pll_start + 32); di->pll.xclk = RADEON_BIOS16(pll_start + 72); di->pll.min_pll_freq = RADEON_BIOS16(pll_start + 78); di->pll.ref_freq = RADEON_BIOS16(pll_start + 82); SHOW_INFO( 2, "TESTING ref_clk=%ld, ref_div=%ld, xclk=%ld, min_freq=%ld, max_freq=%ld from ATOM Bios", - di->pll.ref_freq, di->pll.ref_div, di->pll.xclk, + di->pll.ref_freq, di->pll.ref_div, di->pll.xclk, di->pll.min_pll_freq, di->pll.max_pll_freq ); - + // Unused by beos driver so it appears... // info->sclk = RADEON_BIOS32(pll_info_block + 8) / 100.0; // info->mclk = RADEON_BIOS32(pll_info_block + 12) / 100.0; // if (info->sclk == 0) info->sclk = 200; // if (info->mclk == 0) info->mclk = 200; - + } else { di->is_atombios = false; - + memcpy( &pll, pll_info, sizeof( pll )); - + di->pll.xclk = (uint32)pll.XCLK; di->pll.ref_freq = (uint32)pll.PCLK_ref_freq; di->pll.ref_div = (uint32)pll.PCLK_ref_divider; di->pll.min_pll_freq = pll.PCLK_min_freq; di->pll.max_pll_freq = pll.PCLK_max_freq; - + SHOW_INFO( 2, "ref_clk=%ld, ref_div=%ld, xclk=%ld, min_freq=%ld, max_freq=%ld from Legacy BIOS", - di->pll.ref_freq, di->pll.ref_div, di->pll.xclk, + di->pll.ref_freq, di->pll.ref_div, di->pll.xclk, di->pll.min_pll_freq, di->pll.max_pll_freq ); - + } - + } /* @@ -201,18 +201,18 @@ const char *Mon2Str[] = { static void Radeon_GetMonType( device_info *di ) { unsigned int tmp; - + SHOW_FLOW0( 3, "" ); - + di->disp_type[0] = di->disp_type[1] = dt_none; if (di->has_crtc2) { tmp = INREG( di->regs, RADEON_BIOS_4_SCRATCH ); - + // ordering of "if"s is important as multiple // devices can be concurrently connected to one port // (like both a CRT and a TV) - + // primary port // having flat-panel support is most important if (tmp & 0x08) @@ -252,10 +252,10 @@ static void Radeon_GetMonType( device_info *di ) else di->disp_type[0] = dt_crt; } - - SHOW_INFO( 1, "BIOS reports %s on primary and %s on secondary port", + + SHOW_INFO( 1, "BIOS reports %s on primary and %s on secondary port", Mon2Str[di->disp_type[0]], Mon2Str[di->disp_type[1]]); - + // remove unsupported devices if( di->disp_type[0] >= dt_dvi_ext ) di->disp_type[0] = dt_none; @@ -272,8 +272,8 @@ static void Radeon_GetMonType( device_info *di ) di->disp_type[1] = dt_none; } } - - SHOW_INFO( 1, "Effective routing: %s on primary and %s on secondary port", + + SHOW_INFO( 1, "Effective routing: %s on primary and %s on secondary port", Mon2Str[di->disp_type[0]], Mon2Str[di->disp_type[1]]); } */ @@ -284,11 +284,11 @@ static bool Radeon_GetConnectorInfoFromBIOS ( device_info* di ) ptr_disp_entity ptr_entity = &di->routing; int i = 0, j, tmp, tmp0=0, tmp1=0; - + int bios_header, master_data_start; - + bios_header = RADEON_BIOS16(0x48); - + if (di->is_atombios) { master_data_start = RADEON_BIOS16( bios_header + 32 ); @@ -323,7 +323,7 @@ static bool Radeon_GetConnectorInfoFromBIOS ( device_info* di ) ptr_entity->port_info[crtc].tmds_type = tmds_int; else if (i == 7) ptr_entity->port_info[crtc].tmds_type = tmds_ext; - + tmp0 = RADEON_BIOS16( master_data_start + 24); if( tmp0 && id[crtc] ) { switch (RADEON_BIOS16(tmp0 + 4 + 27 * id[crtc]) * 4) @@ -407,11 +407,11 @@ static bool Radeon_GetConnectorInfoFromBIOS ( device_info* di ) tmp1 = (((( tmp0 >> 8 ) & 0xf ) == ddc_dvi ) || ( tmp1 == 1 )) ? 0 : 1; /* determine port info index */ ptr_entity->port_info[tmp1].ddc_type = (tmp0 >> 8) & 0x0f; - if (ptr_entity->port_info[tmp1].ddc_type > ddc_crt2) + if (ptr_entity->port_info[tmp1].ddc_type > ddc_crt2) ptr_entity->port_info[tmp1].ddc_type = ddc_none_detected; ptr_entity->port_info[tmp1].dac_type = (tmp0 & 0x01) ? dac_tvdac : dac_primary; ptr_entity->port_info[tmp1].connector_type = (tmp0 >> 12) & 0x0f; - if (ptr_entity->port_info[tmp1].connector_type > connector_unsupported) + if (ptr_entity->port_info[tmp1].connector_type > connector_unsupported) ptr_entity->port_info[tmp1].connector_type = connector_unsupported; ptr_entity->port_info[tmp1].tmds_type = ((tmp0 >> 4) & 0x01) ? tmds_ext : tmds_int; @@ -428,7 +428,7 @@ static bool Radeon_GetConnectorInfoFromBIOS ( device_info* di ) return FALSE; } - if (di->is_mobility) + if (di->is_mobility) { /* For the cases where only one VGA connector is found, we assume LVDS is not listed in the connector table, @@ -436,7 +436,7 @@ static bool Radeon_GetConnectorInfoFromBIOS ( device_info* di ) */ if ((connector_found < 3) && (ptr_entity->port_info[tmp1].connector_type == connector_crt)) { if (connector_found == 1) { - memcpy (&ptr_entity->port_info[1], + memcpy (&ptr_entity->port_info[1], &ptr_entity->port_info[0], sizeof (ptr_entity->port_info[0])); } @@ -446,9 +446,9 @@ static bool Radeon_GetConnectorInfoFromBIOS ( device_info* di ) ptr_entity->port_info[0].connector_type = connector_proprietary; SHOW_INFO0( 4 , "lvds port is not in connector table, added in."); - if (connector_found == 0) + if (connector_found == 0) connector_found = 1; - else + else connector_found = 3; } @@ -482,7 +482,7 @@ static bool Radeon_GetConnectorInfoFromBIOS ( device_info* di ) SHOW_INFO( 2, "Port%d: DDCType-%d, DACType-%d, TMDSType-%d, ConnectorType-%d", 0, ptr_entity->port_info[0].ddc_type, ptr_entity->port_info[0].dac_type, ptr_entity->port_info[0].tmds_type, ptr_entity->port_info[0].connector_type); - + } if (connector_found == 3) { SHOW_INFO( 2, "Port%d: DDCType-%d, DACType-%d, TMDSType-%d, ConnectorType-%d", @@ -505,9 +505,9 @@ static bool Radeon_GetBIOSDFPInfo( device_info *di ) FPI_BLOCK fpi; char panel_name[30]; int i; - + uint16 tmp; - + bios_header = RADEON_BIOS16( 0x48 ); if (di->is_atombios) @@ -518,7 +518,7 @@ static bool Radeon_GetBIOSDFPInfo( device_info *di ) tmp = RADEON_BIOS16( master_data_start + 16 ); if( tmp ) { - + di->fp_info.panel_xres = RADEON_BIOS16( tmp + 6 ); di->fp_info.panel_yres = RADEON_BIOS16( tmp + 10 ); di->fp_info.dot_clock = RADEON_BIOS16( tmp + 4 ) * 10; @@ -529,19 +529,19 @@ static bool Radeon_GetBIOSDFPInfo( device_info *di ) di->fp_info.v_over_plus = RADEON_BIOS16( tmp + 18 ); di->fp_info.h_sync_width = RADEON_BIOS16( tmp + 20 ); di->fp_info.panel_pwr_delay = RADEON_BIOS16( tmp + 40 ); - - SHOW_INFO( 2, "Panel Info from ATOMBIOS:\n" - "XRes: %d, YRes: %d, DotClock: %d\n" - "HBlank: %d, HOverPlus: %d, HSyncWidth: %d\n" - "VBlank: %d, VOverPlus: %d, VSyncWidth: %d\n" + + SHOW_INFO( 2, "Panel Info from ATOMBIOS:\n" + "XRes: %d, YRes: %d, DotClock: %d\n" + "HBlank: %d, HOverPlus: %d, HSyncWidth: %d\n" + "VBlank: %d, VOverPlus: %d, VSyncWidth: %d\n" "PanelPowerDelay: %d\n", di->fp_info.panel_xres, di->fp_info.panel_yres, di->fp_info.dot_clock, di->fp_info.h_blank, di->fp_info.h_over_plus, di->fp_info.h_sync_width, di->fp_info.v_blank, di->fp_info.v_over_plus, di->fp_info.h_sync_width, di->fp_info.panel_pwr_delay ); - - } - else + + } + else { di->fp_info.panel_pwr_delay = 200; SHOW_ERROR0( 2, "No Panel Info Table found in BIOS" ); @@ -550,91 +550,91 @@ static bool Radeon_GetBIOSDFPInfo( device_info *di ) } // is_atombios else { - + fpi_offset = RADEON_BIOS16(bios_header + 0x40); - + if( !fpi_offset ) { di->fp_info.panel_pwr_delay = 200; SHOW_ERROR0( 2, "No Panel Info Table found in BIOS" ); return false; - } - + } + memcpy( &fpi, di->rom.rom_ptr + fpi_offset, sizeof( fpi )); - + memcpy( panel_name, &fpi.name, sizeof( fpi.name ) ); panel_name[sizeof( fpi.name )] = 0; - + SHOW_INFO( 2, "Panel ID string: %s", panel_name ); - + di->fp_info.panel_xres = fpi.panel_xres; di->fp_info.panel_yres = fpi.panel_yres; - - SHOW_INFO( 2, "Panel Size from BIOS: %dx%d", + + SHOW_INFO( 2, "Panel Size from BIOS: %dx%d", di->fp_info.panel_xres, di->fp_info.panel_yres); - - di->fp_info.panel_pwr_delay = fpi.panel_pwr_delay; + + di->fp_info.panel_pwr_delay = fpi.panel_pwr_delay; if( di->fp_info.panel_pwr_delay > 2000 || di->fp_info.panel_pwr_delay < 0 ) di->fp_info.panel_pwr_delay = 2000; - + di->fp_info.ref_div = fpi.ref_div; di->fp_info.post_div = fpi.post_div; di->fp_info.feedback_div = fpi.feedback_div; - + di->fp_info.fixed_dividers = di->fp_info.ref_div != 0 && di->fp_info.feedback_div > 3; - - + + // there might be multiple supported resolutions stored; // we are looking for native resolution for( i = 0; i < 20; ++i ) { uint16 fpi_timing_ofs; FPI_TIMING_BLOCK fpi_timing; - + fpi_timing_ofs = fpi.fpi_timing_ofs[i]; - + if( fpi_timing_ofs == 0 ) break; - + memcpy( &fpi_timing, di->rom.rom_ptr + fpi_timing_ofs, sizeof( fpi_timing )); - + if( fpi_timing.panel_xres != di->fp_info.panel_xres || fpi_timing.panel_yres != di->fp_info.panel_yres ) continue; - + di->fp_info.h_blank = (fpi_timing.h_total - fpi_timing.h_display) * 8; // TBD: seems like upper four bits of hsync_start contain garbage di->fp_info.h_over_plus = ((fpi_timing.h_sync_start & 0xfff) - fpi_timing.h_display - 1) * 8; di->fp_info.h_sync_width = fpi_timing.h_sync_width * 8; di->fp_info.v_blank = fpi_timing.v_total - fpi_timing.v_display; di->fp_info.v_over_plus = (fpi_timing.v_sync & 0x7ff) - fpi_timing.v_display; - di->fp_info.v_sync_width = (fpi_timing.v_sync & 0xf800) >> 11; + di->fp_info.v_sync_width = (fpi_timing.v_sync & 0xf800) >> 11; di->fp_info.dot_clock = fpi_timing.dot_clock * 10; return true; } } // not is_atombios - + SHOW_ERROR0( 2, "Radeon: couldn't get Panel Timing from BIOS" ); return false; } -// try to reverse engineer DFP specification from +// try to reverse engineer DFP specification from // timing currently set up in graphics cards registers // (effectively, we hope that BIOS has set it up correctly // and noone has messed registers up yet; let's pray) static void Radeon_RevEnvDFPSize( device_info *di ) { vuint8 *regs = di->regs; - - di->fp_info.panel_yres = - ((INREG( regs, RADEON_FP_VERT_STRETCH ) & RADEON_VERT_PANEL_SIZE) + + di->fp_info.panel_yres = + ((INREG( regs, RADEON_FP_VERT_STRETCH ) & RADEON_VERT_PANEL_SIZE) >> RADEON_VERT_PANEL_SIZE_SHIFT) + 1; - di->fp_info.panel_xres = - (((INREG( regs, RADEON_FP_HORZ_STRETCH ) & RADEON_HORZ_PANEL_SIZE) + di->fp_info.panel_xres = + (((INREG( regs, RADEON_FP_HORZ_STRETCH ) & RADEON_HORZ_PANEL_SIZE) >> RADEON_HORZ_PANEL_SIZE_SHIFT) + 1) * 8; - - SHOW_INFO( 2, "detected panel size from registers: %dx%d", + + SHOW_INFO( 2, "detected panel size from registers: %dx%d", di->fp_info.panel_xres, di->fp_info.panel_yres); } @@ -646,64 +646,64 @@ static void Radeon_RevEnvDFPTiming( device_info *di ) uint32 r; uint16 a, b; - + r = INREG( regs, RADEON_FP_CRTC_H_TOTAL_DISP ); // the magic "4" was found by trial and error and probably stems from fudge (see crtc.c) a = (r & RADEON_FP_CRTC_H_TOTAL_MASK)/* + 4*/; b = (r & RADEON_FP_CRTC_H_DISP_MASK) >> RADEON_FP_CRTC_H_DISP_SHIFT; di->fp_info.h_blank = (a - b) * 8; - + SHOW_FLOW( 2, "h_total=%d, h_disp=%d", a * 8, b * 8 ); - + r = INREG( regs, RADEON_FP_H_SYNC_STRT_WID ); - di->fp_info.h_over_plus = + di->fp_info.h_over_plus = ((r & RADEON_FP_H_SYNC_STRT_CHAR_MASK) >> RADEON_FP_H_SYNC_STRT_CHAR_SHIFT) - b/* - 1*/; di->fp_info.h_over_plus *= 8; - di->fp_info.h_sync_width = + di->fp_info.h_sync_width = ((r & RADEON_FP_H_SYNC_WID_MASK) >> RADEON_FP_H_SYNC_WID_SHIFT); // TBD: this seems to be wrong // (my BIOS tells 112, this calculation leads to 24!) di->fp_info.h_sync_width *= 8; - + r = INREG( regs, RADEON_FP_CRTC_V_TOTAL_DISP ); a = (r & RADEON_FP_CRTC_V_TOTAL_MASK)/* + 1*/; b = (r & RADEON_FP_CRTC_V_DISP_MASK) >> RADEON_FP_CRTC_V_DISP_SHIFT; di->fp_info.v_blank = a - b; - + SHOW_FLOW( 2, "v_total=%d, v_disp=%d", a, b ); - + r = INREG( regs, RADEON_FP_V_SYNC_STRT_WID ); di->fp_info.v_over_plus = (r & RADEON_FP_V_SYNC_STRT_MASK) - b; di->fp_info.v_sync_width = ((r & RADEON_FP_V_SYNC_WID_MASK) >> RADEON_FP_V_SYNC_WID_SHIFT)/* + 1*/; - + // standard CRTC r = INREG( regs, RADEON_CRTC_H_TOTAL_DISP ); a = (r & RADEON_CRTC_H_TOTAL); b = (r & RADEON_CRTC_H_DISP) >> RADEON_CRTC_H_DISP_SHIFT; di->fp_info.h_blank = (a - b) * 8; - + SHOW_FLOW( 2, "h_total=%d, h_disp=%d", a * 8, b * 8 ); - + r = INREG( regs, RADEON_CRTC_H_SYNC_STRT_WID ); - di->fp_info.h_over_plus = + di->fp_info.h_over_plus = ((r & RADEON_CRTC_H_SYNC_STRT_CHAR) >> RADEON_CRTC_H_SYNC_STRT_CHAR_SHIFT) - b; di->fp_info.h_over_plus *= 8; - di->fp_info.h_sync_width = + di->fp_info.h_sync_width = ((r & RADEON_CRTC_H_SYNC_WID) >> RADEON_CRTC_H_SYNC_WID_SHIFT); di->fp_info.h_sync_width *= 8; - + r = INREG( regs, RADEON_CRTC_V_TOTAL_DISP ); a = (r & RADEON_CRTC_V_TOTAL); b = (r & RADEON_CRTC_V_DISP) >> RADEON_CRTC_V_DISP_SHIFT; di->fp_info.v_blank = a - b; - + SHOW_FLOW( 2, "v_total=%d, v_disp=%d", a, b ); - + r = INREG( regs, RADEON_CRTC_V_SYNC_STRT_WID ); di->fp_info.v_over_plus = (r & RADEON_CRTC_V_SYNC_STRT) - b; di->fp_info.v_sync_width = ((r & RADEON_CRTC_V_SYNC_WID) @@ -724,16 +724,16 @@ static void Radeon_GetTMDSInfoFromBios( device_info *di ) di->tmds_pll[i].value = 0; di->tmds_pll[i].freq = 0; } - + if (di->is_atombios) { int master_data_start; master_data_start = RADEON_BIOS16( bios_header + 32 ); - + if((tmp = RADEON_BIOS16 (master_data_start + 18))) { - + maxfreq = RADEON_BIOS16(tmp + 4); - + for (i = 0; i < 4; i++) { di->tmds_pll[i].freq = RADEON_BIOS16(tmp + i * 6 + 6); // This assumes each field in TMDS_PLL has 6 bit as in R300/R420 @@ -741,9 +741,9 @@ static void Radeon_GetTMDSInfoFromBios( device_info *di ) ((RADEON_BIOS8(tmp + i * 6 + 10) & 0x3f) << 6) | ((RADEON_BIOS8(tmp + i * 6 + 9) & 0xf) << 12) | ((RADEON_BIOS8(tmp + i * 6 + 11) & 0xf) << 16)); - SHOW_ERROR( 2, "TMDS PLL from BIOS: %ld %lx", + SHOW_ERROR( 2, "TMDS PLL from BIOS: %ld %lx", di->tmds_pll[i].freq, di->tmds_pll[i].value); - + if (maxfreq == di->tmds_pll[i].freq) { di->tmds_pll[i].freq = 0xffffffff; break; @@ -758,7 +758,7 @@ static void Radeon_GetTMDSInfoFromBios( device_info *di ) SHOW_ERROR( 2, "DFP table revision: %d", RADEON_BIOS8(tmp)); if (RADEON_BIOS8(tmp) == 3) { n = RADEON_BIOS8(tmp + 5) + 1; - if (n > 4) + if (n > 4) n = 4; for (i = 0; i < n; i++) { di->tmds_pll[i].value = RADEON_BIOS32(tmp + i * 10 + 0x08); @@ -768,21 +768,21 @@ static void Radeon_GetTMDSInfoFromBios( device_info *di ) } else if (RADEON_BIOS8(tmp) == 4) { int stride = 0; n = RADEON_BIOS8(tmp + 5) + 1; - if (n > 4) + if (n > 4) n = 4; for (i = 0; i < n; i++) { di->tmds_pll[i].value = RADEON_BIOS32(tmp + stride + 0x08); di->tmds_pll[i].freq = RADEON_BIOS16(tmp + stride + 0x10); - if (i == 0) + if (i == 0) stride += 10; - else + else stride += 6; } found = TRUE; } - - // revision 4 has some problem as it appears in RV280, - // comment it off for now, use default instead + + // revision 4 has some problem as it appears in RV280, + // comment it off for now, use default instead /* else if (RADEON_BIOS8(tmp) == 4) { int stride = 0; @@ -791,23 +791,23 @@ static void Radeon_GetTMDSInfoFromBios( device_info *di ) for (i = 0; i < n; i++) { di->tmds_pll[i].value = RADEON_BIOS32(tmp + stride + 0x08); di->tmds_pll[i].freq = RADEON_BIOS16(tmp + stride + 0x10); - if (i == 0) + if (i == 0) stride += 10; - else + else stride += 6; } found = TRUE; } */ - + } } - + if (found == FALSE) { for (i = 0; i < 4; i++) { di->tmds_pll[i].value = default_tmds_pll[di->asic][i].value; di->tmds_pll[i].freq = default_tmds_pll[di->asic][i].freq; - SHOW_ERROR( 2, "TMDS PLL from DEFAULTS: %ld %lx", + SHOW_ERROR( 2, "TMDS PLL from DEFAULTS: %ld %lx", di->tmds_pll[i].freq, di->tmds_pll[i].value); } } @@ -818,29 +818,29 @@ static void Radeon_GetTMDSInfoFromBios( device_info *di ) static void Radeon_GetBIOSMon( device_info *di ) { Radeon_GetMonType( di ); - - // reset all Flat Panel Info; + + // reset all Flat Panel Info; // it gets filled out step by step, and this way we know what's still missing memset( &di->fp_info, 0, sizeof( di->fp_info )); - + // we assume that the only fp port is combined with standard port 0 di->fp_info.disp_type = di->disp_type[0]; if( di->is_mobility ) { // there is a flat panel - get info about it Radeon_GetBIOSDFPInfo( di ); - + // if BIOS doesn't know, ask the registers if( di->fp_info.panel_xres == 0 || di->fp_info.panel_yres == 0) Radeon_RevEnvDFPSize( di ); - + if( di->fp_info.h_blank == 0 || di->fp_info.v_blank == 0) Radeon_RevEnvDFPTiming( di ); - - SHOW_INFO( 2, "h_disp=%d, h_blank=%d, h_over_plus=%d, h_sync_width=%d", + + SHOW_INFO( 2, "h_disp=%d, h_blank=%d, h_over_plus=%d, h_sync_width=%d", di->fp_info.panel_xres, di->fp_info.h_blank, di->fp_info.h_over_plus, di->fp_info.h_sync_width ); - SHOW_INFO( 2, "v_disp=%d, v_blank=%d, v_over_plus=%d, v_sync_width=%d", - di->fp_info.panel_yres, di->fp_info.v_blank, di->fp_info.v_over_plus, di->fp_info.v_sync_width ); + SHOW_INFO( 2, "v_disp=%d, v_blank=%d, v_over_plus=%d, v_sync_width=%d", + di->fp_info.panel_yres, di->fp_info.v_blank, di->fp_info.v_over_plus, di->fp_info.v_sync_width ); SHOW_INFO( 2, "pixel_clock=%d", di->fp_info.dot_clock ); } } @@ -849,28 +849,28 @@ static void Radeon_GetBIOSMon( device_info *di ) // get info about Laptop flat panel static void Radeon_GetFPData( device_info *di ) { - // reset all Flat Panel Info; + // reset all Flat Panel Info; // it gets filled out step by step, and this way we know what's still missing memset( &di->fp_info, 0, sizeof( di->fp_info )); // we only use BIOS for Laptop flat panels if( !di->is_mobility ) return; - + // ask BIOS about flat panel spec Radeon_GetBIOSDFPInfo( di ); - + // if BIOS doesn't know, ask the registers if( di->fp_info.panel_xres == 0 || di->fp_info.panel_yres == 0) Radeon_RevEnvDFPSize( di ); - + if( di->fp_info.h_blank == 0 || di->fp_info.v_blank == 0) Radeon_RevEnvDFPTiming( di ); - - SHOW_INFO( 2, "h_disp=%d, h_blank=%d, h_over_plus=%d, h_sync_width=%d", + + SHOW_INFO( 2, "h_disp=%d, h_blank=%d, h_over_plus=%d, h_sync_width=%d", di->fp_info.panel_xres, di->fp_info.h_blank, di->fp_info.h_over_plus, di->fp_info.h_sync_width ); - SHOW_INFO( 2, "v_disp=%d, v_blank=%d, v_over_plus=%d, v_sync_width=%d", - di->fp_info.panel_yres, di->fp_info.v_blank, di->fp_info.v_over_plus, di->fp_info.v_sync_width ); + SHOW_INFO( 2, "v_disp=%d, v_blank=%d, v_over_plus=%d, v_sync_width=%d", + di->fp_info.panel_yres, di->fp_info.v_blank, di->fp_info.v_over_plus, di->fp_info.v_sync_width ); SHOW_INFO( 2, "pixel_clock=%d", di->fp_info.dot_clock ); } @@ -911,7 +911,7 @@ static uint32 RADEON_GetAccessibleVRAM( device_info *di ) // we expect the BIOS to have done the right thing (might be too optimistic...) if (INREG( regs, RADEON_HOST_PATH_CNTL ) & RADEON_HDP_APER_CNTL ) return aper_size * 2; - + return aper_size; } @@ -921,10 +921,10 @@ static void Radeon_DetectRAM( device_info *di ) { vuint8 *regs = di->regs; uint32 accessible, bar_size, tmp = 0; - + if( di->is_igp ) { uint32 tom; - + tom = INREG( regs, RADEON_NB_TOM ); di->local_mem_size = ((tom >> 16) + 1 - (tom & 0xffff)) << 16; OUTREG( regs, RADEON_CONFIG_MEMSIZE, di->local_mem_size * 1024); @@ -942,7 +942,7 @@ static void Radeon_DetectRAM( device_info *di ) // Get usable Vram, after asic bugs, configuration screw ups etc accessible = RADEON_GetAccessibleVRAM( di ); - // Crop it to the size of the PCI BAR + // Crop it to the size of the PCI BAR bar_size = di->pcii.u.h0.base_register_sizes[0]; if (bar_size == 0) bar_size = 0x200000; @@ -951,7 +951,7 @@ static void Radeon_DetectRAM( device_info *di ) SHOW_INFO( 0, "Detected total video RAM=%ldK, accessible=%ldK (PCI BAR=%ldK)" , di->local_mem_size/1024, accessible/1024, bar_size/1024); - if (di->local_mem_size > accessible) + if (di->local_mem_size > accessible) di->local_mem_size = accessible; // detect ram bus width only used by dynamic clocks for now. @@ -967,14 +967,14 @@ static void Radeon_DetectRAM( device_info *di ) } else if ( (di->asic >= rt_rv100) || (di->asic >= rt_rs100) || (di->asic >= rt_rs200)) { - if (tmp & RV100_HALF_MODE) + if (tmp & RV100_HALF_MODE) di->ram.width = 32; - else + else di->ram.width = 64; } else { - if (tmp & RADEON_MEM_NUM_CHANNELS_MASK) + if (tmp & RADEON_MEM_NUM_CHANNELS_MASK) di->ram.width = 128; - else + else di->ram.width = 64; } @@ -992,8 +992,8 @@ static void Radeon_DetectRAM( device_info *di ) di->ram.CL = 2; di->ram.loop_latency = 16; di->ram.Rloop = 16; - di->ram.Tr2w = 0; - } else { // RADEON_MEM_CFG_DDR + di->ram.Tr2w = 0; + } else { // RADEON_MEM_CFG_DDR // DDR SGRAM strcpy(di->ram_type, "DDR SGRAM"); di->ram.ml = 4; @@ -1007,13 +1007,13 @@ static void Radeon_DetectRAM( device_info *di ) di->ram.Rloop = 16; } } - - SHOW_INFO( 1, "%ld MB %s found on %d wide bus", + + SHOW_INFO( 1, "%ld MB %s found on %d wide bus", di->local_mem_size / 1024 / 1024, di->ram_type, di->ram.width); - + /* if( di->local_mem_size > 64 * 1024 * 1024 ) { di->local_mem_size = 64 * 1024 * 1024; - + SHOW_INFO0( 1, "restricted to 64 MB" ); }*/ } @@ -1024,7 +1024,7 @@ static void Radeon_DetectRAM( device_info *di ) status_t Radeon_MapBIOS( pci_info *pcii, rom_info *ri ) { char buffer[100]; - + sprintf(buffer, "%04X_%04X_%02X%02X%02X bios", pcii->vendor_id, pcii->device_id, pcii->bus, pcii->device, pcii->function); @@ -1033,23 +1033,23 @@ status_t Radeon_MapBIOS( pci_info *pcii, rom_info *ri ) // using the PCI location would improve detection, especially // if multiple graphics cards are installed // BUT: BeOS uses the first graphics card it finds (sorted by - // device name), thus you couldn't choose in BIOS which card + // device name), thus you couldn't choose in BIOS which card // to use; checking the legacy location ensures that the card is // only detected if it's the primary card ri->phys_address = 0xc0000; ri->size = 0x40000; - - ri->bios_area = map_physical_memory( buffer, (void *)ri->phys_address, + + ri->bios_area = map_physical_memory( buffer, ri->phys_address, ri->size, B_ANY_KERNEL_ADDRESS, B_READ_AREA, (void **)&ri->bios_ptr ); if( ri->bios_area < 0 ) return ri->bios_area; - + ri->rom_ptr = Radeon_FindRom( ri ); - + // on success, adjust physical address to found ROM if( ri->rom_ptr != NULL ) ri->phys_address += ri->rom_ptr - ri->bios_ptr; - + return ri->rom_ptr != NULL ? B_OK : B_ERROR; } @@ -1058,7 +1058,7 @@ status_t Radeon_MapBIOS( pci_info *pcii, rom_info *ri ) void Radeon_UnmapBIOS( rom_info *ri ) { delete_area( ri->bios_area ); - + ri->bios_ptr = ri->rom_ptr = NULL; } @@ -1068,17 +1068,17 @@ status_t Radeon_ReadBIOSData( device_info *di ) { shared_info dummy_si; status_t result = B_OK; - + // give Radeon_MapDevice something to play with di->si = &dummy_si; - + // don't map frame buffer - we don't know its proper size yet! result = Radeon_MapDevice( di, true ); if( result < 0 ) goto err1; Radeon_GetPLLInfo( di ); - + // setup defaults di->routing.port_info[0].mon_type = mt_unknown; di->routing.port_info[0].ddc_type = ddc_none_detected; @@ -1091,7 +1091,7 @@ status_t Radeon_ReadBIOSData( device_info *di ) di->routing.port_info[1].dac_type = dac_unknown; di->routing.port_info[1].tmds_type = tmds_unknown; di->routing.port_info[1].connector_type = connector_none; - + if ( !Radeon_GetConnectorInfoFromBIOS( di ) ) { di->routing.port_info[0].mon_type = mt_unknown; @@ -1099,7 +1099,7 @@ status_t Radeon_ReadBIOSData( device_info *di ) di->routing.port_info[0].dac_type = dac_tvdac; di->routing.port_info[0].tmds_type = tmds_unknown; di->routing.port_info[0].connector_type = connector_proprietary; - + di->routing.port_info[1].mon_type = mt_unknown; di->routing.port_info[1].ddc_type = ddc_none_detected; di->routing.port_info[1].dac_type = dac_primary; @@ -1110,11 +1110,11 @@ status_t Radeon_ReadBIOSData( device_info *di ) Radeon_GetFPData( di ); Radeon_GetTMDSInfoFromBios( di ); Radeon_DetectRAM( di ); - + Radeon_UnmapDevice( di ); - + err1: di->si = NULL; - + return result; } diff --git a/src/add-ons/kernel/drivers/graphics/radeon/init.c b/src/add-ons/kernel/drivers/graphics/radeon/init.c index be51e4c601..7b6ce489dd 100644 --- a/src/add-ons/kernel/drivers/graphics/radeon/init.c +++ b/src/add-ons/kernel/drivers/graphics/radeon/init.c @@ -33,9 +33,9 @@ extern radeon_settings current_settings; // map frame buffer and registers // mmio_only - true = map registers only (used during detection) -status_t Radeon_MapDevice( device_info *di, bool mmio_only ) +status_t Radeon_MapDevice( device_info *di, bool mmio_only ) { - // framebuffer is stored in PCI range 0, + // framebuffer is stored in PCI range 0, // register map in PCI range 2 int regs = 2; int fb = 0; @@ -44,24 +44,24 @@ status_t Radeon_MapDevice( device_info *di, bool mmio_only ) uint32 tmp; pci_info *pcii = &(di->pcii); status_t result; - + SHOW_FLOW( 3, "device: %02X%02X%02X", di->pcii.bus, di->pcii.device, di->pcii.function ); - + si->ROM_area = si->regs_area = si->memory[mt_local].area = 0; // enable memory mapped IO and frame buffer - // also, enable bus mastering (some BIOSes seem to + // also, enable bus mastering (some BIOSes seem to // disable that, like mine) tmp = get_pci( PCI_command, 2 ); - SHOW_FLOW( 3, "old PCI command state: 0x%08lx", tmp ); + SHOW_FLOW( 3, "old PCI command state: 0x%08lx", tmp ); tmp |= PCI_command_io | PCI_command_memory | PCI_command_master; set_pci( PCI_command, 2, tmp ); // registers cannot be accessed directly by user apps, // they need to clone area for safety reasons - SHOW_INFO( 1, "physical address of memory-mapped I/O: 0x%8lx-0x%8lx", - di->pcii.u.h0.base_registers[regs], + SHOW_INFO( 1, "physical address of memory-mapped I/O: 0x%8lx-0x%8lx", + di->pcii.u.h0.base_registers[regs], di->pcii.u.h0.base_registers[regs] + di->pcii.u.h0.base_register_sizes[regs] - 1 ); sprintf( buffer, "%04X_%04X_%02X%02X%02X regs", @@ -70,7 +70,7 @@ status_t Radeon_MapDevice( device_info *di, bool mmio_only ) si->regs_area = map_physical_memory( buffer, - (void *) di->pcii.u.h0.base_registers[regs], + di->pcii.u.h0.base_registers[regs], di->pcii.u.h0.base_register_sizes[regs], B_ANY_KERNEL_ADDRESS, /*// for "poke" debugging @@ -81,12 +81,12 @@ status_t Radeon_MapDevice( device_info *di, bool mmio_only ) 0, #endif (void **)&(di->regs)); - if( si->regs_area < 0 ) + if( si->regs_area < 0 ) return si->regs_area; // that's all during detection as we have no clue about ROM or // frame buffer at this point - if( mmio_only ) + if( mmio_only ) return B_OK; // ROM must be explicetely mapped by applications too @@ -96,7 +96,7 @@ status_t Radeon_MapDevice( device_info *di, bool mmio_only ) si->ROM_area = map_physical_memory( buffer, - (void *) di->rom.phys_address, + di->rom.phys_address, di->rom.size, B_ANY_KERNEL_ADDRESS, 0, @@ -105,11 +105,11 @@ status_t Radeon_MapDevice( device_info *di, bool mmio_only ) result = si->ROM_area; goto err2; } - + if( di->pcii.u.h0.base_register_sizes[fb] > di->local_mem_size ) { // Radeons allocate more address range then really needed -> // only map the area that contains physical memory - SHOW_INFO( 1, "restrict frame buffer from 0x%8lx to 0x%8lx bytes", + SHOW_INFO( 1, "restrict frame buffer from 0x%8lx to 0x%8lx bytes", di->pcii.u.h0.base_register_sizes[fb], di->local_mem_size ); @@ -121,8 +121,8 @@ status_t Radeon_MapDevice( device_info *di, bool mmio_only ) // those areas owned by an application are mapped into // its address space // (this hack is needed by BeOS to write something onto screen in KDL) - SHOW_INFO( 1, "physical address of framebuffer: 0x%8lx-0x%8lx", - di->pcii.u.h0.base_registers[fb], + SHOW_INFO( 1, "physical address of framebuffer: 0x%8lx-0x%8lx", + di->pcii.u.h0.base_registers[fb], di->pcii.u.h0.base_registers[fb] + di->pcii.u.h0.base_register_sizes[fb] - 1 ); sprintf(buffer, "%04X_%04X_%02X%02X%02X framebuffer", @@ -131,7 +131,7 @@ status_t Radeon_MapDevice( device_info *di, bool mmio_only ) si->memory[mt_local].area = map_physical_memory( buffer, - (void *) di->pcii.u.h0.base_registers[fb], + di->pcii.u.h0.base_registers[fb], di->pcii.u.h0.base_register_sizes[fb], B_ANY_KERNEL_BLOCK_ADDRESS | B_MTR_WC, B_READ_AREA + B_WRITE_AREA, @@ -141,7 +141,7 @@ status_t Radeon_MapDevice( device_info *di, bool mmio_only ) SHOW_FLOW0( 3, "couldn't enable WC for frame buffer" ); si->memory[mt_local].area = map_physical_memory( buffer, - (void *) di->pcii.u.h0.base_registers[fb], + di->pcii.u.h0.base_registers[fb], di->pcii.u.h0.base_register_sizes[fb], B_ANY_KERNEL_BLOCK_ADDRESS, B_READ_AREA + B_WRITE_AREA, @@ -154,11 +154,11 @@ status_t Radeon_MapDevice( device_info *di, bool mmio_only ) result = si->memory[mt_local].area; goto err; } - + // save physical address though noone can probably make // any use of it si->framebuffer_pci = (void *) di->pcii.u.h0.base_registers_pci[fb]; - + return B_OK; err: @@ -170,7 +170,7 @@ err2: // unmap PCI ranges -void Radeon_UnmapDevice(device_info *di) +void Radeon_UnmapDevice(device_info *di) { shared_info *si = di->si; pci_info *pcii = &(di->pcii); @@ -186,13 +186,13 @@ void Radeon_UnmapDevice(device_info *di) if( si->regs_area > 0 ) delete_area( si->regs_area ); - + if( si->ROM_area > 0 ) delete_area( si->ROM_area ); - + if( si->memory[mt_local].area > 0 ) delete_area( si->memory[mt_local].area ); - + si->regs_area = si->ROM_area = si->memory[mt_local].area = 0; } @@ -206,16 +206,16 @@ status_t Radeon_FirstOpen( device_info *di ) //uint32 /*dma_block, */dma_offset; // create shared info; don't allow access by apps - - // they'll clone it + // they'll clone it sprintf( buffer, "%04X_%04X_%02X%02X%02X shared", di->pcii.vendor_id, di->pcii.device_id, di->pcii.bus, di->pcii.device, di->pcii.function ); di->shared_area = create_area( - buffer, - (void **)&(di->si), - B_ANY_KERNEL_ADDRESS, - (sizeof(shared_info) + (B_PAGE_SIZE - 1)) & ~(B_PAGE_SIZE - 1), + buffer, + (void **)&(di->si), + B_ANY_KERNEL_ADDRESS, + (sizeof(shared_info) + (B_PAGE_SIZE - 1)) & ~(B_PAGE_SIZE - 1), B_FULL_LOCK, #ifdef HAIKU_TARGET_PLATFORM_HAIKU B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA | B_USER_CLONEABLE_AREA @@ -227,20 +227,20 @@ status_t Radeon_FirstOpen( device_info *di ) result = di->shared_area; goto err8; } - + memset( di->si, 0, sizeof( *di->si )); - + si = di->si; - + si->settings = di->settings = current_settings; if (di->settings.force_acc_dma) di->acc_dma = true; if (di->settings.force_acc_mmio) // force mmio will override dma... a tristate fuzzylogic, grey bool would be nice... di->acc_dma = false; - + #ifdef ENABLE_LOGGING -#ifdef LOG_INCLUDE_STARTUP +#ifdef LOG_INCLUDE_STARTUP si->log = log_init( 1000000 ); #endif #endif @@ -249,7 +249,7 @@ status_t Radeon_FirstOpen( device_info *di ) si->vendor_id = di->pcii.vendor_id; si->device_id = di->pcii.device_id; si->revision = di->pcii.revision; - + si->asic = di->asic; si->is_mobility = di->is_mobility; si->tv_chip = di->tv_chip; @@ -262,32 +262,32 @@ status_t Radeon_FirstOpen( device_info *di ) si->acc_dma = di->acc_dma; memcpy(&si->routing, &di->routing, sizeof(disp_entity)); - + // detecting theatre channel in kernel would lead to code duplication, // so we let the first accelerant take care of it si->theatre_channel = -1; - + si->crtc[0].crtc_idx = 0; si->crtc[0].flatpanel_port = 0; si->crtc[1].crtc_idx = 1; si->crtc[1].flatpanel_port = 1; si->num_crtc = di->num_crtc; - + if (di->is_mobility) si->flatpanels[0] = di->fp_info; si->pll = di->pll; // create virtual card info; don't allow access by apps - - // they'll clone it + // they'll clone it sprintf( buffer, "%04X_%04X_%02X%02X%02X virtual card 0", di->pcii.vendor_id, di->pcii.device_id, - di->pcii.bus, di->pcii.device, di->pcii.function ); + di->pcii.bus, di->pcii.device, di->pcii.function ); di->virtual_card_area = create_area( - buffer, - (void **)&(di->vc), - B_ANY_KERNEL_ADDRESS, - (sizeof(virtual_card) + (B_PAGE_SIZE - 1)) & ~(B_PAGE_SIZE - 1), + buffer, + (void **)&(di->vc), + B_ANY_KERNEL_ADDRESS, + (sizeof(virtual_card) + (B_PAGE_SIZE - 1)) & ~(B_PAGE_SIZE - 1), B_FULL_LOCK, #ifdef HAIKU_TARGET_PLATFORM_HAIKU B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA | B_USER_CLONEABLE_AREA @@ -303,25 +303,25 @@ status_t Radeon_FirstOpen( device_info *di ) // currently, we assign fixed ports to this virtual card di->vc->assigned_crtc[0] = true; di->vc->assigned_crtc[1] = si->num_crtc > 1; - di->vc->controlled_displays = + di->vc->controlled_displays = dd_tv_crt | dd_crt | dd_lvds | dd_dvi | dd_dvi_ext | dd_ctv | dd_stv; di->vc->fb_mem_handle = 0; di->vc->cursor.mem_handle = 0; - + // create unique id di->vc->id = di->virtual_card_area; - + result = Radeon_MapDevice( di, false ); - if (result < 0) + if (result < 0) goto err6; - + // save dac2_cntl register // on M6, we need to restore that during uninit, else you only get // garbage on screen on reboot if both CRTCs are used if( di->asic == rt_rv100 && di->is_mobility) di->dac2_cntl = INREG( di->regs, RADEON_DAC_CNTL2 ); - + memcpy(&si->tmds_pll, &di->tmds_pll, sizeof(di->tmds_pll)); si->tmds_pll_cntl = INREG( di->regs, RADEON_TMDS_PLL_CNTL); si->tmds_transmitter_cntl = INREG( di->regs, RADEON_TMDS_TRANSMITTER_CNTL); @@ -337,13 +337,13 @@ status_t Radeon_FirstOpen( device_info *di ) SHOW_INFO( 2, "FP2 GEN = %8lx", INREG( di->regs, RADEON_FP2_GEN_CNTL )); SHOW_INFO( 2, "TV DAC = %8lx", INREG( di->regs, RADEON_TV_DAC_CNTL )); //not setup right when ext dvi // } - + result = Radeon_InitPCIGART( di ); if( result < 0 ) goto err5; - + si->memory[mt_local].size = di->local_mem_size; - + si->memory[mt_PCI].area = di->pci_gart.buffer.area; si->memory[mt_PCI].size = di->pci_gart.buffer.size; @@ -351,7 +351,7 @@ status_t Radeon_FirstOpen( device_info *di ) si->nonlocal_type = mt_PCI; Radeon_InitMemController( di ); - + // currently, we don't support VBI - something is broken there // (it doesn't change a thing apart from crashing) result = Radeon_SetupIRQ( di, buffer ); @@ -361,7 +361,7 @@ status_t Radeon_FirstOpen( device_info *di ) // resolution of 2D register is 1K, resolution of CRTC etc. is higher, // so 1K is the minimum block size; // (CP cannot use local mem) - di->memmgr[mt_local] = mem_init("radeon local memory", 0, di->local_mem_size, 1024, + di->memmgr[mt_local] = mem_init("radeon local memory", 0, di->local_mem_size, 1024, di->local_mem_size / 1024); if (di->memmgr[mt_local] == NULL) { result = B_NO_MEMORY; @@ -369,25 +369,25 @@ status_t Radeon_FirstOpen( device_info *di ) } // CP requires 4K alignment, which is the most restrictive I found - di->memmgr[mt_PCI] = mem_init("radeon PCI GART memory", 0, di->pci_gart.buffer.size, 4096, + di->memmgr[mt_PCI] = mem_init("radeon PCI GART memory", 0, di->pci_gart.buffer.size, 4096, di->pci_gart.buffer.size / 4096); if (di->memmgr[mt_PCI] == NULL) { result = B_NO_MEMORY; goto err2; } - // no AGP support + // no AGP support di->memmgr[mt_AGP] = NULL; - + // fix AGP settings for IGP chipset Radeon_Set_AGP( di, !di->settings.force_pci ); // disable AGP - + // time to init Command Processor result = Radeon_InitCP( di ); if( result != B_OK ) goto err; - + if ( di->acc_dma ) { result = Radeon_InitDMA( di ); @@ -398,17 +398,17 @@ status_t Radeon_FirstOpen( device_info *di ) { SHOW_INFO0( 0, "DMA is diabled using PIO mode"); } - + // mem_alloc( di->local_memmgr, 0x100000, (void *)-1, &dma_block, &dma_offset ); /* dma_offset = 15 * 1024 * 1024; - + si->nonlocal_mem = (uint32 *)((uint32)si->framebuffer + dma_offset); si->nonlocal_vm_start = (uint32)si->framebuffer_pci + dma_offset;*/ - + // set dynamic clocks for Mobilty chips if (di->is_mobility && di->settings.dynamic_clocks) Radeon_SetDynamicClock( di, 1); - + return B_OK; err0: @@ -416,7 +416,7 @@ err0: err: mem_destroy( di->memmgr[mt_PCI] ); err2: - mem_destroy( di->memmgr[mt_local] ); + mem_destroy( di->memmgr[mt_local] ); err3: Radeon_CleanupIRQ( di ); err4: @@ -433,7 +433,7 @@ err8: // clean up shared info on last close // (we could for device destruction, but this makes -// testing easier as everythings gets cleaned up +// testing easier as everythings gets cleaned up // during tests) void Radeon_LastClose( device_info *di ) { @@ -443,23 +443,23 @@ void Radeon_LastClose( device_info *di ) // M6 fix - unfortunately, the device is never closed by app_server, // not even before reboot if( di->asic == rt_rv100 && di->is_mobility) - OUTREG( di->regs, RADEON_DAC_CNTL2, di->dac2_cntl ); + OUTREG( di->regs, RADEON_DAC_CNTL2, di->dac2_cntl ); mem_destroy( di->memmgr[mt_local] ); - + if( di->memmgr[mt_PCI] ) mem_destroy( di->memmgr[mt_PCI] ); - + if( di->memmgr[mt_AGP] ) mem_destroy( di->memmgr[mt_AGP] ); - + Radeon_CleanupIRQ( di ); Radeon_CleanupPCIGART( di ); Radeon_UnmapDevice(di); - + #ifdef ENABLE_LOGGING -#ifdef LOG_INCLUDE_STARTUP +#ifdef LOG_INCLUDE_STARTUP log_exit( di->si->log ); #endif #endif diff --git a/src/add-ons/kernel/drivers/graphics/s3/driver.cpp b/src/add-ons/kernel/drivers/graphics/s3/driver.cpp index 860512b6ec..e6636e79ff 100644 --- a/src/add-ons/kernel/drivers/graphics/s3/driver.cpp +++ b/src/add-ons/kernel/drivers/graphics/s3/driver.cpp @@ -243,7 +243,7 @@ MapDevice(DeviceInfo& di) pciInfo.vendor_id, pciInfo.device_id, pciInfo.bus, pciInfo.device, pciInfo.function); - si.regsArea = map_physical_memory(areaName, (void*)regsBase, regAreaSize, + si.regsArea = map_physical_memory(areaName, regsBase, regAreaSize, B_ANY_KERNEL_ADDRESS, 0, // neither read nor write, to hide it from user space apps (void**)(&(di.regs))); @@ -259,7 +259,7 @@ MapDevice(DeviceInfo& di) si.videoMemArea = map_physical_memory( areaName, - (void*)videoRamAddr, + videoRamAddr, videoRamSize, B_ANY_KERNEL_BLOCK_ADDRESS | B_MTR_WC, B_READ_AREA + B_WRITE_AREA, @@ -269,7 +269,7 @@ MapDevice(DeviceInfo& di) // Try to map this time without write combining. si.videoMemArea = map_physical_memory( areaName, - (void*)videoRamAddr, + videoRamAddr, videoRamSize, B_ANY_KERNEL_BLOCK_ADDRESS, B_READ_AREA + B_WRITE_AREA, diff --git a/src/add-ons/kernel/drivers/graphics/skeleton/driver.c b/src/add-ons/kernel/drivers/graphics/skeleton/driver.c index 15e2ce2fd1..26e0f4cdc3 100644 --- a/src/add-ons/kernel/drivers/graphics/skeleton/driver.c +++ b/src/add-ons/kernel/drivers/graphics/skeleton/driver.c @@ -110,7 +110,7 @@ static struct { {0x0000, NULL} }; -static settings current_settings = { // see comments in skel.settings +static settings current_settings = { // see comments in skel.settings // for driver DRIVER_PREFIX ".accelerant", false, // dumprom @@ -129,7 +129,7 @@ static void dumprom (void *rom, uint32 size) { int fd; uint32 cnt; - + fd = open ("/boot/home/" DRIVER_PREFIX ".rom", O_WRONLY | O_CREAT, 0666); if (fd < 0) return; @@ -182,7 +182,7 @@ init_hardware(void) { long pci_index = 0; pci_info pcii; bool found_one = false; - + /* choke if we can't find the PCI bus */ if (get_module(B_PCI_MODULE_NAME, (module_info **)&pci_bus) != B_OK) return B_ERROR; @@ -197,7 +197,7 @@ init_hardware(void) { /* while there are more pci devices */ while ((*pci_bus->get_nth_pci_info)(pci_index, &pcii) == B_NO_ERROR) { int vendor = 0; - + /* if we match a supported vendor */ while (SupportedDevices[vendor].vendor) { if (SupportedDevices[vendor].vendor == pcii.vendor_id) { @@ -206,7 +206,7 @@ init_hardware(void) { while (*devices) { /* if we match a supported device */ if (*devices == pcii.device_id ) { - + found_one = true; goto done; } @@ -236,7 +236,7 @@ init_driver(void) { const char *item; char *end; uint32 value; - + // for driver item = get_driver_parameter (settings_handle, "accelerant", "", ""); if ((strlen (item) > 0) && (strlen (item) < sizeof (current_settings.accelerant) - 1)) { @@ -364,7 +364,7 @@ static status_t map_device(device_info *di) { si->use_clone_bugfix = 0; } - + /* work out a name for the register mapping */ sprintf(buffer, DEVICE_FORMAT " regs", di->pcii.vendor_id, di->pcii.device_id, @@ -374,13 +374,13 @@ static status_t map_device(device_info *di) si->regs_area = map_physical_memory( buffer, /* WARNING: Nvidia needs to map regs as viewed from PCI space! */ - (void *) di->pcii.u.h0.base_registers_pci[registers], + di->pcii.u.h0.base_registers_pci[registers], di->pcii.u.h0.base_register_sizes[registers], B_ANY_KERNEL_ADDRESS, (si->use_clone_bugfix ? B_READ_AREA|B_WRITE_AREA : 0), (void **)&(di->regs)); si->clone_bugfix_regs = (uint32 *) di->regs; - + /* if mapping registers to vmem failed then pass on error */ if (si->regs_area < 0) return si->regs_area; @@ -407,7 +407,7 @@ static status_t map_device(device_info *di) rom_area = map_physical_memory( buffer, - (void *)di->pcii.u.h0.rom_base_pci, + di->pcii.u.h0.rom_base_pci, di->pcii.u.h0.rom_size, B_ANY_KERNEL_ADDRESS, B_READ_AREA, @@ -430,7 +430,7 @@ static status_t map_device(device_info *di) /* ROM was not assigned an adress, fetch it from ISA legacy memory map! */ rom_area = map_physical_memory( buffer, - (void *)0x000c0000, + 0x000c0000, 65536, B_ANY_KERNEL_ADDRESS, B_READ_AREA, @@ -466,7 +466,7 @@ static status_t map_device(device_info *di) si->fb_area = map_physical_memory( buffer, /* WARNING: Nvidia needs to map framebuffer as viewed from PCI space! */ - (void *) di->pcii.u.h0.base_registers_pci[frame_buffer], + di->pcii.u.h0.base_registers_pci[frame_buffer], di->pcii.u.h0.base_register_sizes[frame_buffer], B_ANY_KERNEL_BLOCK_ADDRESS | B_MTR_WC, B_READ_AREA + B_WRITE_AREA, @@ -477,13 +477,13 @@ static status_t map_device(device_info *di) si->fb_area = map_physical_memory( buffer, /* WARNING: Nvidia needs to map framebuffer as viewed from PCI space! */ - (void *) di->pcii.u.h0.base_registers_pci[frame_buffer], + di->pcii.u.h0.base_registers_pci[frame_buffer], di->pcii.u.h0.base_register_sizes[frame_buffer], B_ANY_KERNEL_BLOCK_ADDRESS, B_READ_AREA + B_WRITE_AREA, &(si->framebuffer)); } - + /* if there was an error, delete our other areas and pass on error*/ if (si->fb_area < 0) { @@ -496,7 +496,7 @@ static status_t map_device(device_info *di) si->framebuffer_pci = (void *) di->pcii.u.h0.base_registers_pci[frame_buffer]; // remember settings for use here and in accelerant - si->settings = current_settings; + si->settings = current_settings; /* in any case, return the result */ return si->fb_area; @@ -527,7 +527,7 @@ static void probe_devices(void) { /* while there are more pci devices */ while ((count < MAX_DEVICES) && ((*pci_bus->get_nth_pci_info)(pci_index, &(di->pcii)) == B_NO_ERROR)) { int vendor = 0; - + /* if we match a supported vendor */ while (SupportedDevices[vendor].vendor) { if (SupportedDevices[vendor].vendor == di->pcii.vendor_id) { @@ -613,7 +613,7 @@ eng_interrupt(void *data) atomic_and(flags, ~SKD_HANDLER_INSTALLED); exit0: - return handled; + return handled; } static status_t open_hook (const char* name, uint32 flags, void** cookie) { @@ -737,7 +737,7 @@ mark_as_open: /* send the cookie to the opener */ *cookie = di; - + goto done; @@ -809,7 +809,7 @@ free_hook (void* dev) { /* disable and clear any pending interrupts */ disable_vbi(regs); - + /* remove interrupt handler */ remove_io_interrupt_handler(di->pcii.u.h0.interrupt_line, eng_interrupt, di); @@ -850,7 +850,7 @@ control_hook (void* dev, uint32 msg, void *buf, size_t len) { strcpy(sig, current_settings.accelerant); result = B_OK; } break; - + /* PRIVATE ioctl from here on */ case ENG_GET_PRIVATE_DATA: { eng_get_private_data *gpd = (eng_get_private_data *)buf; diff --git a/src/add-ons/kernel/drivers/graphics/tdfx/driver.c b/src/add-ons/kernel/drivers/graphics/tdfx/driver.c index c3710b8732..a7b7c16204 100644 --- a/src/add-ons/kernel/drivers/graphics/tdfx/driver.c +++ b/src/add-ons/kernel/drivers/graphics/tdfx/driver.c @@ -4,7 +4,7 @@ - PPC Port: Andreas Drewke (andreas_dr@gmx.de) - Voodoo3Driver 0.02 (c) by Carwyn Jones (2002) - + */ /* standard kernel driver stuff */ @@ -133,7 +133,7 @@ static device_hooks graphics_device_hooks = static uint16 voodoo_device_list[] = { BANSHEE, // Voodoo Banshee - VOODOO3, // Voodoo + VOODOO3, // Voodoo 0 }; @@ -171,9 +171,9 @@ static struct /* TODO */ -#define voodoo3_disableirq() -#define voodoo3_enableirq() -#define voodoo3_clearirq() +#define voodoo3_disableirq() +#define voodoo3_enableirq() +#define voodoo3_clearirq() #define voodoo3_irqpending() 0 @@ -189,7 +189,7 @@ init_hardware(void) long pci_index = 0; pci_info pcii; bool found_one = FALSE; - + /* choke if we can't find the PCI bus */ if (get_module(B_PCI_MODULE_NAME, (module_info **)&pci_bus) != B_OK) return B_ERROR; @@ -198,7 +198,7 @@ init_hardware(void) while ((*pci_bus->get_nth_pci_info)(pci_index, &pcii) == B_NO_ERROR) { int vendor = 0; - + ddprintf(("TDFXV3: init_hardware(): checking pci index %ld, device 0x%04x/0x%04x\n", pci_index, pcii.vendor_id, pcii.device_id)); /* if we match a supported vendor */ while (SupportedDevices[vendor].vendor) @@ -212,7 +212,7 @@ init_hardware(void) /* if we match a supported device */ if (*devices == pcii.device_id ) { - + ddprintf(("TDFXV3: we support this device\n")); found_one = TRUE; goto done; @@ -322,30 +322,30 @@ static status_t map_device(device_info *di) ddprintf(("TDFXV3: enter map_device\n")); /* enable memory mapped IO, disable VGA I/O */ tmp = get_pci(PCI_command, 2); - tmp |= (PCI_command_memory | PCI_command_io); + tmp |= (PCI_command_memory | PCI_command_io); set_pci(PCI_command, 2, tmp); - ddprintf (("TDFXV3: regs: 0x%lx, size:0x%lx\n",_regs, _regs_size)); - ddprintf (("TDFXV3: io: 0x%lx, size:0x%lx\n",iobase, iobase_size)); - ddprintf (("TDFXV3: fb: 0x%lx, size:0x%lx\n",fb, fb_size)); - + ddprintf (("TDFXV3: regs: 0x%lx, size:0x%lx\n",_regs, _regs_size)); + ddprintf (("TDFXV3: io: 0x%lx, size:0x%lx\n",iobase, iobase_size)); + ddprintf (("TDFXV3: fb: 0x%lx, size:0x%lx\n",fb, fb_size)); + /* map the areas */ sprintf(buffer, "%04X_%04X_%02X%02X%02X regs", di->pcii.vendor_id, di->pcii.device_id, di->pcii.bus, di->pcii.device, di->pcii.function); si->regs_area = map_physical_memory( buffer, - (void *)_regs, + _regs, _regs_size, B_ANY_KERNEL_ADDRESS, 0, /* B_READ_AREA + B_WRITE_AREA, */ /* neither read nor write, to hide it from user space apps */ (void **)&(di->regs)); /* return the error if there was some problem */ if (si->regs_area < 0) return si->regs_area; - + #if __INTEL__ iobase_size = (iobase_size+(B_PAGE_SIZE-1))&~(B_PAGE_SIZE-1); - + sprintf(buffer, "%04X_%04X_%02X%02X%02X io", di->pcii.vendor_id, di->pcii.device_id, di->pcii.bus, di->pcii.device, di->pcii.function); @@ -356,11 +356,11 @@ static status_t map_device(device_info *di) B_ANY_KERNEL_ADDRESS, B_USER_CLONEABLE_AREA | B_READ_AREA | B_WRITE_AREA, (void **)&(si->io)); - // return the error if there was some problem + // return the error if there was some problem /* remember the io_base address for inb, outb */ si->iobase = iobase; - + #else // PPC comes here @@ -382,13 +382,13 @@ static status_t map_device(device_info *di) B_ANY_KERNEL_ADDRESS, B_USER_CLONEABLE_AREA | B_READ_AREA | B_WRITE_AREA, (void **)&si->io); - // return the error if there was some problem + // return the error if there was some problem /* remember the io_base address for inb, outb */ si->iobase = si->io + offset; - ddprintf (("TDFXV3: ioppc_3_cor: 0x%x, size:%li\n",iobase+offset, iobase_size)); - ddprintf (("TDFXV3: ioppc_4(vM): 0x%x, size:%li\n",si->iobase, iobase_size)); + ddprintf (("TDFXV3: ioppc_3_cor: 0x%x, size:%li\n",iobase+offset, iobase_size)); + ddprintf (("TDFXV3: ioppc_4(vM): 0x%x, size:%li\n",si->iobase, iobase_size)); #endif if (si->io_area < 0) @@ -438,7 +438,7 @@ static status_t map_device(device_info *di) &(si->framebuffer)); } #endif - + /* if there was an error, delete our other areas */ if (si->fb_area < 0) { delete_area(si->regs_area); @@ -448,7 +448,7 @@ static status_t map_device(device_info *di) } /* remember the DMA address of the frame buffer for BDirectWindow purposes */ si->framebuffer_pci = (void *)fb; - + /* in any case, return the result */ ddprintf(("TDFXV3: leave map_device\n")); return si->fb_area; @@ -462,7 +462,7 @@ static void unmap_device(device_info *di) ddprintf(("TDFXV3: unmap_device(%08lx) begins...\n", (uint32)di)); ddprintf(("\tregs_area: %ld\n\tfb_area: %ld\n", si->regs_area, si->fb_area)); - + /* disable memory mapped IO */ tmp = get_pci(PCI_command, 4); tmp &= 0xfffffffc; @@ -489,7 +489,7 @@ static void probe_devices(void) while ((count < MAX_DEVICES) && ((*pci_bus->get_nth_pci_info)(pci_index, &(di->pcii)) == B_NO_ERROR)) { int vendor = 0; - + ddprintf(("TDFXV3: checking pci index %ld, device 0x%04x/0x%04x\n", pci_index, di->pcii.vendor_id, di->pcii.device_id)); /* if we match a supported vendor */ while (SupportedDevices[vendor].vendor) @@ -543,7 +543,7 @@ next_device: static uint32 thread_interrupt_work(int32 *flags, vuint32 *regs, shared_info *si) { - + uint32 handled = B_HANDLED_INTERRUPT; /* release the vblank semaphore */ if (si->vblank >= 0) @@ -600,7 +600,7 @@ voodoo_interrupt(void *data) atomic_and(flags, ~SKD_HANDLER_INSTALLED); exit0: - return handled; + return handled; } #if defined(POST_R4_0) @@ -626,7 +626,7 @@ static int32 timer_interrupt_func(timer *te, uint32 pc) /* insert code to sync to interrupts here */ if (!vbl_status) { when -= si->blank_period - 4; - } + } /* do the things we do when we notice a vertical retrace */ result = thread_interrupt_work(flags, regs, si); @@ -652,45 +652,45 @@ static int32 fake_interrupt_thread_func(void *_di) shared_info *si = di->si; int32 *flags = &(si->flags); vuint32 *regs = di->regs; - + bigtime_t last_sync; bigtime_t this_sync; bigtime_t diff_sync; - + uint32 counter = 1; - + /* a lie, but we have to start somewhen */ - + last_sync = system_time() - 8333; - + ddprintf(("TDFXV3: fake_interrupt_thread_func begins\ndi: 0x%08lx\nsi: 0x%08lx\nflags: 0x%08lx\n", (uint32)di, (uint32)si, (uint32)flags)); - + /* loop until notified */ - + while(atomic_and(flags, -1) & SKD_HANDLER_INSTALLED) { /* see if "interrupts" are enabled */ - + if((volatile int32)(di->can_interrupt)) { /* poll the retrace flag until set */ - + /* YOUR CODE HERE */ - + /* get the system_time */ this_sync = system_time(); - + /* do our stuff */ thread_interrupt_work(flags, regs, si); } else { /* get the system_time */ this_sync = system_time(); } - + /* find out how long it took */ diff_sync = this_sync - last_sync; - + /* back off a little so we're sure to catch the retrace */ diff_sync -= diff_sync / 10; - + /* impose some limits so we can recover from refresh rate changes Supported refresh rates are 48 Hz - 120 Hz, so these limits should @@ -699,27 +699,27 @@ static int32 fake_interrupt_thread_func(void *_di) if(diff_sync < 8000) { diff_sync = 8000; /* not less than 1/125th of sec */ } - + if(diff_sync > 16666) { diff_sync = 20000; /* not more than 1/40th of sec */ } - + if((counter++ & 0x01ff) == 0) { diff_sync >>= 2; /* periodically quarter the wait to resync */ } - + /* update for next go-around */ last_sync = this_sync; - + /* snooze until our next retrace */ - + snooze_until(this_sync + diff_sync, B_SYSTEM_TIMEBASE); } - + ddprintf(("TDFXV3: fake_interrupt_thread_func ends with flags = 0x%08lx\n", *flags)); - + /* gotta return something */ - + return B_OK; } #endif @@ -851,7 +851,7 @@ static status_t open_hook (const char* name, uint32 flags, void** cookie) /* bail if we can't add the timer */ if (result != B_OK) goto delete_the_sem; #else - /* fake some kind of interrupt with a thread */ + /* fake some kind of interrupt with a thread */ result = di->tid = spawn_kernel_thread(fake_interrupt_thread_func, "SKD fake interrupt", B_REAL_TIME_DISPLAY_PRIORITY, di); /* bail if we can't spawn the thread */ if(result < 0) goto delete_the_sem; @@ -872,7 +872,7 @@ mark_as_open: /* send the cookie to the opener */ *cookie = di; - + goto done; @@ -949,7 +949,7 @@ free_hook (void* dev) { voodoo3_disableirq(); /* disable and clear any pending interrupts */ *regs = *regs; /* CHANGE ME */ - + /* if we were faking the interrupts */ if ((di->pcii.u.h0.interrupt_pin == 0x00) || (di->pcii.u.h0.interrupt_line == 0xff)){ /* stop our interrupt faking thread */ @@ -966,7 +966,7 @@ free_hook (void* dev) { /* After R4.0 we can do it ourselves, but we'd rather use timers */ #endif /* otherwise */ - + } else { /* remove interrupt handler */ remove_io_interrupt_handler(di->pcii.u.h0.interrupt_line, voodoo_interrupt, di); @@ -1013,7 +1013,7 @@ control_hook (void* dev, uint32 msg, void *buf, size_t len) result = B_OK; } break; - + /* PRIVATE ioctl from here on */ case VOODOO_GET_PRIVATE_DATA: { diff --git a/src/add-ons/kernel/drivers/graphics/vesa/vesa.cpp b/src/add-ons/kernel/drivers/graphics/vesa/vesa.cpp index 1df8cc14e3..5dd241a334 100644 --- a/src/add-ons/kernel/drivers/graphics/vesa/vesa.cpp +++ b/src/add-ons/kernel/drivers/graphics/vesa/vesa.cpp @@ -257,7 +257,7 @@ remap_frame_buffer(vesa_info& info, addr_t physicalBase, uint32 width, } if (remap) { - area_id area = map_physical_memory("vesa frame buffer", (void*)base, + area_id area = map_physical_memory("vesa frame buffer", base, size, B_ANY_KERNEL_ADDRESS, B_READ_AREA | B_WRITE_AREA, (void**)&frameBuffer); if (area < 0) diff --git a/src/add-ons/kernel/drivers/graphics/via/driver.c b/src/add-ons/kernel/drivers/graphics/via/driver.c index 9018d29b94..1639712731 100644 --- a/src/add-ons/kernel/drivers/graphics/via/driver.c +++ b/src/add-ons/kernel/drivers/graphics/via/driver.c @@ -115,7 +115,7 @@ static struct { {0x0000, NULL} }; -static settings current_settings = { // see comments in skel.settings +static settings current_settings = { // see comments in skel.settings // for driver DRIVER_PREFIX ".accelerant", false, // dumprom @@ -134,7 +134,7 @@ static void dumprom (void *rom, uint32 size) { int fd; uint32 cnt; - + fd = open ("/boot/home/" DRIVER_PREFIX ".rom", O_WRONLY | O_CREAT, 0666); if (fd < 0) return; @@ -187,7 +187,7 @@ init_hardware(void) { long pci_index = 0; pci_info pcii; bool found_one = false; - + /* choke if we can't find the PCI bus */ if (get_module(B_PCI_MODULE_NAME, (module_info **)&pci_bus) != B_OK) return B_ERROR; @@ -202,7 +202,7 @@ init_hardware(void) { /* while there are more pci devices */ while ((*pci_bus->get_nth_pci_info)(pci_index, &pcii) == B_NO_ERROR) { int vendor = 0; - + /* if we match a supported vendor */ while (SupportedDevices[vendor].vendor) { if (SupportedDevices[vendor].vendor == pcii.vendor_id) { @@ -211,7 +211,7 @@ init_hardware(void) { while (*devices) { /* if we match a supported device */ if (*devices == pcii.device_id ) { - + found_one = true; goto done; } @@ -241,7 +241,7 @@ init_driver(void) { const char *item; char *end; uint32 value; - + // for driver item = get_driver_parameter (settings_handle, "accelerant", "", ""); if ((strlen (item) > 0) && (strlen (item) < sizeof (current_settings.accelerant) - 1)) { @@ -328,7 +328,7 @@ void uninit_driver(void) { put_module(B_ISA_MODULE_NAME); /* put the agp module away if it's there */ - if (agp_bus) + if (agp_bus) put_module(B_AGP_GART_MODULE_NAME); } @@ -373,7 +373,7 @@ static status_t map_device(device_info *di) { si->use_clone_bugfix = 0; } - + /* work out a name for the register mapping */ sprintf(buffer, DEVICE_FORMAT " regs", di->pcii.vendor_id, di->pcii.device_id, @@ -383,13 +383,13 @@ static status_t map_device(device_info *di) si->regs_area = map_physical_memory( buffer, /* WARNING: Nvidia needs to map regs as viewed from PCI space! */ - (void *) di->pcii.u.h0.base_registers_pci[registers], + di->pcii.u.h0.base_registers_pci[registers], di->pcii.u.h0.base_register_sizes[registers], B_ANY_KERNEL_ADDRESS, (si->use_clone_bugfix ? B_READ_AREA|B_WRITE_AREA : 0), (void **)&(di->regs)); si->clone_bugfix_regs = (uint32 *) di->regs; - + /* if mapping registers to vmem failed then pass on error */ if (si->regs_area < 0) return si->regs_area; @@ -492,7 +492,7 @@ static status_t map_device(device_info *di) B_READ_AREA + B_WRITE_AREA, &(si->framebuffer)); } - + /* if there was an error, delete our other areas and pass on error*/ if (si->fb_area < 0) { @@ -505,7 +505,7 @@ static status_t map_device(device_info *di) si->framebuffer_pci = (void *) di->pcii.u.h0.base_registers_pci[frame_buffer]; // remember settings for use here and in accelerant - si->settings = current_settings; + si->settings = current_settings; /* in any case, return the result */ return si->fb_area; @@ -536,7 +536,7 @@ static void probe_devices(void) { /* while there are more pci devices */ while ((count < MAX_DEVICES) && ((*pci_bus->get_nth_pci_info)(pci_index, &(di->pcii)) == B_NO_ERROR)) { int vendor = 0; - + /* if we match a supported vendor */ while (SupportedDevices[vendor].vendor) { if (SupportedDevices[vendor].vendor == di->pcii.vendor_id) { @@ -622,7 +622,7 @@ eng_interrupt(void *data) atomic_and(flags, ~SKD_HANDLER_INSTALLED); exit0: - return handled; + return handled; } static status_t open_hook (const char* name, uint32 flags, void** cookie) { @@ -725,7 +725,7 @@ mark_as_open: /* send the cookie to the opener */ *cookie = di; - + goto done; @@ -797,7 +797,7 @@ free_hook (void* dev) { /* disable and clear any pending interrupts */ disable_vbi(regs); - + /* remove interrupt handler */ remove_io_interrupt_handler(di->pcii.u.h0.interrupt_line, eng_interrupt, di); @@ -838,7 +838,7 @@ control_hook (void* dev, uint32 msg, void *buf, size_t len) { strcpy(sig, current_settings.accelerant); result = B_OK; } break; - + /* PRIVATE ioctl from here on */ case ENG_GET_PRIVATE_DATA: { eng_get_private_data *gpd = (eng_get_private_data *)buf; diff --git a/src/add-ons/kernel/drivers/graphics/vmware/device.c b/src/add-ons/kernel/drivers/graphics/vmware/device.c index 6daf315fbc..6bf4a2b35c 100644 --- a/src/add-ons/kernel/drivers/graphics/vmware/device.c +++ b/src/add-ons/kernel/drivers/graphics/vmware/device.c @@ -95,13 +95,13 @@ MapDevice() /* Map the frame buffer */ si->fbArea = map_physical_memory("VMware frame buffer", - si->fbDma, si->fbSize, B_ANY_KERNEL_BLOCK_ADDRESS|B_MTR_WC, + (addr_t)si->fbDma, si->fbSize, B_ANY_KERNEL_BLOCK_ADDRESS|B_MTR_WC, B_READ_AREA|B_WRITE_AREA, (void **)&si->fb); if (si->fbArea < 0) { /* Try again without write combining */ writeCombined = 0; si->fbArea = map_physical_memory("VMware frame buffer", - si->fbDma, si->fbSize, B_ANY_KERNEL_BLOCK_ADDRESS, + (addr_t)si->fbDma, si->fbSize, B_ANY_KERNEL_BLOCK_ADDRESS, B_READ_AREA|B_WRITE_AREA, (void **)&si->fb); } if (si->fbArea < 0) { @@ -114,7 +114,7 @@ MapDevice() /* Map the fifo */ si->fifoArea = map_physical_memory("VMware fifo", - si->fifoDma, si->fifoSize, B_ANY_KERNEL_BLOCK_ADDRESS, + (addr_t)si->fifoDma, si->fifoSize, B_ANY_KERNEL_BLOCK_ADDRESS, B_READ_AREA|B_WRITE_AREA, (void **)&si->fifo); if (si->fifoArea < 0) { TRACE("failed to map fifo\n"); @@ -267,7 +267,7 @@ UpdateCursor(SharedInfo *si) WriteReg(SVGA_REG_CURSOR_X, si->cursorX); WriteReg(SVGA_REG_CURSOR_Y, si->cursorY); WriteReg(SVGA_REG_CURSOR_ON, si->cursorShow ? SVGA_CURSOR_ON_SHOW : - SVGA_CURSOR_ON_HIDE); + SVGA_CURSOR_ON_HIDE); } @@ -329,8 +329,8 @@ ControlHook(void *dev, uint32 msg, void *buf, size_t len) for (i = 0; i < 256; i++) { WriteReg(SVGA_PALETTE_BASE + 3 * i, *color++); WriteReg(SVGA_PALETTE_BASE + 3 * i + 1, *color++); - WriteReg(SVGA_PALETTE_BASE + 3 * i + 2, *color++); - } + WriteReg(SVGA_PALETTE_BASE + 3 * i + 2, *color++); + } return B_OK; } @@ -349,7 +349,7 @@ ControlHook(void *dev, uint32 msg, void *buf, size_t len) UpdateCursor(si); return B_OK; } - + case VMWARE_GET_DEVICE_NAME: dprintf("device: VMWARE_GET_DEVICE_NAME %s\n", gPd->names[0]); #ifdef HAIKU_TARGET_PLATFORM_HAIKU @@ -360,7 +360,7 @@ ControlHook(void *dev, uint32 msg, void *buf, size_t len) strlcpy((char *)buf, gPd->names[0], B_PATH_NAME_LENGTH); #endif return B_OK; - + } TRACE("ioctl: %ld, %p, %ld\n", msg, buf, len); diff --git a/src/add-ons/kernel/drivers/misc/mem.c b/src/add-ons/kernel/drivers/misc/mem.c index 89b8c57396..229c553549 100644 --- a/src/add-ons/kernel/drivers/misc/mem.c +++ b/src/add-ons/kernel/drivers/misc/mem.c @@ -155,7 +155,7 @@ mem_map_target(off_t position, size_t length, uint32 protection, void **virtualAddress) { area_id area; - void *physicalAddress; + phys_addr_t physicalAddress; size_t offset; size_t size; @@ -164,10 +164,10 @@ mem_map_target(off_t position, size_t length, uint32 protection, return EINVAL; /* the first page address */ - physicalAddress = (void *)(addr_t)(position & ~((off_t)B_PAGE_SIZE - 1)); + physicalAddress = (phys_addr_t)position & ~((off_t)B_PAGE_SIZE - 1); /* offset of target into it */ - offset = position - (off_t)(addr_t)physicalAddress; + offset = position - (off_t)physicalAddress; /* size of the whole mapping (page rounded) */ size = (offset + length + B_PAGE_SIZE - 1) & ~((size_t)B_PAGE_SIZE - 1); diff --git a/src/add-ons/kernel/drivers/misc/poke.c b/src/add-ons/kernel/drivers/misc/poke.c index 0e4da7ef7f..91c12931e2 100644 --- a/src/add-ons/kernel/drivers/misc/poke.c +++ b/src/add-ons/kernel/drivers/misc/poke.c @@ -208,7 +208,7 @@ poke_control(void* cookie, uint32 op, void* arg, size_t length) pci_io_args* ioctl = (pci_io_args*)arg; if (ioctl->signature != POKE_SIGNATURE) return B_BAD_VALUE; - + ioctl->value = pci->read_pci_config(ioctl->bus, ioctl->device, ioctl->function, ioctl->offset, ioctl->size); return B_OK; @@ -245,7 +245,8 @@ poke_control(void* cookie, uint32 op, void* arg, size_t length) return B_BAD_VALUE; result = get_memory_map(ioctl->address, ioctl->size, &table, 1); - ioctl->physical_address = table.address; + ioctl->physical_address = (void*)(addr_t)table.address; + // TODO: mem_map_args::physical_address should be phys_addr_t! ioctl->size = table.size; return result; } @@ -257,7 +258,7 @@ poke_control(void* cookie, uint32 op, void* arg, size_t length) return B_BAD_VALUE; ioctl->area = map_physical_memory(ioctl->name, - ioctl->physical_address, ioctl->size, ioctl->flags, + (addr_t)ioctl->physical_address, ioctl->size, ioctl->flags, ioctl->protection, (void**)&ioctl->address); return ioctl->area; } diff --git a/src/add-ons/kernel/drivers/network/bcm440x/b44mm.h b/src/add-ons/kernel/drivers/network/bcm440x/b44mm.h index 53f810bae3..67acbe7588 100644 --- a/src/add-ons/kernel/drivers/network/bcm440x/b44mm.h +++ b/src/add-ons/kernel/drivers/network/bcm440x/b44mm.h @@ -42,7 +42,7 @@ typedef vint32 MM_ATOMIC_T; #define MM_MEMREADL(ptr) __raw_readl(ptr) #ifdef __INTEL__ -#define mb() __asm__ __volatile__ ("lock; addl $0,0(%%esp)": : :"memory") +#define mb() __asm__ __volatile__ ("lock; addl $0,0(%%esp)": : :"memory") #else #ifdef __HAIKU__ #define mb() memory_write_barrier() @@ -70,28 +70,28 @@ extern int b44_Packet_Desc_Size; struct be_b44_dev { LM_DEVICE_BLOCK lm_dev; - + struct pci_info pci_data; - + sem_id packet_release_sem; //sem_id interrupt_sem; //thread_id interrupt_handler; - + LM_RX_PACKET_Q RxPacketReadQ; - + void *mem_list[16]; int mem_list_num; - + area_id lockmem_list[16]; int lockmem_list_num; - + area_id mem_base; - + vint32 opened; int block; spinlock lock; - + #ifdef HAIKU_TARGET_PLATFORM_HAIKU sem_id linkChangeSem; #endif @@ -99,7 +99,7 @@ struct be_b44_dev { struct B_UM_PACKET { struct _LM_PACKET pkt; - + void *data; size_t size; }; @@ -109,9 +109,9 @@ static inline void b44_MM_MapRxDma(PLM_DEVICE_BLOCK pDevice, LM_UINT32 *paddr) { physical_entry entry; - + get_memory_map(pPacket->u.Rx.pRxBufferVirt,pPacket->u.Rx.RxBufferSize,&entry,1); - *paddr = (LM_UINT32) entry.address; + *paddr = entry.address; } static inline void b44_MM_MapTxDma(PLM_DEVICE_BLOCK pDevice, @@ -120,9 +120,9 @@ static inline void b44_MM_MapTxDma(PLM_DEVICE_BLOCK pDevice, { struct B_UM_PACKET *pkt = (struct B_UM_PACKET *)pPacket; physical_entry entry; - + get_memory_map(pkt->data,pkt->size,&entry,1); - *paddr = (LM_UINT32) entry.address; + *paddr = entry.address; *len = pPacket->PacketSize; } @@ -143,5 +143,5 @@ static inline void b44_MM_MapTxDma(PLM_DEVICE_BLOCK pDevice, if (!(expr)) { \ dprintf("ASSERT failed: %s\n", #expr); \ } - + #endif diff --git a/src/add-ons/kernel/drivers/network/bcm440x/b44um.c b/src/add-ons/kernel/drivers/network/bcm440x/b44um.c index 7972e75e9f..3d61ab18bc 100644 --- a/src/add-ons/kernel/drivers/network/bcm440x/b44um.c +++ b/src/add-ons/kernel/drivers/network/bcm440x/b44um.c @@ -108,7 +108,7 @@ init_driver(void) be_b44_dev_cards[sCardsFound].packet_release_sem = create_sem(0, sDeviceNames[sCardsFound]); be_b44_dev_cards[sCardsFound].mem_list_num = 0; - be_b44_dev_cards[sCardsFound].lockmem_list_num = 0; + be_b44_dev_cards[sCardsFound].lockmem_list_num = 0; be_b44_dev_cards[sCardsFound].opened = 0; be_b44_dev_cards[sCardsFound].block = 1; be_b44_dev_cards[sCardsFound].lock = 0; @@ -141,7 +141,7 @@ init_driver(void) void uninit_driver(void) { - struct be_b44_dev *pUmDevice; + struct be_b44_dev *pUmDevice; int i, j; for (j = 0; j < sCardsFound; j++) { @@ -150,13 +150,13 @@ uninit_driver(void) free(pUmDevice->mem_list[i]); for (i = 0; i < pUmDevice->lockmem_list_num; i++) delete_area(pUmDevice->lockmem_list[i]); - + delete_area(pUmDevice->mem_base); - + delete_sem(be_b44_dev_cards[j].packet_release_sem); free((void *)sDeviceNames[j]); } - + mempool_exit(); } @@ -271,7 +271,7 @@ b44_ioctl(void *cookie,uint32 op, void *data, size_t len) case ETHER_GET_LINK_STATE: { ether_link_state_t state; - + if (pUmDevice->lm_dev.corerev < 7) { b44_LM_PollLink(&pUmDevice->lm_dev); } @@ -295,7 +295,7 @@ b44_ioctl(void *cookie,uint32 op, void *data, size_t len) return user_memcpy(data, &state, sizeof(ether_link_state_t)); } - + case ETHER_SET_LINK_STATE_SEM: { if (user_memcpy(&pUmDevice->linkChangeSem, data, sizeof(sem_id)) < B_OK) { @@ -484,7 +484,10 @@ b44_MM_MapMemBase(PLM_DEVICE_BLOCK pDevice) get_module(B_PCI_MODULE_NAME,(module_info **)&pci); size = ROUNDUP(size,B_PAGE_SIZE); - pUmDevice->mem_base = map_physical_memory("bcm440x_regs",(void *)(pUmDevice->pci_data.u.h0.base_registers[0]),size,B_ANY_KERNEL_BLOCK_ADDRESS,B_READ_AREA | B_WRITE_AREA,(void **)(&pDevice->pMappedMemBase)); + pUmDevice->mem_base = map_physical_memory("bcm440x_regs", + pUmDevice->pci_data.u.h0.base_registers[0], size, + B_ANY_KERNEL_BLOCK_ADDRESS, B_READ_AREA | B_WRITE_AREA, + (void **)(&pDevice->pMappedMemBase)); return LM_STATUS_SUCCESS; } @@ -508,7 +511,7 @@ b44_MM_IndicateRxPackets(PLM_DEVICE_BLOCK pDevice) { struct be_b44_dev *dev = (struct be_b44_dev *)pDevice; PLM_PACKET pPacket; - + while (1) { pPacket = (PLM_PACKET) QQ_PopHead(&pDevice->RxPacketReceivedQ.Container); @@ -541,7 +544,7 @@ tx_cleanup_thread(void *us) struct B_UM_PACKET *pUmPacket; cpu_status cpu; - while (1) { + while (1) { cpu = disable_interrupts(); acquire_spinlock(&pUmDevice->lock); @@ -565,7 +568,7 @@ tx_cleanup_thread(void *us) } return LM_STATUS_SUCCESS; } - + /*LM_STATUS b44_MM_StartTxDma(PLM_DEVICE_BLOCK pDevice, PLM_PACKET pPacket); LM_STATUS b44_MM_CompleteTxDma(PLM_DEVICE_BLOCK pDevice, PLM_PACKET pPacket);*/ @@ -582,7 +585,7 @@ b44_MM_AllocateMemory(PLM_DEVICE_BLOCK pDevice, LM_UINT32 BlockSize, *pMemoryBlockVirt = dev->mem_list[(dev->mem_list_num)++] = (void *)malloc(BlockSize); return LM_STATUS_SUCCESS; } - + LM_STATUS b44_MM_AllocateSharedMemory(PLM_DEVICE_BLOCK pDevice, LM_UINT32 BlockSize, @@ -604,7 +607,7 @@ b44_MM_AllocateSharedMemory(PLM_DEVICE_BLOCK pDevice, LM_UINT32 BlockSize, *pMemoryBlockVirt = (PLM_VOID) pvirt; get_memory_map(pvirt,BlockSize,&entry,1); - *pMemoryBlockPhy = (LM_PHYSICAL_ADDRESS) entry.address; + *pMemoryBlockPhy = entry.address; return LM_STATUS_SUCCESS; } @@ -629,7 +632,7 @@ b44_MM_IndicateStatus(PLM_DEVICE_BLOCK pDevice, LM_STATUS Status) { #ifdef HAIKU_TARGET_PLATFORM_HAIKU struct be_b44_dev *pUmDevice = (struct be_b44_dev *)pDevice; - + if (pUmDevice->linkChangeSem != -1) release_sem_etc(pUmDevice->linkChangeSem, 1, B_DO_NOT_RESCHEDULE); diff --git a/src/add-ons/kernel/drivers/network/bcm570x/b57um.c b/src/add-ons/kernel/drivers/network/bcm570x/b57um.c index 0cd8e924f2..7842bbce5b 100644 --- a/src/add-ons/kernel/drivers/network/bcm570x/b57um.c +++ b/src/add-ons/kernel/drivers/network/bcm570x/b57um.c @@ -780,7 +780,7 @@ MM_MapMemBase(PLM_DEVICE_BLOCK pDevice) size = ROUND_UP_TO_PAGE(size); pUmDevice->mem_base = map_physical_memory("broadcom_regs", - (void *)(pUmDevice->pci_data.u.h0.base_registers[0]), size, + pUmDevice->pci_data.u.h0.base_registers[0], size, B_ANY_KERNEL_BLOCK_ADDRESS, 0, (void **)(&pDevice->pMappedMemBase)); @@ -897,8 +897,8 @@ MM_AllocateSharedMemory(PLM_DEVICE_BLOCK pDevice, LM_UINT32 BlockSize, *pMemoryBlockVirt = (PLM_VOID) pvirt; get_memory_map(pvirt,BlockSize,&entry,1); - pMemoryBlockPhy->Low = (uint32)(entry.address); - pMemoryBlockPhy->High = 0; + pMemoryBlockPhy->Low = (uint32)entry.address; + pMemoryBlockPhy->High = (uint32)(entry.address >> 32); /* We only support 32 bit */ return LM_STATUS_SUCCESS; diff --git a/src/add-ons/kernel/drivers/network/bcm570x/mm.h b/src/add-ons/kernel/drivers/network/bcm570x/mm.h index 10709878ad..7a0f6c2667 100644 --- a/src/add-ons/kernel/drivers/network/bcm570x/mm.h +++ b/src/add-ons/kernel/drivers/network/bcm570x/mm.h @@ -42,13 +42,13 @@ typedef vint32 MM_ATOMIC_T; #define MM_MEMREADL(ptr) __raw_readl(ptr) #ifdef __INTEL__ -#define mb() __asm__ __volatile__ ("lock; addl $0,0(%%esp)": : :"memory") +#define mb() __asm__ __volatile__ ("lock; addl $0,0(%%esp)": : :"memory") #else #ifdef __HAIKU__ #define mb() memory_write_barrier() #else #warning no memory barrier function defined. -#define mb() +#define mb() #endif #endif #define wmb() mb() @@ -72,28 +72,28 @@ extern int b57_Packet_Desc_Size; struct be_b57_dev { struct _LM_DEVICE_BLOCK lm_dev; - + struct pci_info pci_data; - + sem_id packet_release_sem; //sem_id interrupt_sem; //thread_id interrupt_handler; - + LM_RX_PACKET_Q RxPacketReadQ; - + void *mem_list[16]; int mem_list_num; - + area_id lockmem_list[16]; int lockmem_list_num; - + area_id mem_base; - + vint32 opened; int block; spinlock lock; cpu_status cpu; - + #ifdef HAIKU_TARGET_PLATFORM_HAIKU sem_id linkChangeSem; #endif @@ -101,7 +101,7 @@ struct be_b57_dev { struct B_UM_PACKET { struct _LM_PACKET pkt; - + void *data; size_t size; }; @@ -112,10 +112,10 @@ static inline void MM_MapRxDma(PLM_DEVICE_BLOCK pDevice, { physical_entry entry; struct B_UM_PACKET *bpkt = (struct B_UM_PACKET *)(pPacket); - + get_memory_map(bpkt->data,pPacket->u.Rx.RxBufferSize,&entry,1); - paddr->Low = (LM_UINT32) entry.address; - paddr->High = 0L; + paddr->Low = (LM_UINT32)entry.address; + paddr->High = (LM_UINT32)(entry.address >> 32); } static inline void MM_MapTxDma(PLM_DEVICE_BLOCK pDevice, @@ -124,10 +124,10 @@ static inline void MM_MapTxDma(PLM_DEVICE_BLOCK pDevice, { struct B_UM_PACKET *pkt = (struct B_UM_PACKET *)pPacket; physical_entry entry; - + get_memory_map(pkt->data,pkt->size,&entry,1); - paddr->Low = (LM_UINT32) entry.address; - paddr->High = 0L; + paddr->Low = (LM_UINT32)entry.address; + paddr->High = (LM_UINT32)(entry.address >> 32); *len = pPacket->PacketSize; } @@ -154,7 +154,7 @@ static inline void MM_MapTxDma(PLM_DEVICE_BLOCK pDevice, #define MM_RELEASE_PHY_LOCK_IN_IRQ(_pDevice) /*\ release_spinlock(&(((struct be_b57_dev *)(_pDevice))->lock)); \ enable_interrupts(((struct be_b57_dev *)(_pDevice))->cpu);*/ - + #define MM_PTR(_ptr) ((unsigned long) (_ptr)) #define MM_UINT_PTR(_ptr) ((unsigned long) (_ptr)) #define printf(fmt, args...) dprintf(fmt, ##args) @@ -165,5 +165,5 @@ static inline void MM_MapTxDma(PLM_DEVICE_BLOCK pDevice, if (!(expr)) { \ dprintf("ASSERT failed: %s\n", #expr); \ } - + #endif diff --git a/src/add-ons/kernel/drivers/network/dp83815/driver.c b/src/add-ons/kernel/drivers/network/dp83815/driver.c index 50a60d7714..4bf2006565 100644 --- a/src/add-ons/kernel/drivers/network/dp83815/driver.c +++ b/src/add-ons/kernel/drivers/network/dp83815/driver.c @@ -162,7 +162,9 @@ static status_t close_hook( void * ); TRACE(( kDevName " _open_hook(): PCI base=%lx size=%lx offset=%lx\n", base, size, offset)); - data->ioarea = map_physical_memory(kDevName " Regs", (void *)base, size, B_ANY_KERNEL_ADDRESS, B_READ_AREA | B_WRITE_AREA, (void **)&data->reg_base); + data->ioarea = map_physical_memory(kDevName " Regs", base, size, + B_ANY_KERNEL_ADDRESS, B_READ_AREA | B_WRITE_AREA, + (void **)&data->reg_base); data->reg_base = data->reg_base + offset; } @@ -654,10 +656,10 @@ static status_t init_ring_buffers(dp83815_properties_t *data) get_area_info(data->mem_area, &info); get_memory_map(info.address, info.size, map, 4); - desc_base_phys_addr = (int)map[0].address + NUM_BUFFS*BUFFER_SIZE; - desc_base_virt_addr = (info.address + NUM_BUFFS*BUFFER_SIZE); + desc_base_phys_addr = map[0].address + NUM_BUFFS*BUFFER_SIZE; + desc_base_virt_addr = info.address + NUM_BUFFS*BUFFER_SIZE; - buff_base_phys_addr = (int)map[0].address; + buff_base_phys_addr = map[0].address; buff_base_virt_addr = info.address; RxDescRing = desc_base_virt_addr; diff --git a/src/add-ons/kernel/drivers/network/dp83815/util.c b/src/add-ons/kernel/drivers/network/dp83815/util.c index 121fc540c9..93588d321e 100644 --- a/src/add-ons/kernel/drivers/network/dp83815/util.c +++ b/src/add-ons/kernel/drivers/network/dp83815/util.c @@ -63,6 +63,7 @@ round_to_pagesize(uint32 size) area_id alloc_mem(void **log, void **phy, size_t size, const char *name) { +// TODO: phy should be phys_addr_t*! physical_entry pe; void * logadr; area_id areaid; @@ -87,7 +88,7 @@ alloc_mem(void **log, void **phy, size_t size, const char *name) if (log) *log = logadr; if (phy) - *phy = pe.address; + *phy = (void*)(addr_t)pe.address; dprintf("area = %ld, size = %ld, log = %p, phy = %p\n",areaid,size,logadr,pe.address); return areaid; } @@ -111,7 +112,8 @@ map_mem(void **log, void *phy, size_t size, const char *name) offset = (uint32)phy & (B_PAGE_SIZE - 1); phyadr = (void *) ( (uint32)phy - offset ); size = round_to_pagesize(size + offset); - area = map_physical_memory(name, phyadr, size, B_ANY_KERNEL_BLOCK_ADDRESS, B_READ_AREA | B_WRITE_AREA, &mapadr); + area = map_physical_memory(name, (addr_t)phyadr, size, + B_ANY_KERNEL_BLOCK_ADDRESS, B_READ_AREA | B_WRITE_AREA, &mapadr); *log = (void *) ( (uint32)mapadr + offset ); dprintf("physical = %p, logical = %p, offset = %#lx, phyadr = %p, mapadr = %p, size = %#lx, area = %#lx\n", diff --git a/src/add-ons/kernel/drivers/network/etherpci/etherpci.c b/src/add-ons/kernel/drivers/network/etherpci/etherpci.c index 73519acd3f..7b20fdd689 100644 --- a/src/add-ons/kernel/drivers/network/etherpci/etherpci.c +++ b/src/add-ons/kernel/drivers/network/etherpci/etherpci.c @@ -20,7 +20,7 @@ #define kDevName "etherpci" #define kDevDir "net/" kDevName "/" -#define DEVNAME_LENGTH 64 +#define DEVNAME_LENGTH 64 #define MAX_CARDS 4 /* maximum number of driver instances */ int32 api_version = B_CUR_DRIVER_API_VERSION; @@ -76,12 +76,12 @@ device_hooks *find_device(const char *name); * register page and it may not be 100% reliable. The technique used is to * make sure all ring headers are zeroed out before packets are received * into them. Then, if you detect a non-zero ring header, you can be pretty - * sure that it is another packet. - * + * sure that it is another packet. + * * We never read the "might-be-a-packet" immediately. Instead, we just * release a semaphore so that the next read will occur later on enough * so that the ring header information should be completely filled in. - * + * */ #define STAY_ON_PAGE_0 0 @@ -131,8 +131,8 @@ typedef struct etherpci_private { /* * Most recent values of the error statistics to detect any changes in them */ - int rerrs_last; - int werrs_last; + int rerrs_last; + int werrs_last; int interrs_last; int frame_errs_last; int crc_errs_last; @@ -157,7 +157,7 @@ typedef struct etherpci_private { int EC_RINGSIZE; uint32 debug; - + } etherpci_private_t; @@ -181,13 +181,13 @@ typedef struct etherpci_private { #if __INTEL__ uint8 ether_inb(etherpci_private_t *device, uint32 offset) { - uint8 result; + uint8 result; result = ((*gPCIModInfo->read_io_8)(device->reg_base + (offset))); ETHER_DEBUG(PCI_IO, device->debug, " inb(%x) %x \n", offset, result); return result; }; uint16 ether_inw(etherpci_private_t *device, uint32 offset) { - uint16 result; + uint16 result; result = ((*gPCIModInfo->read_io_16)(device->reg_base + (offset))); ETHER_DEBUG(PCI_IO, device->debug, " inw(%x) %x \n", offset, result); return result; @@ -205,14 +205,14 @@ void ether_outw(etherpci_private_t *device, uint32 offset, uint16 value) { #else /* PPC */ uint8 ether_inb(etherpci_private_t *device, uint32 offset) { - uint8 result; + uint8 result; result = (*((volatile uint8*) (device->reg_base + (offset)))); __eieio(); ETHER_DEBUG(PCI_IO, device->debug, " inb(%x) %x \n", offset, result); return result; }; uint16 ether_inw(etherpci_private_t *device, uint32 offset) { - uint16 result; + uint16 result; result = (*((volatile uint16*) (device->reg_base + (offset)))); __eieio(); ETHER_DEBUG(PCI_IO, device->debug, " inw(%x) %x \n", offset, result); return result; @@ -243,7 +243,7 @@ static int etherpci(int argc, char **argv); #endif /* - * io_lock gets you exclusive access to the card, except that + * io_lock gets you exclusive access to the card, except that * the interrupt handler can still run. * There is probably no need to io_lock() a 3com card, so look into * removing it for that case. @@ -484,7 +484,7 @@ wait_for_dma_complete(etherpci_private_t *data, unsigned short addr, if (bogus >= MAXBOGUS * 2) { /* - * On some cards, the counters will never clear. + * On some cards, the counters will never clear. * So only print this message when debugging. */ dprintf("Bogus alert: waiting for counters to zero\n"); @@ -558,9 +558,9 @@ etherpci_min(etherpci_private_t *data, unsigned char *dst, len++; ether_outb(data, EN0_RCNTLO, len & 0xff); - ether_outb(data, EN0_RCNTHI, len >> 8); - ether_outb(data, EN0_RADDRLO, src & 0xff); - ether_outb(data, EN0_RADDRHI, src >> 8); + ether_outb(data, EN0_RCNTHI, len >> 8); + ether_outb(data, EN0_RADDRLO, src & 0xff); + ether_outb(data, EN0_RADDRHI, src >> 8); ether_outb(data, EN_CCMD, ENC_DMAREAD); for (i = 0; i < len; i += 2) { @@ -720,7 +720,7 @@ probe(etherpci_private_t *data) reg = ether_inb(data, EN_CCMD); if (reg != (ENC_NODMA|ENC_STOP|ENC_PAGE0)) { - dprintf("command register failed: %02x != %02x\n", reg, ENC_NODMA|ENC_STOP); + dprintf("command register failed: %02x != %02x\n", reg, ENC_NODMA|ENC_STOP); return 0; } @@ -819,7 +819,7 @@ init(etherpci_private_t *data) /* set multicast address */ for (i = 0; i < 8; i++) { - ether_outb(data, EN1_MULT+i, 0xff); + ether_outb(data, EN1_MULT+i, 0xff); } data->nmulti = 0; @@ -872,7 +872,7 @@ setboundary(etherpci_private_t *data, unsigned char nextboundary) /*! Start resetting the chip, because of ring overflow */ -static int +static int reset(etherpci_private_t *data) { unsigned char cmd; @@ -920,8 +920,8 @@ etherpci_interrupt(void *_data) data->ints++; ETHER_DEBUG(INTERRUPT, data->debug, "ENTR isr=%x & %x?\n",getisr(data), INTS_WE_CARE_ABOUT); - for (INTR_LOCK(data, isr = getisr(data)); - isr & INTS_WE_CARE_ABOUT; + for (INTR_LOCK(data, isr = getisr(data)); + isr & INTS_WE_CARE_ABOUT; INTR_LOCK(data, isr = getisr(data))) { if (isr & ISR_RECEIVE) { data->rints++; @@ -1009,7 +1009,7 @@ check_errors(etherpci_private_t *data) DOIT(data->frames_lost, "Frames lost now %d\n"); #undef DOIT #if 0 - /* + /* * these are normal errors because collisions are normal * so don't make a big deal about them. */ @@ -1103,7 +1103,7 @@ copy_packet(etherpci_private_t *data, unsigned char *ether_buf, if (ring.next_packet < data->EC_RXBUF_START_PAGE || ring.next_packet >= data->EC_RXBUF_END_PAGE) { - dprintf("etherpci_read: bad next packet! (%02x,%u,%02x) (%d)\n", + dprintf("etherpci_read: bad next packet! (%02x,%u,%02x) (%d)\n", ring.status, ring.next_packet, ring.count, data->boundary); data->rerrs++; @@ -1115,7 +1115,7 @@ copy_packet(etherpci_private_t *data, unsigned char *ether_buf, len = swapshort(ring.count); rlen = len - 4; if (rlen < ETHER_MIN_SIZE || rlen > ETHER_MAX_SIZE) { - dprintf("etherpci_read: bad length! (%02x,%u,%02x) (%d)\n", + dprintf("etherpci_read: bad length! (%02x,%u,%02x) (%d)\n", ring.status, ring.next_packet, ring.count, data->boundary); data->rerrs++; @@ -1187,26 +1187,29 @@ enable_addressing(etherpci_private_t *data) uint32 base, size, offset; base = data->pciInfo->u.h0.base_registers[0]; size = data->pciInfo->u.h0.base_register_sizes[0]; - + /* Round down to nearest page boundary */ base = base & ~(B_PAGE_SIZE-1); - + /* Adjust the size */ offset = data->pciInfo->u.h0.base_registers[0] - base; size += offset; size = (size +(B_PAGE_SIZE-1)) & ~(B_PAGE_SIZE-1); dprintf(kDevName ": PCI base=%x size=%x offset=%x\n", base, size, offset); - - if ((data->ioarea = map_physical_memory(kDevName "_regs", (void *)base, size, B_ANY_KERNEL_ADDRESS, B_READ_AREA | B_WRITE_AREA, (void **)&data->reg_base)) < 0) + + if ((data->ioarea = map_physical_memory(kDevName "_regs", base, size, + B_ANY_KERNEL_ADDRESS, B_READ_AREA | B_WRITE_AREA, + (void **)&data->reg_base)) < 0) { return B_ERROR; + } data->reg_base = data->reg_base + offset; -#endif +#endif dprintf(kDevName ": reg_base=%lx\n", data->reg_base); - - /* enable pci address access */ + + /* enable pci address access */ cmd = (gPCIModInfo->read_pci_config)(data->pciInfo->bus, data->pciInfo->device, data->pciInfo->function, PCI_command, 2); (gPCIModInfo->write_pci_config)(data->pciInfo->bus, data->pciInfo->device, data->pciInfo->function, PCI_command, 2, cmd | PCI_command_io); @@ -1256,8 +1259,8 @@ domulti(etherpci_private_t *data, char *addr) static int etherpci(int argc, char **argv) { uint16 i,j; - const char * usage = "usage: etherpci { Function_calls | PCI_IO | Stats | Rx_trace | Tx_trace }\n"; - + const char * usage = "usage: etherpci { Function_calls | PCI_IO | Stats | Rx_trace | Tx_trace }\n"; + if (argc < 2) { kprintf("%s",usage); return 0; @@ -1268,56 +1271,56 @@ etherpci(int argc, char **argv) { case 'F': case 'f': gdev->debug ^= FUNCTION; - if (gdev->debug & FUNCTION) + if (gdev->debug & FUNCTION) kprintf("Function() call trace Enabled\n"); - else + else kprintf("Function() call trace Disabled\n"); - break; + break; case 'N': case 'n': gdev->debug ^= SEQ; - if (gdev->debug & SEQ) + if (gdev->debug & SEQ) kprintf("Sequence numbers packet trace Enabled\n"); - else + else kprintf("Sequence numbers packet trace Disabled\n"); - break; + break; case 'R': case 'r': gdev->debug ^= RX; - if (gdev->debug & RX) + if (gdev->debug & RX) kprintf("Receive packet trace Enabled\n"); - else + else kprintf("Receive packet trace Disabled\n"); break; case 'T': case 't': gdev->debug ^= TX; - if (gdev->debug & TX) + if (gdev->debug & TX) kprintf("Transmit packet trace Enabled\n"); - else + else kprintf("Transmit packet trace Disabled\n"); - break; + break; case 'S': case 's': - kprintf(kDevName " statistics\n"); + kprintf(kDevName " statistics\n"); kprintf("rx_ints %d, tx_ints %d\n", gdev->rints, gdev->wints); kprintf("resets %d \n", gdev->resets); kprintf("crc_errs %d, frame_errs %d, frames_lost %d\n", gdev->crc_errs, gdev->frame_errs, gdev->frames_lost); - break; + break; case 'P': case 'p': gdev->debug ^= PCI_IO; - if (gdev->debug & PCI_IO) + if (gdev->debug & PCI_IO) kprintf("PCI IO trace Enabled\n"); - else + else kprintf("PCI IO trace Disabled\n"); - break; + break; default: kprintf("%s",usage); return 0; } } - + return 0; } #endif /* DEBUGGER_COMMAND */ @@ -1355,13 +1358,13 @@ init_driver(void) char devName[64]; int32 i; - dprintf(kDevName ": init_driver "); + dprintf(kDevName ": init_driver "); if ((status = get_module( B_PCI_MODULE_NAME, (module_info **)&gPCIModInfo )) != B_OK) { dprintf(kDevName " Get module failed! %s\n", strerror(status )); return status; } - + /* Find Lan cards*/ if ((entries = get_pci_list(gDevList, MAX_CARDS )) == 0) { dprintf("init_driver: " kDevName " not found\n"); @@ -1370,7 +1373,7 @@ init_driver(void) return B_ERROR; } dprintf("\n"); - + /* Create device name list*/ for (i=0; ipciInfo = gDevList[devID]; data->devID = devID; @@ -1501,12 +1504,12 @@ open_hook(const char *name, uint32 flags, void **cookie) data->debug = DEFAULT_DEBUG_FLAGS; ETHER_DEBUG(FUNCTION, data->debug, kDevName ": open %s dev=%p\n", name, data); - + #if DEBUGGER_COMMAND gdev = data; add_debugger_command (kDevName, etherpci, "Ethernet driver Info"); #endif - + /* enable access to the cards address space */ if ((status = enable_addressing(data)) != B_OK) goto err1; @@ -1521,7 +1524,7 @@ open_hook(const char *name, uint32 flags, void **cookie) /* Setup interrupts */ install_io_interrupt_handler( data->pciInfo->u.h0.interrupt_line, etherpci_interrupt, *cookie, 0 ); - + dprintf("Interrupts installed at %x\n", data->pciInfo->u.h0.interrupt_line); /* Init Device */ init(data); @@ -1536,8 +1539,8 @@ err1: #if DEBUGGER_COMMAND remove_debugger_command (kDevName, etherpci); #endif - free(data); - + free(data); + err0: atomic_and(&gOpenMask, ~mask); dprintf(kDevName ": open failed!\n"); @@ -1581,21 +1584,21 @@ close_hook(void *_data) /* * Reset all the statistics */ - data->ints = 0; - data->rints = 0; - data->rerrs = 0; - data->wints = 0; - data->werrs = 0; - data->reads = 0; - data->writes = 0; + data->ints = 0; + data->rints = 0; + data->rerrs = 0; + data->wints = 0; + data->werrs = 0; + data->reads = 0; + data->writes = 0; data->interrs = 0; data->resets = 0; data->frame_errs = 0; data->crc_errs = 0; data->frames_lost = 0; - data->rerrs_last = 0; - data->werrs_last = 0; + data->rerrs_last = 0; + data->werrs_last = 0; data->interrs_last = 0; data->frame_errs_last = 0; data->crc_errs_last = 0; @@ -1648,7 +1651,7 @@ write_hook(void *_data, off_t pos, const void *buf, size_t *len) return B_INTERRUPTED; } /* - * Wait for somebody else (if any) to finish transmitting + * Wait for somebody else (if any) to finish transmitting */ status = output_wait(data, ETHER_TRANSMIT_TIMEOUT); if (status < B_NO_ERROR || data->interrupted) { @@ -1675,7 +1678,7 @@ write_hook(void *_data, off_t pos, const void *buf, size_t *len) data->writes++; io_unlock(data); atomic_add(&data->inrw, -1); - *len = buflen; + *len = buflen; if (data->debug & TX) dump_packet("TX:",(unsigned char *) buf, buflen); diff --git a/src/add-ons/kernel/drivers/network/ipro1000/if_em_osdep.h b/src/add-ons/kernel/drivers/network/ipro1000/if_em_osdep.h index 36d3db3bc5..0eb9d54bbe 100644 --- a/src/add-ons/kernel/drivers/network/ipro1000/if_em_osdep.h +++ b/src/add-ons/kernel/drivers/network/ipro1000/if_em_osdep.h @@ -125,7 +125,7 @@ static inline unsigned long vtophys(unsigned long virtual_addr) err = get_memory_map((void *)virtual_addr, 2046, &pe, 1); if (err < 0) panic("ipro1000: get_memory_map failed for %p, error %08lx\n", (void *)virtual_addr, err); - return (unsigned long) pe.address; + return pe.address; } #define M_DEVBUF 1 diff --git a/src/add-ons/kernel/drivers/network/ipro1000/util.c b/src/add-ons/kernel/drivers/network/ipro1000/util.c index 0d05ce5366..00b9721049 100644 --- a/src/add-ons/kernel/drivers/network/ipro1000/util.c +++ b/src/add-ons/kernel/drivers/network/ipro1000/util.c @@ -1,7 +1,7 @@ /* Intel PRO/1000 Family Driver * Copyright (C) 2004 Marcus Overhagen . All rights reserved. * - * Permission to use, copy, modify and distribute this software and its + * Permission to use, copy, modify and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies, and that both the * copyright notice and this permission notice appear in supporting documentation. @@ -36,17 +36,18 @@ map_mem(void **virt, void *phy, size_t size, uint32 protection, const char *name offset = (uint32)phy & (B_PAGE_SIZE - 1); phyadr = (char *)phy - offset; size = ROUNDUP(size + offset, B_PAGE_SIZE); - area = map_physical_memory(name, phyadr, size, B_ANY_KERNEL_BLOCK_ADDRESS, protection, &mapadr); + area = map_physical_memory(name, (addr_t)phyadr, size, + B_ANY_KERNEL_BLOCK_ADDRESS, protection, &mapadr); if (area < B_OK) { ERROROUT3("mapping '%s' failed, error 0x%lx (%s)\n", name, area, strerror(area)); return area; } - + *virt = (char *)mapadr + offset; INIT_DEBUGOUT7("physical = %p, virtual = %p, offset = %ld, phyadr = %p, mapadr = %p, size = %ld, area = 0x%08lx\n", phy, *virt, offset, phyadr, mapadr, size, area); - + return area; } @@ -55,7 +56,7 @@ area_malloc(size_t size) { void *p; size = ROUNDUP(size, B_PAGE_SIZE); - + if (create_area("area_malloc", &p, B_ANY_KERNEL_ADDRESS, size, B_FULL_LOCK, 0) < 0) return 0; return p; diff --git a/src/add-ons/kernel/drivers/network/rtl8169/util.c b/src/add-ons/kernel/drivers/network/rtl8169/util.c index 0d75f8967f..27e225e5c4 100644 --- a/src/add-ons/kernel/drivers/network/rtl8169/util.c +++ b/src/add-ons/kernel/drivers/network/rtl8169/util.c @@ -37,6 +37,7 @@ area_id alloc_contiguous(void **virt, void **phy, size_t size, uint32 protection, const char *name) { +// TODO: phy should be phys_addr_t*! physical_entry pe; void * virtadr; area_id areaid; @@ -61,7 +62,7 @@ alloc_contiguous(void **virt, void **phy, size_t size, uint32 protection, if (virt) *virt = virtadr; if (phy) - *phy = pe.address; + *phy = (void*)(addr_t)pe.address; TRACE("area = %ld, size = %ld, virt = %p, phy = %p\n", areaid, size, virtadr, pe.address); return areaid; } @@ -81,7 +82,7 @@ map_mem(void **virt, void *phy, size_t size, uint32 protection, offset = (uint32)phy & (B_PAGE_SIZE - 1); phyadr = (char *)phy - offset; size = round_to_pagesize(size + offset); - area = map_physical_memory(name, phyadr, size, B_ANY_KERNEL_ADDRESS, + area = map_physical_memory(name, (addr_t)phyadr, size, B_ANY_KERNEL_ADDRESS, protection, &mapadr); if (area < B_OK) { ERROR("mapping '%s' failed, error 0x%lx (%s)\n", name, area, strerror(area)); diff --git a/src/add-ons/kernel/drivers/network/sis900/sis900.c b/src/add-ons/kernel/drivers/network/sis900/sis900.c index 4295e514f7..c383335db1 100644 --- a/src/add-ons/kernel/drivers/network/sis900/sis900.c +++ b/src/add-ons/kernel/drivers/network/sis900/sis900.c @@ -71,13 +71,13 @@ const static struct mii_chip_info { /***************************** helper functions *****************************/ -static uint32 +static phys_addr_t physicalAddress(volatile void *address, uint32 length) { physical_entry table; get_memory_map((void *)address, length, &table, 1); - return (uint32)table.address; + return table.address; } @@ -379,7 +379,7 @@ sis900_initPHYs(struct sis_info *info) dprintf("No MII PHY transceiver found!\n"); return B_ENTRY_NOT_FOUND; } - + sis900_selectPHY(info); // if the internal PHY is selected, reset it @@ -554,7 +554,7 @@ sis900_checkMode(struct sis_info *info) } else if (info->currentPHY->types == MII_LAN) { TRACE((DEVICE_NAME ": PHY type is LAN\n")); - // enable excessive deferral timer + // enable excessive deferral timer write32(address, ~SiS900_MAC_CONFIG_EXCESSIVE_DEFERRAL & read32(address)); sis900_setAutoNegotiationCapabilities(info); @@ -562,7 +562,7 @@ sis900_checkMode(struct sis_info *info) } else { TRACE((DEVICE_NAME ": PHY type is not LAN\n")); - // disable excessive deferral timer + // disable excessive deferral timer write32(address, SiS900_MAC_CONFIG_EXCESSIVE_DEFERRAL | read32(address)); sis900_setMode(info, LINK_SPEED_HOME | LINK_HALF_DUPLEX); @@ -602,7 +602,7 @@ sis900_getMACAddress(struct sis_info *info) write32(eepromAccess, SiS96x_EEPROM_CMD_DONE); return true; } else { - spin(2); + spin(2); tries++; } } @@ -633,12 +633,12 @@ sis900_getMACAddress(struct sis_info *info) } return false; } else { - /* SiS630 stores the MAC in an eeprom */ + /* SiS630 stores the MAC in an eeprom */ uint16 signature; int i; - + /* check to see if we have sane EEPROM */ - signature = eeprom_read(info,SiS900_EEPROM_SIGNATURE); + signature = eeprom_read(info,SiS900_EEPROM_SIGNATURE); if (signature == 0xffff || signature == 0x0000) { dprintf(DEVICE_NAME ": cannot read EEPROM signature\n"); return false; @@ -727,7 +727,7 @@ status_t sis900_createRings(struct sis_info *info) { uint16 i; - + // create transmit buffer area info->txArea = create_area("sis900 tx buffer", (void **)&info->txBuffer[0], B_ANY_KERNEL_ADDRESS, diff --git a/src/add-ons/kernel/drivers/network/vlance/vlance.c b/src/add-ons/kernel/drivers/network/vlance/vlance.c index e3900fd299..32e161cbaa 100644 --- a/src/add-ons/kernel/drivers/network/vlance/vlance.c +++ b/src/add-ons/kernel/drivers/network/vlance/vlance.c @@ -261,7 +261,7 @@ alloc_buffers(dev_info_t *device) /* get physical address of Initialization Block */ size = RNDUP(sizeof(dev_info_t), B_PAGE_SIZE); get_memory_map(&(device->init_blk), size, &entry, 1); - device->phys_init_blk = (uint32)entry.address; + device->phys_init_blk = entry.address; TRACE((DEVICE_NAME " init block va=%p pa=%p, size %lx\n", &(device->init_blk), (void *)device->phys_init_blk, size)); @@ -279,7 +279,7 @@ alloc_buffers(dev_info_t *device) } /* get physical address of tx descriptor */ get_memory_map(device->tx_desc[0], size, &entry, 1); - device->phys_tx_desc = (uint32)(entry.address); + device->phys_tx_desc = entry.address; TRACE((DEVICE_NAME " create tx desc area va=%p pa=%p sz=%lx\n", device->tx_desc[0], (void *)device->phys_tx_desc, size)); @@ -300,7 +300,7 @@ alloc_buffers(dev_info_t *device) /* get physical address of tx buffer */ get_memory_map(device->tx_buf[0], size, &entry, 1); - device->phys_tx_buf = (uint32)(entry.address); + device->phys_tx_buf = entry.address; TRACE((DEVICE_NAME " create tx buf area va=%p pa=%08lx sz=%lx\n", device->tx_buf[0], device->tx_desc[0]->s.tbadr, size)); @@ -321,7 +321,7 @@ alloc_buffers(dev_info_t *device) } /* get physical address of rx descriptor */ get_memory_map(device->rx_desc[0], size, &entry, 1); - device->phys_rx_desc = (uint32)entry.address; + device->phys_rx_desc = entry.address; TRACE((DEVICE_NAME " create rx desc area va=%p pa=%p sz=%lx\n", device->rx_desc[0], (void *)device->phys_rx_desc, size)); @@ -342,7 +342,7 @@ alloc_buffers(dev_info_t *device) } /* get physical address of rx buffer */ get_memory_map(device->rx_buf[0], size, &entry, 1); - device->phys_rx_buf = (uint32)(entry.address); + device->phys_rx_buf = entry.address; TRACE((DEVICE_NAME " create rx buf area va=%p pa=%08lx sz=%lx\n", device->rx_buf[0], device->rx_desc[0]->s.rbadr, size)); diff --git a/src/add-ons/kernel/drivers/network/wb840/wb840.c b/src/add-ons/kernel/drivers/network/wb840/wb840.c index e305ef19d2..2b7e8980e1 100644 --- a/src/add-ons/kernel/drivers/network/wb840/wb840.c +++ b/src/add-ons/kernel/drivers/network/wb840/wb840.c @@ -44,23 +44,23 @@ mii_readstatus(wb_device *device) { int i = 0; int status; - + // status bit has to be retrieved 2 times while (i++ < 2) status = wb_miibus_readreg(device, device->phy, MII_STATUS); - + return status; } -static uint32 +static phys_addr_t physicalAddress(volatile void *addr, uint32 length) { physical_entry table; - + get_memory_map((void*)addr, length, &table, 1); - - return (uint32)table.address; + + return table.address; } @@ -73,12 +73,12 @@ wb_put_rx_descriptor(volatile wb_desc *descriptor) } -void +void wb_enable_interrupts(struct wb_device *device) { write32(device->reg_base + WB_IMR, WB_INTRS); write32(device->reg_base + WB_ISR, 0xFFFFFFFF); -} +} void @@ -93,7 +93,7 @@ static void wb_selectPHY(wb_device *device) { uint16 status; - + // ToDo: need to be changed, select PHY in relation to the link mode device->currentPHY = device->firstPHY; device->phy = device->currentPHY->address; @@ -101,7 +101,7 @@ wb_selectPHY(wb_device *device) status &= ~MII_CONTROL_ISOLATE; wb_miibus_writereg(device, device->phy, MII_CONTROL, status); - + wb_read_mode(device); } @@ -115,10 +115,10 @@ wb_initPHYs(wb_device *device) struct mii_phy *mii; uint16 status; int i = 0; - + status = wb_miibus_readreg(device, phy, MII_STATUS); status = wb_miibus_readreg(device, phy, MII_STATUS); - + if (status == 0xffff || status == 0x0000) // this MII is not accessable continue; @@ -133,9 +133,9 @@ wb_initPHYs(wb_device *device) mii->types = MII_HOME; mii->next = device->firstPHY; device->firstPHY = mii; - + while (gMIIChips[i].name != NULL) { - if (gMIIChips[i].id0 == mii->id0 && gMIIChips[i].id1 == (mii->id1 & 0xfff0)) { + if (gMIIChips[i].id0 == mii->id0 && gMIIChips[i].id1 == (mii->id1 & 0xfff0)) { dprintf("Found MII PHY: %s\n", gMIIChips[i].name); mii->types = gMIIChips[i].types; break; @@ -150,7 +150,7 @@ wb_initPHYs(wb_device *device) dprintf("No MII PHY transceiver found!\n"); return B_ENTRY_NOT_FOUND; } - + wb_selectPHY(device); device->link = mii_readstatus(device) & MII_STATUS_LINK; @@ -162,15 +162,15 @@ void wb_init(wb_device *device) { LOG((DEVICE_NAME": init()\n")); - + wb_reset(device); - + device->wb_txthresh = WB_TXTHRESH_INIT; - + switch(device->wb_cachesize) { case 32: WB_SETBIT(device->reg_base + WB_BUSCTL, WB_CACHEALIGN_32LONG); - break; + break; case 16: WB_SETBIT(device->reg_base + WB_BUSCTL, WB_CACHEALIGN_16LONG); break; @@ -182,16 +182,16 @@ wb_init(wb_device *device) WB_SETBIT(device->reg_base + WB_BUSCTL, WB_CACHEALIGN_NONE); break; } - + write32(device->reg_base + WB_BUSCTL, WB_BUSCTL_MUSTBEONE|WB_BUSCTL_ARBITRATION); WB_SETBIT(device->reg_base + WB_BUSCTL, WB_BURSTLEN_16LONG); - + write32(device->reg_base + WB_BUSCTL_SKIPLEN, WB_SKIPLEN_4LONG); - + // Disable early TX/RX interrupt, as we can't take advantage // from them, at least for now. WB_CLRBIT(device->reg_base + WB_NETCFG, (WB_NETCFG_TX_EARLY_ON|WB_NETCFG_RX_EARLY_ON)); - + wb_set_rx_filter(device); } @@ -200,25 +200,25 @@ void wb_reset(wb_device *device) { int i = 0; - + LOG((DEVICE_NAME": reset()\n")); - + write32(device->reg_base + WB_NETCFG, 0L); write32(device->reg_base + WB_BUSCTL, 0L); write32(device->reg_base + WB_TXADDR, 0L); write32(device->reg_base + WB_RXADDR, 0L); - + WB_SETBIT(device->reg_base + WB_BUSCTL, WB_BUSCTL_RESET); WB_SETBIT(device->reg_base + WB_BUSCTL, WB_BUSCTL_RESET); - + for (i = 0; i < WB_TIMEOUT; i++) { if (!(read32(device->reg_base + WB_BUSCTL) & WB_BUSCTL_RESET)) break; } - + if (i == WB_TIMEOUT) LOG((DEVICE_NAME": reset hasn't completed!!!")); - + /* Wait a bit while the chip reorders his toughts */ snooze(1000); } @@ -229,7 +229,7 @@ wb_stop(wb_device *device) { uint32 cfgAddress = (uint32)device->reg_base + WB_NETCFG; int32 i = 0; - + if (read32(cfgAddress) & (WB_NETCFG_TX_ON|WB_NETCFG_RX_ON)) { WB_CLRBIT(cfgAddress, (WB_NETCFG_TX_ON|WB_NETCFG_RX_ON)); @@ -239,10 +239,10 @@ wb_stop(wb_device *device) break; } } - + if (i < WB_TIMEOUT) return B_OK; - + return B_ERROR; } @@ -254,7 +254,7 @@ wb_updateLink(struct wb_device *device) int32 mode = wb_read_mode(device); if (mode) wb_set_mode(device, mode); - + return; } @@ -267,10 +267,10 @@ wb_updateLink(struct wb_device *device) } else { uint16 status; wb_selectPHY(device); - + // Check if we have a new link status = mii_readstatus(device); - if (status & MII_STATUS_LINK) + if (status & MII_STATUS_LINK) device->link = true; } } @@ -280,9 +280,9 @@ int32 wb_tick(timer *arg) { struct wb_device *device = (wb_device*)arg; - + wb_updateLink(device); - + return B_OK; } @@ -305,29 +305,29 @@ wb_rxok(struct wb_device *device) { uint32 releaseRxSem = 0; int16 limit; - + acquire_spinlock(&device->rxSpinlock); - + for (limit = device->rxFree; limit > 0; limit--) { if (device->rxDescriptor[device->rxInterruptIndex].wb_status & WB_RXSTAT_OWN) { break; } - + releaseRxSem++; device->rxInterruptIndex = (device->rxInterruptIndex + 1) & WB_RX_CNT_MASK; device->rxFree--; } - + // Re-enable receive queue write32(device->reg_base + WB_RXSTART, 0xFFFFFFFF); - + release_spinlock(&device->rxSpinlock); - + if (releaseRxSem > 0) { release_sem_etc(device->rxSem, releaseRxSem, B_DO_NOT_RESCHEDULE); return B_INVOKE_SCHEDULER; } - + return B_HANDLED_INTERRUPT; } @@ -338,12 +338,12 @@ wb_tx_nobuf(struct wb_device *info) int16 releaseTxSem = 0; int16 limit; status_t status; - + acquire_spinlock(&info->txSpinlock); for (limit = info->txSent; limit > 0; limit--) { status = info->txDescriptor[info->txInterruptIndex].wb_status; - + LOG(("wb_tx_nobuf, status: %lx\n", status)); if (status & WB_TXSTAT_TXERR) { LOG(("TX_STAT_ERR\n")); @@ -356,7 +356,7 @@ wb_tx_nobuf(struct wb_device *info) break; } else info->txDescriptor[info->txInterruptIndex].wb_status = 0; - + releaseTxSem++; // this many buffers are free info->txInterruptIndex = (info->txInterruptIndex + 1) & WB_TX_CNT_MASK; info->txSent--; @@ -364,7 +364,7 @@ wb_tx_nobuf(struct wb_device *info) if (info->txSent < 0 || info->txSent > WB_TX_LIST_CNT) dprintf("ERROR interrupt: txSent = %d\n", info->txSent); } - + release_spinlock(&info->txSpinlock); if (releaseTxSem) { @@ -382,88 +382,88 @@ wb_interrupt(void *arg) struct wb_device *device = (wb_device*)arg; int32 retval = B_UNHANDLED_INTERRUPT; uint32 status; - + // TODO: Handle other interrupts - + acquire_spinlock(&device->intLock); - + status = read32(device->reg_base + WB_ISR); - + // Did this card request the interrupt ? - if (status & WB_INTRS) { + if (status & WB_INTRS) { // Clean all the interrupts bits if (status) write32(device->reg_base + WB_ISR, status); - + if (status & WB_ISR_ABNORMAL) LOG((DEVICE_NAME": *** Abnormal Interrupt received ***\n")); else LOG((DEVICE_NAME": interrupt received: \n")); - + if (status & WB_ISR_RX_EARLY) { LOG(("WB_ISR_RX_EARLY\n")); } - + if (status & WB_ISR_RX_NOBUF) { - LOG(("WB_ISR_RX_NOBUF\n")); + LOG(("WB_ISR_RX_NOBUF\n")); // Something is screwed } - + if (status & WB_ISR_RX_ERR) { LOG(("WB_ISR_RX_ERR\n")); // TODO: Do something useful } - + if (status & WB_ISR_RX_OK) { LOG(("WB_ISR_RX_OK\n")); retval = wb_rxok(device); } - + if (status & WB_ISR_RX_IDLE) { LOG(("WB_ISR_RX_IDLE\n")); // ??? } - + if (status & WB_ISR_TX_EARLY) { LOG(("WB_ISR_TX_EARLY\n")); - + } - + if (status & WB_ISR_TX_NOBUF) { LOG(("WB_ISR_TX_NOBUF\n")); retval = wb_tx_nobuf(device); } - + if (status & WB_ISR_TX_UNDERRUN) { LOG(("WB_ISR_TX_UNDERRUN\n")); // TODO: Jack up TX Threshold } - + if (status & WB_ISR_TX_IDLE) { LOG(("WB_ISR_TX_IDLE\n")); } - + if (status & WB_ISR_TX_OK) { LOG(("WB_ISR_TX_OK\n")); // So what ? } - + if (status & WB_ISR_BUS_ERR) { LOG(("WB_ISR_BUS_ERROR: %lx\n", (status & WB_ISR_BUSERRTYPE) >> 4)); //wb_reset(device); } - + if (status & WB_ISR_TIMER_EXPIRED) { LOG(("WB_ISR_TIMER_EXPIRED\n")); // ?? } } - + release_spinlock(&device->intLock); - + return retval; } - + /* * Print an ethernet address @@ -484,26 +484,26 @@ print_address(ether_address_t *addr) status_t wb_create_semaphores(struct wb_device *device) -{ +{ device->rxSem = create_sem(0, "wb840 receive"); if (device->rxSem < B_OK) { LOG(("Couldn't create sem, sem_id %ld\n", device->rxSem)); return device->rxSem; } - + device->txSem = create_sem(WB_TX_LIST_CNT, "wb840 transmit"); if (device->txSem < B_OK) { LOG(("Couldn't create sem, sem_id %ld\n", device->txSem)); delete_sem(device->rxSem); return device->txSem; } - + set_sem_owner(device->rxSem, B_SYSTEM_TEAM); set_sem_owner(device->txSem, B_SYSTEM_TEAM); - + device->rxLock = 0; device->txLock = 0; - + return B_OK; } @@ -522,13 +522,13 @@ status_t wb_create_rings(struct wb_device *device) { int i; - + device->rxArea = create_area("wb840 rx buffer", (void **)&device->rxBuffer[0], B_ANY_KERNEL_ADDRESS, ROUND_TO_PAGE_SIZE(WB_BUFBYTES * WB_RX_LIST_CNT), - B_FULL_LOCK, B_READ_AREA | B_WRITE_AREA); + B_FULL_LOCK, B_READ_AREA | B_WRITE_AREA); if (device->rxArea < B_OK) return device->rxArea; - + for (i = 1; i < WB_RX_LIST_CNT; i++) device->rxBuffer[i] = (void *)(((uint32)device->rxBuffer[0]) + (i * WB_BUFBYTES)); @@ -540,9 +540,9 @@ wb_create_rings(struct wb_device *device) device->rxDescriptor[i].wb_next = physicalAddress(&device->rxDescriptor[(i + 1) & WB_RX_CNT_MASK], sizeof(struct wb_desc)); } - + device->rxFree = WB_RX_LIST_CNT; - + device->txArea = create_area("wb840 tx buffer", (void **)&device->txBuffer[0], B_ANY_KERNEL_ADDRESS, ROUND_TO_PAGE_SIZE(WB_BUFBYTES * WB_TX_LIST_CNT), B_FULL_LOCK, B_READ_AREA | B_WRITE_AREA); @@ -550,7 +550,7 @@ wb_create_rings(struct wb_device *device) delete_area(device->rxArea); return device->txArea; } - + for (i = 1; i < WB_TX_LIST_CNT; i++) device->txBuffer[i] = (void *)(((uint32)device->txBuffer[0]) + (i * WB_BUFBYTES)); @@ -561,14 +561,14 @@ wb_create_rings(struct wb_device *device) device->txDescriptor[i].wb_next = physicalAddress(&device->txDescriptor[(i + 1) & WB_TX_CNT_MASK], sizeof(struct wb_desc)); } - + if (wb_stop(device) == B_OK) { write32(device->reg_base + WB_RXADDR, physicalAddress(&device->rxDescriptor[0], sizeof(struct wb_desc))); write32(device->reg_base + WB_TXADDR, physicalAddress(&device->txDescriptor[0], sizeof(struct wb_desc))); } - + return B_OK; } @@ -600,7 +600,7 @@ wb_read_mode(wb_device *info) speed = status & (MII_NWAY_TX | MII_NWAY_TX_FDX) ? LINK_SPEED_100_MBIT : LINK_SPEED_10_MBIT; duplex = status & (MII_NWAY_TX_FDX | MII_NWAY_T_FDX) ? LINK_FULL_DUPLEX : LINK_HALF_DUPLEX; - + info->autoNegotiationComplete = true; LOG((DEVICE_NAME ": linked, 10%s MBit, %s duplex\n", @@ -618,17 +618,17 @@ wb_set_mode(wb_device *info, int mode) int32 speed = mode & LINK_SPEED_MASK; uint32 configFlags = 0; status_t status; - + status = wb_stop(info); - + if ((mode & LINK_DUPLEX_MASK) == LINK_FULL_DUPLEX) - configFlags |= WB_NETCFG_FULLDUPLEX; - + configFlags |= WB_NETCFG_FULLDUPLEX; + if (speed == LINK_SPEED_100_MBIT) configFlags |= WB_NETCFG_100MBPS; write32(cfgAddress, configFlags); - + if (status == B_OK) - WB_SETBIT(cfgAddress, WB_NETCFG_TX_ON|WB_NETCFG_RX_ON); + WB_SETBIT(cfgAddress, WB_NETCFG_TX_ON|WB_NETCFG_RX_ON); } diff --git a/src/add-ons/kernel/drivers/network/wlan/ipw2100/ipw2100.cpp b/src/add-ons/kernel/drivers/network/wlan/ipw2100/ipw2100.cpp index c9388ad9cb..3de24592cf 100644 --- a/src/add-ons/kernel/drivers/network/wlan/ipw2100/ipw2100.cpp +++ b/src/add-ons/kernel/drivers/network/wlan/ipw2100/ipw2100.cpp @@ -897,7 +897,7 @@ IPW2100::MapPhysicalMemory(const char *name, uint32 physicalAddress, size = (size + offset + B_PAGE_SIZE - 1) & ~(B_PAGE_SIZE - 1); void *virtualAddress; - area_id area = map_physical_memory(name, (void *)physicalAddress, size, + area_id area = map_physical_memory(name, physicalAddress, size, B_ANY_KERNEL_ADDRESS, B_READ_AREA | B_WRITE_AREA, &virtualAddress); if (area < B_OK) { TRACE_ALWAYS(("IPW2100: mapping physical address failed\n")); @@ -918,6 +918,7 @@ area_id IPW2100::AllocateContiguous(const char *name, void **logicalAddress, uint32 *physicalAddress, size_t size) { +// TODO: physicalAddress should be phys_addr_t*! size = (size + B_PAGE_SIZE - 1) & ~(B_PAGE_SIZE - 1); void *virtualAddress = NULL; area_id area = create_area(name, &virtualAddress, B_ANY_KERNEL_ADDRESS, @@ -933,7 +934,7 @@ IPW2100::AllocateContiguous(const char *name, void **logicalAddress, if (physicalAddress) { physical_entry physicalEntry; get_memory_map(virtualAddress, size, &physicalEntry, 1); - *physicalAddress = (uint32)physicalEntry.address; + *physicalAddress = physicalEntry.address; } return area; diff --git a/src/add-ons/kernel/generic/ata_adapter/ata_adapter.c b/src/add-ons/kernel/generic/ata_adapter/ata_adapter.c index 1a885d61bb..d22d40ccfa 100644 --- a/src/add-ons/kernel/generic/ata_adapter/ata_adapter.c +++ b/src/add-ons/kernel/generic/ata_adapter/ata_adapter.c @@ -249,12 +249,13 @@ ata_adapter_prepare_dma(ata_adapter_channel_info *channel, writeToDevice ? "write" : "read", sgListCount); for (i = sgListCount - 1, prd = channel->prdt; i >= 0; --i, ++prd, ++sgList) { - prd->address = B_HOST_TO_LENDIAN_INT32(pci->ram_address(device, sgList->address)); + prd->address = B_HOST_TO_LENDIAN_INT32(pci->ram_address(device, + (void*)(addr_t)sgList->address)); // 0 means 64K - this is done automatically be discarding upper 16 bits prd->count = B_HOST_TO_LENDIAN_INT16((uint16)sgList->size); prd->EOT = i == 0; - TRACE_DMA("ata_adapter: %p, %ld => 0x%08x, %d, %d\n", + TRACE_DMA("ata_adapter: %#" B_PRIxPHYSADDR ", %ld => 0x%08x, %d, %d\n", sgList->address, sgList->size, prd->address, prd->count, prd->EOT); SHOW_FLOW( 4, "%x, %x, %d", (int)prd->address, prd->count, prd->EOT); } @@ -413,7 +414,7 @@ ata_adapter_init_channel(device_node *node, } get_memory_map(channel->prdt, prdt_size, pe, 1); - channel->prdt_phys = (uint32)pe[0].address; + channel->prdt_phys = pe[0].address; SHOW_FLOW(3, "virt=%p, phys=%x", channel->prdt, (int)channel->prdt_phys); diff --git a/src/add-ons/kernel/generic/ide_adapter/ide_adapter.c b/src/add-ons/kernel/generic/ide_adapter/ide_adapter.c index a35573aa65..1cdefef6f1 100644 --- a/src/add-ons/kernel/generic/ide_adapter/ide_adapter.c +++ b/src/add-ons/kernel/generic/ide_adapter/ide_adapter.c @@ -227,7 +227,8 @@ ide_adapter_prepare_dma(ide_adapter_channel_info *channel, int i; for (i = sgListCount - 1, prd = channel->prdt; i >= 0; --i, ++prd, ++sgList) { - prd->address = B_HOST_TO_LENDIAN_INT32(pci->ram_address(device, sgList->address)); + prd->address = B_HOST_TO_LENDIAN_INT32(pci->ram_address(device, + (void*)(addr_t)sgList->address)); // 0 means 64K - this is done automatically be discarding upper 16 bits prd->count = B_HOST_TO_LENDIAN_INT16((uint16)sgList->size); prd->EOT = i == 0; diff --git a/src/add-ons/kernel/interrupt_controllers/openpic/openpic.cpp b/src/add-ons/kernel/interrupt_controllers/openpic/openpic.cpp index 5adcd5153f..a25b3de76a 100644 --- a/src/add-ons/kernel/interrupt_controllers/openpic/openpic.cpp +++ b/src/add-ons/kernel/interrupt_controllers/openpic/openpic.cpp @@ -44,7 +44,7 @@ #define OPENPIC_MODULE_NAME "interrupt_controllers/openpic/device_v1" - + enum { OPENPIC_MIN_REGISTER_SPACE_SIZE = 0x21000, OPENPIC_MAX_REGISTER_SPACE_SIZE = 0x40000, @@ -326,7 +326,7 @@ openpic_register_device(device_node *parent) // (driver_module_info**)&pci, (void**)&device); // wtf? if (error != B_OK) return error; - + sDeviceManager->uninit_driver(parent); #endif device_node *newNode; @@ -336,10 +336,10 @@ openpic_register_device(device_node *parent) //XXX: that's inconsistent with the header! //{ B_DEVICE_TYPE, B_STRING_TYPE, // { string: B_INTERRUPT_CONTROLLER_DRIVER_TYPE }}, - + {} }; - + // HACK: to get it compiled, I will break anything. return sDeviceManager->register_node(parent, NULL, attrs, NULL, &newNode); } @@ -401,11 +401,11 @@ openpic_init_driver(device_node *node, void **cookie) registerSpaceSize -= info->supported_device->register_offset; if (registerSpaceSize > OPENPIC_MAX_REGISTER_SPACE_SIZE) registerSpaceSize = OPENPIC_MAX_REGISTER_SPACE_SIZE; - + // map register space void *virtualRegisterBase = NULL; area_id registerArea = map_physical_memory("openpic registers", - (void*)physicalRegisterBase, registerSpaceSize, B_ANY_KERNEL_ADDRESS, + physicalRegisterBase, registerSpaceSize, B_ANY_KERNEL_ADDRESS, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA, &virtualRegisterBase); if (registerArea < 0) return info->register_area; @@ -471,7 +471,7 @@ openpic_get_controller_info(void *cookie, interrupt_controller_info *_info) openpic_info *info = (openpic_info*)cookie; *_info = *info; - + return B_OK; } @@ -482,7 +482,7 @@ openpic_enable_io_interrupt(void *cookie, int irq, int type) openpic_info *info = (openpic_info*)cookie; openpic_enable_irq(info, irq, type); - + return B_OK; } @@ -497,7 +497,7 @@ openpic_disable_io_interrupt(void *cookie, int irq) return B_OK; } - + static int openpic_acknowledge_io_interrupt(void *cookie) { diff --git a/src/system/kernel/arch/x86/arch_vm.cpp b/src/system/kernel/arch/x86/arch_vm.cpp index d294b43a7f..61e9e35c92 100644 --- a/src/system/kernel/arch/x86/arch_vm.cpp +++ b/src/system/kernel/arch/x86/arch_vm.cpp @@ -649,7 +649,7 @@ arch_vm_init_post_area(kernel_args *args) vm_mark_page_range_inuse(0x0, 0xa0000 / B_PAGE_SIZE); // map 0 - 0xa0000 directly - id = map_physical_memory("dma_region", (void *)0x0, 0xa0000, + id = map_physical_memory("dma_region", 0x0, 0xa0000, B_ANY_KERNEL_ADDRESS | B_MTR_WB, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA, &gDmaAddress); if (id < 0) { diff --git a/src/system/kernel/arch/x86/bios.cpp b/src/system/kernel/arch/x86/bios.cpp index c72cf8c745..496c7a4073 100644 --- a/src/system/kernel/arch/x86/bios.cpp +++ b/src/system/kernel/arch/x86/bios.cpp @@ -120,7 +120,7 @@ extern "C" status_t bios_init(void) { // map BIOS area 0xe0000 - 0xfffff - area_id biosArea = map_physical_memory("pc bios", (void *)0xe0000, 0x20000, + area_id biosArea = map_physical_memory("pc bios", 0xe0000, 0x20000, B_ANY_KERNEL_ADDRESS | B_MTR_WB, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA, (void **)&gBiosBase); if (biosArea < 0) diff --git a/src/system/kernel/arch/x86/vm86.cpp b/src/system/kernel/arch/x86/vm86.cpp index 3589ad2b34..0e3a9fabb0 100644 --- a/src/system/kernel/arch/x86/vm86.cpp +++ b/src/system/kernel/arch/x86/vm86.cpp @@ -556,7 +556,7 @@ vm86_prepare(struct vm86_state *state, unsigned int ramSize) } // copy int vectors and BIOS data area - vectors = map_physical_memory("int vectors", (void *)0, 0x502, + vectors = map_physical_memory("int vectors", 0, 0x502, B_ANY_KERNEL_BLOCK_ADDRESS, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA, &address); if (vectors < B_OK) { diff --git a/src/system/kernel/debug/frame_buffer_console.cpp b/src/system/kernel/debug/frame_buffer_console.cpp index 88aa50bb93..5a1f67d865 100644 --- a/src/system/kernel/debug/frame_buffer_console.cpp +++ b/src/system/kernel/debug/frame_buffer_console.cpp @@ -414,7 +414,7 @@ frame_buffer_console_init(kernel_args* args) void* frameBuffer; sConsole.area = map_physical_memory("vesa frame buffer", - (void*)args->frame_buffer.physical_buffer.start, + args->frame_buffer.physical_buffer.start, args->frame_buffer.physical_buffer.size, B_ANY_KERNEL_ADDRESS, B_READ_AREA | B_WRITE_AREA | B_USER_CLONEABLE_AREA, &frameBuffer); if (sConsole.area < 0) diff --git a/src/system/kernel/debug/tracing.cpp b/src/system/kernel/debug/tracing.cpp index d227e69f09..af5c1856c3 100644 --- a/src/system/kernel/debug/tracing.cpp +++ b/src/system/kernel/debug/tracing.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2008-2009, Ingo Weinhold, ingo_weinhold@gmx.de. + * Copyright 2008-2010, Ingo Weinhold, ingo_weinhold@gmx.de. * Copyright 2008-2009, Axel Dörfler, axeld@pinc-software.de. * Distributed under the terms of the MIT License. */ @@ -106,7 +106,7 @@ private: uint32 fEntriesEver; spinlock fLock; char* fTraceOutputBuffer; - addr_t fPhysicalAddress; + phys_addr_t fPhysicalAddress; uint32 fMagic3; }; @@ -380,7 +380,7 @@ TracingMetaData::Create(TracingMetaData*& _metaData) physical_entry physicalEntry; if (get_memory_map(metaData->fTraceOutputBuffer, B_PAGE_SIZE, &physicalEntry, 1) == B_OK) { - metaData->fPhysicalAddress = (addr_t)physicalEntry.address; + metaData->fPhysicalAddress = physicalEntry.address; } else { dprintf("TracingMetaData::Create(): failed to get physical address " "of tracing buffer\n"); diff --git a/src/system/kernel/device_manager/IORequest.cpp b/src/system/kernel/device_manager/IORequest.cpp index 3ef17f753a..65c032f3db 100644 --- a/src/system/kernel/device_manager/IORequest.cpp +++ b/src/system/kernel/device_manager/IORequest.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2008-2009, Ingo Weinhold, ingo_weinhold@gmx.de. + * Copyright 2008-2010, Ingo Weinhold, ingo_weinhold@gmx.de. * Copyright 2008, Axel Dörfler, axeld@pinc-software.de. * Distributed under the terms of the MIT License. */ @@ -1219,6 +1219,7 @@ IORequest::_CopySimple(void* bounceBuffer, void* external, size_t size, IORequest::_CopyPhysical(void* bounceBuffer, void* external, size_t size, team_id team, bool copyIn) { +// TODO: The physical address must be phys_addr_t! if (copyIn) { return vm_memcpy_from_physical(bounceBuffer, (addr_t)external, size, false); @@ -1250,7 +1251,7 @@ IORequest::_CopyUser(void* _bounceBuffer, void* _external, size_t size, for (uint32 i = 0; i < count; i++) { const physical_entry& entry = entries[i]; - error = _CopyPhysical(bounceBuffer, entry.address, + error = _CopyPhysical(bounceBuffer, (void*)entry.address, entry.size, team, copyIn); if (error != B_OK) return error; diff --git a/src/system/kernel/device_manager/dma_resources.cpp b/src/system/kernel/device_manager/dma_resources.cpp index df46e5c8f4..a159281452 100644 --- a/src/system/kernel/device_manager/dma_resources.cpp +++ b/src/system/kernel/device_manager/dma_resources.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2008, Ingo Weinhold, ingo_weinhold@gmx.de. + * Copyright 2008-2010, Ingo Weinhold, ingo_weinhold@gmx.de. * Copyright 2008, Axel Dörfler, axeld@pinc-software.de. * Distributed under the terms of the MIT License. */ @@ -241,7 +241,7 @@ DMAResource::CreateBounceBuffer(DMABounceBuffer** _buffer) return B_ERROR; } - physicalBase = (addr_t)entry.address; + physicalBase = entry.address; if (fRestrictions.high_address < physicalBase + size) { delete_area(area); @@ -440,7 +440,7 @@ DMAResource::TranslateNext(IORequest* request, IOOperation* operation, get_memory_map_etc(request->Team(), (void*)base, size, &entry, &count); - vecs[segmentCount].iov_base = entry.address; + vecs[segmentCount].iov_base = (void*)(addr_t)entry.address; vecs[segmentCount].iov_len = entry.size; transferLeft -= entry.size; diff --git a/src/system/kernel/vm/vm.cpp b/src/system/kernel/vm/vm.cpp index bdf5d688d4..0580150785 100644 --- a/src/system/kernel/vm/vm.cpp +++ b/src/system/kernel/vm/vm.cpp @@ -5388,13 +5388,13 @@ get_memory_map_etc(team_id team, const void* address, size_t numBytes, } // need to switch to the next physical_entry? - if (index < 0 || (phys_addr_t)table[index].address + if (index < 0 || table[index].address != physicalAddress - table[index].size) { if ((uint32)++index + 1 > numEntries) { // table to small break; } - table[index].address = (void*)physicalAddress; + table[index].address = physicalAddress; table[index].size = bytes; } else { // page does fit in current entry @@ -5442,7 +5442,7 @@ get_memory_map(const void* address, ulong numBytes, physical_entry* table, if (entriesRead + 1 > (uint32)numEntries) return B_BUFFER_OVERFLOW; - table[entriesRead].address = NULL; + table[entriesRead].address = 0; table[entriesRead].size = 0; return B_OK; @@ -5567,8 +5567,9 @@ transfer_area(area_id id, void** _address, uint32 addressSpec, team_id target, area_id -map_physical_memory(const char* name, void* physicalAddress, size_t numBytes, - uint32 addressSpec, uint32 protection, void** _virtualAddress) +map_physical_memory(const char* name, phys_addr_t physicalAddress, + size_t numBytes, uint32 addressSpec, uint32 protection, + void** _virtualAddress) { if (!arch_vm_supports_protection(protection)) return B_NOT_SUPPORTED; @@ -5576,8 +5577,8 @@ map_physical_memory(const char* name, void* physicalAddress, size_t numBytes, fix_protection(&protection); return vm_map_physical_memory(VMAddressSpace::KernelID(), name, - _virtualAddress, addressSpec, numBytes, protection, - (phys_addr_t)physicalAddress, false); + _virtualAddress, addressSpec, numBytes, protection, physicalAddress, + false); }