Speaking of agp, what would be needed to add apg 8x support to the
radeon driver? does the value of 'apgmode' just get passed on to the
agpcode? I'd imagine there might be some bits to flip on the radeon.
Alex
--- Dave Jones [EMAIL PROTECTED] wrote:
Folks,
Any comments ? The linkage between AGP DRI is somewhat
icky currently, and Rusty's proposal makes a lot of sense,
especially if the inter_module_* goo is going to go away
(It's already marked as deprecated in 2.5)
Dave
On Tue, May 27, 2003 at 03:25:27PM +1000, Rusty Russell wrote:
You know I really want to get rid of inter_module_get etc.
How's progress on AGP? I am unfortunately lacking a machine
with AGP
and DRM support (ancient Thinkpads, ewww...)
It's still there unchanged. To be honest I've no idea how to
get rid of it, unless we just force DRM to have a dependancy
on
AGPGART. (Which really sucks for people with PCI graphic cards
with no interest in AGP).
It's fairly simple: rather than
inter_module_register/unregister,
simply EXPORT the symbol.
And rather than inter_module_get, do symbol_get() and instead of
inter_module_put, do symbol_put().
Is that how you implement weak symbols now ? If I modprobe a DRM
module
without having AGPGART loaded, I don't want it to bitch about
unresolved
symbols. Which is what I think the inter_module junk is actually
trying
to do (if I'm wrong on this, I've *no idea* what it's doing).
You've got it exactly right. Which to me, makes sense. This bit is
a
fairly trivial replacement (of course, symbol_get is typesafe, so you
need to have the definition of the symbol in a header somewhere, but
that's just common sense). See also symbol_request if you want to
probe for the symbol, too.
Now, my only problem is the code in drm_stub.h: stub_register
(and
stub_putminor, its partner). Looks like this is trying to
handle
multiple DRM modules? The first module in will succeed the
register_chrdev and register its stub_info, and future
registrations
will then find that and use it?
1) Does this code even work? Can you have multiple DRM modules
loaded?
AFAIK, yes. Not tried it. The whole DRM() macro stuff is there just
to
make sure that stuff gets unique symbols, so that it can be
duplicated
in each DRM module. We could just move that stuff to generic DRM
code ?
2) If so, we need to find a neater way. A simple but hackish
one
would be a small drm_stub holder infrastructure in the
mainstream
kernel. A slightly less hackish one would be a new drm_base
module.
*nod*
OK, I'll start with a really minimal, tiny change to introduce this.
But first part first, how's the below patch? Compiles, untested. It
just does the agp - drm thing, not the internal drm_stub.h stuff...
Cheers!
Rusty.
--
Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
diff -urpN --exclude TAGS -X
/home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal
linux-2.5.70-bk1/drivers/char/agp/backend.c
working-2.5.70-bk1-drm/drivers/char/agp/backend.c
--- linux-2.5.70-bk1/drivers/char/agp/backend.c 2003-05-27
15:02:07.0 +1000
+++ working-2.5.70-bk1-drm/drivers/char/agp/backend.c 2003-05-28
11:03:13.0 +1000
@@ -210,7 +210,7 @@ static void agp_backend_cleanup(struct a
phys_to_virt(bridge-scratch_page_real));
}
-static const drm_agp_t drm_agp = {
+const drm_agp_t drm_agp_interface = {
agp_free_memory,
agp_allocate_memory,
agp_bind_memory,
@@ -220,6 +220,7 @@ static const drm_agp_t drm_agp = {
agp_backend_release,
agp_copy_info
};
+EXPORT_SYMBOL(drm_agp_interface);
/* XXX Kludge alert: agpgart isn't ready for multiple bridges yet */
struct agp_bridge_data *agp_alloc_bridge(void)
@@ -270,9 +271,6 @@ int agp_add_bridge(struct agp_bridge_dat
goto frontend_err;
}
- /* FIXME: What to do with this? */
- inter_module_register(drm_agp, THIS_MODULE, drm_agp);
-
agp_count++;
return 0;
@@ -291,7 +289,6 @@ void agp_remove_bridge(struct agp_bridge
bridge-type = NOT_SUPPORTED;
agp_frontend_cleanup();
agp_backend_cleanup(bridge);
- inter_module_unregister(drm_agp);
agp_count--;
module_put(bridge-driver-owner);
}
diff -urpN --exclude TAGS -X
/home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal
linux-2.5.70-bk1/drivers/char/drm/drm_agpsupport.h
working-2.5.70-bk1-drm/drivers/char/drm/drm_agpsupport.h
--- linux-2.5.70-bk1/drivers/char/drm/drm_agpsupport.h2003-05-27
15:02:07.0 +1000
+++ working-2.5.70-bk1-drm/drivers/char/drm/drm_agpsupport.h
2003-05-28 12:27:59.0 +1000
@@ -34,8 +34,8 @@
#if __REALLY_HAVE_AGP
-#define DRM_AGP_GET (drm_agp_t *)inter_module_get(drm_agp)