Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/cardbus Back out my rbus change since it seems to br...
details: https://anonhg.NetBSD.org/src/rev/e9279899edf0
branches: trunk
changeset: 485912:e9279899edf0
user: augustss <augustss%NetBSD.org@localhost>
date: Mon May 08 19:25:46 2000 +0000
description:
Back out my rbus change since it seems to break things.
diffstat:
sys/dev/cardbus/rbus.c | 408 +++++++++++++++++++++++++-----------------------
1 files changed, 211 insertions(+), 197 deletions(-)
diffs (truncated from 510 to 300 lines):
diff -r 57f59f93087a -r e9279899edf0 sys/dev/cardbus/rbus.c
--- a/sys/dev/cardbus/rbus.c Mon May 08 19:25:10 2000 +0000
+++ b/sys/dev/cardbus/rbus.c Mon May 08 19:25:46 2000 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: rbus.c,v 1.4 2000/05/08 14:00:05 augustss Exp $ */
+/* $NetBSD: rbus.c,v 1.5 2000/05/08 19:25:46 augustss Exp $ */
/*
* Copyright (c) 1999
* HAYAKAWA Koichi. All rights reserved.
@@ -42,7 +42,7 @@
#include <dev/cardbus/rbus.h>
-/*#define RBUS_DEBUG*/
+/* #define RBUS_DEBUG */
#if defined RBUS_DEBUG
#define STATIC
@@ -63,16 +63,16 @@
int
rbus_space_alloc(rbt, addr, size, mask, align, flags, addrp, bshp)
- rbus_tag_t rbt;
- bus_addr_t addr;
- bus_size_t size;
- bus_addr_t mask, align;
- int flags;
- bus_addr_t *addrp;
- bus_space_handle_t *bshp;
+ rbus_tag_t rbt;
+ bus_addr_t addr;
+ bus_size_t size;
+ bus_addr_t mask, align;
+ int flags;
+ bus_addr_t *addrp;
+ bus_space_handle_t *bshp;
{
- return rbus_space_alloc_subregion(rbt, rbt->rb_start, rbt->rb_end,
- addr, size, mask, align, flags, addrp, bshp);
+ return rbus_space_alloc_subregion(rbt, rbt->rb_start, rbt->rb_end, addr,
+ size, mask, align, flags, addrp, bshp);
}
@@ -80,118 +80,129 @@
int
rbus_space_alloc_subregion(rbt, substart, subend, addr, size, mask, align, flags, addrp, bshp)
- rbus_tag_t rbt;
- bus_addr_t addr;
- bus_addr_t substart;
- bus_addr_t subend;
- bus_size_t size;
- bus_addr_t mask, align;
- int flags;
- bus_addr_t *addrp;
- bus_space_handle_t *bshp;
+ rbus_tag_t rbt;
+ bus_addr_t addr;
+ bus_addr_t substart;
+ bus_addr_t subend;
+ bus_size_t size;
+ bus_addr_t mask, align;
+ int flags;
+ bus_addr_t *addrp;
+ bus_space_handle_t *bshp;
{
- bus_addr_t decodesize = mask + 1;
- bus_addr_t boundary, search_addr;
- int val;
- bus_addr_t result;
- u_long ures;
- int exflags = EX_FAST | EX_NOWAIT;
+ bus_addr_t decodesize = mask + 1;
+ bus_addr_t boundary, search_addr;
+ int val = 0;
+ bus_addr_t result;
+ int exflags = EX_FAST | EX_NOWAIT;
- DPRINTF(("rbus_space_alloc: addr 0x%lx, size 0x%lx, mask 0x%lx, "
- "align 0x%lx, substart 0x%lx, subend 0x%lx\n",
- addr, size, mask, align, substart, subend));
+ DPRINTF(("rbus_space_alloc: addr %lx, size %lx, mask %lx, align %lx\n",
+ addr, size, mask, align));
- addr += rbt->rb_offset;
+ addr += rbt->rb_offset;
- if (mask == 0)
- /* FULL Decode */
- decodesize = 0;
-
- if (rbt->rb_flags == RBUS_SPACE_ASK_PARENT)
- return rbus_space_alloc(rbt->rb_parent, addr, size, mask,
- align, flags, addrp, bshp);
+ if (mask == 0) {
+ /* FULL Decode */
+ decodesize = 0;
+ }
- if (rbt->rb_flags != RBUS_SPACE_SHARE &&
- rbt->rb_flags != RBUS_SPACE_DEDICATE)
- return 1;
+ if (rbt->rb_flags == RBUS_SPACE_ASK_PARENT) {
+ return rbus_space_alloc(rbt->rb_parent, addr, size, mask, align, flags,
+ addrp, bshp);
+ } else if (rbt->rb_flags == RBUS_SPACE_SHARE ||
+ rbt->rb_flags == RBUS_SPACE_DEDICATE) {
+ /* rbt has its own sh_extent */
- /* rbt has its own sh_extent */
-
- /* sanity check: the subregion [substart, subend] should be
- smaller than the region included in sh_extent */
- if (substart < rbt->rb_ext->ex_start || subend > rbt->rb_ext->ex_end)
- return 1;
+ /* sanity check: the subregion [substart, subend] should be
+ smaller than the region included in sh_extent */
+ if (substart < rbt->rb_ext->ex_start || subend > rbt->rb_ext->ex_end) {
+ return 1;
+ }
- if (decodesize == align) {
- if (extent_alloc_subregion(rbt->rb_ext, substart, subend,
- size, align, 0, exflags, &ures)) {
- return 1;
- }
- } else if (decodesize == 0 || addr != 0) {
- /* maybe, the register is overflowed. */
- if (extent_alloc_subregion(rbt->rb_ext, addr, addr + size,
- size, 1, 0, exflags, &ures)) {
- return 1;
- }
- } else {
- boundary = decodesize > align ? decodesize : align;
- search_addr = (substart & ~(boundary - 1)) + addr;
+ if (decodesize == align) {
+ if(extent_alloc_subregion(rbt->rb_ext, substart, subend, size, align, 0,
+ exflags, (u_long *)&result)) {
+ return 1;
+ }
+ } else if (decodesize == 0) {
+ /* maybe, the resister is overflowed. */
+
+ if (extent_alloc_subregion(rbt->rb_ext, addr, addr + size, size,
+ 0, 0, exflags, (u_long *)&result)) {
+ return 1;
+ }
+ } else {
- if (search_addr < substart)
- search_addr += boundary;
+ boundary = decodesize > align ? decodesize : align;
+
+ search_addr = (substart & ~(boundary - 1)) + addr;
+
+ if (search_addr < substart) {
+ search_addr += boundary;
+ }
- val = 1;
- for (; search_addr + size <= subend; search_addr += boundary) {
- val = extent_alloc_subregion(rbt->rb_ext, search_addr,
- search_addr + size, size, align, 0, exflags,
- &ures);
- if (val == 0)
- break;
- }
- if (val)
- return 1;
+ for (; search_addr + size <= subend; search_addr += boundary) {
+ val = extent_alloc_subregion(rbt->rb_ext,search_addr, search_addr+size,
+ size, align, 0, exflags, (u_long *)&result);
+ if (val == 0) {
+ break;
}
- result = (bus_addr_t)ures;
+ }
+ if (val) {
+ return 1;
+ }
+ }
+
+ if(md_space_map(rbt->rb_bt, result, size, flags, bshp)) {
+ /* map failed */
+ extent_free(rbt->rb_ext, result, size, exflags);
+ return 1;
+ }
- if (md_space_map(rbt->rb_bt, result, size, flags, bshp)) {
- /* map failed */
- extent_free(rbt->rb_ext, result, size, exflags);
- return 1;
- }
+ if (addrp != NULL) {
+ *addrp = result + rbt->rb_offset;
+ }
+ return 0;
- if (addrp != NULL)
- *addrp = result + rbt->rb_offset;
- return 0;
+ } else {
+ /* error!! */
+ return 1;
+ }
+ return 1;
}
+
+
+
int
rbus_space_free(rbt, bsh, size, addrp)
- rbus_tag_t rbt;
- bus_space_handle_t bsh;
- bus_size_t size;
- bus_addr_t *addrp;
+ rbus_tag_t rbt;
+ bus_space_handle_t bsh;
+ bus_size_t size;
+ bus_addr_t *addrp;
{
- int exflags = EX_FAST | EX_NOWAIT;
- bus_addr_t addr;
- int status = 1;
+ int exflags = EX_FAST | EX_NOWAIT;
+ bus_addr_t addr;
+ int status = 1;
- if (rbt->rb_flags == RBUS_SPACE_ASK_PARENT) {
- status = rbus_space_free(rbt->rb_parent, bsh, size, &addr);
- } else if (rbt->rb_flags == RBUS_SPACE_SHARE ||
- rbt->rb_flags == RBUS_SPACE_DEDICATE) {
- md_space_unmap(rbt->rb_bt, bsh, size, &addr);
+ if (rbt->rb_flags == RBUS_SPACE_ASK_PARENT) {
+ status = rbus_space_free(rbt->rb_parent, bsh, size, &addr);
+ } else if (rbt->rb_flags == RBUS_SPACE_SHARE ||
+ rbt->rb_flags == RBUS_SPACE_DEDICATE) {
+ md_space_unmap(rbt->rb_bt, bsh, size, &addr);
- extent_free(rbt->rb_ext, addr, size, exflags);
+ extent_free(rbt->rb_ext, addr, size, exflags);
- status = 0;
- } else {
- /* error. INVALID rbustag */
- status = 1;
- }
- if (addrp != NULL)
- *addrp = addr;
- return status;
+ status = 0;
+ } else {
+ /* error. INVALID rbustag */
+ status = 1;
+ }
+ if (addrp != NULL) {
+ *addrp = addr;
+ }
+ return status;
}
@@ -205,42 +216,43 @@
*/
static rbus_tag_t
rbus_new_body(bt, parent, ex, start, end, offset, flags)
- bus_space_tag_t bt;
- rbus_tag_t parent;
- struct extent *ex;
- bus_addr_t start, end, offset;
- int flags;
+ bus_space_tag_t bt;
+ rbus_tag_t parent;
+ struct extent *ex;
+ bus_addr_t start, end, offset;
+ int flags;
{
- rbus_tag_t rb;
+ rbus_tag_t rb;
- /* sanity check */
- if (parent != NULL) {
- if (start < parent->rb_start || end > parent->rb_end) {
- /* out of range: [start, size] should be containd in parent space */
- return 0;
- /* Should I invoke panic? */
- }
- }
+ /* sanity check */
+ if (parent != NULL) {
+ if (start < parent->rb_start || end > parent->rb_end) {
+ /* out of range: [start, size] should be containd in parent space */
+ return 0;
+ /* Should I invoke panic? */
+ }
+ }
Home |
Main Index |
Thread Index |
Old Index