Skip to content

Commit

Permalink
MIPS: GIO bus support for SGI IP22/28
Browse files Browse the repository at this point in the history
SGI IP22/IP28 machines have GIO busses for adding graphics and other
extension cards. This patch adds support for GIO driver/device
handling and converts the newport console driver to a GIO driver.

[ralf@linux-mips.org: Fixed build error caused by the modules.h -> export.h
changes.]

Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Acked-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
To: linux-fbdev@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/2886/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
  • Loading branch information
Thomas Bogendoerfer authored and Ralf Baechle committed Dec 7, 2011
1 parent 5611cc4 commit e84de0c
Show file tree
Hide file tree
Showing 6 changed files with 534 additions and 46 deletions.
56 changes: 56 additions & 0 deletions arch/mips/include/asm/gio_device.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#include <linux/device.h>
#include <linux/mod_devicetable.h>

struct gio_device_id {
__u8 id;
};

struct gio_device {
struct device dev;
struct resource resource;
unsigned int irq;
unsigned int slotno;

const char *name;
struct gio_device_id id;
unsigned id32:1;
unsigned gio64:1;
};
#define to_gio_device(d) container_of(d, struct gio_device, dev)

struct gio_driver {
const char *name;
struct module *owner;
const struct gio_device_id *id_table;

int (*probe)(struct gio_device *, const struct gio_device_id *);
void (*remove)(struct gio_device *);
int (*suspend)(struct gio_device *, pm_message_t);
int (*resume)(struct gio_device *);
void (*shutdown)(struct gio_device *);

struct device_driver driver;
};
#define to_gio_driver(drv) container_of(drv, struct gio_driver, driver)

extern const struct gio_device_id *gio_match_device(const struct gio_device_id *,
const struct gio_device *);
extern struct gio_device *gio_dev_get(struct gio_device *);
extern void gio_dev_put(struct gio_device *);

extern int gio_device_register(struct gio_device *);
extern void gio_device_unregister(struct gio_device *);
extern void gio_release_dev(struct device *);

static inline void gio_device_free(struct gio_device *dev)
{
gio_release_dev(&dev->dev);
}

extern int gio_register_driver(struct gio_driver *);
extern void gio_unregister_driver(struct gio_driver *);

#define gio_get_drvdata(_dev) drv_get_drvdata(&(_dev)->dev)
#define gio_set_drvdata(_dev, data) drv_set_drvdata(&(_dev)->dev, (data))

extern void gio_set_master(struct gio_device *);
2 changes: 1 addition & 1 deletion arch/mips/sgi-ip22/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#

obj-y += ip22-mc.o ip22-hpc.o ip22-int.o ip22-time.o ip22-nvram.o \
ip22-platform.o ip22-reset.o ip22-setup.o
ip22-platform.o ip22-reset.o ip22-setup.o ip22-gio.o

obj-$(CONFIG_SGI_IP22) += ip22-berr.o
obj-$(CONFIG_SGI_IP28) += ip28-berr.o
Expand Down
Loading

0 comments on commit e84de0c

Please sign in to comment.