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>