patch-1.3.45 linux/arch/ppc/kernel/pci.c
Next file: linux/arch/ppc/kernel/port_io.c
Previous file: linux/arch/ppc/kernel/newppcdefs.h
Back to the patch index
Back to the overall index
- Lines: 242
- Date:
Fri Oct 27 10:22:45 1995
- Orig file:
v1.3.44/linux/arch/ppc/kernel/pci.c
- Orig date:
Thu Jan 1 02:00:00 1970
diff -u --recursive --new-file v1.3.44/linux/arch/ppc/kernel/pci.c linux/arch/ppc/kernel/pci.c
@@ -0,0 +1,241 @@
+/*
+ * PCI support
+ */
+
+#include <linux/config.h>
+#include <linux/types.h>
+#include <linux/bios32.h>
+#include <linux/pci.h>
+
+/* #define PCI_DEBUG */
+
+int PCI_conversions[2];
+
+unsigned long pcibios_init(unsigned long mem_start,
+ unsigned long mem_end)
+{
+ printk("PPC init stub -- cort\n");
+
+ return mem_start;
+}
+
+unsigned long pcibios_fixup(unsigned long mem_start, unsigned long mem_end)
+{
+ return mem_start;
+}
+
+unsigned long
+_LE_to_BE_long(unsigned long val)
+{
+ unsigned char *p = (unsigned char *)&val;
+ PCI_conversions[0]++;
+ return ((p[3] << 24) | (p[2] << 16) | (p[1] << 8) | (p[0] << 0));
+}
+
+unsigned short
+_LE_to_BE_short(unsigned long val)
+{
+ unsigned char *p = (unsigned char *)&val;
+ PCI_conversions[1]++;
+ return ((p[3] << 8) | (p[2] << 0));
+}
+
+int
+pcibios_present (void)
+{
+#ifdef PCI_DEBUG
+ _printk("PCI [BIOS] present?\n");
+#endif
+ return (1);
+}
+
+int
+pcibios_read_config_dword (unsigned char bus,
+ unsigned char dev, unsigned char offset, unsigned int *val)
+{
+ unsigned long _val;
+ unsigned long *ptr;
+ dev >>= 3;
+#ifdef PCI_DEBUG
+ _printk("PCI Read config dword[%d.%d.%x] = ", bus, dev, offset);
+#endif
+ if ((bus != 0) || (dev < 11) || (dev > 16))
+ {
+ *val = 0xFFFFFFFF;
+ return PCIBIOS_DEVICE_NOT_FOUND;
+ } else
+ {
+ ptr = (unsigned long *)(0x80800000 | (1<<dev) | offset);
+#ifdef PCI_DEBUG
+ _printk("[%x] ", ptr);
+#endif
+ _val = _LE_to_BE_long(*ptr);
+ }
+#ifdef PCI_DEBUG
+ _printk("%x\n", _val);
+#endif
+ *val = _val;
+ return PCIBIOS_SUCCESSFUL;
+}
+
+int
+pcibios_read_config_word (unsigned char bus,
+ unsigned char dev, unsigned char offset, unsigned short *val)
+{
+ unsigned short _val;
+ unsigned short *ptr;
+ dev >>= 3;
+#ifdef PCI_DEBUG
+ _printk("PCI Read config word[%d.%d.%x] = ", bus, dev, offset);
+#endif
+ if ((bus != 0) || (dev < 11) || (dev > 16))
+ {
+ *val = 0xFFFFFFFF;
+ return PCIBIOS_DEVICE_NOT_FOUND;
+ } else
+ {
+ ptr = (unsigned short *)(0x80800000 | (1<<dev) | offset);
+#ifdef PCI_DEBUG
+ _printk("[%x] ", ptr);
+#endif
+ _val = _LE_to_BE_short(*ptr);
+ }
+#ifdef PCI_DEBUG
+ _printk("%x\n", _val);
+#endif
+ *val = _val;
+ return PCIBIOS_SUCCESSFUL;
+}
+
+int
+pcibios_read_config_byte (unsigned char bus,
+ unsigned char dev, unsigned char offset, unsigned char *val)
+{
+ unsigned char _val;
+ unsigned char *ptr;
+ dev >>= 3;
+#ifdef PCI_DEBUG
+ _printk("PCI Read config byte[%d.%d.%x] = ", bus, dev, offset);
+#endif
+ if ((bus != 0) || (dev < 11) || (dev > 16))
+ {
+ *val = 0xFFFFFFFF;
+ return PCIBIOS_DEVICE_NOT_FOUND;
+ } else
+ {
+ ptr = (unsigned char *)(0x80800000 | (1<<dev) | offset ^ 1);
+#ifdef PCI_DEBUG
+ _printk("[%x] ", ptr);
+#endif
+ _val = *ptr;
+ }
+#ifdef PCI_DEBUG
+ _printk("%x\n", _val);
+#endif
+ *val = _val;
+ return PCIBIOS_SUCCESSFUL;
+}
+
+int
+pcibios_write_config_dword (unsigned char bus,
+ unsigned char dev, unsigned char offset, unsigned int val)
+{
+ unsigned long _val;
+ unsigned long *ptr;
+ dev >>= 3;
+ _val = _LE_to_BE_long(val);
+#ifdef PCI_DEBUG
+ _printk("PCI Write config dword[%d.%d.%x] = %x\n", bus, dev, offset, _val);
+#endif
+ if ((bus != 0) || (dev < 11) || (dev > 16))
+ {
+ return PCIBIOS_DEVICE_NOT_FOUND;
+ } else
+ {
+ ptr = (unsigned long *)(0x80800000 | (1<<dev) | offset);
+ *ptr = _val;
+ }
+ return PCIBIOS_SUCCESSFUL;
+}
+
+int
+pcibios_write_config_word (unsigned char bus,
+ unsigned char dev, unsigned char offset, unsigned short val)
+{
+ unsigned short _val;
+ unsigned short *ptr;
+ dev >>= 3;
+ _val = _LE_to_BE_short(val);
+#ifdef PCI_DEBUG
+ _printk("PCI Write config word[%d.%d.%x] = %x\n", bus, dev, offset, _val);
+#endif
+ if ((bus != 0) || (dev < 11) || (dev > 16))
+ {
+ return PCIBIOS_DEVICE_NOT_FOUND;
+ } else
+ {
+ ptr = (unsigned short *)(0x80800000 | (1<<dev) | offset);
+ *ptr = _val;
+ }
+ return PCIBIOS_SUCCESSFUL;
+}
+
+int
+pcibios_write_config_byte (unsigned char bus,
+ unsigned char dev, unsigned char offset, unsigned char val)
+{
+ unsigned char _val;
+ unsigned char *ptr;
+ dev >>= 3;
+ _val = val;
+#ifdef PCI_DEBUG
+ _printk("PCI Write config byte[%d.%d.%x] = %x\n", bus, dev, offset, _val);
+#endif
+ if ((bus != 0) || (dev < 11) || (dev > 16))
+ {
+ return PCIBIOS_DEVICE_NOT_FOUND;
+ } else
+ {
+ ptr = (unsigned char *)(0x80800000 | (1<<dev) | offset ^ 1);
+ *ptr = _val;
+ }
+ return PCIBIOS_SUCCESSFUL;
+}
+
+int
+pcibios_find_device (unsigned short vendor, unsigned short device_id,
+ unsigned short index, unsigned char *bus,
+ unsigned char *dev)
+{
+ unsigned long w, desired = (device_id << 16) | vendor;
+ int devnr;
+
+ if (vendor == 0xffff) {
+ return PCIBIOS_BAD_VENDOR_ID;
+ }
+
+ for (devnr = 11; devnr < 16; devnr++)
+ {
+ pcibios_read_config_dword(0, devnr<<3, PCI_VENDOR_ID, &w);
+ if (w == desired) {
+ if (index == 0) {
+ *bus = 0;
+ *dev = devnr<<3;
+ return PCIBIOS_SUCCESSFUL;
+ }
+ --index;
+ }
+ }
+ return PCIBIOS_DEVICE_NOT_FOUND;
+}
+
+int
+pcibios_find_class (unsigned int class_code, unsigned short index,
+ unsigned char *bus, unsigned char *dev)
+{
+ printk("pcibios_find_class\n");
+ return PCIBIOS_FUNC_NOT_SUPPORTED;
+}
+
+const char *pcibios_strerror(int error) { _panic("pcibios_strerror"); }
+/*int get_pci_list(char *buf) { _panic("get_pci_list"); } */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov
with Sam's (original) version of this