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