Author: bonefish Date: 2010-06-22 00:54:42 +0200 (Tue, 22 Jun 2010) New Revision: 37217 Changeset: http://dev.haiku-os.org/changeset/37217/haiku Modified: haiku/trunk/src/add-ons/kernel/drivers/network/bcm440x/b44um.c haiku/trunk/src/add-ons/kernel/drivers/network/bcm440x/mempool.c haiku/trunk/src/add-ons/kernel/drivers/network/dp83815/driver.c haiku/trunk/src/add-ons/kernel/drivers/network/dp83815/util.c haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/if_em_osdep.h haiku/trunk/src/add-ons/kernel/drivers/network/rtl8169/util.c haiku/trunk/src/add-ons/kernel/drivers/network/sis900/sis900.c haiku/trunk/src/add-ons/kernel/drivers/network/vlance/vlance.c haiku/trunk/src/add-ons/kernel/drivers/network/wb840/wb840.c haiku/trunk/src/add-ons/kernel/drivers/network/wlan/ipw2100/ipw2100.cpp Log: Fixed more issues with 64 bit physical addresses. Mostly by restricting allocations to 32 bit. Modified: haiku/trunk/src/add-ons/kernel/drivers/network/bcm440x/b44um.c =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/network/bcm440x/b44um.c 2010-06-21 22:30:47 UTC (rev 37216) +++ haiku/trunk/src/add-ons/kernel/drivers/network/bcm440x/b44um.c 2010-06-21 22:54:42 UTC (rev 37217) @@ -599,7 +599,9 @@ dev = (struct be_b44_dev *)(pDevice); area_desc = dev->lockmem_list[dev->lockmem_list_num++] = create_area("broadcom_shared_mem", &pvirt, B_ANY_KERNEL_ADDRESS, ROUND_UP_TO_PAGE(BlockSize), - /*B_CONTIGUOUS*/ B_FULL_LOCK, B_READ_AREA | B_WRITE_AREA); + B_32_BIT_MEMORY, B_READ_AREA | B_WRITE_AREA); + // TODO: B_32_BIT_MEMORY implies contiguous, although that wouldn't + // be necessary here! if (area_desc < B_OK) return LM_STATUS_FAILURE; Modified: haiku/trunk/src/add-ons/kernel/drivers/network/bcm440x/mempool.c =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/network/bcm440x/mempool.c 2010-06-21 22:30:47 UTC (rev 37216) +++ haiku/trunk/src/add-ons/kernel/drivers/network/bcm440x/mempool.c 2010-06-21 22:54:42 UTC (rev 37217) @@ -1,7 +1,7 @@ /* Intel PRO/1000 Family Driver * Copyright (C) 2004 Marcus Overhagen <marcus@xxxxxxxxxxxx>. 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. @@ -29,9 +29,13 @@ { void *p; size = ROUNDUP(size, B_PAGE_SIZE); - - if (create_area("area_malloc", &p, B_ANY_KERNEL_ADDRESS, size, B_FULL_LOCK, 0) < 0) + + if (create_area("area_malloc", &p, B_ANY_KERNEL_ADDRESS, size, + B_32_BIT_MEMORY, 0) < 0) { + // TODO: B_32_BIT_MEMORY implies contiguous, although that wouldn't + // be necessary here! return 0; + } return p; } @@ -47,18 +51,18 @@ int chunk_size = 2048; int chunk_alloc_size = chunk_size * (count + 1); - + char *chunk_base; - + int i; - + chunk_pool = area_malloc(chunk_alloc_size); if (!chunk_pool) { return -1; } chunk_base = (char *)ROUNDUP((unsigned long)chunk_pool, 2048); - + for (i = 0; i < count; i++) { chunk_pool_put(chunk_base + i * chunk_size); } Modified: haiku/trunk/src/add-ons/kernel/drivers/network/dp83815/driver.c =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/network/dp83815/driver.c 2010-06-21 22:30:47 UTC (rev 37216) +++ haiku/trunk/src/add-ons/kernel/drivers/network/dp83815/driver.c 2010-06-21 22:54:42 UTC (rev 37217) @@ -648,7 +648,7 @@ pages = pages_needed(2*MAX_DESC*sizeof(descriptor_t) + NUM_BUFFS*BUFFER_SIZE); data->mem_area = create_area(kDevName " desc buffer", (void**)&RxDescRing, - B_ANY_KERNEL_ADDRESS, pages * B_PAGE_SIZE, B_CONTIGUOUS, + B_ANY_KERNEL_ADDRESS, pages * B_PAGE_SIZE, B_32_BIT_MEMORY, B_READ_AREA | B_WRITE_AREA); if( data->mem_area < 0 ) return -1; Modified: haiku/trunk/src/add-ons/kernel/drivers/network/dp83815/util.c =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/network/dp83815/util.c 2010-06-21 22:30:47 UTC (rev 37216) +++ haiku/trunk/src/add-ons/kernel/drivers/network/dp83815/util.c 2010-06-21 22:54:42 UTC (rev 37217) @@ -73,7 +73,9 @@ size = round_to_pagesize(size); areaid = create_area(name, &logadr, B_ANY_KERNEL_ADDRESS, size, - B_CONTIGUOUS, B_READ_AREA | B_WRITE_AREA); + B_32_BIT_MEMORY, B_READ_AREA | B_WRITE_AREA); + // TODO: The rest of the code doesn't deal correctly with physical + // addresses > 4 GB, so we have to force 32 bit addresses here. if (areaid < B_OK) { dprintf("couldn't allocate area %s\n",name); return B_ERROR; Modified: haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/if_em_osdep.h =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/if_em_osdep.h 2010-06-21 22:30:47 UTC (rev 37216) +++ haiku/trunk/src/add-ons/kernel/drivers/network/ipro1000/if_em_osdep.h 2010-06-21 22:54:42 UTC (rev 37217) @@ -114,7 +114,7 @@ void *contigmalloc(int size, int p1, int p2, int p3, int p4, int p5, int p6); void contigfree(void *p, int p1, int p2); -static inline unsigned long vtophys(unsigned long virtual_addr) +static inline u_int64_t vtophys(unsigned long virtual_addr) { physical_entry pe; status_t err; Modified: haiku/trunk/src/add-ons/kernel/drivers/network/rtl8169/util.c =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/network/rtl8169/util.c 2010-06-21 22:30:47 UTC (rev 37216) +++ haiku/trunk/src/add-ons/kernel/drivers/network/rtl8169/util.c 2010-06-21 22:54:42 UTC (rev 37217) @@ -47,7 +47,9 @@ size = round_to_pagesize(size); areaid = create_area(name, &virtadr, B_ANY_KERNEL_ADDRESS, size, - B_CONTIGUOUS, protection); + B_32_BIT_MEMORY, protection); + // TODO: The rest of the code doesn't deal correctly with physical + // addresses > 4 GB, so we have to force 32 bit addresses here. if (areaid < B_OK) { ERROR("couldn't allocate area %s\n", name); return B_ERROR; Modified: haiku/trunk/src/add-ons/kernel/drivers/network/sis900/sis900.c =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/network/sis900/sis900.c 2010-06-21 22:30:47 UTC (rev 37216) +++ haiku/trunk/src/add-ons/kernel/drivers/network/sis900/sis900.c 2010-06-21 22:54:42 UTC (rev 37217) @@ -152,8 +152,10 @@ struct buffer_desc *descriptor = (void *)read32(info->registers + SiS900_MAC_Tx_DESCR); int16 that; for (that = 0; - that < NUM_Tx_DESCR && (void *)physicalAddress(&info->txDescriptor[that], - sizeof(struct buffer_desc)) != descriptor; that++) { + that < NUM_Tx_DESCR + && physicalAddress(&info->txDescriptor[that], + sizeof(struct buffer_desc)) != (addr_t)descriptor; + that++) { } if (that == NUM_Tx_DESCR) that = 0; @@ -732,7 +734,9 @@ info->txArea = create_area("sis900 tx buffer", (void **)&info->txBuffer[0], B_ANY_KERNEL_ADDRESS, ROUND_TO_PAGE_SIZE(BUFFER_SIZE * NUM_Tx_DESCR), - B_FULL_LOCK, B_READ_AREA | B_WRITE_AREA); + B_32_BIT_MEMORY, B_READ_AREA | B_WRITE_AREA); + // TODO: B_32_BIT_MEMORY implies contiguous, although that wouldn't + // be necessary here! if (info->txArea < B_OK) return info->txArea; @@ -755,7 +759,9 @@ info->rxArea = create_area("sis900 rx buffer", (void **)&info->rxBuffer[0], B_ANY_KERNEL_ADDRESS, ROUND_TO_PAGE_SIZE(BUFFER_SIZE * NUM_Rx_DESCR), - B_FULL_LOCK, B_READ_AREA | B_WRITE_AREA); + B_32_BIT_MEMORY, B_READ_AREA | B_WRITE_AREA); + // TODO: B_32_BIT_MEMORY implies contiguous, although that wouldn't + // be necessary here! if (info->rxArea < B_OK) { delete_area(info->txArea); return info->rxArea; Modified: haiku/trunk/src/add-ons/kernel/drivers/network/vlance/vlance.c =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/network/vlance/vlance.c 2010-06-21 22:30:47 UTC (rev 37216) +++ haiku/trunk/src/add-ons/kernel/drivers/network/vlance/vlance.c 2010-06-21 22:54:42 UTC (rev 37217) @@ -269,8 +269,10 @@ /* create tx descriptor area */ size = RNDUP(sizeof(trns_desc_t) * TX_BUFFERS, B_PAGE_SIZE); device->tx_desc_area = create_area(DEVICE_NAME " tx descriptors", - (void **)device->tx_desc, B_ANY_KERNEL_ADDRESS, size, B_FULL_LOCK, + (void **)device->tx_desc, B_ANY_KERNEL_ADDRESS, size, B_32_BIT_MEMORY, B_READ_AREA | B_WRITE_AREA); + // TODO: B_32_BIT_MEMORY implies contiguous, although that wouldn't + // be necessary here! if (device->tx_desc_area < 0) return device->tx_desc_area; @@ -288,7 +290,9 @@ size = RNDUP(BUFFER_SIZE * TX_BUFFERS, B_PAGE_SIZE); device->tx_buf_area = create_area(DEVICE_NAME " tx buffers", (void **)device->tx_buf, B_ANY_KERNEL_ADDRESS, size, - B_FULL_LOCK, B_READ_AREA | B_WRITE_AREA); + B_32_BIT_MEMORY, B_READ_AREA | B_WRITE_AREA); + // TODO: B_32_BIT_MEMORY implies contiguous, although that wouldn't + // be necessary here! if (device->tx_buf_area < 0) { delete_area(device->tx_desc_area); // sensitive to alloc ordering return device->tx_buf_area; @@ -309,7 +313,9 @@ size = RNDUP( sizeof(recv_desc_t) * RX_BUFFERS, B_PAGE_SIZE); device->rx_desc_area = create_area(DEVICE_NAME " rx descriptors", (void **)device->rx_desc, B_ANY_KERNEL_ADDRESS, size, - B_FULL_LOCK, B_READ_AREA | B_WRITE_AREA); + B_32_BIT_MEMORY, B_READ_AREA | B_WRITE_AREA); + // TODO: B_32_BIT_MEMORY implies contiguous, although that wouldn't + // be necessary here! if (device->rx_desc_area < 0) { delete_area(device->tx_desc_area); delete_area(device->tx_buf_area); // sensitive to alloc ordering @@ -330,7 +336,9 @@ size = RNDUP(BUFFER_SIZE * RX_BUFFERS, B_PAGE_SIZE); device->rx_buf_area = create_area(DEVICE_NAME " rx buffers", (void **)device->rx_buf, B_ANY_KERNEL_ADDRESS, size, - B_FULL_LOCK, B_READ_AREA | B_WRITE_AREA); + B_32_BIT_MEMORY, B_READ_AREA | B_WRITE_AREA); + // TODO: B_32_BIT_MEMORY implies contiguous, although that wouldn't + // be necessary here! if (device->rx_buf_area < 0) { delete_area(device->tx_desc_area); delete_area(device->tx_buf_area); Modified: haiku/trunk/src/add-ons/kernel/drivers/network/wb840/wb840.c =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/network/wb840/wb840.c 2010-06-21 22:30:47 UTC (rev 37216) +++ haiku/trunk/src/add-ons/kernel/drivers/network/wb840/wb840.c 2010-06-21 22:54:42 UTC (rev 37217) @@ -525,7 +525,9 @@ 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_32_BIT_MEMORY, B_READ_AREA | B_WRITE_AREA); + // TODO: B_32_BIT_MEMORY implies contiguous, although that wouldn't + // be necessary here! if (device->rxArea < B_OK) return device->rxArea; @@ -545,7 +547,9 @@ 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); + B_32_BIT_MEMORY, B_READ_AREA | B_WRITE_AREA); + // TODO: B_32_BIT_MEMORY implies contiguous, although that wouldn't + // be necessary here! if (device->txArea < B_OK) { delete_area(device->rxArea); return device->txArea; Modified: haiku/trunk/src/add-ons/kernel/drivers/network/wlan/ipw2100/ipw2100.cpp =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/network/wlan/ipw2100/ipw2100.cpp 2010-06-21 22:30:47 UTC (rev 37216) +++ haiku/trunk/src/add-ons/kernel/drivers/network/wlan/ipw2100/ipw2100.cpp 2010-06-21 22:54:42 UTC (rev 37217) @@ -922,7 +922,7 @@ size = (size + B_PAGE_SIZE - 1) & ~(B_PAGE_SIZE - 1); void *virtualAddress = NULL; area_id area = create_area(name, &virtualAddress, B_ANY_KERNEL_ADDRESS, - size, B_CONTIGUOUS, B_READ_AREA | B_WRITE_AREA); + size, B_32_BIT_MEMORY, B_READ_AREA | B_WRITE_AREA); if (area < B_OK) { TRACE_ALWAYS(("IPW2100: allocating contiguous area failed\n")); return area;