Re: reference code for non-PCI libata complaint SATA for ARMboards.

From: Alan Cox
Date: Tue Oct 25 2005 - 10:08:22 EST


On Maw, 2005-10-25 at 17:41 +0530, Deven Balani wrote:
> Hi All!
>
> I am currently writing a low-level driver for non-PCI SATA controller
> in ARM platform.which uses libata-core.c for linux-2.4.25. Can any one
> tell me any reference code available under linux.

At the moment its a bit hard to do a non PCI driver because the core
code assumes that there is a device structure (or pci_dev structure) for
everything. Fixing that is a two line change for 2.6 (probably similar
for 2.4) but Jeff Garzik rejected it. A second problem is that it
doesn't return the host_set by default but 2.4 libata doesn't have the
changes for unloading SATA modules so that should be ignorable


With that patched something like this will do the job (you'll probably
be using MMIO while the example is PIO)

static __init int legacy_init_one(unsigned long io, unsigned long ctrl,
int irq)
{
struct ata_probe_ent ae;
int ret;

memset(&ae, 0, sizeof(struct ata_probe_ent));
ae.dev = NULL;
ae.port_ops = &legacy_port_ops;
ae.sht = &legacy_sht;
ae.n_ports = 2;
ae.pio_mask = 0x1F;
ae.irq = irq;
ae.irq_flags = 0;
ae.host_flags = ATA_FLAG_SLAVE_POSS;
ae.port[0].cmd_addr = io;
ata_std_ports(&ae.port[0]);
ae.port[0].altstatus_addr = ctrl;
ae.port[0].ctl_addr = ctrl;

ret = ata_device_add(&ae);
if(ret == 0)
return -ENODEV;

legacy_host[nr_legacy_host++] = ae.host_set;
return 0;
}

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/