patch-2.4.25 linux-2.4.25/include/asm-ppc64/vio.h
Next file: linux-2.4.25/include/asm-s390/ccwcache.h
Previous file: linux-2.4.25/include/asm-ppc64/user_exports.h
Back to the patch index
Back to the overall index
- Lines: 130
- Date:
2004-02-18 05:36:32.000000000 -0800
- Orig file:
linux-2.4.24/include/asm-ppc64/vio.h
- Orig date:
1969-12-31 16:00:00.000000000 -0800
diff -urN linux-2.4.24/include/asm-ppc64/vio.h linux-2.4.25/include/asm-ppc64/vio.h
@@ -0,0 +1,129 @@
+/*
+ * IBM PowerPC Virtual I/O Infrastructure Support.
+ *
+ * Dave Engebretsen engebret@us.ibm.com
+ * Copyright (c) 2003 Dave Engebretsen
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _VIO_H
+#define _VIO_H
+
+#include <linux/init.h>
+#include <linux/errno.h>
+#include <asm/hvcall.h>
+#include <asm/prom.h>
+#include <asm/scatterlist.h>
+/*
+ * Architecture-specific constants for drivers to
+ * extract attributes of the device using vio_get_attribute()
+*/
+#define VETH_MAC_ADDR "local-mac-address"
+#define VETH_MCAST_FILTER_SIZE "ibm,mac-address-filters"
+
+/* End architecture-specific constants */
+
+#define h_vio_signal(ua, mode) \
+ plpar_hcall_norets(H_VIO_SIGNAL, ua, mode)
+
+#define VIO_IRQ_DISABLE 0UL
+#define VIO_IRQ_ENABLE 1UL
+
+struct vio_dev;
+struct vio_driver;
+struct vio_device_id;
+struct TceTable;
+
+int vio_register_driver(struct vio_driver *drv);
+int vio_unregister_driver(struct vio_driver *drv);
+const struct vio_device_id * vio_match_device(const struct vio_device_id *ids,
+ const struct vio_dev *dev);
+struct vio_dev * __devinit vio_register_device(struct device_node *node_vdev);
+struct vio_driver * __devinit vio_find_driver(struct vio_dev* dev);
+const void * vio_get_attribute(struct vio_dev *vdev, void* which, int* length);
+int vio_get_irq(struct vio_dev *dev);
+struct TceTable * vio_build_tce_table(struct vio_dev *dev);
+int vio_enable_interrupts(struct vio_dev *dev);
+int vio_disable_interrupts(struct vio_dev *dev);
+
+dma_addr_t vio_map_single(struct vio_dev *dev, void *vaddr,
+ size_t size, int direction);
+void vio_unmap_single(struct vio_dev *dev, dma_addr_t dma_handle,
+ size_t size, int direction);
+int vio_map_sg(struct vio_dev *vdev, struct scatterlist *sglist,
+ int nelems, int direction);
+void vio_unmap_sg(struct vio_dev *vdev, struct scatterlist *sglist,
+ int nelems, int direction);
+void *vio_alloc_consistent(struct vio_dev *dev, size_t size,
+ dma_addr_t *dma_handle);
+void vio_free_consistent(struct vio_dev *dev, size_t size, void *vaddr,
+ dma_addr_t dma_handle);
+
+struct vio_device_id {
+ char *type;
+ char *compat;
+/* I don't think we need this
+ unsigned long driver_data; */ /* Data private to the driver */
+};
+
+struct vio_driver {
+ struct list_head node;
+ char *name;
+ const struct vio_device_id *id_table; /* NULL if wants all devices */
+ int (*probe) (struct vio_dev *dev, const struct vio_device_id *id); /* New device inserted */
+ void (*remove) (struct vio_dev *dev); /* Device removed (NULL if not a hot-plug capable driver) */
+ unsigned long driver_data;
+};
+
+struct vio_bus;
+/*
+ * The vio_dev structure is used to describe virtual I/O devices.
+ */
+struct vio_dev {
+ struct list_head devices_list; /* node in list of all vio devices */
+ struct device_node *archdata; /* Open Firmware node */
+ struct vio_bus *bus; /* bus this device is on */
+ struct vio_driver *driver; /* owning driver */
+ void *driver_data; /* data private to the driver */
+ unsigned long unit_address;
+
+ struct TceTable *tce_table; /* vio_map_* uses this */
+ unsigned int irq;
+ struct proc_dir_entry *procent; /* device entry in /proc/bus/vio */
+};
+
+struct vio_bus {
+ struct list_head devices; /* list of virtual devices */
+};
+
+
+static inline int vio_module_init(struct vio_driver *drv)
+{
+ int rc = vio_register_driver (drv);
+
+ if (rc > 0)
+ return 0;
+
+ /* iff CONFIG_HOTPLUG and built into kernel, we should
+ * leave the driver around for future hotplug events.
+ * For the module case, a hotplug daemon of some sort
+ * should load a module in response to an insert event. */
+#if defined(CONFIG_HOTPLUG) && !defined(MODULE)
+ if (rc == 0)
+ return 0;
+#else
+ if (rc == 0)
+ rc = -ENODEV;
+#endif
+
+ /* if we get here, we need to clean up vio driver instance
+ * and return some sort of error */
+
+ return rc;
+}
+
+#endif /* _PHYP_H */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)