From 6a76b51960b63b7529c36307287735af0d9ae7b9 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Mon, 21 Jun 2010 23:21:07 +0000 Subject: [PATCH] * Force 32 bit physical addresses. * Added TODO about apparently ignored 64 KB boundary. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37218 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/busses/ata/silicon_image_3112/silicon_image_3112.c | 4 +++- .../kernel/busses/ide/silicon_image_3112/silicon_image_3112.c | 4 +++- src/add-ons/kernel/generic/ata_adapter/ata_adapter.c | 4 +++- src/add-ons/kernel/generic/ide_adapter/ide_adapter.c | 4 +++- 4 files changed, 12 insertions(+), 4 deletions(-) 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 d7ec21dc40..1291221ce5 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 @@ -449,9 +449,11 @@ channel_init(device_node *node, void **_channelCookie) 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; 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 b00ad51e30..3ad817760b 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 @@ -454,9 +454,11 @@ channel_init(device_node *node, void **_channelCookie) 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; 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 6050b9ef6c..570fc4708b 100644 --- a/src/add-ons/kernel/generic/ata_adapter/ata_adapter.c +++ b/src/add-ons/kernel/generic/ata_adapter/ata_adapter.c @@ -405,9 +405,11 @@ ata_adapter_init_channel(device_node *node, 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; 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 1cdefef6f1..a68f965845 100644 --- a/src/add-ons/kernel/generic/ide_adapter/ide_adapter.c +++ b/src/add-ons/kernel/generic/ide_adapter/ide_adapter.c @@ -393,9 +393,11 @@ ide_adapter_init_channel(device_node *node, 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;