2003-06-02 17:28:30

by ebiederman

[permalink] [raw]
Subject: Re: Request for help

I am CC'ing linux-kernel as that is the general kernel list. There
may be something even more focused on IDE issues but I am
not aware of it.

"ganesh_borse" <[email protected]> writes:

> Hi,
>
>
> I would like to request for a little help related to IDE controllers.
>
>
> I am trying to develop a device drive code for listing the devices connected to
> a ide controller at the time of kernel booting.
>
>
>
> Is there any way to get which channels on ide controller has got devices and
> which devices?

Yes. But it is baroque.

> This I am trying to get even before the normal ide device driver
> has been setup. Are there ide controller commands to get this info?

Not exactly. The method is essentially you ping the drives to see
if they are there.

> Or is this
> info stored in registers of ide-controllers?

Nope this information is not stored in registers.

> For this do we need to write
> assembly instructions on linux?

No.

But there is also nothing that allows you to force the module
order within the kernel. So there are no guarantees you will
come before a normal IDE driver. I assume from the questions
you intend to have this working in the linux kernel.

Eric


2003-06-02 18:37:49

by Andy Pfiffer

[permalink] [raw]
Subject: Re: Request for help

On Mon, 2003-06-02 at 10:49, Eric W. Biederman wrote:
> "ganesh_borse" <[email protected]> writes:
...
> > I am trying to develop a device drive code for listing the devices connected to
> > a ide controller at the time of kernel booting.
...
> > Is there any way to get which channels on ide controller has got devices and
> > which devices?
>
> Yes. But it is baroque.
>
> > This I am trying to get even before the normal ide device driver
> > has been setup. Are there ide controller commands to get this info?

If you can wait until *after* the system has booted, there are lots of
ways to derive what is out there. Grab the sources for "hdparm" and
have a look at it for examples of hardcore access methods.

A simple way to derive some information can be found by walking the
sysfs hierarchy.

Here's a dirt-simple script I use that somewhat-pretty-prints items
hanging off busses in the sysfs hierarchy. Sysfs must be mounted for
the script to work.

Sample output:
% lsbus
ide:
pci0/00:1f.1/ide1/1.0 [ IDE Drive ]
pci0/00:1f.1/ide0/0.1 [ IDE Drive ]
pci0/00:1f.1/ide0/0.0 [ IDE Drive ]

ide-scsi:

pci:
pci0/00:1e.0/04:04.0 [ Intel Corp. 82557/8/9 [Ethernet ]
pci0/00:02.0/02:1f.0/03:00.0 [ Intel Corp. 82806AA PCI64 Hub Ad ]
pci0/00:02.0/02:1f.0 [ Intel Corp. 82806AA PCI64 Hub PC ]
pci0/00:01.0/01:00.0 [ Matrox Graphics, Inc MGA G400 AGP ]
pci0/00:1f.5 [ Intel Corp. 82801BA/BAM AC'97 Au ]
pci0/00:1f.3 [ Intel Corp. 82801BA/BAM SMBus ]
pci0/00:1f.2 [ Intel Corp. 82801BA/BAM USB (Hub ]
pci0/00:1f.1 [ Intel Corp. 82801BA IDE U100 ]
pci0/00:1f.0 [ Intel Corp. 82801BA ISA Bridge ( ]
pci0/00:1e.0 [ Intel Corp. 82801BA/CA/DB PCI Br ]
pci0/00:02.0 [ Intel Corp. 82860 860 (Wombat) C ]
pci0/00:01.0 [ Intel Corp. 82850 850 (Tehama) C ]
pci0/00:00.0 [ Intel Corp. 82860 860 (Wombat) C ]

platform:
legacy/floppy0 [ Floppy Drive ]

pnp:
pnp0/00:10 [ 16550A-compatible COM port ]
pnp0/00:0f [ ECP printer port ]
pnp0/00:0d [ PC standard floppy disk controller ]
pnp0/00:0c [ 16550A-compatible COM port ]
pnp0/00:0b [ PS/2 Port for PS/2-style Mice ]
pnp0/00:0a [ PCI Bus ]
pnp0/00:09 [ Reserved Motherboard Resources ]
pnp0/00:08 [ System Board ]
pnp0/00:07 [ ]
pnp0/00:06 [ Math Coprocessor ]
pnp0/00:05 [ AT-style speaker sound ]
pnp0/00:04 [ IBM Enhanced (101/102-key, PS/2 mouse support) ]
pnp0/00:03 [ AT Real-Time Clock ]
pnp0/00:02 [ AT Timer ]
pnp0/00:01 [ AT DMA Controller ]
pnp0/00:00 [ AT Interrupt Controller ]

scsi:

system:
sys/rtc0 [ i8253 Real Time Clock ]
sys/timer0 [ timer ]
sys/pic0 [ i8259A PIC ]
sys/cpu1 [ CPU 1 ]
sys/cpu0 [ CPU 0 ]

usb:
pci0/00:1f.2/usb1/1-0:0 [ Hub ]
pci0/00:1f.2/usb1 [ Intel Corp. 82801BA/BAM USB (Hub (Linux 2.5.70 uh
]
%

The script is attached...




Attachments:
lsbus (729.00 B)