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.000000000 +1000
> +++ working-2.5.70-bk1-drm/drivers/char/agp/backend.c 2003-05-28
> 11:03:13.000000000 +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.h        2003-05-27
> 15:02:07.000000000 +1000
> +++ working-2.5.70-bk1-drm/drivers/char/drm/drm_agpsupport.h
> 2003-05-28 12:27:59.000000000 +1000
> @@ -34,8 +34,8 @@
>  
>  #if __REALLY_HAVE_AGP
>  
> -#define DRM_AGP_GET (drm_agp_t *)inter_module_get("drm_agp")
> -#define DRM_AGP_PUT inter_module_put("drm_agp")
> +#define DRM_AGP_GET symbol_get(drm_agp_interface)
> +#define DRM_AGP_PUT symbol_put(drm_agp_interface)
>  
>  static const drm_agp_t *drm_agp = NULL;
>  
> diff -urpN --exclude TAGS -X
> /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal
> linux-2.5.70-bk1/include/linux/agp_backend.h
> working-2.5.70-bk1-drm/include/linux/agp_backend.h
> --- linux-2.5.70-bk1/include/linux/agp_backend.h      2003-05-27
> 15:02:21.000000000 +1000
> +++ working-2.5.70-bk1-drm/include/linux/agp_backend.h        2003-05-28
> 11:02:40.000000000 +1000
> @@ -96,11 +96,7 @@ extern void agp_enable(u32);
>  extern int agp_backend_acquire(void);
>  extern void agp_backend_release(void);
>  
> -/*
> - * Interface between drm and agp code.  When agp initializes, it
> makes
> - * the below structure available via inter_module_register(), drm
> might
> - * use it.  Keith Owens <[EMAIL PROTECTED]> 28 Oct 2000.
> - */
> +/* Interface between drm and agp code. */
>  typedef struct {
>       void                    (*free_memory)(struct agp_memory *);
>       struct agp_memory *     (*allocate_memory)(size_t, u32);
> @@ -112,7 +108,6 @@ typedef struct {
>       int                     (*copy_info)(struct agp_kern_info *);
>  } drm_agp_t;
>  
> -extern const drm_agp_t *drm_agp_p;
> -
> +extern const drm_agp_t drm_agp_interface;
>  #endif                               /* __KERNEL__ */
>  #endif                               /* _AGP_BACKEND_H */
> 
> 
> 
> -------------------------------------------------------
> This SF.Net email sponsored by: Parasoft
> Error proof Web apps, automate testing & more.
> Download & eval WebKing and get a free book.
> www.parasoft.com/bulletproofapps1
> _______________________________________________
> Dri-devel mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/dri-devel


__________________________________
Do you Yahoo!?
SBC Yahoo! DSL - Now only $29.95 per month!
http://sbc.yahoo.com


-------------------------------------------------------
This SF.Net email sponsored by: Parasoft
Error proof Web apps, automate testing & more.
Download & eval WebKing and get a free book.
www.parasoft.com/bulletproofapps1
_______________________________________________
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to