Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 30 May 2006 22:33:20 +0800
From:      "william wallace" <avalonwallace@gmail.com>
To:        "M. Warner Losh" <imp@bsdimp.com>
Cc:        freebsd-hackers@freebsd.org, scottl@samsco.org
Subject:   Re: misc questions about the device&driver arch
Message-ID:  <87ab37ab0605300733i7bead6een7ba974d66fedc9a3@mail.gmail.com>
In-Reply-To: <20060530.075818.-820706528.imp@bsdimp.com>
References:  <20060524153153.GF49081@funkthat.com> <87ab37ab0605280309s15a31cb4yc8a54be1af5472dd@mail.gmail.com> <87ab37ab0605300642ja608c97s24836a317cdac24@mail.gmail.com> <20060530.075818.-820706528.imp@bsdimp.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 5/30/06, M. Warner Losh <imp@bsdimp.com> wrote:
> In message: <87ab37ab0605300642ja608c97s24836a317cdac24@mail.gmail.com>
>            "william wallace" <avalonwallace@gmail.com> writes:
> : Sir:
> : I  have got the way to map linux pci access way to the BSD way :)
> : now ,several more question ,wondering :(
> : FIRST
> : struct pci_devinfo * pci_read_device(device_t pcib, int b, int s, int
> : f, size_t size)
> : struct cardbus_devinfo {
> :       struct pci_devinfo pci;
> :       uint8_t        mprefetchable; /* bit mask of prefetchable BARs */
> :
> : so what happen when dinfo = (struct cardbus_devinfo
> : *)pci_read_device(brdev, bus, slot, func, sizeof(struct
> : cardbus_devinfo));
> : can we use this magic as a common way to wrap common guts?
>
> Yes.  It is already there when you go throuh the proper interface.
> Take a look at ivars.  struct pci_devinfo is not for anybody but a bus
> to use.
so ivar IS devinfo .and so when we create something special ,just
ABC_devinfo{
struct pci_devinfo pci;
........

> : SECOND
> : what should we do to destroy a device and hot remove it from the system ?
> : 1 pause the application
>
> impractical.  What application?  This is an async event, and upper
> level drivers have to cope.  If they don't, we're screwed anyway.  If
> a device can disappear, then we have to make sure that the drivers
> support it.
SORRY:) I mean quiece the DRIVER first
> : 2 device_detach(devlist[tmp]);
>
> That's what we do right now in cardbus.
>
> : 3***_release_all_resources(busdev, dinfo);
>
> Drivers are responsible for doing this, not the bus.
THIS still happens in cardbus of FreeBSD 53 ~_^
> : 4 device_delete_child(busdev, devlist[tmp]);
> That's what we do right now in cardbus.
>
> : 5 pci_freecfg((struct pci_devinfo *)dinfo);
>
> Sounds good.
>
> : 6 shutdown power of the slot
>
> Yea.
>
> : so what exactly happens between 2 and 5?
>
> : THIRD
> : Because the PCIE configure space is 4k long ,shall we change the
> : #define PCI_REGMAX    255
> : to facilitate the PCI express config R/W?
>
> Maybe.  Lemme investigate because PCIe changes this from a well known
> constant for all pci busses, to a variable one...
IT really make me headache ,
i decide to changePCI_REGMAX    into 4k, just port the linux way here .
> Warner
>


-- 
we who r about to die,salute u!



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?87ab37ab0605300733i7bead6een7ba974d66fedc9a3>