Author: bonefish Date: 2010-06-22 01:21:07 +0200 (Tue, 22 Jun 2010) New Revision: 37218 Changeset: http://dev.haiku-os.org/changeset/37218/haiku Modified: haiku/trunk/src/add-ons/kernel/busses/ata/silicon_image_3112/silicon_image_3112.c haiku/trunk/src/add-ons/kernel/busses/ide/silicon_image_3112/silicon_image_3112.c haiku/trunk/src/add-ons/kernel/generic/ata_adapter/ata_adapter.c haiku/trunk/src/add-ons/kernel/generic/ide_adapter/ide_adapter.c Log: * Force 32 bit physical addresses. * Added TODO about apparently ignored 64 KB boundary. Modified: haiku/trunk/src/add-ons/kernel/busses/ata/silicon_image_3112/silicon_image_3112.c =================================================================== --- haiku/trunk/src/add-ons/kernel/busses/ata/silicon_image_3112/silicon_image_3112.c 2010-06-21 22:54:42 UTC (rev 37217) +++ haiku/trunk/src/add-ons/kernel/busses/ata/silicon_image_3112/silicon_image_3112.c 2010-06-21 23:21:07 UTC (rev 37218) @@ -449,9 +449,11 @@ TRACE("mmio_addr %p\n", (void *)controller->mmio_addr); // PRDT must be contiguous, dword-aligned and must not cross 64K boundary +// TODO: Where's the handling for the 64 K boundary? create_area_etc() can be +// used. prdtSize = (ATA_ADAPTER_MAX_SG_COUNT * sizeof(prd_entry) + (B_PAGE_SIZE - 1)) & ~(B_PAGE_SIZE - 1); channel->prd_area = create_area("prd", (void **)&channel->prdt, - B_ANY_KERNEL_ADDRESS, prdtSize, B_CONTIGUOUS, 0); + B_ANY_KERNEL_ADDRESS, prdtSize, B_32_BIT_MEMORY, 0); if (channel->prd_area < B_OK) { TRACE("creating prd_area failed\n"); goto err; Modified: haiku/trunk/src/add-ons/kernel/busses/ide/silicon_image_3112/silicon_image_3112.c =================================================================== --- haiku/trunk/src/add-ons/kernel/busses/ide/silicon_image_3112/silicon_image_3112.c 2010-06-21 22:54:42 UTC (rev 37217) +++ haiku/trunk/src/add-ons/kernel/busses/ide/silicon_image_3112/silicon_image_3112.c 2010-06-21 23:21:07 UTC (rev 37218) @@ -454,9 +454,11 @@ TRACE("mmio_addr %p\n", (void *)controller->mmio_addr); // PRDT must be contiguous, dword-aligned and must not cross 64K boundary +// TODO: Where's the handling for the 64 K boundary? create_area_etc() can be +// used. prdtSize = (IDE_ADAPTER_MAX_SG_COUNT * sizeof(prd_entry) + (B_PAGE_SIZE - 1)) & ~(B_PAGE_SIZE - 1); channel->prd_area = create_area("prd", (void **)&channel->prdt, - B_ANY_KERNEL_ADDRESS, prdtSize, B_CONTIGUOUS, 0); + B_ANY_KERNEL_ADDRESS, prdtSize, B_32_BIT_MEMORY, 0); if (channel->prd_area < B_OK) { TRACE("creating prd_area failed\n"); goto err; Modified: haiku/trunk/src/add-ons/kernel/generic/ata_adapter/ata_adapter.c =================================================================== --- haiku/trunk/src/add-ons/kernel/generic/ata_adapter/ata_adapter.c 2010-06-21 22:54:42 UTC (rev 37217) +++ haiku/trunk/src/add-ons/kernel/generic/ata_adapter/ata_adapter.c 2010-06-21 23:21:07 UTC (rev 37218) @@ -405,9 +405,11 @@ TRACE("PCI-ATA: bus master base %#x\n", channel->bus_master_base); // PRDT must be contiguous, dword-aligned and must not cross 64K boundary +// TODO: Where's the handling for the 64 K boundary? create_area_etc() can be +// used. prdt_size = (ATA_ADAPTER_MAX_SG_COUNT * sizeof( prd_entry ) + (B_PAGE_SIZE - 1)) & ~(B_PAGE_SIZE - 1); channel->prd_area = create_area("prd", (void **)&channel->prdt, B_ANY_KERNEL_ADDRESS, - prdt_size, B_CONTIGUOUS, 0); + prdt_size, B_32_BIT_MEMORY, 0); if (channel->prd_area < B_OK) { res = channel->prd_area; goto err2; Modified: haiku/trunk/src/add-ons/kernel/generic/ide_adapter/ide_adapter.c =================================================================== --- haiku/trunk/src/add-ons/kernel/generic/ide_adapter/ide_adapter.c 2010-06-21 22:54:42 UTC (rev 37217) +++ haiku/trunk/src/add-ons/kernel/generic/ide_adapter/ide_adapter.c 2010-06-21 23:21:07 UTC (rev 37218) @@ -393,9 +393,11 @@ TRACE("PCI-IDE: bus master base %#x\n", channel->bus_master_base); // PRDT must be contiguous, dword-aligned and must not cross 64K boundary +// TODO: Where's the handling for the 64 K boundary? create_area_etc() can be +// used. prdt_size = (IDE_ADAPTER_MAX_SG_COUNT * sizeof( prd_entry ) + (B_PAGE_SIZE - 1)) & ~(B_PAGE_SIZE - 1); channel->prd_area = create_area("prd", (void **)&channel->prdt, B_ANY_KERNEL_ADDRESS, - prdt_size, B_CONTIGUOUS, 0); + prdt_size, B_32_BIT_MEMORY, 0); if (channel->prd_area < B_OK) { res = channel->prd_area; goto err2;