Le 9 nov. 08 à 17:16, Geert Uytterhoeven a écrit :
On Mon, 3 Nov 2008, Finn Thain wrote:
On Sun, 2 Nov 2008, Brad Boyer wrote:
On Sun, Nov 02, 2008 at 12:21:23PM +0100, Laurent Vivier wrote:
Le 2 nov. 08 à 09:54, Geert Uytterhoeven a écrit :
The preferred way to do this these days is to create a platform
device with a struct resource that points to the SWIMBase.
Is this what Finn explains also in his answer ? If so, I agree.
Not exactly. What Finn suggested is to match the way we handle
many of
the other on-board things like ADB and SCSI. What Geert suggests
is a
much more recent way to do things that we generally haven't done for
Mac-only drivers. I think Finn used it for the new Sonic ethernet
driver
because we share it with other systems. The code in macsonic.c
also has
the extra complexity from having both NuBus and on-board hardware to
support, and NuBus also hasn't been updated to the new driver model.
Finn's suggestion of using the macintosh_config entry and data
table is
the easiest way to get it working, but Geert's method would move
to the
real device/driver model that most other systems are using now.
I agree with Geert. Ignore my comment about device_initcall -- I was
looking at via-cuda.c but that is not a good example.
drivers/scsi/mac_esp.c is a better example.
esp_mac_probe checks the macintosh_config entry. That and
esp_mac_remove
are the platform device entry points Geert referred to. The module
entry
points are mac_esp_init and mac_esp_exit. I think you could use
either of
the platform device probe routine or the module init routine to set
the
base address.
Ideally, the _probe() routine should not look at the bits in
macintosh_config,
but only at the platform device and its resources.
The creation of the platform device should be moved to arch/m68k/mac/
config,
which would create the platform device, and only if the bits in
macintosh_config indicate that the hardware is present. The actual
value of
swim_base can be stored in a struct resource linked to the platform
device.
So far the only platform device for m68k (not in mainline) is
Michael's
EtherNAT driver, cfr. arch/m68k/atari/config.c. Note that that one
registers
the platform device unconditionally, as there's no magic predictor
for its
presence in the firmware or machine tables.
OK, I'll copy what is done for ethernat driver.
Thank you for the explanation.
Laurent
----------------------- Laurent Vivier ----------------------
"The best way to predict the future is to invent it."
- Alan Kay
--
To unsubscribe from this list: send the line "unsubscribe linux-m68k" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html