Geert Uytterhoeven wrote: > > On Wed, 3 Oct 2001, Jun Sun wrote: > > I talked about machine detection a while back. My idea is following: > > > > 0. all machines that are *configured* into the image will supply <my>_detect() > > and <my>_setup() functions. > > > > 1. at MIPS start up, we loop through all <my>_detect(), which returns three > > values, a) run-time detection negative, b) run-time detection positive, and c) > > no run-time detection code, but I return positive because I am configured in. > > > > 2. the startup code resolves conflicts (which sometimes may panic); and decide > > on one machine. > > > > 3. then the startup code calls the right <my>_setup() code which will set up > > the mach_type and other stuff. > > Nice! > > I suppose you want to have struct containing pointers to both the detect() and > setup() functions, so you know which setup() function you have to call? > The actual mechanism can vary and be flexible, but here is more detail what I had in mind: 1. <my>_detect is placed in a special ELF section (mips_mach_detect), using similar mechanism as .initcall.init section and __setup() macro. 2. in addition to the 3 possible return value, <my>_detect also returns a function pointer to <my>_setup. Once a final candidate is chosen, the machine detection code will issue the right <my>_setup call. There are probably some other related changes which need to be made, (e.g., prom_init() may be eliminated, etc). It seems like I get more and more positive feedbacks on this idea. We should try to implement this in 2.5. Jun