[lkml]   [1999]   [Dec]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Patch in this message
SubjectPCI resource allocation (was Re: Ok, making ready for pre-2.4 and code-freeze..)

> Eh why not? Last time I checked it worked.

On the i386, yes. On Alpha, probably not. Allocation of PCI address spaces
is unfortunately not a simple task -- you need to obey various strange alignment
requirements :( Also, the mapping between physical and bus addresses differs
from architecture to architecture even for I/O addresses.

> Anyway, the sonicvibes driver _needs_ to be able to allocate these resources,
> noone else is going to do this for it, as the sonicvibes chip uses
> nonstandard registers for the DDMA address, and no BIOS I've seen knows about
> sonicvibes peculiarity.
> Any suggestion?

We should define a PCI layer function (architecture specific) allowing drivers
to ask for assigning of new resources (see the patch below).

DaveM, does this look reasonable? I've noticed pdev_assign_unassigned_resources()
being passed min_io and min_mem arguments, but I think we should just adjust resources
of the parent bus instead.

Have a nice fortnight
Martin `MJ' Mares <> <>
"P.C.M.C.I.A. stands for `People Can't Memorize Computer Industry Acronyms'"

--- include/linux/pci.h.mj Mon Dec 20 11:00:44 1999
+++ include/linux/pci.h Mon Dec 20 11:01:43 1999
@@ -413,14 +413,15 @@

void pcibios_init(void);
void pcibios_fixup_bus(struct pci_bus *);
-void pcibios_fixup_pbus_ranges(struct pci_bus *, struct pbus_set_ranges_data *);
int pcibios_enable_device(struct pci_dev *);
char *pcibios_setup (char *str);

+/* Used only when drivers/pci/setup.c is used */
void pcibios_align_resource(void *, struct resource *, unsigned long);
void pcibios_update_resource(struct pci_dev *, struct resource *,
struct resource *, int);
void pcibios_update_irq(struct pci_dev *, int irq);
+void pcibios_fixup_pbus_ranges(struct pci_bus *, struct pbus_set_ranges_data *);

/* Backward compatibility, don't use in new code! */

@@ -443,7 +444,7 @@
unsigned short index, unsigned char *bus,
unsigned char *dev_fn);

-/* Generic PCI interface functions */
+/* Generic PCI functions used internally */

void pci_init(void);
struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata);
@@ -454,6 +455,8 @@
void pci_read_bridge_bases(struct pci_bus *child);
struct resource *pci_find_parent_resource(struct pci_dev *dev, struct resource *res);

+/* Generic PCI functions exported to card drivers */
struct pci_dev *pci_find_device (unsigned int vendor, unsigned int device, struct pci_dev *from);
struct pci_dev *pci_find_subsys (unsigned int vendor, unsigned int device,
unsigned int ss_vendor, unsigned int ss_device,
@@ -470,9 +473,11 @@
int pci_write_config_byte(struct pci_dev *dev, int where, u8 val);
int pci_write_config_word(struct pci_dev *dev, int where, u16 val);
int pci_write_config_dword(struct pci_dev *dev, int where, u32 val);
int pci_enable_device(struct pci_dev *dev);
void pci_set_master(struct pci_dev *dev);
int pci_set_power_state(struct pci_dev *dev, int state);
+int pci_assign_resource(struct pci_dev *dev, int i);

/* Helper functions for low-level code (drivers/pci/setup.c) */

--- arch/i386/kernel/pci-i386.c.mj Mon Dec 20 10:56:27 1999
+++ arch/i386/kernel/pci-i386.c Mon Dec 20 10:56:27 1999
@@ -102,7 +102,7 @@
* Expects start=0, end=size-1, flags=resource type.

-static int __init pcibios_assign_resource(struct pci_dev *dev, int i)
+int pci_assign_resource(struct pci_dev *dev, int i)
struct resource *r = &dev->resource[i];
struct resource *pr = pci_find_parent_resource(dev, r);
@@ -272,7 +272,7 @@
* the BIOS forgot to do so or because we have decided the old
* address was unusable for some reason.
- pcibios_assign_resource(dev, idx);
+ pci_assign_resource(dev, idx);
if (pci_probe & PCI_ASSIGN_ROMS) {
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
Please read the FAQ at

 \ /
  Last update: 2005-03-22 13:55    [W:0.159 / U:6.520 seconds]
©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site