11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PCI Hot Plug Controller Driver for RPA-compliant PPC64 platform.
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 2003 Linda Xie <lxie@us.ibm.com>
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * All rights reserved.
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is free software; you can redistribute it and/or modify
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * it under the terms of the GNU General Public License as published by
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * the Free Software Foundation; either version 2 of the License, or (at
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * your option) any later version.
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is distributed in the hope that it will be useful, but
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * WITHOUT ANY WARRANTY; without even the implied warranty of
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * NON INFRINGEMENT.  See the GNU General Public License for more
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * details.
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * You should have received a copy of the GNU General Public License
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * along with this program; if not, write to the Free Software
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Send feedback to <lxie@us.ibm.com>,
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _PPC64PHP_H
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _PPC64PHP_H
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/pci.h>
31e17e31e388b2e49ff1c9a2bdb39d7aeb2975c19aOlaf Hering#include <linux/pci_hotplug.h>
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DR_INDICATOR 9002
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DR_ENTITY_SENSE 9003
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define POWER_ON	100
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define POWER_OFF	0
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LED_OFF		0
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LED_ON		1	/* continuous on */
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LED_ID		2	/* slow blinking */
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LED_ACTION	3	/* fast blinking */
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Sensor values from rtas_get-sensor */
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EMPTY           0	/* No card in slot */
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PRESENT         1	/* Card in slot */
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MY_NAME "rpaphp"
4990ab5ee94171b3e28de6bb42ee30b527014e0be7Rusty Russellextern bool rpaphp_debug;
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define dbg(format, arg...)					\
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	do {							\
525d9bc1fa47f0c1561f1d7c0bdff5e24860852b42Kristen Carlson Accardi		if (rpaphp_debug)					\
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			printk(KERN_DEBUG "%s: " format,	\
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				MY_NAME , ## arg); 		\
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} while (0)
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define err(format, arg...) printk(KERN_ERR "%s: " format, MY_NAME , ## arg)
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define info(format, arg...) printk(KERN_INFO "%s: " format, MY_NAME , ## arg)
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define warn(format, arg...) printk(KERN_WARNING "%s: " format, MY_NAME , ## arg)
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* slot states */
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	NOT_VALID	3
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	NOT_CONFIGURED	2
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	CONFIGURED	1
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	EMPTY		0
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * struct slot - slot information for each *physical* slot
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct slot {
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct list_head rpaphp_slot_list;
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int state;
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 index;
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 type;
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 power_domain;
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char *name;
779c209c919df95f83aa042b3352c43841ad15a02bJohn Rose	struct device_node *dn;
789c209c919df95f83aa042b3352c43841ad15a02bJohn Rose	struct pci_bus *bus;
799c209c919df95f83aa042b3352c43841ad15a02bJohn Rose	struct list_head *pci_devs;
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct hotplug_slot *hotplug_slot;
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern struct hotplug_slot_ops rpaphp_hotplug_slot_ops;
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern struct list_head rpaphp_slot_head;
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* function prototypes */
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* rpaphp_pci.c */
89fea54b8cc9c8290b4c99d481c3e600c46eb18fd5Linas Vepstasextern int rpaphp_enable_slot(struct slot *slot);
90e06b80b78db96ca272db4ec0b26ce1092a1a9704Linas Vepstasextern int rpaphp_get_sensor_state(struct slot *slot, int *state);
91934199e95d6ac28f42686fe3009877eff33e06c3Linas Vepstas
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* rpaphp_core.c */
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int rpaphp_add_slot(struct device_node *dn);
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int rpaphp_get_drc_props(struct device_node *dn, int *drc_index,
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		char **drc_name, char **drc_type, int *drc_power_domain);
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* rpaphp_slot.c */
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void dealloc_slot_struct(struct slot *slot);
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern struct slot *alloc_slot_struct(struct device_node *dn, int drc_index, char *drc_name, int power_domain);
100f6afbad82c6b7bab0198442592b110341fb419baLinas Vepstasextern int rpaphp_register_slot(struct slot *slot);
101f6afbad82c6b7bab0198442592b110341fb419baLinas Vepstasextern int rpaphp_deregister_slot(struct slot *slot);
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif				/* _PPC64PHP_H */
104