URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [asm-ppc64/] [vio.h] - Rev 1774
Go to most recent revision | Compare with Previous | Blame | View Log
/* * 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 */
Go to most recent revision | Compare with Previous | Blame | View Log