forked from Minki/linux
PCI: Fix whitespace, capitalization, and spelling errors
Fix whitespace, capitalization, and spelling errors. No functional change. I know "busses" is not an error, but "buses" was more common, so I used it consistently. Signed-off-by: Marta Rybczynska <rybczynska@gmail.com> (pci_reset_bridge_secondary_bus()) Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
4fbf888acc
commit
f7625980f5
@ -410,7 +410,7 @@ EXPORT_SYMBOL_GPL(pci_disable_pasid);
|
||||
* Otherwise is returns a bitmask with supported features. Current
|
||||
* features reported are:
|
||||
* PCI_PASID_CAP_EXEC - Execute permission supported
|
||||
* PCI_PASID_CAP_PRIV - Priviledged mode supported
|
||||
* PCI_PASID_CAP_PRIV - Privileged mode supported
|
||||
*/
|
||||
int pci_pasid_features(struct pci_dev *pdev)
|
||||
{
|
||||
|
@ -249,7 +249,7 @@ struct tegra_pcie {
|
||||
void __iomem *afi;
|
||||
int irq;
|
||||
|
||||
struct list_head busses;
|
||||
struct list_head buses;
|
||||
struct resource *cs;
|
||||
|
||||
struct resource io;
|
||||
@ -399,14 +399,14 @@ free:
|
||||
|
||||
/*
|
||||
* Look up a virtual address mapping for the specified bus number. If no such
|
||||
* mapping existis, try to create one.
|
||||
* mapping exists, try to create one.
|
||||
*/
|
||||
static void __iomem *tegra_pcie_bus_map(struct tegra_pcie *pcie,
|
||||
unsigned int busnr)
|
||||
{
|
||||
struct tegra_pcie_bus *bus;
|
||||
|
||||
list_for_each_entry(bus, &pcie->busses, list)
|
||||
list_for_each_entry(bus, &pcie->buses, list)
|
||||
if (bus->nr == busnr)
|
||||
return (void __iomem *)bus->area->addr;
|
||||
|
||||
@ -414,7 +414,7 @@ static void __iomem *tegra_pcie_bus_map(struct tegra_pcie *pcie,
|
||||
if (IS_ERR(bus))
|
||||
return NULL;
|
||||
|
||||
list_add_tail(&bus->list, &pcie->busses);
|
||||
list_add_tail(&bus->list, &pcie->buses);
|
||||
|
||||
return (void __iomem *)bus->area->addr;
|
||||
}
|
||||
@ -808,7 +808,7 @@ static int tegra_pcie_enable_controller(struct tegra_pcie *pcie)
|
||||
value &= ~AFI_FUSE_PCIE_T0_GEN2_DIS;
|
||||
afi_writel(pcie, value, AFI_FUSE);
|
||||
|
||||
/* initialze internal PHY, enable up to 16 PCIE lanes */
|
||||
/* initialize internal PHY, enable up to 16 PCIE lanes */
|
||||
pads_writel(pcie, 0x0, PADS_CTL_SEL);
|
||||
|
||||
/* override IDDQ to 1 on all 4 lanes */
|
||||
@ -1624,7 +1624,7 @@ static int tegra_pcie_probe(struct platform_device *pdev)
|
||||
if (!pcie)
|
||||
return -ENOMEM;
|
||||
|
||||
INIT_LIST_HEAD(&pcie->busses);
|
||||
INIT_LIST_HEAD(&pcie->buses);
|
||||
INIT_LIST_HEAD(&pcie->ports);
|
||||
pcie->soc_data = match->data;
|
||||
pcie->dev = &pdev->dev;
|
||||
|
@ -197,7 +197,7 @@ static int find_valid_pos0(struct pcie_port *pp, int msgvec, int pos, int *pos0)
|
||||
return -ENOSPC;
|
||||
/*
|
||||
* Check if this position is at correct offset.nvec is always a
|
||||
* power of two. pos0 must be nvec bit alligned.
|
||||
* power of two. pos0 must be nvec bit aligned.
|
||||
*/
|
||||
if (pos % msgvec)
|
||||
pos += msgvec - (pos % msgvec);
|
||||
|
@ -133,8 +133,8 @@ config HOTPLUG_PCI_RPA_DLPAR
|
||||
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called rpadlpar_io.
|
||||
|
||||
When in doubt, say N.
|
||||
|
||||
When in doubt, say N.
|
||||
|
||||
config HOTPLUG_PCI_SGI
|
||||
tristate "SGI PCI Hotplug Support"
|
||||
|
@ -31,7 +31,7 @@ pci_hotplug-objs += cpci_hotplug_core.o \
|
||||
cpci_hotplug_pci.o
|
||||
endif
|
||||
ifdef CONFIG_ACPI
|
||||
pci_hotplug-objs += acpi_pcihp.o
|
||||
pci_hotplug-objs += acpi_pcihp.o
|
||||
endif
|
||||
|
||||
cpqphp-objs := cpqphp_core.o \
|
||||
|
@ -111,7 +111,7 @@ int acpiphp_register_attention(struct acpiphp_attention_info *info)
|
||||
* @info: must match the pointer used to register
|
||||
*
|
||||
* Description: This is used to un-register a hardware specific acpi
|
||||
* driver that manipulates the attention LED. The pointer to the
|
||||
* driver that manipulates the attention LED. The pointer to the
|
||||
* info struct must be the same as the one used to set it.
|
||||
*/
|
||||
int acpiphp_unregister_attention(struct acpiphp_attention_info *info)
|
||||
@ -169,8 +169,8 @@ static int disable_slot(struct hotplug_slot *hotplug_slot)
|
||||
* was registered with us. This allows hardware specific
|
||||
* ACPI implementations to blink the light for us.
|
||||
*/
|
||||
static int set_attention_status(struct hotplug_slot *hotplug_slot, u8 status)
|
||||
{
|
||||
static int set_attention_status(struct hotplug_slot *hotplug_slot, u8 status)
|
||||
{
|
||||
int retval = -ENODEV;
|
||||
|
||||
pr_debug("%s - physical_slot = %s\n", __func__,
|
||||
@ -182,8 +182,8 @@ static int disable_slot(struct hotplug_slot *hotplug_slot)
|
||||
} else
|
||||
attention_info = NULL;
|
||||
return retval;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* get_power_status - get power status of a slot
|
||||
@ -323,7 +323,7 @@ int acpiphp_register_hotplug_slot(struct acpiphp_slot *acpiphp_slot,
|
||||
if (retval) {
|
||||
pr_err("pci_hp_register failed with error %d\n", retval);
|
||||
goto error_hpslot;
|
||||
}
|
||||
}
|
||||
|
||||
pr_info("Slot [%s] registered\n", slot_name(slot));
|
||||
|
||||
|
@ -325,7 +325,7 @@ static acpi_status register_slot(acpi_handle handle, u32 lvl, void *data,
|
||||
|
||||
list_add_tail(&slot->node, &bridge->slots);
|
||||
|
||||
/* Register slots for ejectable funtions only. */
|
||||
/* Register slots for ejectable functions only. */
|
||||
if (acpi_pci_check_ejectable(pbus, handle) || is_dock_device(handle)) {
|
||||
unsigned long long sun;
|
||||
int retval;
|
||||
|
@ -116,7 +116,7 @@ static struct bin_attribute ibm_apci_table_attr = {
|
||||
.read = ibm_read_apci_table,
|
||||
.write = NULL,
|
||||
};
|
||||
static struct acpiphp_attention_info ibm_attention_info =
|
||||
static struct acpiphp_attention_info ibm_attention_info =
|
||||
{
|
||||
.set_attn = ibm_set_attention_status,
|
||||
.get_attn = ibm_get_attention_status,
|
||||
@ -171,9 +171,9 @@ ibm_slot_done:
|
||||
*/
|
||||
static int ibm_set_attention_status(struct hotplug_slot *slot, u8 status)
|
||||
{
|
||||
union acpi_object args[2];
|
||||
union acpi_object args[2];
|
||||
struct acpi_object_list params = { .pointer = args, .count = 2 };
|
||||
acpi_status stat;
|
||||
acpi_status stat;
|
||||
unsigned long long rc;
|
||||
union apci_descriptor *ibm_slot;
|
||||
|
||||
@ -208,7 +208,7 @@ static int ibm_set_attention_status(struct hotplug_slot *slot, u8 status)
|
||||
*
|
||||
* Description: This method is registered with the acpiphp module as a
|
||||
* callback to do the device specific task of getting the LED status.
|
||||
*
|
||||
*
|
||||
* Because there is no direct method of getting the LED status directly
|
||||
* from an ACPI call, we read the aPCI table and parse out our
|
||||
* slot descriptor to read the status from that.
|
||||
@ -259,7 +259,7 @@ static void ibm_handle_events(acpi_handle handle, u32 event, void *context)
|
||||
pr_debug("%s: Received notification %02x\n", __func__, event);
|
||||
|
||||
if (subevent == 0x80) {
|
||||
pr_debug("%s: generationg bus event\n", __func__);
|
||||
pr_debug("%s: generating bus event\n", __func__);
|
||||
acpi_bus_generate_netlink_event(note->device->pnp.device_class,
|
||||
dev_name(¬e->device->dev),
|
||||
note->event, detail);
|
||||
@ -387,7 +387,7 @@ static acpi_status __init ibm_find_acpi_device(acpi_handle handle,
|
||||
u32 lvl, void *context, void **rv)
|
||||
{
|
||||
acpi_handle *phandle = (acpi_handle *)context;
|
||||
acpi_status status;
|
||||
acpi_status status;
|
||||
struct acpi_device_info *info;
|
||||
int retval = 0;
|
||||
|
||||
@ -405,7 +405,7 @@ static acpi_status __init ibm_find_acpi_device(acpi_handle handle,
|
||||
info->hardware_id.string, handle);
|
||||
*phandle = handle;
|
||||
/* returning non-zero causes the search to stop
|
||||
* and returns this value to the caller of
|
||||
* and returns this value to the caller of
|
||||
* acpi_walk_namespace, but it also causes some warnings
|
||||
* in the acpi debug code to print...
|
||||
*/
|
||||
|
@ -46,7 +46,7 @@
|
||||
do { \
|
||||
if (cpci_debug) \
|
||||
printk (KERN_DEBUG "%s: " format "\n", \
|
||||
MY_NAME , ## arg); \
|
||||
MY_NAME , ## arg); \
|
||||
} while (0)
|
||||
#define err(format, arg...) printk(KERN_ERR "%s: " format "\n", MY_NAME , ## arg)
|
||||
#define info(format, arg...) printk(KERN_INFO "%s: " format "\n", MY_NAME , ## arg)
|
||||
|
@ -39,7 +39,7 @@ extern int cpci_debug;
|
||||
do { \
|
||||
if (cpci_debug) \
|
||||
printk (KERN_DEBUG "%s: " format "\n", \
|
||||
MY_NAME , ## arg); \
|
||||
MY_NAME , ## arg); \
|
||||
} while (0)
|
||||
#define err(format, arg...) printk(KERN_ERR "%s: " format "\n", MY_NAME , ## arg)
|
||||
#define info(format, arg...) printk(KERN_INFO "%s: " format "\n", MY_NAME , ## arg)
|
||||
|
@ -13,14 +13,14 @@
|
||||
* option) any later version.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
* THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
* THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
@ -53,9 +53,9 @@
|
||||
|
||||
#define dbg(format, arg...) \
|
||||
do { \
|
||||
if(debug) \
|
||||
if (debug) \
|
||||
printk (KERN_DEBUG "%s: " format "\n", \
|
||||
MY_NAME , ## arg); \
|
||||
MY_NAME , ## arg); \
|
||||
} while(0)
|
||||
#define err(format, arg...) printk(KERN_ERR "%s: " format "\n", MY_NAME , ## arg)
|
||||
#define info(format, arg...) printk(KERN_INFO "%s: " format "\n", MY_NAME , ## arg)
|
||||
|
@ -13,14 +13,14 @@
|
||||
* option) any later version.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
* THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
* THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
@ -48,9 +48,9 @@
|
||||
|
||||
#define dbg(format, arg...) \
|
||||
do { \
|
||||
if(debug) \
|
||||
if (debug) \
|
||||
printk (KERN_DEBUG "%s: " format "\n", \
|
||||
MY_NAME , ## arg); \
|
||||
MY_NAME , ## arg); \
|
||||
} while(0)
|
||||
#define err(format, arg...) printk(KERN_ERR "%s: " format "\n", MY_NAME , ## arg)
|
||||
#define info(format, arg...) printk(KERN_INFO "%s: " format "\n", MY_NAME , ## arg)
|
||||
@ -285,7 +285,7 @@ static struct pci_device_id zt5550_hc_pci_tbl[] = {
|
||||
{ 0, }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, zt5550_hc_pci_tbl);
|
||||
|
||||
|
||||
static struct pci_driver zt5550_hc_driver = {
|
||||
.name = "zt5550_hc",
|
||||
.id_table = zt5550_hc_pci_tbl,
|
||||
|
@ -13,14 +13,14 @@
|
||||
* option) any later version.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
* THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||
* THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
@ -55,7 +55,7 @@
|
||||
#define HC_CMD_REG 0x0C
|
||||
#define ARB_CONFIG_GNT_REG 0x10
|
||||
#define ARB_CONFIG_CFG_REG 0x12
|
||||
#define ARB_CONFIG_REG 0x10
|
||||
#define ARB_CONFIG_REG 0x10
|
||||
#define ISOL_CONFIG_REG 0x18
|
||||
#define FAULT_STATUS_REG 0x20
|
||||
#define FAULT_CONFIG_REG 0x24
|
||||
|
@ -862,10 +862,10 @@ static int cpqhpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
goto err_disable_device;
|
||||
}
|
||||
|
||||
/* Check for the proper subsystem ID's
|
||||
/* Check for the proper subsystem IDs
|
||||
* Intel uses a different SSID programming model than Compaq.
|
||||
* For Intel, each SSID bit identifies a PHP capability.
|
||||
* Also Intel HPC's may have RID=0.
|
||||
* Also Intel HPCs may have RID=0.
|
||||
*/
|
||||
if ((pdev->revision <= 2) && (vendor_id != PCI_VENDOR_ID_INTEL)) {
|
||||
err(msg_HPC_not_supported);
|
||||
|
@ -1231,7 +1231,7 @@ static u8 set_controller_speed(struct controller *ctrl, u8 adapter_speed, u8 hp_
|
||||
|
||||
/* Only if mode change...*/
|
||||
if (((bus->cur_bus_speed == PCI_SPEED_66MHz) && (adapter_speed == PCI_SPEED_66MHz_PCIX)) ||
|
||||
((bus->cur_bus_speed == PCI_SPEED_66MHz_PCIX) && (adapter_speed == PCI_SPEED_66MHz)))
|
||||
((bus->cur_bus_speed == PCI_SPEED_66MHz_PCIX) && (adapter_speed == PCI_SPEED_66MHz)))
|
||||
set_SOGO(ctrl);
|
||||
|
||||
wait_for_ctrl_irq(ctrl);
|
||||
@ -1828,7 +1828,7 @@ static void interrupt_event_handler(struct controller *ctrl)
|
||||
|
||||
if (ctrl->event_queue[loop].event_type == INT_BUTTON_PRESS) {
|
||||
dbg("button pressed\n");
|
||||
} else if (ctrl->event_queue[loop].event_type ==
|
||||
} else if (ctrl->event_queue[loop].event_type ==
|
||||
INT_BUTTON_CANCEL) {
|
||||
dbg("button cancel\n");
|
||||
del_timer(&p_slot->task_event);
|
||||
@ -2411,11 +2411,11 @@ static int configure_new_function(struct controller *ctrl, struct pci_func *func
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
/* find range of busses to use */
|
||||
/* find range of buses to use */
|
||||
dbg("find ranges of buses to use\n");
|
||||
bus_node = get_max_resource(&(resources->bus_head), 1);
|
||||
|
||||
/* If we don't have any busses to allocate, we can't continue */
|
||||
/* If we don't have any buses to allocate, we can't continue */
|
||||
if (!bus_node)
|
||||
return -ENOMEM;
|
||||
|
||||
@ -2900,7 +2900,7 @@ static int configure_new_function(struct controller *ctrl, struct pci_func *func
|
||||
|
||||
/* If this function needs an interrupt and we are behind
|
||||
* a bridge and the pin is tied to something that's
|
||||
* alread mapped, set this one the same */
|
||||
* already mapped, set this one the same */
|
||||
if (temp_byte && resources->irqs &&
|
||||
(resources->irqs->valid_INT &
|
||||
(0x01 << ((temp_byte + resources->irqs->barber_pole - 1) & 0x03)))) {
|
||||
|
@ -291,7 +291,7 @@ int cpqhp_get_bus_dev (struct controller *ctrl, u8 * bus_num, u8 * dev_num, u8 s
|
||||
*
|
||||
* Reads configuration for all slots in a PCI bus and saves info.
|
||||
*
|
||||
* Note: For non-hot plug busses, the slot # saved is the device #
|
||||
* Note: For non-hot plug buses, the slot # saved is the device #
|
||||
*
|
||||
* returns 0 if success
|
||||
*/
|
||||
@ -455,7 +455,7 @@ int cpqhp_save_config(struct controller *ctrl, int busnumber, int is_hot_plug)
|
||||
* cpqhp_save_slot_config
|
||||
*
|
||||
* Saves configuration info for all PCI devices in a given slot
|
||||
* including subordinate busses.
|
||||
* including subordinate buses.
|
||||
*
|
||||
* returns 0 if success
|
||||
*/
|
||||
@ -1556,4 +1556,3 @@ void cpqhp_destroy_board_resources (struct pci_func * func)
|
||||
kfree(tres);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -59,7 +59,7 @@ extern int ibmphp_debug;
|
||||
|
||||
|
||||
/************************************************************
|
||||
* RESOURE TYPE *
|
||||
* RESOURCE TYPE *
|
||||
************************************************************/
|
||||
|
||||
#define EBDA_RSRC_TYPE_MASK 0x03
|
||||
@ -103,7 +103,7 @@ extern int ibmphp_debug;
|
||||
//--------------------------------------------------------------
|
||||
|
||||
struct rio_table_hdr {
|
||||
u8 ver_num;
|
||||
u8 ver_num;
|
||||
u8 scal_count;
|
||||
u8 riodev_count;
|
||||
u16 offset;
|
||||
@ -127,7 +127,7 @@ struct scal_detail {
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// RIO DETAIL
|
||||
// RIO DETAIL
|
||||
//--------------------------------------------------------------
|
||||
|
||||
struct rio_detail {
|
||||
@ -152,7 +152,7 @@ struct opt_rio {
|
||||
u8 first_slot_num;
|
||||
u8 middle_num;
|
||||
struct list_head opt_rio_list;
|
||||
};
|
||||
};
|
||||
|
||||
struct opt_rio_lo {
|
||||
u8 rio_type;
|
||||
@ -161,7 +161,7 @@ struct opt_rio_lo {
|
||||
u8 middle_num;
|
||||
u8 pack_count;
|
||||
struct list_head opt_rio_lo_list;
|
||||
};
|
||||
};
|
||||
|
||||
/****************************************************************
|
||||
* HPC DESCRIPTOR NODE *
|
||||
@ -574,7 +574,7 @@ void ibmphp_hpc_stop_poll_thread(void);
|
||||
#define HPC_CTLR_IRQ_PENDG 0x80
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// HPC_CTLR_WROKING status return codes
|
||||
// HPC_CTLR_WORKING status return codes
|
||||
//----------------------------------------------------------------------------
|
||||
#define HPC_CTLR_WORKING_NO 0x00
|
||||
#define HPC_CTLR_WORKING_YES 0x01
|
||||
|
@ -58,7 +58,7 @@ MODULE_DESCRIPTION (DRIVER_DESC);
|
||||
struct pci_bus *ibmphp_pci_bus;
|
||||
static int max_slots;
|
||||
|
||||
static int irqs[16]; /* PIC mode IRQ's we're using so far (in case MPS
|
||||
static int irqs[16]; /* PIC mode IRQs we're using so far (in case MPS
|
||||
* tables don't provide default info for empty slots */
|
||||
|
||||
static int init_flag;
|
||||
@ -71,20 +71,20 @@ static inline int get_max_adapter_speed (struct hotplug_slot *hs, u8 *value)
|
||||
return get_max_adapter_speed_1 (hs, value, 1);
|
||||
}
|
||||
*/
|
||||
static inline int get_cur_bus_info(struct slot **sl)
|
||||
static inline int get_cur_bus_info(struct slot **sl)
|
||||
{
|
||||
int rc = 1;
|
||||
struct slot * slot_cur = *sl;
|
||||
|
||||
debug("options = %x\n", slot_cur->ctrl->options);
|
||||
debug("revision = %x\n", slot_cur->ctrl->revision);
|
||||
debug("revision = %x\n", slot_cur->ctrl->revision);
|
||||
|
||||
if (READ_BUS_STATUS(slot_cur->ctrl))
|
||||
if (READ_BUS_STATUS(slot_cur->ctrl))
|
||||
rc = ibmphp_hpc_readslot(slot_cur, READ_BUSSTATUS, NULL);
|
||||
|
||||
if (rc)
|
||||
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
|
||||
slot_cur->bus_on->current_speed = CURRENT_BUS_SPEED(slot_cur->busstatus);
|
||||
if (READ_BUS_MODE(slot_cur->ctrl))
|
||||
slot_cur->bus_on->current_bus_mode =
|
||||
@ -96,7 +96,7 @@ static inline int get_cur_bus_info(struct slot **sl)
|
||||
slot_cur->busstatus,
|
||||
slot_cur->bus_on->current_speed,
|
||||
slot_cur->bus_on->current_bus_mode);
|
||||
|
||||
|
||||
*sl = slot_cur;
|
||||
return 0;
|
||||
}
|
||||
@ -104,8 +104,8 @@ static inline int get_cur_bus_info(struct slot **sl)
|
||||
static inline int slot_update(struct slot **sl)
|
||||
{
|
||||
int rc;
|
||||
rc = ibmphp_hpc_readslot(*sl, READ_ALLSTAT, NULL);
|
||||
if (rc)
|
||||
rc = ibmphp_hpc_readslot(*sl, READ_ALLSTAT, NULL);
|
||||
if (rc)
|
||||
return rc;
|
||||
if (!init_flag)
|
||||
rc = get_cur_bus_info(sl);
|
||||
@ -172,7 +172,7 @@ int ibmphp_init_devno(struct slot **cur_slot)
|
||||
debug("(*cur_slot)->irq[3] = %x\n",
|
||||
(*cur_slot)->irq[3]);
|
||||
|
||||
debug("rtable->exlusive_irqs = %x\n",
|
||||
debug("rtable->exclusive_irqs = %x\n",
|
||||
rtable->exclusive_irqs);
|
||||
debug("rtable->slots[loop].irq[0].bitmap = %x\n",
|
||||
rtable->slots[loop].irq[0].bitmap);
|
||||
@ -271,7 +271,7 @@ static int set_attention_status(struct hotplug_slot *hotplug_slot, u8 value)
|
||||
else
|
||||
rc = -ENODEV;
|
||||
}
|
||||
} else
|
||||
} else
|
||||
rc = -ENODEV;
|
||||
|
||||
ibmphp_unlock_operations();
|
||||
@ -288,7 +288,7 @@ static int get_attention_status(struct hotplug_slot *hotplug_slot, u8 * value)
|
||||
|
||||
debug("get_attention_status - Entry hotplug_slot[%lx] pvalue[%lx]\n",
|
||||
(ulong) hotplug_slot, (ulong) value);
|
||||
|
||||
|
||||
ibmphp_lock_operations();
|
||||
if (hotplug_slot) {
|
||||
pslot = hotplug_slot->private;
|
||||
@ -406,14 +406,14 @@ static int get_max_bus_speed(struct slot *slot)
|
||||
|
||||
ibmphp_lock_operations();
|
||||
mode = slot->supported_bus_mode;
|
||||
speed = slot->supported_speed;
|
||||
speed = slot->supported_speed;
|
||||
ibmphp_unlock_operations();
|
||||
|
||||
switch (speed) {
|
||||
case BUS_SPEED_33:
|
||||
break;
|
||||
case BUS_SPEED_66:
|
||||
if (mode == BUS_MODE_PCIX)
|
||||
if (mode == BUS_MODE_PCIX)
|
||||
speed += 0x01;
|
||||
break;
|
||||
case BUS_SPEED_100:
|
||||
@ -515,13 +515,13 @@ static int __init init_ops(void)
|
||||
|
||||
debug("BEFORE GETTING SLOT STATUS, slot # %x\n",
|
||||
slot_cur->number);
|
||||
if (slot_cur->ctrl->revision == 0xFF)
|
||||
if (slot_cur->ctrl->revision == 0xFF)
|
||||
if (get_ctrl_revision(slot_cur,
|
||||
&slot_cur->ctrl->revision))
|
||||
return -1;
|
||||
|
||||
if (slot_cur->bus_on->current_speed == 0xFF)
|
||||
if (get_cur_bus_info(&slot_cur))
|
||||
if (slot_cur->bus_on->current_speed == 0xFF)
|
||||
if (get_cur_bus_info(&slot_cur))
|
||||
return -1;
|
||||
get_max_bus_speed(slot_cur);
|
||||
|
||||
@ -539,8 +539,8 @@ static int __init init_ops(void)
|
||||
debug("SLOT_PRESENT = %x\n", SLOT_PRESENT(slot_cur->status));
|
||||
debug("SLOT_LATCH = %x\n", SLOT_LATCH(slot_cur->status));
|
||||
|
||||
if ((SLOT_PWRGD(slot_cur->status)) &&
|
||||
!(SLOT_PRESENT(slot_cur->status)) &&
|
||||
if ((SLOT_PWRGD(slot_cur->status)) &&
|
||||
!(SLOT_PRESENT(slot_cur->status)) &&
|
||||
!(SLOT_LATCH(slot_cur->status))) {
|
||||
debug("BEFORE POWER OFF COMMAND\n");
|
||||
rc = power_off(slot_cur);
|
||||
@ -581,13 +581,13 @@ static int validate(struct slot *slot_cur, int opn)
|
||||
|
||||
switch (opn) {
|
||||
case ENABLE:
|
||||
if (!(SLOT_PWRGD(slot_cur->status)) &&
|
||||
(SLOT_PRESENT(slot_cur->status)) &&
|
||||
if (!(SLOT_PWRGD(slot_cur->status)) &&
|
||||
(SLOT_PRESENT(slot_cur->status)) &&
|
||||
!(SLOT_LATCH(slot_cur->status)))
|
||||
return 0;
|
||||
break;
|
||||
case DISABLE:
|
||||
if ((SLOT_PWRGD(slot_cur->status)) &&
|
||||
if ((SLOT_PWRGD(slot_cur->status)) &&
|
||||
(SLOT_PRESENT(slot_cur->status)) &&
|
||||
!(SLOT_LATCH(slot_cur->status)))
|
||||
return 0;
|
||||
@ -617,7 +617,7 @@ int ibmphp_update_slot_info(struct slot *slot_cur)
|
||||
err("out of system memory\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
||||
info->power_status = SLOT_PWRGD(slot_cur->status);
|
||||
info->attention_status = SLOT_ATTN(slot_cur->status,
|
||||
slot_cur->ext_status);
|
||||
@ -638,7 +638,7 @@ int ibmphp_update_slot_info(struct slot *slot_cur)
|
||||
case BUS_SPEED_33:
|
||||
break;
|
||||
case BUS_SPEED_66:
|
||||
if (mode == BUS_MODE_PCIX)
|
||||
if (mode == BUS_MODE_PCIX)
|
||||
bus_speed += 0x01;
|
||||
else if (mode == BUS_MODE_PCI)
|
||||
;
|
||||
@ -654,8 +654,8 @@ int ibmphp_update_slot_info(struct slot *slot_cur)
|
||||
}
|
||||
|
||||
bus->cur_bus_speed = bus_speed;
|
||||
// To do: bus_names
|
||||
|
||||
// To do: bus_names
|
||||
|
||||
rc = pci_hp_change_slot_info(slot_cur->hotplug_slot, info);
|
||||
kfree(info);
|
||||
return rc;
|
||||
@ -729,8 +729,8 @@ static void ibm_unconfigure_device(struct pci_func *func)
|
||||
}
|
||||
|
||||
/*
|
||||
* The following function is to fix kernel bug regarding
|
||||
* getting bus entries, here we manually add those primary
|
||||
* The following function is to fix kernel bug regarding
|
||||
* getting bus entries, here we manually add those primary
|
||||
* bus entries to kernel bus structure whenever apply
|
||||
*/
|
||||
static u8 bus_structure_fixup(u8 busno)
|
||||
@ -814,7 +814,7 @@ static int ibm_configure_device(struct pci_func *func)
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
* Returns whether the bus is empty or not
|
||||
* Returns whether the bus is empty or not
|
||||
*******************************************************/
|
||||
static int is_bus_empty(struct slot * slot_cur)
|
||||
{
|
||||
@ -842,7 +842,7 @@ static int is_bus_empty(struct slot * slot_cur)
|
||||
}
|
||||
|
||||
/***********************************************************
|
||||
* If the HPC permits and the bus currently empty, tries to set the
|
||||
* If the HPC permits and the bus currently empty, tries to set the
|
||||
* bus speed and mode at the maximum card and bus capability
|
||||
* Parameters: slot
|
||||
* Returns: bus is set (0) or error code
|
||||
@ -856,7 +856,7 @@ static int set_bus(struct slot * slot_cur)
|
||||
static struct pci_device_id ciobx[] = {
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, 0x0101) },
|
||||
{ },
|
||||
};
|
||||
};
|
||||
|
||||
debug("%s - entry slot # %d\n", __func__, slot_cur->number);
|
||||
if (SET_BUS_STATUS(slot_cur->ctrl) && is_bus_empty(slot_cur)) {
|
||||
@ -877,7 +877,7 @@ static int set_bus(struct slot * slot_cur)
|
||||
else if (!SLOT_BUS_MODE(slot_cur->ext_status))
|
||||
/* if max slot/bus capability is 66 pci
|
||||
and there's no bus mode mismatch, then
|
||||
the adapter supports 66 pci */
|
||||
the adapter supports 66 pci */
|
||||
cmd = HPC_BUS_66CONVMODE;
|
||||
else
|
||||
cmd = HPC_BUS_33CONVMODE;
|
||||
@ -930,7 +930,7 @@ static int set_bus(struct slot * slot_cur)
|
||||
return -EIO;
|
||||
}
|
||||
}
|
||||
/* This is for x440, once Brandon fixes the firmware,
|
||||
/* This is for x440, once Brandon fixes the firmware,
|
||||
will not need this delay */
|
||||
msleep(1000);
|
||||
debug("%s -Exit\n", __func__);
|
||||
@ -938,9 +938,9 @@ static int set_bus(struct slot * slot_cur)
|
||||
}
|
||||
|
||||
/* This routine checks the bus limitations that the slot is on from the BIOS.
|
||||
* This is used in deciding whether or not to power up the slot.
|
||||
* This is used in deciding whether or not to power up the slot.
|
||||
* (electrical/spec limitations. For example, >1 133 MHz or >2 66 PCI cards on
|
||||
* same bus)
|
||||
* same bus)
|
||||
* Parameters: slot
|
||||
* Returns: 0 = no limitations, -EINVAL = exceeded limitations on the bus
|
||||
*/
|
||||
@ -986,7 +986,7 @@ static int check_limitations(struct slot *slot_cur)
|
||||
static inline void print_card_capability(struct slot *slot_cur)
|
||||
{
|
||||
info("capability of the card is ");
|
||||
if ((slot_cur->ext_status & CARD_INFO) == PCIX133)
|
||||
if ((slot_cur->ext_status & CARD_INFO) == PCIX133)
|
||||
info(" 133 MHz PCI-X\n");
|
||||
else if ((slot_cur->ext_status & CARD_INFO) == PCIX66)
|
||||
info(" 66 MHz PCI-X\n");
|
||||
@ -1020,7 +1020,7 @@ static int enable_slot(struct hotplug_slot *hs)
|
||||
}
|
||||
|
||||
attn_LED_blink(slot_cur);
|
||||
|
||||
|
||||
rc = set_bus(slot_cur);
|
||||
if (rc) {
|
||||
err("was not able to set the bus\n");
|
||||
@ -1082,7 +1082,7 @@ static int enable_slot(struct hotplug_slot *hs)
|
||||
rc = slot_update(&slot_cur);
|
||||
if (rc)
|
||||
goto error_power;
|
||||
|
||||
|
||||
rc = -EINVAL;
|
||||
if (SLOT_POWER(slot_cur->status) && !(SLOT_PWRGD(slot_cur->status))) {
|
||||
err("power fault occurred trying to power up...\n");
|
||||
@ -1093,7 +1093,7 @@ static int enable_slot(struct hotplug_slot *hs)
|
||||
"speed and card capability\n");
|
||||
print_card_capability(slot_cur);
|
||||
goto error_power;
|
||||
}
|
||||
}
|
||||
/* Don't think this case will happen after above checks...
|
||||
* but just in case, for paranoia sake */
|
||||
if (!(SLOT_POWER(slot_cur->status))) {
|
||||
@ -1144,7 +1144,7 @@ static int enable_slot(struct hotplug_slot *hs)
|
||||
ibmphp_print_test();
|
||||
rc = ibmphp_update_slot_info(slot_cur);
|
||||
exit:
|
||||
ibmphp_unlock_operations();
|
||||
ibmphp_unlock_operations();
|
||||
return rc;
|
||||
|
||||
error_nopower:
|
||||
@ -1180,7 +1180,7 @@ static int ibmphp_disable_slot(struct hotplug_slot *hotplug_slot)
|
||||
{
|
||||
struct slot *slot = hotplug_slot->private;
|
||||
int rc;
|
||||
|
||||
|
||||
ibmphp_lock_operations();
|
||||
rc = ibmphp_do_disable_slot(slot);
|
||||
ibmphp_unlock_operations();
|
||||
@ -1192,12 +1192,12 @@ int ibmphp_do_disable_slot(struct slot *slot_cur)
|
||||
int rc;
|
||||
u8 flag;
|
||||
|
||||
debug("DISABLING SLOT...\n");
|
||||
|
||||
debug("DISABLING SLOT...\n");
|
||||
|
||||
if ((slot_cur == NULL) || (slot_cur->ctrl == NULL)) {
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
||||
flag = slot_cur->flag;
|
||||
slot_cur->flag = 1;
|
||||
|
||||
@ -1210,7 +1210,7 @@ int ibmphp_do_disable_slot(struct slot *slot_cur)
|
||||
attn_LED_blink(slot_cur);
|
||||
|
||||
if (slot_cur->func == NULL) {
|
||||
/* We need this for fncs's that were there on bootup */
|
||||
/* We need this for functions that were there on bootup */
|
||||
slot_cur->func = kzalloc(sizeof(struct pci_func), GFP_KERNEL);
|
||||
if (!slot_cur->func) {
|
||||
err("out of system memory\n");
|
||||
@ -1222,12 +1222,13 @@ int ibmphp_do_disable_slot(struct slot *slot_cur)
|
||||
}
|
||||
|
||||
ibm_unconfigure_device(slot_cur->func);
|
||||
|
||||
/* If we got here from latch suddenly opening on operating card or
|
||||
a power fault, there's no power to the card, so cannot
|
||||
read from it to determine what resources it occupied. This operation
|
||||
is forbidden anyhow. The best we can do is remove it from kernel
|
||||
lists at least */
|
||||
|
||||
/*
|
||||
* If we got here from latch suddenly opening on operating card or
|
||||
* a power fault, there's no power to the card, so cannot
|
||||
* read from it to determine what resources it occupied. This operation
|
||||
* is forbidden anyhow. The best we can do is remove it from kernel
|
||||
* lists at least */
|
||||
|
||||
if (!flag) {
|
||||
attn_off(slot_cur);
|
||||
@ -1264,7 +1265,7 @@ error:
|
||||
rc = -EFAULT;
|
||||
goto exit;
|
||||
}
|
||||
if (flag)
|
||||
if (flag)
|
||||
ibmphp_update_slot_info(slot_cur);
|
||||
goto exit;
|
||||
}
|
||||
@ -1339,7 +1340,7 @@ static int __init ibmphp_init(void)
|
||||
debug("AFTER Resource & EBDA INITIALIZATIONS\n");
|
||||
|
||||
max_slots = get_max_slots();
|
||||
|
||||
|
||||
if ((rc = ibmphp_register_pci()))
|
||||
goto error;
|
||||
|
||||
|
@ -123,7 +123,7 @@ static struct ebda_pci_rsrc *alloc_ebda_pci_rsrc (void)
|
||||
static void __init print_bus_info (void)
|
||||
{
|
||||
struct bus_info *ptr;
|
||||
|
||||
|
||||
list_for_each_entry(ptr, &bus_info_head, bus_info_list) {
|
||||
debug ("%s - slot_min = %x\n", __func__, ptr->slot_min);
|
||||
debug ("%s - slot_max = %x\n", __func__, ptr->slot_max);
|
||||
@ -131,7 +131,7 @@ static void __init print_bus_info (void)
|
||||
debug ("%s - bus# = %x\n", __func__, ptr->busno);
|
||||
debug ("%s - current_speed = %x\n", __func__, ptr->current_speed);
|
||||
debug ("%s - controller_id = %x\n", __func__, ptr->controller_id);
|
||||
|
||||
|
||||
debug ("%s - slots_at_33_conv = %x\n", __func__, ptr->slots_at_33_conv);
|
||||
debug ("%s - slots_at_66_conv = %x\n", __func__, ptr->slots_at_66_conv);
|
||||
debug ("%s - slots_at_66_pcix = %x\n", __func__, ptr->slots_at_66_pcix);
|
||||
@ -144,7 +144,7 @@ static void __init print_bus_info (void)
|
||||
static void print_lo_info (void)
|
||||
{
|
||||
struct rio_detail *ptr;
|
||||
debug ("print_lo_info ----\n");
|
||||
debug ("print_lo_info ----\n");
|
||||
list_for_each_entry(ptr, &rio_lo_head, rio_detail_list) {
|
||||
debug ("%s - rio_node_id = %x\n", __func__, ptr->rio_node_id);
|
||||
debug ("%s - rio_type = %x\n", __func__, ptr->rio_type);
|
||||
@ -176,7 +176,7 @@ static void __init print_ebda_pci_rsrc (void)
|
||||
struct ebda_pci_rsrc *ptr;
|
||||
|
||||
list_for_each_entry(ptr, &ibmphp_ebda_pci_rsrc_head, ebda_pci_rsrc_list) {
|
||||
debug ("%s - rsrc type: %x bus#: %x dev_func: %x start addr: %x end addr: %x\n",
|
||||
debug ("%s - rsrc type: %x bus#: %x dev_func: %x start addr: %x end addr: %x\n",
|
||||
__func__, ptr->rsrc_type ,ptr->bus_num, ptr->dev_fun,ptr->start_addr, ptr->end_addr);
|
||||
}
|
||||
}
|
||||
@ -259,7 +259,7 @@ int __init ibmphp_access_ebda (void)
|
||||
ebda_seg = readw (io_mem);
|
||||
iounmap (io_mem);
|
||||
debug ("returned ebda segment: %x\n", ebda_seg);
|
||||
|
||||
|
||||
io_mem = ioremap(ebda_seg<<4, 1);
|
||||
if (!io_mem)
|
||||
return -ENOMEM;
|
||||
@ -310,7 +310,7 @@ int __init ibmphp_access_ebda (void)
|
||||
re = readw (io_mem + sub_addr); /* next sub blk */
|
||||
|
||||
sub_addr += 2;
|
||||
rc_id = readw (io_mem + sub_addr); /* sub blk id */
|
||||
rc_id = readw (io_mem + sub_addr); /* sub blk id */
|
||||
|
||||
sub_addr += 2;
|
||||
if (rc_id != 0x5243)
|
||||
@ -330,7 +330,7 @@ int __init ibmphp_access_ebda (void)
|
||||
debug ("info about hpc descriptor---\n");
|
||||
debug ("hot blk format: %x\n", format);
|
||||
debug ("num of controller: %x\n", num_ctlrs);
|
||||
debug ("offset of hpc data structure enteries: %x\n ", sub_addr);
|
||||
debug ("offset of hpc data structure entries: %x\n ", sub_addr);
|
||||
|
||||
sub_addr = base + re; /* re sub blk */
|
||||
/* FIXME: rc is never used/checked */
|
||||
@ -359,7 +359,7 @@ int __init ibmphp_access_ebda (void)
|
||||
debug ("info about rsrc descriptor---\n");
|
||||
debug ("format: %x\n", format);
|
||||
debug ("num of rsrc: %x\n", num_entries);
|
||||
debug ("offset of rsrc data structure enteries: %x\n ", sub_addr);
|
||||
debug ("offset of rsrc data structure entries: %x\n ", sub_addr);
|
||||
|
||||
hs_complete = 1;
|
||||
} else {
|
||||
@ -376,7 +376,7 @@ int __init ibmphp_access_ebda (void)
|
||||
rio_table_ptr->scal_count = readb (io_mem + offset + 1);
|
||||
rio_table_ptr->riodev_count = readb (io_mem + offset + 2);
|
||||
rio_table_ptr->offset = offset +3 ;
|
||||
|
||||
|
||||
debug("info about rio table hdr ---\n");
|
||||
debug("ver_num: %x\nscal_count: %x\nriodev_count: %x\noffset of rio table: %x\n ",
|
||||
rio_table_ptr->ver_num, rio_table_ptr->scal_count,
|
||||
@ -440,12 +440,12 @@ static int __init ebda_rio_table (void)
|
||||
rio_detail_ptr->chassis_num = readb (io_mem + offset + 14);
|
||||
// debug ("rio_node_id: %x\nbbar: %x\nrio_type: %x\nowner_id: %x\nport0_node: %x\nport0_port: %x\nport1_node: %x\nport1_port: %x\nfirst_slot_num: %x\nstatus: %x\n", rio_detail_ptr->rio_node_id, rio_detail_ptr->bbar, rio_detail_ptr->rio_type, rio_detail_ptr->owner_id, rio_detail_ptr->port0_node_connect, rio_detail_ptr->port0_port_connect, rio_detail_ptr->port1_node_connect, rio_detail_ptr->port1_port_connect, rio_detail_ptr->first_slot_num, rio_detail_ptr->status);
|
||||
//create linked list of chassis
|
||||
if (rio_detail_ptr->rio_type == 4 || rio_detail_ptr->rio_type == 5)
|
||||
if (rio_detail_ptr->rio_type == 4 || rio_detail_ptr->rio_type == 5)
|
||||
list_add (&rio_detail_ptr->rio_detail_list, &rio_vg_head);
|
||||
//create linked list of expansion box
|
||||
else if (rio_detail_ptr->rio_type == 6 || rio_detail_ptr->rio_type == 7)
|
||||
//create linked list of expansion box
|
||||
else if (rio_detail_ptr->rio_type == 6 || rio_detail_ptr->rio_type == 7)
|
||||
list_add (&rio_detail_ptr->rio_detail_list, &rio_lo_head);
|
||||
else
|
||||
else
|
||||
// not in my concern
|
||||
kfree (rio_detail_ptr);
|
||||
offset += 15;
|
||||
@ -456,7 +456,7 @@ static int __init ebda_rio_table (void)
|
||||
}
|
||||
|
||||
/*
|
||||
* reorganizing linked list of chassis
|
||||
* reorganizing linked list of chassis
|
||||
*/
|
||||
static struct opt_rio *search_opt_vg (u8 chassis_num)
|
||||
{
|
||||
@ -464,7 +464,7 @@ static struct opt_rio *search_opt_vg (u8 chassis_num)
|
||||
list_for_each_entry(ptr, &opt_vg_head, opt_rio_list) {
|
||||
if (ptr->chassis_num == chassis_num)
|
||||
return ptr;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -472,7 +472,7 @@ static int __init combine_wpg_for_chassis (void)
|
||||
{
|
||||
struct opt_rio *opt_rio_ptr = NULL;
|
||||
struct rio_detail *rio_detail_ptr = NULL;
|
||||
|
||||
|
||||
list_for_each_entry(rio_detail_ptr, &rio_vg_head, rio_detail_list) {
|
||||
opt_rio_ptr = search_opt_vg (rio_detail_ptr->chassis_num);
|
||||
if (!opt_rio_ptr) {
|
||||
@ -484,14 +484,14 @@ static int __init combine_wpg_for_chassis (void)
|
||||
opt_rio_ptr->first_slot_num = rio_detail_ptr->first_slot_num;
|
||||
opt_rio_ptr->middle_num = rio_detail_ptr->first_slot_num;
|
||||
list_add (&opt_rio_ptr->opt_rio_list, &opt_vg_head);
|
||||
} else {
|
||||
} else {
|
||||
opt_rio_ptr->first_slot_num = min (opt_rio_ptr->first_slot_num, rio_detail_ptr->first_slot_num);
|
||||
opt_rio_ptr->middle_num = max (opt_rio_ptr->middle_num, rio_detail_ptr->first_slot_num);
|
||||
}
|
||||
}
|
||||
}
|
||||
print_opt_vg ();
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* reorganizing linked list of expansion box
|
||||
@ -502,7 +502,7 @@ static struct opt_rio_lo *search_opt_lo (u8 chassis_num)
|
||||
list_for_each_entry(ptr, &opt_lo_head, opt_rio_lo_list) {
|
||||
if (ptr->chassis_num == chassis_num)
|
||||
return ptr;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -510,7 +510,7 @@ static int combine_wpg_for_expansion (void)
|
||||
{
|
||||
struct opt_rio_lo *opt_rio_lo_ptr = NULL;
|
||||
struct rio_detail *rio_detail_ptr = NULL;
|
||||
|
||||
|
||||
list_for_each_entry(rio_detail_ptr, &rio_lo_head, rio_detail_list) {
|
||||
opt_rio_lo_ptr = search_opt_lo (rio_detail_ptr->chassis_num);
|
||||
if (!opt_rio_lo_ptr) {
|
||||
@ -522,22 +522,22 @@ static int combine_wpg_for_expansion (void)
|
||||
opt_rio_lo_ptr->first_slot_num = rio_detail_ptr->first_slot_num;
|
||||
opt_rio_lo_ptr->middle_num = rio_detail_ptr->first_slot_num;
|
||||
opt_rio_lo_ptr->pack_count = 1;
|
||||
|
||||
|
||||
list_add (&opt_rio_lo_ptr->opt_rio_lo_list, &opt_lo_head);
|
||||
} else {
|
||||
} else {
|
||||
opt_rio_lo_ptr->first_slot_num = min (opt_rio_lo_ptr->first_slot_num, rio_detail_ptr->first_slot_num);
|
||||
opt_rio_lo_ptr->middle_num = max (opt_rio_lo_ptr->middle_num, rio_detail_ptr->first_slot_num);
|
||||
opt_rio_lo_ptr->pack_count = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Since we don't know the max slot number per each chassis, hence go
|
||||
* through the list of all chassis to find out the range
|
||||
* Arguments: slot_num, 1st slot number of the chassis we think we are on,
|
||||
* var (0 = chassis, 1 = expansion box)
|
||||
* Arguments: slot_num, 1st slot number of the chassis we think we are on,
|
||||
* var (0 = chassis, 1 = expansion box)
|
||||
*/
|
||||
static int first_slot_num (u8 slot_num, u8 first_slot, u8 var)
|
||||
{
|
||||
@ -547,7 +547,7 @@ static int first_slot_num (u8 slot_num, u8 first_slot, u8 var)
|
||||
|
||||
if (!var) {
|
||||
list_for_each_entry(opt_vg_ptr, &opt_vg_head, opt_rio_list) {
|
||||
if ((first_slot < opt_vg_ptr->first_slot_num) && (slot_num >= opt_vg_ptr->first_slot_num)) {
|
||||
if ((first_slot < opt_vg_ptr->first_slot_num) && (slot_num >= opt_vg_ptr->first_slot_num)) {
|
||||
rc = -ENODEV;
|
||||
break;
|
||||
}
|
||||
@ -569,7 +569,7 @@ static struct opt_rio_lo * find_rxe_num (u8 slot_num)
|
||||
|
||||
list_for_each_entry(opt_lo_ptr, &opt_lo_head, opt_rio_lo_list) {
|
||||
//check to see if this slot_num belongs to expansion box
|
||||
if ((slot_num >= opt_lo_ptr->first_slot_num) && (!first_slot_num (slot_num, opt_lo_ptr->first_slot_num, 1)))
|
||||
if ((slot_num >= opt_lo_ptr->first_slot_num) && (!first_slot_num (slot_num, opt_lo_ptr->first_slot_num, 1)))
|
||||
return opt_lo_ptr;
|
||||
}
|
||||
return NULL;
|
||||
@ -580,8 +580,8 @@ static struct opt_rio * find_chassis_num (u8 slot_num)
|
||||
struct opt_rio *opt_vg_ptr;
|
||||
|
||||
list_for_each_entry(opt_vg_ptr, &opt_vg_head, opt_rio_list) {
|
||||
//check to see if this slot_num belongs to chassis
|
||||
if ((slot_num >= opt_vg_ptr->first_slot_num) && (!first_slot_num (slot_num, opt_vg_ptr->first_slot_num, 0)))
|
||||
//check to see if this slot_num belongs to chassis
|
||||
if ((slot_num >= opt_vg_ptr->first_slot_num) && (!first_slot_num (slot_num, opt_vg_ptr->first_slot_num, 0)))
|
||||
return opt_vg_ptr;
|
||||
}
|
||||
return NULL;
|
||||
@ -594,13 +594,13 @@ static u8 calculate_first_slot (u8 slot_num)
|
||||
{
|
||||
u8 first_slot = 1;
|
||||
struct slot * slot_cur;
|
||||
|
||||
|
||||
list_for_each_entry(slot_cur, &ibmphp_slot_head, ibm_slot_list) {
|
||||
if (slot_cur->ctrl) {
|
||||
if ((slot_cur->ctrl->ctlr_type != 4) && (slot_cur->ctrl->ending_slot_num > first_slot) && (slot_num > slot_cur->ctrl->ending_slot_num))
|
||||
if ((slot_cur->ctrl->ctlr_type != 4) && (slot_cur->ctrl->ending_slot_num > first_slot) && (slot_num > slot_cur->ctrl->ending_slot_num))
|
||||
first_slot = slot_cur->ctrl->ending_slot_num;
|
||||
}
|
||||
}
|
||||
}
|
||||
return first_slot + 1;
|
||||
|
||||
}
|
||||
@ -622,11 +622,11 @@ static char *create_file_name (struct slot * slot_cur)
|
||||
err ("Structure passed is empty\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
slot_num = slot_cur->number;
|
||||
|
||||
memset (str, 0, sizeof(str));
|
||||
|
||||
|
||||
if (rio_table_ptr) {
|
||||
if (rio_table_ptr->ver_num == 3) {
|
||||
opt_vg_ptr = find_chassis_num (slot_num);
|
||||
@ -660,7 +660,7 @@ static char *create_file_name (struct slot * slot_cur)
|
||||
/* if both NULL and we DO have correct RIO table in BIOS */
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!flag) {
|
||||
if (slot_cur->ctrl->ctlr_type == 4) {
|
||||
first_slot = calculate_first_slot (slot_num);
|
||||
@ -798,7 +798,7 @@ static int __init ebda_rsrc_controller (void)
|
||||
slot_ptr->ctl_index = readb (io_mem + addr_slot + 2*slot_num);
|
||||
slot_ptr->slot_cap = readb (io_mem + addr_slot + 3*slot_num);
|
||||
|
||||
// create bus_info lined list --- if only one slot per bus: slot_min = slot_max
|
||||
// create bus_info lined list --- if only one slot per bus: slot_min = slot_max
|
||||
|
||||
bus_info_ptr2 = ibmphp_find_same_bus_num (slot_ptr->slot_bus_num);
|
||||
if (!bus_info_ptr2) {
|
||||
@ -814,9 +814,9 @@ static int __init ebda_rsrc_controller (void)
|
||||
bus_info_ptr1->index = bus_index++;
|
||||
bus_info_ptr1->current_speed = 0xff;
|
||||
bus_info_ptr1->current_bus_mode = 0xff;
|
||||
|
||||
|
||||
bus_info_ptr1->controller_id = hpc_ptr->ctlr_id;
|
||||
|
||||
|
||||
list_add_tail (&bus_info_ptr1->bus_info_list, &bus_info_head);
|
||||
|
||||
} else {
|
||||
@ -851,7 +851,7 @@ static int __init ebda_rsrc_controller (void)
|
||||
bus_info_ptr2->slots_at_66_conv = bus_ptr->slots_at_66_conv;
|
||||
bus_info_ptr2->slots_at_66_pcix = bus_ptr->slots_at_66_pcix;
|
||||
bus_info_ptr2->slots_at_100_pcix = bus_ptr->slots_at_100_pcix;
|
||||
bus_info_ptr2->slots_at_133_pcix = bus_ptr->slots_at_133_pcix;
|
||||
bus_info_ptr2->slots_at_133_pcix = bus_ptr->slots_at_133_pcix;
|
||||
}
|
||||
bus_ptr++;
|
||||
}
|
||||
@ -864,7 +864,7 @@ static int __init ebda_rsrc_controller (void)
|
||||
hpc_ptr->u.pci_ctlr.dev_fun = readb (io_mem + addr + 1);
|
||||
hpc_ptr->irq = readb (io_mem + addr + 2);
|
||||
addr += 3;
|
||||
debug ("ctrl bus = %x, ctlr devfun = %x, irq = %x\n",
|
||||
debug ("ctrl bus = %x, ctlr devfun = %x, irq = %x\n",
|
||||
hpc_ptr->u.pci_ctlr.bus,
|
||||
hpc_ptr->u.pci_ctlr.dev_fun, hpc_ptr->irq);
|
||||
break;
|
||||
@ -932,7 +932,7 @@ static int __init ebda_rsrc_controller (void)
|
||||
tmp_slot->supported_speed = 2;
|
||||
else if ((hpc_ptr->slots[index].slot_cap & EBDA_SLOT_66_MAX) == EBDA_SLOT_66_MAX)
|
||||
tmp_slot->supported_speed = 1;
|
||||
|
||||
|
||||
if ((hpc_ptr->slots[index].slot_cap & EBDA_SLOT_PCIX_CAP) == EBDA_SLOT_PCIX_CAP)
|
||||
tmp_slot->supported_bus_mode = 1;
|
||||
else
|
||||
@ -1000,7 +1000,7 @@ error_no_hpc:
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
* map info (bus, devfun, start addr, end addr..) of i/o, memory,
|
||||
* pfm from the physical addr to a list of resource.
|
||||
*/
|
||||
@ -1057,7 +1057,7 @@ static int __init ebda_rsrc_rsrc (void)
|
||||
addr += 10;
|
||||
|
||||
debug ("rsrc from mem or pfm ---\n");
|
||||
debug ("rsrc type: %x bus#: %x dev_func: %x start addr: %x end addr: %x\n",
|
||||
debug ("rsrc type: %x bus#: %x dev_func: %x start addr: %x end addr: %x\n",
|
||||
rsrc_ptr->rsrc_type, rsrc_ptr->bus_num, rsrc_ptr->dev_fun, rsrc_ptr->start_addr, rsrc_ptr->end_addr);
|
||||
|
||||
list_add (&rsrc_ptr->ebda_pci_rsrc_list, &ibmphp_ebda_pci_rsrc_head);
|
||||
@ -1096,7 +1096,7 @@ struct bus_info *ibmphp_find_same_bus_num (u32 num)
|
||||
struct bus_info *ptr;
|
||||
|
||||
list_for_each_entry(ptr, &bus_info_head, bus_info_list) {
|
||||
if (ptr->busno == num)
|
||||
if (ptr->busno == num)
|
||||
return ptr;
|
||||
}
|
||||
return NULL;
|
||||
@ -1110,7 +1110,7 @@ int ibmphp_get_bus_index (u8 num)
|
||||
struct bus_info *ptr;
|
||||
|
||||
list_for_each_entry(ptr, &bus_info_head, bus_info_list) {
|
||||
if (ptr->busno == num)
|
||||
if (ptr->busno == num)
|
||||
return ptr->index;
|
||||
}
|
||||
return -ENODEV;
|
||||
@ -1168,7 +1168,7 @@ static struct pci_device_id id_table[] = {
|
||||
.subdevice = HPC_SUBSYSTEM_ID,
|
||||
.class = ((PCI_CLASS_SYSTEM_PCI_HOTPLUG << 8) | 0x00),
|
||||
}, {}
|
||||
};
|
||||
};
|
||||
|
||||
MODULE_DEVICE_TABLE(pci, id_table);
|
||||
|
||||
@ -1197,7 +1197,7 @@ static int ibmphp_probe (struct pci_dev * dev, const struct pci_device_id *ids)
|
||||
struct controller *ctrl;
|
||||
|
||||
debug ("inside ibmphp_probe\n");
|
||||
|
||||
|
||||
list_for_each_entry(ctrl, &ebda_hpc_head, ebda_hpc_list) {
|
||||
if (ctrl->ctlr_type == 1) {
|
||||
if ((dev->devfn == ctrl->u.pci_ctlr.dev_fun) && (dev->bus->number == ctrl->u.pci_ctlr.bus)) {
|
||||
@ -1210,4 +1210,3 @@ static int ibmphp_probe (struct pci_dev * dev, const struct pci_device_id *ids)
|
||||
}
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
@ -258,7 +258,7 @@ static u8 i2c_ctrl_write (struct controller *ctlr_ptr, void __iomem *WPGBbar, u8
|
||||
{
|
||||
u8 rc;
|
||||
void __iomem *wpg_addr; // base addr + offset
|
||||
unsigned long wpg_data; // data to/from WPG LOHI format
|
||||
unsigned long wpg_data; // data to/from WPG LOHI format
|
||||
unsigned long ultemp;
|
||||
unsigned long data; // actual data HILO format
|
||||
int i;
|
||||
@ -351,7 +351,7 @@ static u8 i2c_ctrl_write (struct controller *ctlr_ptr, void __iomem *WPGBbar, u8
|
||||
}
|
||||
|
||||
//------------------------------------------------------------
|
||||
// Read from ISA type HPC
|
||||
// Read from ISA type HPC
|
||||
//------------------------------------------------------------
|
||||
static u8 isa_ctrl_read (struct controller *ctlr_ptr, u8 offset)
|
||||
{
|
||||
@ -372,7 +372,7 @@ static void isa_ctrl_write (struct controller *ctlr_ptr, u8 offset, u8 data)
|
||||
{
|
||||
u16 start_address;
|
||||
u16 port_address;
|
||||
|
||||
|
||||
start_address = ctlr_ptr->u.isa_ctlr.io_start;
|
||||
port_address = start_address + (u16) offset;
|
||||
outb (data, port_address);
|
||||
@ -656,11 +656,11 @@ int ibmphp_hpc_readslot (struct slot * pslot, u8 cmd, u8 * pstatus)
|
||||
//--------------------------------------------------------------------
|
||||
// cleanup
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
|
||||
// remove physical to logical address mapping
|
||||
if ((ctlr_ptr->ctlr_type == 2) || (ctlr_ptr->ctlr_type == 4))
|
||||
iounmap (wpg_bbar);
|
||||
|
||||
|
||||
free_hpc_access ();
|
||||
|
||||
debug_polling ("%s - Exit rc[%d]\n", __func__, rc);
|
||||
@ -835,7 +835,7 @@ static int poll_hpc(void *data)
|
||||
down (&semOperations);
|
||||
|
||||
switch (poll_state) {
|
||||
case POLL_LATCH_REGISTER:
|
||||
case POLL_LATCH_REGISTER:
|
||||
oldlatchlow = curlatchlow;
|
||||
ctrl_count = 0x00;
|
||||
list_for_each (pslotlist, &ibmphp_slot_head) {
|
||||
@ -892,16 +892,16 @@ static int poll_hpc(void *data)
|
||||
|
||||
if (kthread_should_stop())
|
||||
goto out_sleep;
|
||||
|
||||
|
||||
down (&semOperations);
|
||||
|
||||
|
||||
if (poll_count >= POLL_LATCH_CNT) {
|
||||
poll_count = 0;
|
||||
poll_state = POLL_SLOTS;
|
||||
} else
|
||||
poll_state = POLL_LATCH_REGISTER;
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* give up the hardware semaphore */
|
||||
up (&semOperations);
|
||||
/* sleep for a short time just for good measure */
|
||||
@ -958,7 +958,7 @@ static int process_changeinstatus (struct slot *pslot, struct slot *poldslot)
|
||||
// bit 5 - HPC_SLOT_PWRGD
|
||||
if ((pslot->status & 0x20) != (poldslot->status & 0x20))
|
||||
// OFF -> ON: ignore, ON -> OFF: disable slot
|
||||
if ((poldslot->status & 0x20) && (SLOT_CONNECT (poldslot->status) == HPC_SLOT_CONNECTED) && (SLOT_PRESENT (poldslot->status)))
|
||||
if ((poldslot->status & 0x20) && (SLOT_CONNECT (poldslot->status) == HPC_SLOT_CONNECTED) && (SLOT_PRESENT (poldslot->status)))
|
||||
disable = 1;
|
||||
|
||||
// bit 6 - HPC_SLOT_BUS_SPEED
|
||||
@ -980,7 +980,7 @@ static int process_changeinstatus (struct slot *pslot, struct slot *poldslot)
|
||||
pslot->status &= ~HPC_SLOT_POWER;
|
||||
}
|
||||
}
|
||||
// CLOSE -> OPEN
|
||||
// CLOSE -> OPEN
|
||||
else if ((SLOT_PWRGD (poldslot->status) == HPC_SLOT_PWRGD_GOOD)
|
||||
&& (SLOT_CONNECT (poldslot->status) == HPC_SLOT_CONNECTED) && (SLOT_PRESENT (poldslot->status))) {
|
||||
disable = 1;
|
||||
@ -1075,7 +1075,7 @@ void __exit ibmphp_hpc_stop_poll_thread (void)
|
||||
debug ("before locking operations \n");
|
||||
ibmphp_lock_operations ();
|
||||
debug ("after locking operations \n");
|
||||
|
||||
|
||||
// wait for poll thread to exit
|
||||
debug ("before sem_exit down \n");
|
||||
down (&sem_exit);
|
||||
|
@ -1,8 +1,8 @@
|
||||
/*
|
||||
* IBM Hot Plug Controller Driver
|
||||
*
|
||||
*
|
||||
* Written By: Irene Zubarev, IBM Corporation
|
||||
*
|
||||
*
|
||||
* Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com)
|
||||
* Copyright (C) 2001,2002 IBM Corp.
|
||||
*
|
||||
@ -42,7 +42,7 @@ static u8 find_sec_number (u8 primary_busno, u8 slotno);
|
||||
|
||||
/*
|
||||
* NOTE..... If BIOS doesn't provide default routing, we assign:
|
||||
* 9 for SCSI, 10 for LAN adapters, and 11 for everything else.
|
||||
* 9 for SCSI, 10 for LAN adapters, and 11 for everything else.
|
||||
* If adapter is bridged, then we assign 11 to it and devices behind it.
|
||||
* We also assign the same irq numbers for multi function devices.
|
||||
* These are PIC mode, so shouldn't matter n.e.ways (hopefully)
|
||||
@ -71,11 +71,11 @@ static void assign_alt_irq (struct pci_func * cur_func, u8 class_code)
|
||||
* Configures the device to be added (will allocate needed resources if it
|
||||
* can), the device can be a bridge or a regular pci device, can also be
|
||||
* multi-functional
|
||||
*
|
||||
*
|
||||
* Input: function to be added
|
||||
*
|
||||
*
|
||||
* TO DO: The error case with Multifunction device or multi function bridge,
|
||||
* if there is an error, will need to go through all previous functions and
|
||||
* if there is an error, will need to go through all previous functions and
|
||||
* unconfigure....or can add some code into unconfigure_card....
|
||||
*/
|
||||
int ibmphp_configure_card (struct pci_func *func, u8 slotno)
|
||||
@ -98,7 +98,7 @@ int ibmphp_configure_card (struct pci_func *func, u8 slotno)
|
||||
cur_func = func;
|
||||
|
||||
/* We only get bus and device from IRQ routing table. So at this point,
|
||||
* func->busno is correct, and func->device contains only device (at the 5
|
||||
* func->busno is correct, and func->device contains only device (at the 5
|
||||
* highest bits)
|
||||
*/
|
||||
|
||||
@ -151,7 +151,7 @@ int ibmphp_configure_card (struct pci_func *func, u8 slotno)
|
||||
cur_func->device, cur_func->busno);
|
||||
cleanup_count = 6;
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
cur_func->next = NULL;
|
||||
function = 0x8;
|
||||
break;
|
||||
@ -339,7 +339,7 @@ error:
|
||||
}
|
||||
|
||||
/*
|
||||
* This function configures the pci BARs of a single device.
|
||||
* This function configures the pci BARs of a single device.
|
||||
* Input: pointer to the pci_func
|
||||
* Output: configured PCI, 0, or error
|
||||
*/
|
||||
@ -371,17 +371,17 @@ static int configure_device (struct pci_func *func)
|
||||
|
||||
for (count = 0; address[count]; count++) { /* for 6 BARs */
|
||||
|
||||
/* not sure if i need this. per scott, said maybe need smth like this
|
||||
/* not sure if i need this. per scott, said maybe need * something like this
|
||||
if devices don't adhere 100% to the spec, so don't want to write
|
||||
to the reserved bits
|
||||
|
||||
pcibios_read_config_byte(cur_func->busno, cur_func->device,
|
||||
pcibios_read_config_byte(cur_func->busno, cur_func->device,
|
||||
PCI_BASE_ADDRESS_0 + 4 * count, &tmp);
|
||||
if (tmp & 0x01) // IO
|
||||
pcibios_write_config_dword(cur_func->busno, cur_func->device,
|
||||
pcibios_write_config_dword(cur_func->busno, cur_func->device,
|
||||
PCI_BASE_ADDRESS_0 + 4 * count, 0xFFFFFFFD);
|
||||
else // Memory
|
||||
pcibios_write_config_dword(cur_func->busno, cur_func->device,
|
||||
pcibios_write_config_dword(cur_func->busno, cur_func->device,
|
||||
PCI_BASE_ADDRESS_0 + 4 * count, 0xFFFFFFFF);
|
||||
*/
|
||||
pci_bus_write_config_dword (ibmphp_pci_bus, devfn, address[count], 0xFFFFFFFF);
|
||||
@ -421,8 +421,8 @@ static int configure_device (struct pci_func *func)
|
||||
return -EIO;
|
||||
}
|
||||
pci_bus_write_config_dword (ibmphp_pci_bus, devfn, address[count], func->io[count]->start);
|
||||
|
||||
/* _______________This is for debugging purposes only_____________________ */
|
||||
|
||||
/* _______________This is for debugging purposes only_____________________ */
|
||||
debug ("b4 writing, the IO address is %x\n", func->io[count]->start);
|
||||
pci_bus_read_config_dword (ibmphp_pci_bus, devfn, address[count], &bar[count]);
|
||||
debug ("after writing.... the start address is %x\n", bar[count]);
|
||||
@ -484,7 +484,7 @@ static int configure_device (struct pci_func *func)
|
||||
|
||||
pci_bus_write_config_dword (ibmphp_pci_bus, devfn, address[count], func->pfmem[count]->start);
|
||||
|
||||
/*_______________This is for debugging purposes only______________________________*/
|
||||
/*_______________This is for debugging purposes only______________________________*/
|
||||
debug ("b4 writing, start address is %x\n", func->pfmem[count]->start);
|
||||
pci_bus_read_config_dword (ibmphp_pci_bus, devfn, address[count], &bar[count]);
|
||||
debug ("after writing, start address is %x\n", bar[count]);
|
||||
@ -559,7 +559,7 @@ static int configure_device (struct pci_func *func)
|
||||
/******************************************************************************
|
||||
* This routine configures a PCI-2-PCI bridge and the functions behind it
|
||||
* Parameters: pci_func
|
||||
* Returns:
|
||||
* Returns:
|
||||
******************************************************************************/
|
||||
static int configure_bridge (struct pci_func **func_passed, u8 slotno)
|
||||
{
|
||||
@ -622,7 +622,7 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
|
||||
debug ("AFTER FIND_SEC_NUMBER, func->busno IS %x\n", func->busno);
|
||||
|
||||
pci_bus_write_config_byte (ibmphp_pci_bus, devfn, PCI_SECONDARY_BUS, sec_number);
|
||||
|
||||
|
||||
/* __________________For debugging purposes only __________________________________
|
||||
pci_bus_read_config_byte (ibmphp_pci_bus, devfn, PCI_SECONDARY_BUS, &sec_number);
|
||||
debug ("sec_number after write/read is %x\n", sec_number);
|
||||
@ -644,7 +644,7 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
|
||||
|
||||
|
||||
/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!!!!!!!!!!!!!!!NEED TO ADD!!! FAST BACK-TO-BACK ENABLE!!!!!!!!!!!!!!!!!!!!
|
||||
!!!!!!!!!!!!!!!NEED TO ADD!!! FAST BACK-TO-BACK ENABLE!!!!!!!!!!!!!!!!!!!!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
|
||||
|
||||
|
||||
@ -670,7 +670,7 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
|
||||
debug ("len[count] in IO = %x\n", len[count]);
|
||||
|
||||
bus_io[count] = kzalloc(sizeof(struct resource_node), GFP_KERNEL);
|
||||
|
||||
|
||||
if (!bus_io[count]) {
|
||||
err ("out of system memory\n");
|
||||
retval = -ENOMEM;
|
||||
@ -735,7 +735,7 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
|
||||
ibmphp_add_pfmem_from_mem (bus_pfmem[count]);
|
||||
func->pfmem[count] = bus_pfmem[count];
|
||||
} else {
|
||||
err ("cannot allocate requested pfmem for bus %x, device %x, len %x\n",
|
||||
err ("cannot allocate requested pfmem for bus %x, device %x, len %x\n",
|
||||
func->busno, func->device, len[count]);
|
||||
kfree (mem_tmp);
|
||||
kfree (bus_pfmem[count]);
|
||||
@ -805,7 +805,7 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
|
||||
debug ("amount_needed->mem = %x\n", amount_needed->mem);
|
||||
debug ("amount_needed->pfmem = %x\n", amount_needed->pfmem);
|
||||
|
||||
if (amount_needed->not_correct) {
|
||||
if (amount_needed->not_correct) {
|
||||
debug ("amount_needed is not correct\n");
|
||||
for (count = 0; address[count]; count++) {
|
||||
/* for 2 BARs */
|
||||
@ -830,7 +830,7 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
|
||||
} else {
|
||||
debug ("it wants %x IO behind the bridge\n", amount_needed->io);
|
||||
io = kzalloc(sizeof(*io), GFP_KERNEL);
|
||||
|
||||
|
||||
if (!io) {
|
||||
err ("out of system memory\n");
|
||||
retval = -ENOMEM;
|
||||
@ -959,7 +959,7 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
|
||||
|
||||
if (bus->noIORanges) {
|
||||
pci_bus_write_config_byte (ibmphp_pci_bus, devfn, PCI_IO_BASE, 0x00 | bus->rangeIO->start >> 8);
|
||||
pci_bus_write_config_byte (ibmphp_pci_bus, devfn, PCI_IO_LIMIT, 0x00 | bus->rangeIO->end >> 8);
|
||||
pci_bus_write_config_byte (ibmphp_pci_bus, devfn, PCI_IO_LIMIT, 0x00 | bus->rangeIO->end >> 8);
|
||||
|
||||
/* _______________This is for debugging purposes only ____________________
|
||||
pci_bus_read_config_byte (ibmphp_pci_bus, devfn, PCI_IO_BASE, &temp);
|
||||
@ -980,7 +980,7 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
|
||||
if (bus->noMemRanges) {
|
||||
pci_bus_write_config_word (ibmphp_pci_bus, devfn, PCI_MEMORY_BASE, 0x0000 | bus->rangeMem->start >> 16);
|
||||
pci_bus_write_config_word (ibmphp_pci_bus, devfn, PCI_MEMORY_LIMIT, 0x0000 | bus->rangeMem->end >> 16);
|
||||
|
||||
|
||||
/* ____________________This is for debugging purposes only ________________________
|
||||
pci_bus_read_config_word (ibmphp_pci_bus, devfn, PCI_MEMORY_BASE, &temp);
|
||||
debug ("mem_base = %x\n", (temp & PCI_MEMORY_RANGE_TYPE_MASK) << 16);
|
||||
@ -1017,7 +1017,7 @@ static int configure_bridge (struct pci_func **func_passed, u8 slotno)
|
||||
pci_bus_read_config_byte (ibmphp_pci_bus, devfn, PCI_INTERRUPT_PIN, &irq);
|
||||
if ((irq > 0x00) && (irq < 0x05))
|
||||
pci_bus_write_config_byte (ibmphp_pci_bus, devfn, PCI_INTERRUPT_LINE, func->irq[irq - 1]);
|
||||
/*
|
||||
/*
|
||||
pci_bus_write_config_byte (ibmphp_pci_bus, devfn, PCI_BRIDGE_CONTROL, ctrl);
|
||||
pci_bus_write_config_byte (ibmphp_pci_bus, devfn, PCI_BRIDGE_CONTROL, PCI_BRIDGE_CTL_PARITY);
|
||||
pci_bus_write_config_byte (ibmphp_pci_bus, devfn, PCI_BRIDGE_CONTROL, PCI_BRIDGE_CTL_SERR);
|
||||
@ -1071,7 +1071,7 @@ error:
|
||||
* This function adds up the amount of resources needed behind the PPB bridge
|
||||
* and passes it to the configure_bridge function
|
||||
* Input: bridge function
|
||||
* Ouput: amount of resources needed
|
||||
* Output: amount of resources needed
|
||||
*****************************************************************************/
|
||||
static struct res_needed *scan_behind_bridge (struct pci_func * func, u8 busno)
|
||||
{
|
||||
@ -1204,9 +1204,9 @@ static struct res_needed *scan_behind_bridge (struct pci_func * func, u8 busno)
|
||||
return amount;
|
||||
}
|
||||
|
||||
/* The following 3 unconfigure_boot_ routines deal with the case when we had the card
|
||||
* upon bootup in the system, since we don't allocate func to such case, we need to read
|
||||
* the start addresses from pci config space and then find the corresponding entries in
|
||||
/* The following 3 unconfigure_boot_ routines deal with the case when we had the card
|
||||
* upon bootup in the system, since we don't allocate func to such case, we need to read
|
||||
* the start addresses from pci config space and then find the corresponding entries in
|
||||
* our resource lists. The functions return either 0, -ENODEV, or -1 (general failure)
|
||||
* Change: we also call these functions even if we configured the card ourselves (i.e., not
|
||||
* the bootup case), since it should work same way
|
||||
@ -1561,8 +1561,8 @@ static int unconfigure_boot_card (struct slot *slot_cur)
|
||||
* unconfiguring the device
|
||||
* TO DO: will probably need to add some code in case there was some resource,
|
||||
* to remove it... this is from when we have errors in the configure_card...
|
||||
* !!!!!!!!!!!!!!!!!!!!!!!!!FOR BUSES!!!!!!!!!!!!
|
||||
* Returns: 0, -1, -ENODEV
|
||||
* !!!!!!!!!!!!!!!!!!!!!!!!!FOR BUSES!!!!!!!!!!!!
|
||||
* Returns: 0, -1, -ENODEV
|
||||
*/
|
||||
int ibmphp_unconfigure_card (struct slot **slot_cur, int the_end)
|
||||
{
|
||||
@ -1634,7 +1634,7 @@ int ibmphp_unconfigure_card (struct slot **slot_cur, int the_end)
|
||||
* Input: bus and the amount of resources needed (we know we can assign those,
|
||||
* since they've been checked already
|
||||
* Output: bus added to the correct spot
|
||||
* 0, -1, error
|
||||
* 0, -1, error
|
||||
*/
|
||||
static int add_new_bus (struct bus_node *bus, struct resource_node *io, struct resource_node *mem, struct resource_node *pfmem, u8 parent_busno)
|
||||
{
|
||||
@ -1650,7 +1650,7 @@ static int add_new_bus (struct bus_node *bus, struct resource_node *io, struct r
|
||||
err ("strange, cannot find bus which is supposed to be at the system... something is terribly wrong...\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
||||
list_add (&bus->bus_list, &cur_bus->bus_list);
|
||||
}
|
||||
if (io) {
|
||||
@ -1679,7 +1679,7 @@ static int add_new_bus (struct bus_node *bus, struct resource_node *io, struct r
|
||||
}
|
||||
if (pfmem) {
|
||||
pfmem_range = kzalloc(sizeof(*pfmem_range), GFP_KERNEL);
|
||||
if (!pfmem_range) {
|
||||
if (!pfmem_range) {
|
||||
err ("out of system memory\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
@ -1726,4 +1726,3 @@ static u8 find_sec_number (u8 primary_busno, u8 slotno)
|
||||
return busno;
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
|
@ -72,7 +72,7 @@ static struct bus_node * __init alloc_error_bus (struct ebda_pci_rsrc * curr, u8
|
||||
static struct resource_node * __init alloc_resources (struct ebda_pci_rsrc * curr)
|
||||
{
|
||||
struct resource_node *rs;
|
||||
|
||||
|
||||
if (!curr) {
|
||||
err ("NULL passed to allocate\n");
|
||||
return NULL;
|
||||
@ -128,7 +128,7 @@ static int __init alloc_bus_range (struct bus_node **new_bus, struct range_node
|
||||
}
|
||||
newrange->start = curr->start_addr;
|
||||
newrange->end = curr->end_addr;
|
||||
|
||||
|
||||
if (first_bus || (!num_ranges))
|
||||
newrange->rangeno = 1;
|
||||
else {
|
||||
@ -162,7 +162,7 @@ static int __init alloc_bus_range (struct bus_node **new_bus, struct range_node
|
||||
newbus->rangePFMem = newrange;
|
||||
if (first_bus)
|
||||
newbus->noPFMemRanges = 1;
|
||||
else {
|
||||
else {
|
||||
debug ("1st PFMemory Primary on Bus %x [%x - %x]\n", newbus->busno, newrange->start, newrange->end);
|
||||
++newbus->noPFMemRanges;
|
||||
fix_resources (newbus);
|
||||
@ -190,7 +190,7 @@ static int __init alloc_bus_range (struct bus_node **new_bus, struct range_node
|
||||
* This is the Resource Management initialization function. It will go through
|
||||
* the Resource list taken from EBDA and fill in this module's data structures
|
||||
*
|
||||
* THIS IS NOT TAKING INTO CONSIDERATION IO RESTRICTIONS OF PRIMARY BUSES,
|
||||
* THIS IS NOT TAKING INTO CONSIDERATION IO RESTRICTIONS OF PRIMARY BUSES,
|
||||
* SINCE WE'RE GOING TO ASSUME FOR NOW WE DON'T HAVE THOSE ON OUR BUSES FOR NOW
|
||||
*
|
||||
* Input: ptr to the head of the resource list from EBDA
|
||||
@ -382,7 +382,7 @@ int __init ibmphp_rsrc_init (void)
|
||||
* pci devices' resources for the appropriate resource
|
||||
*
|
||||
* Input: type of the resource, range to add, current bus
|
||||
* Output: 0 or -1, bus and range ptrs
|
||||
* Output: 0 or -1, bus and range ptrs
|
||||
********************************************************************************/
|
||||
static int add_bus_range (int type, struct range_node *range, struct bus_node *bus_cur)
|
||||
{
|
||||
@ -466,7 +466,7 @@ static void update_resources (struct bus_node *bus_cur, int type, int rangeno)
|
||||
|
||||
switch (type) {
|
||||
case MEM:
|
||||
if (bus_cur->firstMem)
|
||||
if (bus_cur->firstMem)
|
||||
res = bus_cur->firstMem;
|
||||
break;
|
||||
case PFMEM:
|
||||
@ -583,7 +583,7 @@ static void fix_resources (struct bus_node *bus_cur)
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This routine adds a resource to the list of resources to the appropriate bus
|
||||
* This routine adds a resource to the list of resources to the appropriate bus
|
||||
* based on their resource type and sorted by their starting addresses. It assigns
|
||||
* the ptrs to next and nextRange if needed.
|
||||
*
|
||||
@ -605,11 +605,11 @@ int ibmphp_add_resource (struct resource_node *res)
|
||||
err ("NULL passed to add\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
||||
bus_cur = find_bus_wprev (res->busno, NULL, 0);
|
||||
|
||||
|
||||
if (!bus_cur) {
|
||||
/* didn't find a bus, smth's wrong!!! */
|
||||
/* didn't find a bus, something's wrong!!! */
|
||||
debug ("no bus in the system, either pci_dev's wrong or allocation failed\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
@ -648,7 +648,7 @@ int ibmphp_add_resource (struct resource_node *res)
|
||||
if (!range_cur) {
|
||||
switch (res->type) {
|
||||
case IO:
|
||||
++bus_cur->needIOUpdate;
|
||||
++bus_cur->needIOUpdate;
|
||||
break;
|
||||
case MEM:
|
||||
++bus_cur->needMemUpdate;
|
||||
@ -659,13 +659,13 @@ int ibmphp_add_resource (struct resource_node *res)
|
||||
}
|
||||
res->rangeno = -1;
|
||||
}
|
||||
|
||||
|
||||
debug ("The range is %d\n", res->rangeno);
|
||||
if (!res_start) {
|
||||
/* no first{IO,Mem,Pfmem} on the bus, 1st IO/Mem/Pfmem resource ever */
|
||||
switch (res->type) {
|
||||
case IO:
|
||||
bus_cur->firstIO = res;
|
||||
bus_cur->firstIO = res;
|
||||
break;
|
||||
case MEM:
|
||||
bus_cur->firstMem = res;
|
||||
@ -673,7 +673,7 @@ int ibmphp_add_resource (struct resource_node *res)
|
||||
case PFMEM:
|
||||
bus_cur->firstPFMem = res;
|
||||
break;
|
||||
}
|
||||
}
|
||||
res->next = NULL;
|
||||
res->nextRange = NULL;
|
||||
} else {
|
||||
@ -770,7 +770,7 @@ int ibmphp_add_resource (struct resource_node *res)
|
||||
* This routine will remove the resource from the list of resources
|
||||
*
|
||||
* Input: io, mem, and/or pfmem resource to be deleted
|
||||
* Ouput: modified resource list
|
||||
* Output: modified resource list
|
||||
* 0 or error code
|
||||
****************************************************************************/
|
||||
int ibmphp_remove_resource (struct resource_node *res)
|
||||
@ -825,7 +825,7 @@ int ibmphp_remove_resource (struct resource_node *res)
|
||||
|
||||
if (!res_cur) {
|
||||
if (res->type == PFMEM) {
|
||||
/*
|
||||
/*
|
||||
* case where pfmem might be in the PFMemFromMem list
|
||||
* so will also need to remove the corresponding mem
|
||||
* entry
|
||||
@ -961,12 +961,12 @@ static struct range_node * find_range (struct bus_node *bus_cur, struct resource
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* This routine will check to make sure the io/mem/pfmem->len that the device asked for
|
||||
* This routine will check to make sure the io/mem/pfmem->len that the device asked for
|
||||
* can fit w/i our list of available IO/MEM/PFMEM resources. If cannot, returns -EINVAL,
|
||||
* otherwise, returns 0
|
||||
*
|
||||
* Input: resource
|
||||
* Ouput: the correct start and end address are inputted into the resource node,
|
||||
* Output: the correct start and end address are inputted into the resource node,
|
||||
* 0 or -EINVAL
|
||||
*****************************************************************************/
|
||||
int ibmphp_check_resource (struct resource_node *res, u8 bridge)
|
||||
@ -996,7 +996,7 @@ int ibmphp_check_resource (struct resource_node *res, u8 bridge)
|
||||
bus_cur = find_bus_wprev (res->busno, NULL, 0);
|
||||
|
||||
if (!bus_cur) {
|
||||
/* didn't find a bus, smth's wrong!!! */
|
||||
/* didn't find a bus, something's wrong!!! */
|
||||
debug ("no bus in the system, either pci_dev's wrong or allocation failed\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
@ -1066,7 +1066,7 @@ int ibmphp_check_resource (struct resource_node *res, u8 bridge)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (flag && len_cur == res->len) {
|
||||
debug ("but we are not here, right?\n");
|
||||
res->start = start_cur;
|
||||
@ -1118,10 +1118,10 @@ int ibmphp_check_resource (struct resource_node *res, u8 bridge)
|
||||
if (res_prev) {
|
||||
if (res_prev->rangeno != res_cur->rangeno) {
|
||||
/* 1st device on this range */
|
||||
if ((res_cur->start != range->start) &&
|
||||
if ((res_cur->start != range->start) &&
|
||||
((len_tmp = res_cur->start - 1 - range->start) >= res->len)) {
|
||||
if ((len_tmp < len_cur) || (len_cur == 0)) {
|
||||
if ((range->start % tmp_divide) == 0) {
|
||||
if ((range->start % tmp_divide) == 0) {
|
||||
/* just perfect, starting address is divisible by length */
|
||||
flag = 1;
|
||||
len_cur = len_tmp;
|
||||
@ -1344,7 +1344,7 @@ int ibmphp_check_resource (struct resource_node *res, u8 bridge)
|
||||
* This routine is called from remove_card if the card contained PPB.
|
||||
* It will remove all the resources on the bus as well as the bus itself
|
||||
* Input: Bus
|
||||
* Ouput: 0, -ENODEV
|
||||
* Output: 0, -ENODEV
|
||||
********************************************************************************/
|
||||
int ibmphp_remove_bus (struct bus_node *bus, u8 parent_busno)
|
||||
{
|
||||
@ -1353,7 +1353,7 @@ int ibmphp_remove_bus (struct bus_node *bus, u8 parent_busno)
|
||||
struct bus_node *prev_bus;
|
||||
int rc;
|
||||
|
||||
prev_bus = find_bus_wprev (parent_busno, NULL, 0);
|
||||
prev_bus = find_bus_wprev (parent_busno, NULL, 0);
|
||||
|
||||
if (!prev_bus) {
|
||||
debug ("something terribly wrong. Cannot find parent bus to the one to remove\n");
|
||||
@ -1424,7 +1424,7 @@ int ibmphp_remove_bus (struct bus_node *bus, u8 parent_busno)
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* This routine deletes the ranges from a given bus, and the entries from the
|
||||
* This routine deletes the ranges from a given bus, and the entries from the
|
||||
* parent's bus in the resources
|
||||
* Input: current bus, previous bus
|
||||
* Output: 0, -EINVAL
|
||||
@ -1453,7 +1453,7 @@ static int remove_ranges (struct bus_node *bus_cur, struct bus_node *bus_prev)
|
||||
if (bus_cur->noMemRanges) {
|
||||
range_cur = bus_cur->rangeMem;
|
||||
for (i = 0; i < bus_cur->noMemRanges; i++) {
|
||||
if (ibmphp_find_resource (bus_prev, range_cur->start, &res, MEM) < 0)
|
||||
if (ibmphp_find_resource (bus_prev, range_cur->start, &res, MEM) < 0)
|
||||
return -EINVAL;
|
||||
|
||||
ibmphp_remove_resource (res);
|
||||
@ -1467,7 +1467,7 @@ static int remove_ranges (struct bus_node *bus_cur, struct bus_node *bus_prev)
|
||||
if (bus_cur->noPFMemRanges) {
|
||||
range_cur = bus_cur->rangePFMem;
|
||||
for (i = 0; i < bus_cur->noPFMemRanges; i++) {
|
||||
if (ibmphp_find_resource (bus_prev, range_cur->start, &res, PFMEM) < 0)
|
||||
if (ibmphp_find_resource (bus_prev, range_cur->start, &res, PFMEM) < 0)
|
||||
return -EINVAL;
|
||||
|
||||
ibmphp_remove_resource (res);
|
||||
@ -1482,7 +1482,7 @@ static int remove_ranges (struct bus_node *bus_cur, struct bus_node *bus_prev)
|
||||
}
|
||||
|
||||
/*
|
||||
* find the resource node in the bus
|
||||
* find the resource node in the bus
|
||||
* Input: Resource needed, start address of the resource, type of resource
|
||||
*/
|
||||
int ibmphp_find_resource (struct bus_node *bus, u32 start_address, struct resource_node **res, int flag)
|
||||
@ -1512,7 +1512,7 @@ int ibmphp_find_resource (struct bus_node *bus, u32 start_address, struct resour
|
||||
err ("wrong type of flag\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
||||
while (res_cur) {
|
||||
if (res_cur->start == start_address) {
|
||||
*res = res_cur;
|
||||
@ -1718,7 +1718,7 @@ static int __init once_over (void)
|
||||
} /* end for pfmem */
|
||||
} /* end if */
|
||||
} /* end list_for_each bus */
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ibmphp_add_pfmem_from_mem (struct resource_node *pfmem)
|
||||
@ -1760,9 +1760,9 @@ static struct bus_node *find_bus_wprev (u8 bus_number, struct bus_node **prev, u
|
||||
list_for_each (tmp, &gbuses) {
|
||||
tmp_prev = tmp->prev;
|
||||
bus_cur = list_entry (tmp, struct bus_node, bus_list);
|
||||
if (flag)
|
||||
if (flag)
|
||||
*prev = list_entry (tmp_prev, struct bus_node, bus_list);
|
||||
if (bus_cur->busno == bus_number)
|
||||
if (bus_cur->busno == bus_number)
|
||||
return bus_cur;
|
||||
}
|
||||
|
||||
@ -1776,7 +1776,7 @@ void ibmphp_print_test (void)
|
||||
struct range_node *range;
|
||||
struct resource_node *res;
|
||||
struct list_head *tmp;
|
||||
|
||||
|
||||
debug_pci ("*****************START**********************\n");
|
||||
|
||||
if ((!list_empty(&gbuses)) && flags) {
|
||||
@ -1906,7 +1906,7 @@ static int range_exists_already (struct range_node * range, struct bus_node * bu
|
||||
return 1;
|
||||
range_cur = range_cur->next;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1920,7 +1920,7 @@ static int range_exists_already (struct range_node * range, struct bus_node * bu
|
||||
* Returns: none
|
||||
* Note: this function doesn't take into account IO restrictions etc,
|
||||
* so will only work for bridges with no video/ISA devices behind them It
|
||||
* also will not work for onboard PPB's that can have more than 1 *bus
|
||||
* also will not work for onboard PPBs that can have more than 1 *bus
|
||||
* behind them All these are TO DO.
|
||||
* Also need to add more error checkings... (from fnc returns etc)
|
||||
*/
|
||||
@ -1963,7 +1963,7 @@ static int __init update_bridge_ranges (struct bus_node **bus)
|
||||
case PCI_HEADER_TYPE_BRIDGE:
|
||||
function = 0x8;
|
||||
case PCI_HEADER_TYPE_MULTIBRIDGE:
|
||||
/* We assume here that only 1 bus behind the bridge
|
||||
/* We assume here that only 1 bus behind the bridge
|
||||
TO DO: add functionality for several:
|
||||
temp = secondary;
|
||||
while (temp < subordinate) {
|
||||
@ -1972,7 +1972,7 @@ static int __init update_bridge_ranges (struct bus_node **bus)
|
||||
}
|
||||
*/
|
||||
pci_bus_read_config_byte (ibmphp_pci_bus, devfn, PCI_SECONDARY_BUS, &sec_busno);
|
||||
bus_sec = find_bus_wprev (sec_busno, NULL, 0);
|
||||
bus_sec = find_bus_wprev (sec_busno, NULL, 0);
|
||||
/* this bus structure doesn't exist yet, PPB was configured during previous loading of ibmphp */
|
||||
if (!bus_sec) {
|
||||
bus_sec = alloc_error_bus (NULL, sec_busno, 1);
|
||||
@ -2028,7 +2028,7 @@ static int __init update_bridge_ranges (struct bus_node **bus)
|
||||
io->len = io->end - io->start + 1;
|
||||
ibmphp_add_resource (io);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pci_bus_read_config_word (ibmphp_pci_bus, devfn, PCI_MEMORY_BASE, &start_mem_address);
|
||||
pci_bus_read_config_word (ibmphp_pci_bus, devfn, PCI_MEMORY_LIMIT, &end_mem_address);
|
||||
|
@ -131,7 +131,7 @@ static ssize_t power_write_file(struct pci_slot *pci_slot, const char *buf,
|
||||
}
|
||||
module_put(slot->ops->owner);
|
||||
|
||||
exit:
|
||||
exit:
|
||||
if (retval)
|
||||
return retval;
|
||||
return count;
|
||||
@ -177,7 +177,7 @@ static ssize_t attention_write_file(struct pci_slot *slot, const char *buf,
|
||||
retval = ops->set_attention_status(slot->hotplug, attention);
|
||||
module_put(ops->owner);
|
||||
|
||||
exit:
|
||||
exit:
|
||||
if (retval)
|
||||
return retval;
|
||||
return count;
|
||||
@ -247,7 +247,7 @@ static ssize_t test_write_file(struct pci_slot *pci_slot, const char *buf,
|
||||
retval = slot->ops->hardware_test(slot, test);
|
||||
module_put(slot->ops->owner);
|
||||
|
||||
exit:
|
||||
exit:
|
||||
if (retval)
|
||||
return retval;
|
||||
return count;
|
||||
@ -512,7 +512,7 @@ int pci_hp_deregister(struct hotplug_slot *hotplug)
|
||||
* @hotplug: pointer to the slot whose info has changed
|
||||
* @info: pointer to the info copy into the slot's info structure
|
||||
*
|
||||
* @slot must have been registered with the pci
|
||||
* @slot must have been registered with the pci
|
||||
* hotplug subsystem previously with a call to pci_hp_register().
|
||||
*
|
||||
* Returns 0 if successful, anything else for an error.
|
||||
|
@ -180,5 +180,5 @@ static inline int pciehp_acpi_slot_detection_check(struct pci_dev *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_ACPI */
|
||||
#endif /* CONFIG_ACPI */
|
||||
#endif /* _PCIEHP_H */
|
||||
|
@ -78,7 +78,7 @@ static int __initdata dup_slot_id;
|
||||
static int __initdata acpi_slot_detected;
|
||||
static struct list_head __initdata dummy_slots = LIST_HEAD_INIT(dummy_slots);
|
||||
|
||||
/* Dummy driver for dumplicate name detection */
|
||||
/* Dummy driver for duplicate name detection */
|
||||
static int __init dummy_probe(struct pcie_device *dev)
|
||||
{
|
||||
u32 slot_cap;
|
||||
|
@ -351,8 +351,8 @@ static int __init pcied_init(void)
|
||||
|
||||
pciehp_firmware_init();
|
||||
retval = pcie_port_service_register(&hpdriver_portdrv);
|
||||
dbg("pcie_port_service_register = %d\n", retval);
|
||||
info(DRIVER_DESC " version: " DRIVER_VERSION "\n");
|
||||
dbg("pcie_port_service_register = %d\n", retval);
|
||||
info(DRIVER_DESC " version: " DRIVER_VERSION "\n");
|
||||
if (retval)
|
||||
dbg("Failure to register service\n");
|
||||
|
||||
|
@ -92,7 +92,7 @@ static void start_int_poll_timer(struct controller *ctrl, int sec)
|
||||
{
|
||||
/* Clamp to sane value */
|
||||
if ((sec <= 0) || (sec > 60))
|
||||
sec = 2;
|
||||
sec = 2;
|
||||
|
||||
ctrl->poll_timer.function = &int_poll_timeout;
|
||||
ctrl->poll_timer.data = (unsigned long)ctrl;
|
||||
@ -194,7 +194,7 @@ static int pcie_write_cmd(struct controller *ctrl, u16 cmd, u16 mask)
|
||||
ctrl_dbg(ctrl, "CMD_COMPLETED not clear after 1 sec\n");
|
||||
} else if (!NO_CMD_CMPL(ctrl)) {
|
||||
/*
|
||||
* This controller semms to notify of command completed
|
||||
* This controller seems to notify of command completed
|
||||
* event even though it supports none of power
|
||||
* controller, attention led, power led and EMI.
|
||||
*/
|
||||
@ -926,7 +926,7 @@ struct controller *pcie_init(struct pcie_device *dev)
|
||||
if (pciehp_writew(ctrl, PCI_EXP_SLTSTA, 0x1f))
|
||||
goto abort_ctrl;
|
||||
|
||||
/* Disable sotfware notification */
|
||||
/* Disable software notification */
|
||||
pcie_disable_notification(ctrl);
|
||||
|
||||
ctrl_info(ctrl, "HPC vendor_id %x device_id %x ss_vid %x ss_did %x\n",
|
||||
|
@ -52,7 +52,7 @@ static LIST_HEAD(slot_list);
|
||||
do { \
|
||||
if (debug) \
|
||||
printk (KERN_DEBUG "%s: " format "\n", \
|
||||
MY_NAME , ## arg); \
|
||||
MY_NAME , ## arg); \
|
||||
} while (0)
|
||||
#define err(format, arg...) printk(KERN_ERR "%s: " format "\n", MY_NAME , ## arg)
|
||||
#define info(format, arg...) printk(KERN_INFO "%s: " format "\n", MY_NAME , ## arg)
|
||||
@ -287,7 +287,7 @@ static int __init init_slots(void)
|
||||
hotplug_slot->release = &release_slot;
|
||||
make_slot_name(slot);
|
||||
hotplug_slot->ops = &skel_hotplug_slot_ops;
|
||||
|
||||
|
||||
/*
|
||||
* Initialize the slot info structure with some known
|
||||
* good values.
|
||||
@ -296,7 +296,7 @@ static int __init init_slots(void)
|
||||
get_attention_status(hotplug_slot, &info->attention_status);
|
||||
get_latch_status(hotplug_slot, &info->latch_status);
|
||||
get_adapter_status(hotplug_slot, &info->adapter_status);
|
||||
|
||||
|
||||
dbg("registering slot %d\n", i);
|
||||
retval = pci_hp_register(slot->hotplug_slot);
|
||||
if (retval) {
|
||||
@ -336,7 +336,7 @@ static void __exit cleanup_slots(void)
|
||||
pci_hp_deregister(slot->hotplug_slot);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static int __init pcihp_skel_init(void)
|
||||
{
|
||||
int retval;
|
||||
|
@ -217,7 +217,7 @@ static int dlpar_remove_phb(char *drc_name, struct device_node *dn)
|
||||
if (!pcibios_find_pci_bus(dn))
|
||||
return -EINVAL;
|
||||
|
||||
/* If pci slot is hotplugable, use hotplug to remove it */
|
||||
/* If pci slot is hotpluggable, use hotplug to remove it */
|
||||
slot = find_php_slot(dn);
|
||||
if (slot && rpaphp_deregister_slot(slot)) {
|
||||
printk(KERN_ERR "%s: unable to remove hotplug slot %s\n",
|
||||
|
@ -49,9 +49,9 @@
|
||||
extern bool rpaphp_debug;
|
||||
#define dbg(format, arg...) \
|
||||
do { \
|
||||
if (rpaphp_debug) \
|
||||
if (rpaphp_debug) \
|
||||
printk(KERN_DEBUG "%s: " format, \
|
||||
MY_NAME , ## arg); \
|
||||
MY_NAME , ## arg); \
|
||||
} while (0)
|
||||
#define err(format, arg...) printk(KERN_ERR "%s: " format, MY_NAME , ## arg)
|
||||
#define info(format, arg...) printk(KERN_INFO "%s: " format, MY_NAME , ## arg)
|
||||
@ -99,5 +99,5 @@ void dealloc_slot_struct(struct slot *slot);
|
||||
struct slot *alloc_slot_struct(struct device_node *dn, int drc_index, char *drc_name, int power_domain);
|
||||
int rpaphp_register_slot(struct slot *slot);
|
||||
int rpaphp_deregister_slot(struct slot *slot);
|
||||
|
||||
|
||||
#endif /* _PPC64PHP_H */
|
||||
|
@ -226,7 +226,7 @@ int rpaphp_get_drc_props(struct device_node *dn, int *drc_index,
|
||||
for (i = 0; i < indexes[0]; i++) {
|
||||
if ((unsigned int) indexes[i + 1] == *my_index) {
|
||||
if (drc_name)
|
||||
*drc_name = name_tmp;
|
||||
*drc_name = name_tmp;
|
||||
if (drc_type)
|
||||
*drc_type = type_tmp;
|
||||
if (drc_index)
|
||||
@ -289,7 +289,7 @@ static int is_php_dn(struct device_node *dn, const int **indexes,
|
||||
* rpaphp_add_slot -- declare a hotplug slot to the hotplug subsystem.
|
||||
* @dn: device node of slot
|
||||
*
|
||||
* This subroutine will register a hotplugable slot with the
|
||||
* This subroutine will register a hotpluggable slot with the
|
||||
* PCI hotplug infrastructure. This routine is typically called
|
||||
* during boot time, if the hotplug slots are present at boot time,
|
||||
* or is called later, by the dlpar add code, if the slot is
|
||||
@ -328,7 +328,7 @@ int rpaphp_add_slot(struct device_node *dn)
|
||||
return -ENOMEM;
|
||||
|
||||
slot->type = simple_strtoul(type, NULL, 10);
|
||||
|
||||
|
||||
dbg("Found drc-index:0x%x drc-name:%s drc-type:%s\n",
|
||||
indexes[i + 1], name, type);
|
||||
|
||||
@ -356,7 +356,7 @@ static void __exit cleanup_slots(void)
|
||||
/*
|
||||
* Unregister all of our slots with the pci_hotplug subsystem,
|
||||
* and free up all memory that we had allocated.
|
||||
* memory will be freed in release_slot callback.
|
||||
* memory will be freed in release_slot callback.
|
||||
*/
|
||||
|
||||
list_for_each_safe(tmp, n, &rpaphp_slot_head) {
|
||||
|
@ -44,7 +44,7 @@ int rpaphp_get_sensor_state(struct slot *slot, int *state)
|
||||
dbg("%s: slot must be power up to get sensor-state\n",
|
||||
__func__);
|
||||
|
||||
/* some slots have to be powered up
|
||||
/* some slots have to be powered up
|
||||
* before get-sensor will succeed.
|
||||
*/
|
||||
rc = rtas_set_power_level(slot->power_domain, POWER_ON,
|
||||
@ -133,4 +133,3 @@ int rpaphp_enable_slot(struct slot *slot)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* RPA Virtual I/O device functions
|
||||
* RPA Virtual I/O device functions
|
||||
* Copyright (C) 2004 Linda Xie <lxie@us.ibm.com>
|
||||
*
|
||||
* All rights reserved.
|
||||
@ -51,27 +51,27 @@ struct slot *alloc_slot_struct(struct device_node *dn,
|
||||
int drc_index, char *drc_name, int power_domain)
|
||||
{
|
||||
struct slot *slot;
|
||||
|
||||
|
||||
slot = kzalloc(sizeof(struct slot), GFP_KERNEL);
|
||||
if (!slot)
|
||||
goto error_nomem;
|
||||
slot->hotplug_slot = kzalloc(sizeof(struct hotplug_slot), GFP_KERNEL);
|
||||
if (!slot->hotplug_slot)
|
||||
goto error_slot;
|
||||
goto error_slot;
|
||||
slot->hotplug_slot->info = kzalloc(sizeof(struct hotplug_slot_info),
|
||||
GFP_KERNEL);
|
||||
if (!slot->hotplug_slot->info)
|
||||
goto error_hpslot;
|
||||
slot->name = kstrdup(drc_name, GFP_KERNEL);
|
||||
if (!slot->name)
|
||||
goto error_info;
|
||||
goto error_info;
|
||||
slot->dn = dn;
|
||||
slot->index = drc_index;
|
||||
slot->power_domain = power_domain;
|
||||
slot->hotplug_slot->private = slot;
|
||||
slot->hotplug_slot->ops = &rpaphp_hotplug_slot_ops;
|
||||
slot->hotplug_slot->release = &rpaphp_release_slot;
|
||||
|
||||
|
||||
return (slot);
|
||||
|
||||
error_info:
|
||||
@ -91,7 +91,7 @@ static int is_registered(struct slot *slot)
|
||||
list_for_each_entry(tmp_slot, &rpaphp_slot_head, rpaphp_slot_list) {
|
||||
if (!strcmp(tmp_slot->name, slot->name))
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -104,7 +104,7 @@ int rpaphp_deregister_slot(struct slot *slot)
|
||||
__func__, slot->name);
|
||||
|
||||
list_del(&slot->rpaphp_slot_list);
|
||||
|
||||
|
||||
retval = pci_hp_deregister(php_slot);
|
||||
if (retval)
|
||||
err("Problem unregistering a slot %s\n", slot->name);
|
||||
@ -120,7 +120,7 @@ int rpaphp_register_slot(struct slot *slot)
|
||||
int retval;
|
||||
int slotno;
|
||||
|
||||
dbg("%s registering slot:path[%s] index[%x], name[%s] pdomain[%x] type[%d]\n",
|
||||
dbg("%s registering slot:path[%s] index[%x], name[%s] pdomain[%x] type[%d]\n",
|
||||
__func__, slot->dn->full_name, slot->index, slot->name,
|
||||
slot->power_domain, slot->type);
|
||||
|
||||
@ -128,7 +128,7 @@ int rpaphp_register_slot(struct slot *slot)
|
||||
if (is_registered(slot)) {
|
||||
err("rpaphp_register_slot: slot[%s] is already registered\n", slot->name);
|
||||
return -EAGAIN;
|
||||
}
|
||||
}
|
||||
|
||||
if (slot->dn->child)
|
||||
slotno = PCI_SLOT(PCI_DN(slot->dn->child)->devfn);
|
||||
@ -145,4 +145,3 @@ int rpaphp_register_slot(struct slot *slot)
|
||||
info("Slot [%s] registered\n", slot->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -216,13 +216,13 @@ struct ctrl_reg {
|
||||
|
||||
/* offsets to the controller registers based on the above structure layout */
|
||||
enum ctrl_offsets {
|
||||
BASE_OFFSET = offsetof(struct ctrl_reg, base_offset),
|
||||
SLOT_AVAIL1 = offsetof(struct ctrl_reg, slot_avail1),
|
||||
BASE_OFFSET = offsetof(struct ctrl_reg, base_offset),
|
||||
SLOT_AVAIL1 = offsetof(struct ctrl_reg, slot_avail1),
|
||||
SLOT_AVAIL2 = offsetof(struct ctrl_reg, slot_avail2),
|
||||
SLOT_CONFIG = offsetof(struct ctrl_reg, slot_config),
|
||||
SLOT_CONFIG = offsetof(struct ctrl_reg, slot_config),
|
||||
SEC_BUS_CONFIG = offsetof(struct ctrl_reg, sec_bus_config),
|
||||
MSI_CTRL = offsetof(struct ctrl_reg, msi_ctrl),
|
||||
PROG_INTERFACE = offsetof(struct ctrl_reg, prog_interface),
|
||||
PROG_INTERFACE = offsetof(struct ctrl_reg, prog_interface),
|
||||
CMD = offsetof(struct ctrl_reg, cmd),
|
||||
CMD_STATUS = offsetof(struct ctrl_reg, cmd_status),
|
||||
INTR_LOC = offsetof(struct ctrl_reg, intr_loc),
|
||||
|
@ -143,11 +143,11 @@ static int init_slots(struct controller *ctrl)
|
||||
snprintf(name, SLOT_NAME_SIZE, "%d", slot->number);
|
||||
hotplug_slot->ops = &shpchp_hotplug_slot_ops;
|
||||
|
||||
ctrl_dbg(ctrl, "Registering domain:bus:dev=%04x:%02x:%02x "
|
||||
"hp_slot=%x sun=%x slot_device_offset=%x\n",
|
||||
pci_domain_nr(ctrl->pci_dev->subordinate),
|
||||
slot->bus, slot->device, slot->hp_slot, slot->number,
|
||||
ctrl->slot_device_offset);
|
||||
ctrl_dbg(ctrl, "Registering domain:bus:dev=%04x:%02x:%02x "
|
||||
"hp_slot=%x sun=%x slot_device_offset=%x\n",
|
||||
pci_domain_nr(ctrl->pci_dev->subordinate),
|
||||
slot->bus, slot->device, slot->hp_slot, slot->number,
|
||||
ctrl->slot_device_offset);
|
||||
retval = pci_hp_register(slot->hotplug_slot,
|
||||
ctrl->pci_dev->subordinate, slot->device, name);
|
||||
if (retval) {
|
||||
|
@ -116,7 +116,7 @@
|
||||
#define SLOT_REG_RSVDZ_MASK ((1 << 15) | (7 << 21))
|
||||
|
||||
/*
|
||||
* SHPC Command Code definitnions
|
||||
* SHPC Command Code definitions
|
||||
*
|
||||
* Slot Operation 00h - 3Fh
|
||||
* Set Bus Segment Speed/Mode A 40h - 47h
|
||||
|
@ -610,7 +610,7 @@ resource_size_t pci_sriov_resource_alignment(struct pci_dev *dev, int resno)
|
||||
struct resource tmp;
|
||||
enum pci_bar_type type;
|
||||
int reg = pci_iov_resource_bar(dev, resno, &type);
|
||||
|
||||
|
||||
if (!reg)
|
||||
return 0;
|
||||
|
||||
|
@ -25,7 +25,7 @@ static void pci_note_irq_problem(struct pci_dev *pdev, const char *reason)
|
||||
/**
|
||||
* pci_lost_interrupt - reports a lost PCI interrupt
|
||||
* @pdev: device whose interrupt is lost
|
||||
*
|
||||
*
|
||||
* The primary function of this routine is to report a lost interrupt
|
||||
* in a standard way which users can recognise (instead of blaming the
|
||||
* driver).
|
||||
|
@ -784,7 +784,7 @@ error:
|
||||
* @nvec: how many MSIs have been requested ?
|
||||
* @type: are we checking for MSI or MSI-X ?
|
||||
*
|
||||
* Look at global flags, the device itself, and its parent busses
|
||||
* Look at global flags, the device itself, and its parent buses
|
||||
* to determine if MSI/-X are supported for the device. If MSI/-X is
|
||||
* supported return 0, else return an error code.
|
||||
**/
|
||||
|
@ -141,7 +141,7 @@ phys_addr_t acpi_pci_root_get_mcfg_addr(acpi_handle handle)
|
||||
* if (_PRW at S-state x)
|
||||
* choose from highest power _SxD to lowest power _SxW
|
||||
* else // no _PRW at S-state x
|
||||
* choose highest power _SxD or any lower power
|
||||
* choose highest power _SxD or any lower power
|
||||
*/
|
||||
|
||||
static pci_power_t acpi_pci_choose_state(struct pci_dev *pdev)
|
||||
|
@ -312,7 +312,7 @@ static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev,
|
||||
* __pci_device_probe - check if a driver wants to claim a specific PCI device
|
||||
* @drv: driver to call to check if it wants the PCI device
|
||||
* @pci_dev: PCI device being probed
|
||||
*
|
||||
*
|
||||
* returns 0 on success, else error.
|
||||
* side-effect: pci_dev->driver is set to drv when drv claims pci_dev.
|
||||
*/
|
||||
@ -378,7 +378,7 @@ static int pci_device_remove(struct device * dev)
|
||||
* We would love to complain here if pci_dev->is_enabled is set, that
|
||||
* the driver should have called pci_disable_device(), but the
|
||||
* unfortunate fact is there are too many odd BIOS and bridge setups
|
||||
* that don't like drivers doing that all of the time.
|
||||
* that don't like drivers doing that all of the time.
|
||||
* Oh well, we can dream of sane hardware when we sleep, no matter how
|
||||
* horrible the crap we have to deal with is when we are awake...
|
||||
*/
|
||||
@ -1156,10 +1156,10 @@ static const struct dev_pm_ops pci_dev_pm_ops = {
|
||||
* @drv: the driver structure to register
|
||||
* @owner: owner module of drv
|
||||
* @mod_name: module name string
|
||||
*
|
||||
*
|
||||
* Adds the driver structure to the list of registered drivers.
|
||||
* Returns a negative value on error, otherwise 0.
|
||||
* If no error occurred, the driver remains registered even if
|
||||
* Returns a negative value on error, otherwise 0.
|
||||
* If no error occurred, the driver remains registered even if
|
||||
* no device was claimed during registration.
|
||||
*/
|
||||
int __pci_register_driver(struct pci_driver *drv, struct module *owner,
|
||||
@ -1181,7 +1181,7 @@ int __pci_register_driver(struct pci_driver *drv, struct module *owner,
|
||||
/**
|
||||
* pci_unregister_driver - unregister a pci driver
|
||||
* @drv: the driver structure to unregister
|
||||
*
|
||||
*
|
||||
* Deletes the driver structure from the list of registered PCI drivers,
|
||||
* gives it a chance to clean up by calling its remove() function for
|
||||
* each device it was responsible for, and marks those devices as
|
||||
@ -1203,7 +1203,7 @@ static struct pci_driver pci_compat_driver = {
|
||||
* pci_dev_driver - get the pci_driver of a device
|
||||
* @dev: the device to query
|
||||
*
|
||||
* Returns the appropriate pci_driver structure or %NULL if there is no
|
||||
* Returns the appropriate pci_driver structure or %NULL if there is no
|
||||
* registered driver for the device.
|
||||
*/
|
||||
struct pci_driver *
|
||||
@ -1224,7 +1224,7 @@ pci_dev_driver(const struct pci_dev *dev)
|
||||
* pci_bus_match - Tell if a PCI device structure has a matching PCI device id structure
|
||||
* @dev: the PCI device structure to match against
|
||||
* @drv: the device driver to search for matching PCI device id structures
|
||||
*
|
||||
*
|
||||
* Used by a driver to check whether a PCI device present in the
|
||||
* system is in its list of supported devices. Returns the matching
|
||||
* pci_device_id structure or %NULL if there is no match.
|
||||
|
@ -2,13 +2,13 @@
|
||||
*
|
||||
* Copyright (C) 2008 Red Hat, Inc.
|
||||
* Author:
|
||||
* Chris Wright
|
||||
* Chris Wright
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2.
|
||||
*
|
||||
* Usage is simple, allocate a new id to the stub driver and bind the
|
||||
* device to it. For example:
|
||||
*
|
||||
*
|
||||
* # echo "8086 10f5" > /sys/bus/pci/drivers/pci-stub/new_id
|
||||
* # echo -n 0000:00:19.0 > /sys/bus/pci/drivers/e1000e/unbind
|
||||
* # echo -n 0000:00:19.0 > /sys/bus/pci/drivers/pci-stub/bind
|
||||
|
@ -10,7 +10,7 @@
|
||||
*
|
||||
* File attributes for PCI devices
|
||||
*
|
||||
* Modeled after usb's driverfs.c
|
||||
* Modeled after usb's driverfs.c
|
||||
*
|
||||
*/
|
||||
|
||||
@ -270,13 +270,17 @@ msi_bus_store(struct device *dev, struct device_attribute *attr,
|
||||
if (kstrtoul(buf, 0, &val) < 0)
|
||||
return -EINVAL;
|
||||
|
||||
/* bad things may happen if the no_msi flag is changed
|
||||
* while some drivers are loaded */
|
||||
/*
|
||||
* Bad things may happen if the no_msi flag is changed
|
||||
* while drivers are loaded.
|
||||
*/
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
|
||||
/* Maybe pci devices without subordinate busses shouldn't even have this
|
||||
* attribute in the first place? */
|
||||
/*
|
||||
* Maybe devices without subordinate buses shouldn't have this
|
||||
* attribute in the first place?
|
||||
*/
|
||||
if (!pdev->subordinate)
|
||||
return count;
|
||||
|
||||
@ -670,7 +674,7 @@ pci_write_config(struct file* filp, struct kobject *kobj,
|
||||
size = dev->cfg_size - off;
|
||||
count = size;
|
||||
}
|
||||
|
||||
|
||||
pci_config_pm_runtime_get(dev);
|
||||
|
||||
if ((off & 1) && size) {
|
||||
@ -678,7 +682,7 @@ pci_write_config(struct file* filp, struct kobject *kobj,
|
||||
off++;
|
||||
size--;
|
||||
}
|
||||
|
||||
|
||||
if ((off & 3) && size > 2) {
|
||||
u16 val = data[off - init_off];
|
||||
val |= (u16) data[off - init_off + 1] << 8;
|
||||
@ -696,7 +700,7 @@ pci_write_config(struct file* filp, struct kobject *kobj,
|
||||
off += 4;
|
||||
size -= 4;
|
||||
}
|
||||
|
||||
|
||||
if (size >= 2) {
|
||||
u16 val = data[off - init_off];
|
||||
val |= (u16) data[off - init_off + 1] << 8;
|
||||
@ -1229,21 +1233,21 @@ pci_read_rom(struct file *filp, struct kobject *kobj,
|
||||
|
||||
if (!pdev->rom_attr_enabled)
|
||||
return -EINVAL;
|
||||
|
||||
|
||||
rom = pci_map_rom(pdev, &size); /* size starts out as PCI window size */
|
||||
if (!rom || !size)
|
||||
return -EIO;
|
||||
|
||||
|
||||
if (off >= size)
|
||||
count = 0;
|
||||
else {
|
||||
if (off + count > size)
|
||||
count = size - off;
|
||||
|
||||
|
||||
memcpy_fromio(buf, rom + off, count);
|
||||
}
|
||||
pci_unmap_rom(pdev, rom);
|
||||
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
|
@ -198,7 +198,7 @@ static int __pci_bus_find_cap_start(struct pci_bus *bus,
|
||||
}
|
||||
|
||||
/**
|
||||
* pci_find_capability - query for devices' capabilities
|
||||
* pci_find_capability - query for devices' capabilities
|
||||
* @dev: PCI device to query
|
||||
* @cap: capability code
|
||||
*
|
||||
@ -207,12 +207,12 @@ static int __pci_bus_find_cap_start(struct pci_bus *bus,
|
||||
* device's PCI configuration space or 0 in case the device does not
|
||||
* support it. Possible values for @cap:
|
||||
*
|
||||
* %PCI_CAP_ID_PM Power Management
|
||||
* %PCI_CAP_ID_AGP Accelerated Graphics Port
|
||||
* %PCI_CAP_ID_VPD Vital Product Data
|
||||
* %PCI_CAP_ID_SLOTID Slot Identification
|
||||
* %PCI_CAP_ID_PM Power Management
|
||||
* %PCI_CAP_ID_AGP Accelerated Graphics Port
|
||||
* %PCI_CAP_ID_VPD Vital Product Data
|
||||
* %PCI_CAP_ID_SLOTID Slot Identification
|
||||
* %PCI_CAP_ID_MSI Message Signalled Interrupts
|
||||
* %PCI_CAP_ID_CHSWP CompactPCI HotSwap
|
||||
* %PCI_CAP_ID_CHSWP CompactPCI HotSwap
|
||||
* %PCI_CAP_ID_PCIX PCI-X
|
||||
* %PCI_CAP_ID_EXP PCI Express
|
||||
*/
|
||||
@ -228,13 +228,13 @@ int pci_find_capability(struct pci_dev *dev, int cap)
|
||||
}
|
||||
|
||||
/**
|
||||
* pci_bus_find_capability - query for devices' capabilities
|
||||
* pci_bus_find_capability - query for devices' capabilities
|
||||
* @bus: the PCI bus to query
|
||||
* @devfn: PCI device to query
|
||||
* @cap: capability code
|
||||
*
|
||||
* Like pci_find_capability() but works for pci devices that do not have a
|
||||
* pci_dev structure set up yet.
|
||||
* pci_dev structure set up yet.
|
||||
*
|
||||
* Returns the address of the requested capability structure within the
|
||||
* device's PCI configuration space or 0 in case the device does not
|
||||
@ -515,7 +515,7 @@ static int pci_raw_set_power_state(struct pci_dev *dev, pci_power_t state)
|
||||
return -EINVAL;
|
||||
|
||||
/* Validate current state:
|
||||
* Can enter D0 from any state, but if we can only go deeper
|
||||
* Can enter D0 from any state, but if we can only go deeper
|
||||
* to sleep if we're already in a low power state
|
||||
*/
|
||||
if (state != PCI_D0 && dev->current_state <= PCI_D3cold
|
||||
@ -998,7 +998,7 @@ static void pci_restore_config_space(struct pci_dev *pdev)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* pci_restore_state - Restore the saved state of a PCI device
|
||||
* @dev: - PCI device that we're dealing with
|
||||
*/
|
||||
@ -1030,7 +1030,7 @@ struct pci_saved_state {
|
||||
* the device saved state.
|
||||
* @dev: PCI device that we're dealing with
|
||||
*
|
||||
* Rerturn NULL if no state or error.
|
||||
* Return NULL if no state or error.
|
||||
*/
|
||||
struct pci_saved_state *pci_store_saved_state(struct pci_dev *dev)
|
||||
{
|
||||
@ -1880,7 +1880,7 @@ int pci_finish_runtime_suspend(struct pci_dev *dev)
|
||||
* pci_dev_run_wake - Check if device can generate run-time wake-up events.
|
||||
* @dev: Device to check.
|
||||
*
|
||||
* Return true if the device itself is cabable of generating wake-up events
|
||||
* Return true if the device itself is capable of generating wake-up events
|
||||
* (through the platform or using the native PCIe PME) or if the device supports
|
||||
* PME and one of its upstream bridges can generate wake-up events.
|
||||
*/
|
||||
@ -2447,7 +2447,7 @@ bool pci_acs_enabled(struct pci_dev *pdev, u16 acs_flags)
|
||||
switch (pci_pcie_type(pdev)) {
|
||||
/*
|
||||
* PCI/X-to-PCIe bridges are not specifically mentioned by the spec,
|
||||
* but since their primary inteface is PCI/X, we conservatively
|
||||
* but since their primary interface is PCI/X, we conservatively
|
||||
* handle them as we would a non-PCIe device.
|
||||
*/
|
||||
case PCI_EXP_TYPE_PCIE_BRIDGE:
|
||||
@ -2471,7 +2471,7 @@ bool pci_acs_enabled(struct pci_dev *pdev, u16 acs_flags)
|
||||
/*
|
||||
* PCIe 3.0, 6.12.1.2 specifies ACS capabilities that should be
|
||||
* implemented by the remaining PCIe types to indicate peer-to-peer
|
||||
* capabilities, but only when they are part of a multifunciton
|
||||
* capabilities, but only when they are part of a multifunction
|
||||
* device. The footnote for section 6.12 indicates the specific
|
||||
* PCIe types included here.
|
||||
*/
|
||||
@ -2486,7 +2486,7 @@ bool pci_acs_enabled(struct pci_dev *pdev, u16 acs_flags)
|
||||
}
|
||||
|
||||
/*
|
||||
* PCIe 3.0, 6.12.1.3 specifies no ACS capabilties are applicable
|
||||
* PCIe 3.0, 6.12.1.3 specifies no ACS capabilities are applicable
|
||||
* to single function devices with the exception of downstream ports.
|
||||
*/
|
||||
return true;
|
||||
@ -2622,7 +2622,7 @@ void pci_release_region(struct pci_dev *pdev, int bar)
|
||||
*
|
||||
* If @exclusive is set, then the region is marked so that userspace
|
||||
* is explicitly not allowed to map the resource via /dev/mem or
|
||||
* sysfs MMIO access.
|
||||
* sysfs MMIO access.
|
||||
*
|
||||
* Returns 0 on success, or %EBUSY on error. A warning
|
||||
* message is also printed on failure.
|
||||
@ -2634,7 +2634,7 @@ static int __pci_request_region(struct pci_dev *pdev, int bar, const char *res_n
|
||||
|
||||
if (pci_resource_len(pdev, bar) == 0)
|
||||
return 0;
|
||||
|
||||
|
||||
if (pci_resource_flags(pdev, bar) & IORESOURCE_IO) {
|
||||
if (!request_region(pci_resource_start(pdev, bar),
|
||||
pci_resource_len(pdev, bar), res_name))
|
||||
@ -2694,7 +2694,7 @@ int pci_request_region(struct pci_dev *pdev, int bar, const char *res_name)
|
||||
*
|
||||
* The key difference that _exclusive makes it that userspace is
|
||||
* explicitly not allowed to map the resource via /dev/mem or
|
||||
* sysfs.
|
||||
* sysfs.
|
||||
*/
|
||||
int pci_request_region_exclusive(struct pci_dev *pdev, int bar, const char *res_name)
|
||||
{
|
||||
@ -2799,7 +2799,7 @@ int pci_request_regions(struct pci_dev *pdev, const char *res_name)
|
||||
* successfully.
|
||||
*
|
||||
* pci_request_regions_exclusive() will mark the region so that
|
||||
* /dev/mem and the sysfs MMIO access will not be allowed.
|
||||
* /dev/mem and the sysfs MMIO access will not be allowed.
|
||||
*
|
||||
* Returns 0 on success, or %EBUSY on error. A warning
|
||||
* message is also printed on failure.
|
||||
@ -2967,7 +2967,7 @@ pci_set_mwi(struct pci_dev *dev)
|
||||
cmd |= PCI_COMMAND_INVALIDATE;
|
||||
pci_write_config_word(dev, PCI_COMMAND, cmd);
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -3292,7 +3292,7 @@ clear:
|
||||
*
|
||||
* NOTE: This causes the caller to sleep for twice the device power transition
|
||||
* cooldown period, which for the D0->D3hot and D3hot->D0 transitions is 10 ms
|
||||
* by devault (i.e. unless the @dev's d3_delay field has a different value).
|
||||
* by default (i.e. unless the @dev's d3_delay field has a different value).
|
||||
* Moreover, only devices in D0 can be reset by this function.
|
||||
*/
|
||||
static int pci_pm_reset(struct pci_dev *dev, int probe)
|
||||
@ -3341,7 +3341,7 @@ void pci_reset_bridge_secondary_bus(struct pci_dev *dev)
|
||||
pci_write_config_word(dev, PCI_BRIDGE_CONTROL, ctrl);
|
||||
/*
|
||||
* PCI spec v3.0 7.6.4.2 requires minimum Trst of 1ms. Double
|
||||
* this to 2ms to ensure that we meet the minium requirement.
|
||||
* this to 2ms to ensure that we meet the minimum requirement.
|
||||
*/
|
||||
msleep(2);
|
||||
|
||||
@ -3998,7 +3998,7 @@ int pcie_set_mps(struct pci_dev *dev, int mps)
|
||||
return -EINVAL;
|
||||
|
||||
v = ffs(mps) - 8;
|
||||
if (v > dev->pcie_mpss)
|
||||
if (v > dev->pcie_mpss)
|
||||
return -EINVAL;
|
||||
v <<= 5;
|
||||
|
||||
|
@ -525,7 +525,7 @@ static void handle_error_source(struct pcie_device *aerdev,
|
||||
|
||||
if (info->severity == AER_CORRECTABLE) {
|
||||
/*
|
||||
* Correctable error does not need software intevention.
|
||||
* Correctable error does not need software intervention.
|
||||
* No need to go through error recovery process.
|
||||
*/
|
||||
pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ERR);
|
||||
|
@ -548,7 +548,7 @@ static struct pcie_link_state *alloc_pcie_link_state(struct pci_dev *pdev)
|
||||
|
||||
/*
|
||||
* pcie_aspm_init_link_state: Initiate PCI express link state.
|
||||
* It is called after the pcie and its children devices are scaned.
|
||||
* It is called after the pcie and its children devices are scanned.
|
||||
* @pdev: the root port or switch downstream port
|
||||
*/
|
||||
void pcie_aspm_init_link_state(struct pci_dev *pdev)
|
||||
|
@ -419,8 +419,8 @@ static void pcie_pme_remove(struct pcie_device *srv)
|
||||
|
||||
static struct pcie_port_service_driver pcie_pme_driver = {
|
||||
.name = "pcie_pme",
|
||||
.port_type = PCI_EXP_TYPE_ROOT_PORT,
|
||||
.service = PCIE_PORT_SERVICE_PME,
|
||||
.port_type = PCI_EXP_TYPE_ROOT_PORT,
|
||||
.service = PCIE_PORT_SERVICE_PME,
|
||||
|
||||
.probe = pcie_pme_probe,
|
||||
.suspend = pcie_pme_suspend,
|
||||
|
@ -14,7 +14,7 @@
|
||||
#define PCIE_PORT_DEVICE_MAXSERVICES 4
|
||||
/*
|
||||
* According to the PCI Express Base Specification 2.0, the indices of
|
||||
* the MSI-X table entires used by port services must not exceed 31
|
||||
* the MSI-X table entries used by port services must not exceed 31
|
||||
*/
|
||||
#define PCIE_PORT_MAX_MSIX_ENTRIES 32
|
||||
|
||||
|
@ -18,8 +18,8 @@
|
||||
static int pcie_port_bus_match(struct device *dev, struct device_driver *drv);
|
||||
|
||||
struct bus_type pcie_port_bus_type = {
|
||||
.name = "pci_express",
|
||||
.match = pcie_port_bus_match,
|
||||
.name = "pci_express",
|
||||
.match = pcie_port_bus_match,
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(pcie_port_bus_type);
|
||||
|
||||
|
@ -46,7 +46,7 @@ static void release_pcie_device(struct device *dev)
|
||||
* pcie_port_msix_add_entry - add entry to given array of MSI-X entries
|
||||
* @entries: Array of MSI-X entries
|
||||
* @new_entry: Index of the entry to add to the array
|
||||
* @nr_entries: Number of entries aleady in the array
|
||||
* @nr_entries: Number of entries already in the array
|
||||
*
|
||||
* Return value: Position of the added entry in the array
|
||||
*/
|
||||
|
@ -390,9 +390,9 @@ static struct pci_driver pcie_portdriver = {
|
||||
.probe = pcie_portdrv_probe,
|
||||
.remove = pcie_portdrv_remove,
|
||||
|
||||
.err_handler = &pcie_portdrv_err_handler,
|
||||
.err_handler = &pcie_portdrv_err_handler,
|
||||
|
||||
.driver.pm = PCIE_PORTDRV_PM_OPS,
|
||||
.driver.pm = PCIE_PORTDRV_PM_OPS,
|
||||
};
|
||||
|
||||
static int __init dmi_pcie_pme_disable_msi(const struct dmi_system_id *d)
|
||||
@ -412,7 +412,7 @@ static struct dmi_system_id __initdata pcie_portdrv_dmi_table[] = {
|
||||
.ident = "MSI Wind U-100",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR,
|
||||
"MICRO-STAR INTERNATIONAL CO., LTD"),
|
||||
"MICRO-STAR INTERNATIONAL CO., LTD"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "U-100"),
|
||||
},
|
||||
},
|
||||
|
@ -582,7 +582,7 @@ static enum pci_bus_speed agp_speed(int agp3, int agpstat)
|
||||
index = 1;
|
||||
else
|
||||
goto out;
|
||||
|
||||
|
||||
if (agp3) {
|
||||
index += 2;
|
||||
if (index == 5)
|
||||
@ -789,7 +789,7 @@ int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, int pass)
|
||||
}
|
||||
|
||||
/* Disable MasterAbortMode during probing to avoid reporting
|
||||
of bus errors (in some architectures) */
|
||||
of bus errors (in some architectures) */
|
||||
pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &bctl);
|
||||
pci_write_config_word(dev, PCI_BRIDGE_CONTROL,
|
||||
bctl & ~PCI_BRIDGE_CTL_MASTER_ABORT);
|
||||
@ -1005,7 +1005,7 @@ void set_pcie_hotplug_bridge(struct pci_dev *pdev)
|
||||
* pci_setup_device - fill in class and map information of a device
|
||||
* @dev: the device structure to fill
|
||||
*
|
||||
* Initialize the device structure with information about the device's
|
||||
* Initialize the device structure with information about the device's
|
||||
* vendor,class,memory and IO-space addresses,IRQ lines etc.
|
||||
* Called at initialisation of the PCI subsystem and by CardBus services.
|
||||
* Returns 0 on success and negative if unknown type of device (not normal,
|
||||
@ -1111,7 +1111,7 @@ int pci_setup_device(struct pci_dev *dev)
|
||||
goto bad;
|
||||
/* The PCI-to-PCI bridge spec requires that subtractive
|
||||
decoding (i.e. transparent) bridge must have programming
|
||||
interface code of 0x01. */
|
||||
interface code of 0x01. */
|
||||
pci_read_irq(dev);
|
||||
dev->transparent = ((dev->class & 0xff) == 1);
|
||||
pci_read_bases(dev, 2, PCI_ROM_ADDRESS1);
|
||||
@ -1570,7 +1570,7 @@ static void pcie_write_mrrs(struct pci_dev *dev)
|
||||
* subsequent read will verify if the value is acceptable or not.
|
||||
* If the MRRS value provided is not acceptable (e.g., too large),
|
||||
* shrink the value until it is acceptable to the HW.
|
||||
*/
|
||||
*/
|
||||
while (mrrs != pcie_get_readrq(dev) && mrrs >= 128) {
|
||||
rc = pcie_set_readrq(dev, mrrs);
|
||||
if (!rc)
|
||||
|
@ -222,7 +222,7 @@ static long proc_bus_pci_ioctl(struct file *file, unsigned int cmd,
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
};
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ static void quirk_mellanox_tavor(struct pci_dev *dev)
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MELLANOX,PCI_DEVICE_ID_MELLANOX_TAVOR,quirk_mellanox_tavor);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MELLANOX,PCI_DEVICE_ID_MELLANOX_TAVOR_BRIDGE,quirk_mellanox_tavor);
|
||||
|
||||
/* Deal with broken BIOS'es that neglect to enable passive release,
|
||||
/* Deal with broken BIOSes that neglect to enable passive release,
|
||||
which can cause problems in combination with the 82441FX/PPro MTRRs */
|
||||
static void quirk_passive_release(struct pci_dev *dev)
|
||||
{
|
||||
@ -78,11 +78,11 @@ DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82441, quirk_p
|
||||
|
||||
/* The VIA VP2/VP3/MVP3 seem to have some 'features'. There may be a workaround
|
||||
but VIA don't answer queries. If you happen to have good contacts at VIA
|
||||
ask them for me please -- Alan
|
||||
|
||||
This appears to be BIOS not version dependent. So presumably there is a
|
||||
ask them for me please -- Alan
|
||||
|
||||
This appears to be BIOS not version dependent. So presumably there is a
|
||||
chipset level fix */
|
||||
|
||||
|
||||
static void quirk_isa_dma_hangs(struct pci_dev *dev)
|
||||
{
|
||||
if (!isa_dma_bridge_buggy) {
|
||||
@ -97,7 +97,7 @@ static void quirk_isa_dma_hangs(struct pci_dev *dev)
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0, quirk_isa_dma_hangs);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C596, quirk_isa_dma_hangs);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371SB_0, quirk_isa_dma_hangs);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, quirk_isa_dma_hangs);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, quirk_isa_dma_hangs);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_CBUS_1, quirk_isa_dma_hangs);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_CBUS_2, quirk_isa_dma_hangs);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_CBUS_3, quirk_isa_dma_hangs);
|
||||
@ -157,10 +157,10 @@ static void quirk_triton(struct pci_dev *dev)
|
||||
pci_pci_problems |= PCIPCI_TRITON;
|
||||
}
|
||||
}
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82437, quirk_triton);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82437VX, quirk_triton);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82439, quirk_triton);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82439TX, quirk_triton);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82437, quirk_triton);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82437VX, quirk_triton);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82439, quirk_triton);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82439TX, quirk_triton);
|
||||
|
||||
/*
|
||||
* VIA Apollo KT133 needs PCI latency patch
|
||||
@ -171,7 +171,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82439TX, quir
|
||||
* the info on which Mr Breese based his work.
|
||||
*
|
||||
* Updated based on further information from the site and also on
|
||||
* information provided by VIA
|
||||
* information provided by VIA
|
||||
*/
|
||||
static void quirk_vialatency(struct pci_dev *dev)
|
||||
{
|
||||
@ -179,7 +179,7 @@ static void quirk_vialatency(struct pci_dev *dev)
|
||||
u8 busarb;
|
||||
/* Ok we have a potential problem chipset here. Now see if we have
|
||||
a buggy southbridge */
|
||||
|
||||
|
||||
p = pci_get_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, NULL);
|
||||
if (p!=NULL) {
|
||||
/* 0x40 - 0x4f == 686B, 0x10 - 0x2f == 686A; thanks Dan Hollis */
|
||||
@ -194,9 +194,9 @@ static void quirk_vialatency(struct pci_dev *dev)
|
||||
if (p->revision < 0x10 || p->revision > 0x12)
|
||||
goto exit;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Ok we have the problem. Now set the PCI master grant to
|
||||
* Ok we have the problem. Now set the PCI master grant to
|
||||
* occur every master grant. The apparent bug is that under high
|
||||
* PCI load (quite common in Linux of course) you can get data
|
||||
* loss when the CPU is held off the bus for 3 bus master requests
|
||||
@ -209,7 +209,7 @@ static void quirk_vialatency(struct pci_dev *dev)
|
||||
*/
|
||||
|
||||
pci_read_config_byte(dev, 0x76, &busarb);
|
||||
/* Set bit 4 and bi 5 of byte 76 to 0x01
|
||||
/* Set bit 4 and bi 5 of byte 76 to 0x01
|
||||
"Master priority rotation on every PCI master grant */
|
||||
busarb &= ~(1<<5);
|
||||
busarb |= (1<<4);
|
||||
@ -252,7 +252,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C576, quirk_vsfx)
|
||||
* that DMA to AGP space. Latency must be set to 0xA and triton
|
||||
* workaround applied too
|
||||
* [Info kindly provided by ALi]
|
||||
*/
|
||||
*/
|
||||
static void quirk_alimagik(struct pci_dev *dev)
|
||||
{
|
||||
if ((pci_pci_problems&PCIPCI_ALIMAGIK)==0) {
|
||||
@ -260,8 +260,8 @@ static void quirk_alimagik(struct pci_dev *dev)
|
||||
pci_pci_problems |= PCIPCI_ALIMAGIK|PCIPCI_TRITON;
|
||||
}
|
||||
}
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1647, quirk_alimagik);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1651, quirk_alimagik);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1647, quirk_alimagik);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1651, quirk_alimagik);
|
||||
|
||||
/*
|
||||
* Natoma has some interesting boundary conditions with Zoran stuff
|
||||
@ -274,12 +274,12 @@ static void quirk_natoma(struct pci_dev *dev)
|
||||
pci_pci_problems |= PCIPCI_NATOMA;
|
||||
}
|
||||
}
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82441, quirk_natoma);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443LX_0, quirk_natoma);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443LX_1, quirk_natoma);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_0, quirk_natoma);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_1, quirk_natoma);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_2, quirk_natoma);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82441, quirk_natoma);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443LX_0, quirk_natoma);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443LX_1, quirk_natoma);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_0, quirk_natoma);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_1, quirk_natoma);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_2, quirk_natoma);
|
||||
|
||||
/*
|
||||
* This chip can cause PCI parity errors if config register 0xA0 is read
|
||||
@ -400,7 +400,7 @@ static void piix4_io_quirk(struct pci_dev *dev, const char *name, unsigned int p
|
||||
/*
|
||||
* For now we only print it out. Eventually we'll want to
|
||||
* reserve it (at least if it's in the 0x1000+ range), but
|
||||
* let's get enough confirmation reports first.
|
||||
* let's get enough confirmation reports first.
|
||||
*/
|
||||
base &= -size;
|
||||
dev_info(&dev->dev, "%s PIO at %04x-%04x\n", name, base, base + size - 1);
|
||||
@ -425,7 +425,7 @@ static void piix4_mem_quirk(struct pci_dev *dev, const char *name, unsigned int
|
||||
}
|
||||
/*
|
||||
* For now we only print it out. Eventually we'll want to
|
||||
* reserve it, but let's get enough confirmation reports first.
|
||||
* reserve it, but let's get enough confirmation reports first.
|
||||
*/
|
||||
base &= -size;
|
||||
dev_info(&dev->dev, "%s MMIO at %04x-%04x\n", name, base, base + size - 1);
|
||||
@ -682,7 +682,7 @@ static void quirk_xio2000a(struct pci_dev *dev)
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_XIO2000A,
|
||||
quirk_xio2000a);
|
||||
|
||||
#ifdef CONFIG_X86_IO_APIC
|
||||
#ifdef CONFIG_X86_IO_APIC
|
||||
|
||||
#include <asm/io_apic.h>
|
||||
|
||||
@ -696,12 +696,12 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_XIO2000A,
|
||||
static void quirk_via_ioapic(struct pci_dev *dev)
|
||||
{
|
||||
u8 tmp;
|
||||
|
||||
|
||||
if (nr_ioapics < 1)
|
||||
tmp = 0; /* nothing routed to external APIC */
|
||||
else
|
||||
tmp = 0x1f; /* all known bits (4-0) routed to external APIC */
|
||||
|
||||
|
||||
dev_info(&dev->dev, "%sbling VIA external APIC routing\n",
|
||||
tmp == 0 ? "Disa" : "Ena");
|
||||
|
||||
@ -712,7 +712,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, quirk_via_i
|
||||
DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, quirk_via_ioapic);
|
||||
|
||||
/*
|
||||
* VIA 8237: Some BIOSs don't set the 'Bypass APIC De-Assert Message' Bit.
|
||||
* VIA 8237: Some BIOSes don't set the 'Bypass APIC De-Assert Message' Bit.
|
||||
* This leads to doubled level interrupt rates.
|
||||
* Set this bit to get rid of cycle wastage.
|
||||
* Otherwise uncritical.
|
||||
@ -986,7 +986,7 @@ DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_PCI_MASTER, qu
|
||||
static void quirk_disable_pxb(struct pci_dev *pdev)
|
||||
{
|
||||
u16 config;
|
||||
|
||||
|
||||
if (pdev->revision != 0x04) /* Only C0 requires this */
|
||||
return;
|
||||
pci_read_config_word(pdev, 0x40, &config);
|
||||
@ -1094,11 +1094,11 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82375, quirk_e
|
||||
* On ASUS P4B boards, the SMBus PCI Device within the ICH2/4 southbridge
|
||||
* is not activated. The myth is that Asus said that they do not want the
|
||||
* users to be irritated by just another PCI Device in the Win98 device
|
||||
* manager. (see the file prog/hotplug/README.p4b in the lm_sensors
|
||||
* manager. (see the file prog/hotplug/README.p4b in the lm_sensors
|
||||
* package 2.7.0 for details)
|
||||
*
|
||||
* The SMBus PCI Device can be activated by setting a bit in the ICH LPC
|
||||
* bridge. Unfortunately, this device has no subvendor/subdevice ID. So it
|
||||
* The SMBus PCI Device can be activated by setting a bit in the ICH LPC
|
||||
* bridge. Unfortunately, this device has no subvendor/subdevice ID. So it
|
||||
* becomes necessary to do this tweak in two steps -- the chosen trigger
|
||||
* is either the Host bridge (preferred) or on-board VGA controller.
|
||||
*
|
||||
@ -1253,7 +1253,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82815_CGC, asu
|
||||
static void asus_hides_smbus_lpc(struct pci_dev *dev)
|
||||
{
|
||||
u16 val;
|
||||
|
||||
|
||||
if (likely(!asus_hides_smbus))
|
||||
return;
|
||||
|
||||
@ -1640,8 +1640,8 @@ static void quirk_disable_intel_boot_interrupt(struct pci_dev *dev)
|
||||
dev_info(&dev->dev, "disabled boot interrupts on device [%04x:%04x]\n",
|
||||
dev->vendor, dev->device);
|
||||
}
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_10, quirk_disable_intel_boot_interrupt);
|
||||
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_10, quirk_disable_intel_boot_interrupt);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_10, quirk_disable_intel_boot_interrupt);
|
||||
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_10, quirk_disable_intel_boot_interrupt);
|
||||
|
||||
/*
|
||||
* disable boot interrupts on HT-1000
|
||||
@ -1673,8 +1673,8 @@ static void quirk_disable_broadcom_boot_interrupt(struct pci_dev *dev)
|
||||
dev_info(&dev->dev, "disabled boot interrupts on device [%04x:%04x]\n",
|
||||
dev->vendor, dev->device);
|
||||
}
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000SB, quirk_disable_broadcom_boot_interrupt);
|
||||
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000SB, quirk_disable_broadcom_boot_interrupt);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000SB, quirk_disable_broadcom_boot_interrupt);
|
||||
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000SB, quirk_disable_broadcom_boot_interrupt);
|
||||
|
||||
/*
|
||||
* disable boot interrupts on AMD and ATI chipsets
|
||||
@ -1730,8 +1730,8 @@ static void quirk_disable_amd_8111_boot_interrupt(struct pci_dev *dev)
|
||||
dev_info(&dev->dev, "disabled boot interrupts on device [%04x:%04x]\n",
|
||||
dev->vendor, dev->device);
|
||||
}
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8111_SMBUS, quirk_disable_amd_8111_boot_interrupt);
|
||||
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8111_SMBUS, quirk_disable_amd_8111_boot_interrupt);
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8111_SMBUS, quirk_disable_amd_8111_boot_interrupt);
|
||||
DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8111_SMBUS, quirk_disable_amd_8111_boot_interrupt);
|
||||
#endif /* CONFIG_X86_IO_APIC */
|
||||
|
||||
/*
|
||||
@ -2127,8 +2127,8 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_PLX, 0x8624, quirk_tile_plx_gen1);
|
||||
#ifdef CONFIG_PCI_MSI
|
||||
/* Some chipsets do not support MSI. We cannot easily rely on setting
|
||||
* PCI_BUS_FLAGS_NO_MSI in its bus flags because there are actually
|
||||
* some other busses controlled by the chipset even if Linux is not
|
||||
* aware of it. Instead of setting the flag on all busses in the
|
||||
* some other buses controlled by the chipset even if Linux is not
|
||||
* aware of it. Instead of setting the flag on all buses in the
|
||||
* machine, simply disable MSI globally.
|
||||
*/
|
||||
static void quirk_disable_all_msi(struct pci_dev *dev)
|
||||
@ -2288,14 +2288,14 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA,
|
||||
nvenet_msi_disable);
|
||||
|
||||
/*
|
||||
* Some versions of the MCP55 bridge from nvidia have a legacy irq routing
|
||||
* config register. This register controls the routing of legacy interrupts
|
||||
* from devices that route through the MCP55. If this register is misprogramed
|
||||
* interrupts are only sent to the bsp, unlike conventional systems where the
|
||||
* irq is broadxast to all online cpus. Not having this register set
|
||||
* properly prevents kdump from booting up properly, so lets make sure that
|
||||
* we have it set correctly.
|
||||
* Note this is an undocumented register.
|
||||
* Some versions of the MCP55 bridge from Nvidia have a legacy IRQ routing
|
||||
* config register. This register controls the routing of legacy
|
||||
* interrupts from devices that route through the MCP55. If this register
|
||||
* is misprogrammed, interrupts are only sent to the BSP, unlike
|
||||
* conventional systems where the IRQ is broadcast to all online CPUs. Not
|
||||
* having this register set properly prevents kdump from booting up
|
||||
* properly, so let's make sure that we have it set correctly.
|
||||
* Note that this is an undocumented register.
|
||||
*/
|
||||
static void nvbridge_check_legacy_irq_routing(struct pci_dev *dev)
|
||||
{
|
||||
@ -2626,7 +2626,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC, 0xe091,
|
||||
/* Allow manual resource allocation for PCI hotplug bridges
|
||||
* via pci=hpmemsize=nnM and pci=hpiosize=nnM parameters. For
|
||||
* some PCI-PCI hotplug bridges, like PLX 6254 (former HINT HB6),
|
||||
* kernel fails to allocate resources when hotplug device is
|
||||
* kernel fails to allocate resources when hotplug device is
|
||||
* inserted and PCI bus is rescanned.
|
||||
*/
|
||||
static void quirk_hotplug_bridge(struct pci_dev *dev)
|
||||
|
@ -7,7 +7,7 @@ static void pci_free_resources(struct pci_dev *dev)
|
||||
{
|
||||
int i;
|
||||
|
||||
msi_remove_pci_irq_vectors(dev);
|
||||
msi_remove_pci_irq_vectors(dev);
|
||||
|
||||
pci_cleanup_rom(dev);
|
||||
for (i = 0; i < PCI_NUM_RESOURCES; i++) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* PCI searching functions.
|
||||
* PCI searching functions.
|
||||
*
|
||||
* Copyright (C) 1993 -- 1997 Drew Eckhardt, Frederic Potter,
|
||||
* David Mosberger-Tang
|
||||
@ -96,12 +96,12 @@ struct pci_bus * pci_find_bus(int domain, int busnr)
|
||||
* pci_find_next_bus - begin or continue searching for a PCI bus
|
||||
* @from: Previous PCI bus found, or %NULL for new search.
|
||||
*
|
||||
* Iterates through the list of known PCI busses. A new search is
|
||||
* Iterates through the list of known PCI buses. A new search is
|
||||
* initiated by passing %NULL as the @from argument. Otherwise if
|
||||
* @from is not %NULL, searches continue from next device on the
|
||||
* global list.
|
||||
*/
|
||||
struct pci_bus *
|
||||
struct pci_bus *
|
||||
pci_find_next_bus(const struct pci_bus *from)
|
||||
{
|
||||
struct list_head *n;
|
||||
@ -119,11 +119,11 @@ pci_find_next_bus(const struct pci_bus *from)
|
||||
/**
|
||||
* pci_get_slot - locate PCI device for a given PCI slot
|
||||
* @bus: PCI bus on which desired PCI device resides
|
||||
* @devfn: encodes number of PCI slot in which the desired PCI
|
||||
* device resides and the logical device number within that slot
|
||||
* @devfn: encodes number of PCI slot in which the desired PCI
|
||||
* device resides and the logical device number within that slot
|
||||
* in case of multi-function devices.
|
||||
*
|
||||
* Given a PCI bus and slot/function number, the desired PCI device
|
||||
* Given a PCI bus and slot/function number, the desired PCI device
|
||||
* is located in the list of PCI devices.
|
||||
* If the device is found, its reference count is increased and this
|
||||
* function returns a pointer to its data structure. The caller must
|
||||
|
@ -292,8 +292,8 @@ static void assign_requested_resources_sorted(struct list_head *head,
|
||||
(!(res->flags & IORESOURCE_ROM_ENABLE))))
|
||||
add_to_list(fail_head,
|
||||
dev_res->dev, res,
|
||||
0 /* dont care */,
|
||||
0 /* dont care */);
|
||||
0 /* don't care */,
|
||||
0 /* don't care */);
|
||||
}
|
||||
reset_resource(res);
|
||||
}
|
||||
@ -667,9 +667,9 @@ static void pci_bridge_check_ranges(struct pci_bus *bus)
|
||||
if (!io) {
|
||||
pci_write_config_word(bridge, PCI_IO_BASE, 0xf0f0);
|
||||
pci_read_config_word(bridge, PCI_IO_BASE, &io);
|
||||
pci_write_config_word(bridge, PCI_IO_BASE, 0x0);
|
||||
}
|
||||
if (io)
|
||||
pci_write_config_word(bridge, PCI_IO_BASE, 0x0);
|
||||
}
|
||||
if (io)
|
||||
b_res[0].flags |= IORESOURCE_IO;
|
||||
/* DECchip 21050 pass 2 errata: the bridge may miss an address
|
||||
disconnect boundary by one PCI data phase.
|
||||
@ -819,7 +819,7 @@ static void pbus_size_io(struct pci_bus *bus, resource_size_t min_size,
|
||||
resource_size_t min_align, align;
|
||||
|
||||
if (!b_res)
|
||||
return;
|
||||
return;
|
||||
|
||||
min_align = window_alignment(bus, IORESOURCE_IO);
|
||||
list_for_each_entry(dev, &bus->devices, bus_list) {
|
||||
@ -950,7 +950,7 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,
|
||||
if (realloc_head && i >= PCI_IOV_RESOURCES &&
|
||||
i <= PCI_IOV_RESOURCE_END) {
|
||||
r->end = r->start - 1;
|
||||
add_to_list(realloc_head, dev, r, r_size, 0/* dont' care */);
|
||||
add_to_list(realloc_head, dev, r, r_size, 0/* don't care */);
|
||||
children_add_size += r_size;
|
||||
continue;
|
||||
}
|
||||
@ -1456,8 +1456,8 @@ static enum enable_type pci_realloc_detect(struct pci_bus *bus,
|
||||
|
||||
/*
|
||||
* first try will not touch pci bridge res
|
||||
* second and later try will clear small leaf bridge res
|
||||
* will stop till to the max deepth if can not find good one
|
||||
* second and later try will clear small leaf bridge res
|
||||
* will stop till to the max depth if can not find good one
|
||||
*/
|
||||
void pci_assign_unassigned_root_bus_resources(struct pci_bus *bus)
|
||||
{
|
||||
|
@ -159,7 +159,7 @@ resource_size_t __weak pcibios_retrieve_fw_addr(struct pci_dev *dev, int idx)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pci_revert_fw_address(struct resource *res, struct pci_dev *dev,
|
||||
static int pci_revert_fw_address(struct resource *res, struct pci_dev *dev,
|
||||
int resno, resource_size_t size)
|
||||
{
|
||||
struct resource *root, *conflict;
|
||||
|
@ -53,7 +53,7 @@ static ssize_t address_read_file(struct pci_slot *slot, char *buf)
|
||||
static const char *pci_bus_speed_strings[] = {
|
||||
"33 MHz PCI", /* 0x00 */
|
||||
"66 MHz PCI", /* 0x01 */
|
||||
"66 MHz PCI-X", /* 0x02 */
|
||||
"66 MHz PCI-X", /* 0x02 */
|
||||
"100 MHz PCI-X", /* 0x03 */
|
||||
"133 MHz PCI-X", /* 0x04 */
|
||||
NULL, /* 0x05 */
|
||||
|
@ -44,7 +44,7 @@ SYSCALL_DEFINE5(pciconfig_read, unsigned long, bus, unsigned long, dfn,
|
||||
default:
|
||||
err = -EINVAL;
|
||||
goto error;
|
||||
};
|
||||
}
|
||||
|
||||
err = -EIO;
|
||||
if (cfg_ret != PCIBIOS_SUCCESSFUL)
|
||||
|
@ -26,11 +26,11 @@ struct msi_desc {
|
||||
struct {
|
||||
__u8 is_msix : 1;
|
||||
__u8 multiple: 3; /* log2 number of messages */
|
||||
__u8 maskbit : 1; /* mask-pending bit supported ? */
|
||||
__u8 is_64 : 1; /* Address size: 0=32bit 1=64bit */
|
||||
__u8 pos; /* Location of the msi capability */
|
||||
__u16 entry_nr; /* specific enabled entry */
|
||||
unsigned default_irq; /* default pre-assigned irq */
|
||||
__u8 maskbit : 1; /* mask-pending bit supported ? */
|
||||
__u8 is_64 : 1; /* Address size: 0=32bit 1=64bit */
|
||||
__u8 pos; /* Location of the msi capability */
|
||||
__u16 entry_nr; /* specific enabled entry */
|
||||
unsigned default_irq; /* default pre-assigned irq */
|
||||
} msi_attrib;
|
||||
|
||||
u32 masked; /* mask bits */
|
||||
|
@ -32,7 +32,6 @@
|
||||
#include <linux/irqreturn.h>
|
||||
#include <uapi/linux/pci.h>
|
||||
|
||||
/* Include the ID list */
|
||||
#include <linux/pci_ids.h>
|
||||
|
||||
/*
|
||||
@ -42,9 +41,10 @@
|
||||
*
|
||||
* 7:3 = slot
|
||||
* 2:0 = function
|
||||
* PCI_DEVFN(), PCI_SLOT(), and PCI_FUNC() are defined uapi/linux/pci.h
|
||||
*
|
||||
* PCI_DEVFN(), PCI_SLOT(), and PCI_FUNC() are defined in uapi/linux/pci.h.
|
||||
* In the interest of not exposing interfaces to user-space unnecessarily,
|
||||
* the following kernel only defines are being added here.
|
||||
* the following kernel-only defines are being added here.
|
||||
*/
|
||||
#define PCI_DEVID(bus, devfn) ((((u16)bus) << 8) | devfn)
|
||||
/* return bus from PCI devid = ((u16)bus_number) << 8) | devfn */
|
||||
@ -153,10 +153,10 @@ enum pcie_reset_state {
|
||||
/* Reset is NOT asserted (Use to deassert reset) */
|
||||
pcie_deassert_reset = (__force pcie_reset_state_t) 1,
|
||||
|
||||
/* Use #PERST to reset PCI-E device */
|
||||
/* Use #PERST to reset PCIe device */
|
||||
pcie_warm_reset = (__force pcie_reset_state_t) 2,
|
||||
|
||||
/* Use PCI-E Hot Reset to reset device */
|
||||
/* Use PCIe Hot Reset to reset device */
|
||||
pcie_hot_reset = (__force pcie_reset_state_t) 3
|
||||
};
|
||||
|
||||
@ -259,13 +259,13 @@ struct pci_dev {
|
||||
unsigned int class; /* 3 bytes: (base,sub,prog-if) */
|
||||
u8 revision; /* PCI revision, low byte of class word */
|
||||
u8 hdr_type; /* PCI header type (`multi' flag masked out) */
|
||||
u8 pcie_cap; /* PCI-E capability offset */
|
||||
u8 pcie_cap; /* PCIe capability offset */
|
||||
u8 msi_cap; /* MSI capability offset */
|
||||
u8 msix_cap; /* MSI-X capability offset */
|
||||
u8 pcie_mpss:3; /* PCI-E Max Payload Size Supported */
|
||||
u8 pcie_mpss:3; /* PCIe Max Payload Size Supported */
|
||||
u8 rom_base_reg; /* which config register controls the ROM */
|
||||
u8 pin; /* which interrupt pin this device uses */
|
||||
u16 pcie_flags_reg; /* cached PCI-E Capabilities Register */
|
||||
u8 pin; /* which interrupt pin this device uses */
|
||||
u16 pcie_flags_reg; /* cached PCIe Capabilities Register */
|
||||
|
||||
struct pci_driver *driver; /* which driver has allocated this device */
|
||||
u64 dma_mask; /* Mask of the bits of bus address this
|
||||
@ -300,7 +300,7 @@ struct pci_dev {
|
||||
unsigned int d3cold_delay; /* D3cold->D0 transition time in ms */
|
||||
|
||||
#ifdef CONFIG_PCIEASPM
|
||||
struct pcie_link_state *link_state; /* ASPM link state. */
|
||||
struct pcie_link_state *link_state; /* ASPM link state */
|
||||
#endif
|
||||
|
||||
pci_channel_state_t error_state; /* current connectivity state */
|
||||
@ -317,7 +317,7 @@ struct pci_dev {
|
||||
|
||||
bool match_driver; /* Skip attaching driver */
|
||||
/* These fields are used by common fixups */
|
||||
unsigned int transparent:1; /* Transparent PCI bridge */
|
||||
unsigned int transparent:1; /* Subtractive decode PCI bridge */
|
||||
unsigned int multifunction:1;/* Part of multi-function device */
|
||||
/* keep track of device state */
|
||||
unsigned int is_added:1;
|
||||
@ -326,7 +326,7 @@ struct pci_dev {
|
||||
unsigned int block_cfg_access:1; /* config space access is blocked */
|
||||
unsigned int broken_parity_status:1; /* Device generates false positive parity */
|
||||
unsigned int irq_reroute_variant:2; /* device needs IRQ rerouting variant */
|
||||
unsigned int msi_enabled:1;
|
||||
unsigned int msi_enabled:1;
|
||||
unsigned int msix_enabled:1;
|
||||
unsigned int ari_enabled:1; /* ARI forwarding */
|
||||
unsigned int is_managed:1;
|
||||
@ -371,7 +371,6 @@ static inline struct pci_dev *pci_physfn(struct pci_dev *dev)
|
||||
if (dev->is_virtfn)
|
||||
dev = dev->physfn;
|
||||
#endif
|
||||
|
||||
return dev;
|
||||
}
|
||||
|
||||
@ -456,7 +455,7 @@ struct pci_bus {
|
||||
char name[48];
|
||||
|
||||
unsigned short bridge_ctl; /* manage NO_ISA/FBB/et al behaviors */
|
||||
pci_bus_flags_t bus_flags; /* Inherited by child busses */
|
||||
pci_bus_flags_t bus_flags; /* inherited by child buses */
|
||||
struct device *bridge;
|
||||
struct device dev;
|
||||
struct bin_attribute *legacy_io; /* legacy I/O for this bus */
|
||||
@ -468,7 +467,7 @@ struct pci_bus {
|
||||
#define to_pci_bus(n) container_of(n, struct pci_bus, dev)
|
||||
|
||||
/*
|
||||
* Returns true if the pci bus is root (behind host-pci bridge),
|
||||
* Returns true if the PCI bus is root (behind host-PCI bridge),
|
||||
* false otherwise
|
||||
*
|
||||
* Some code assumes that "bus->self == NULL" means that bus is a root bus.
|
||||
@ -510,7 +509,7 @@ static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev) { return false;
|
||||
#define PCIBIOS_BUFFER_TOO_SMALL 0x89
|
||||
|
||||
/*
|
||||
* Translate above to generic errno for passing back through non-pci.
|
||||
* Translate above to generic errno for passing back through non-PCI code.
|
||||
*/
|
||||
static inline int pcibios_err_to_errno(int err)
|
||||
{
|
||||
@ -561,11 +560,12 @@ struct pci_dynids {
|
||||
struct list_head list; /* for IDs added at runtime */
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------------- */
|
||||
/** PCI Error Recovery System (PCI-ERS). If a PCI device driver provides
|
||||
* a set of callbacks in struct pci_error_handlers, then that device driver
|
||||
* will be notified of PCI bus errors, and will be driven to recovery
|
||||
* when an error occurs.
|
||||
|
||||
/*
|
||||
* PCI Error Recovery System (PCI-ERS). If a PCI device driver provides
|
||||
* a set of callbacks in struct pci_error_handlers, that device driver
|
||||
* will be notified of PCI bus errors, and will be driven to recovery
|
||||
* when an error occurs.
|
||||
*/
|
||||
|
||||
typedef unsigned int __bitwise pci_ers_result_t;
|
||||
@ -609,7 +609,6 @@ struct pci_error_handlers {
|
||||
void (*resume)(struct pci_dev *dev);
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------------- */
|
||||
|
||||
struct module;
|
||||
struct pci_driver {
|
||||
@ -713,10 +712,10 @@ extern enum pcie_bus_config_types pcie_bus_config;
|
||||
|
||||
extern struct bus_type pci_bus_type;
|
||||
|
||||
/* Do NOT directly access these two variables, unless you are arch specific pci
|
||||
* code, or pci core code. */
|
||||
/* Do NOT directly access these two variables, unless you are arch-specific PCI
|
||||
* code, or PCI core code. */
|
||||
extern struct list_head pci_root_buses; /* list of all known PCI buses */
|
||||
/* Some device drivers need know if pci is initiated */
|
||||
/* Some device drivers need know if PCI is initiated */
|
||||
int no_pci_devices(void);
|
||||
|
||||
void pcibios_resource_survey_bus(struct pci_bus *bus);
|
||||
@ -724,7 +723,7 @@ void pcibios_add_bus(struct pci_bus *bus);
|
||||
void pcibios_remove_bus(struct pci_bus *bus);
|
||||
void pcibios_fixup_bus(struct pci_bus *);
|
||||
int __must_check pcibios_enable_device(struct pci_dev *, int mask);
|
||||
/* Architecture specific versions may override this (weak) */
|
||||
/* Architecture-specific versions may override this (weak) */
|
||||
char *pcibios_setup(char *str);
|
||||
|
||||
/* Used only when drivers/pci/setup.c is used */
|
||||
@ -1258,7 +1257,7 @@ void pci_cfg_access_unlock(struct pci_dev *dev);
|
||||
|
||||
/*
|
||||
* PCI domain support. Sometimes called PCI segment (eg by ACPI),
|
||||
* a PCI domain is defined to be a set of PCI busses which share
|
||||
* a PCI domain is defined to be a set of PCI buses which share
|
||||
* configuration space.
|
||||
*/
|
||||
#ifdef CONFIG_PCI_DOMAINS
|
||||
@ -1672,7 +1671,7 @@ extern u8 pci_cache_line_size;
|
||||
extern unsigned long pci_hotplug_io_size;
|
||||
extern unsigned long pci_hotplug_mem_size;
|
||||
|
||||
/* Architecture specific versions may override these (weak) */
|
||||
/* Architecture-specific versions may override these (weak) */
|
||||
int pcibios_add_platform_entries(struct pci_dev *dev);
|
||||
void pcibios_disable_device(struct pci_dev *dev);
|
||||
void pcibios_set_master(struct pci_dev *dev);
|
||||
|
@ -39,8 +39,8 @@
|
||||
* @hardware_test: Called to run a specified hardware test on the specified
|
||||
* slot.
|
||||
* @get_power_status: Called to get the current power status of a slot.
|
||||
* If this field is NULL, the value passed in the struct hotplug_slot_info
|
||||
* will be used when this value is requested by a user.
|
||||
* If this field is NULL, the value passed in the struct hotplug_slot_info
|
||||
* will be used when this value is requested by a user.
|
||||
* @get_attention_status: Called to get the current attention status of a slot.
|
||||
* If this field is NULL, the value passed in the struct hotplug_slot_info
|
||||
* will be used when this value is requested by a user.
|
||||
@ -191,4 +191,3 @@ static inline int pci_get_hp_params(struct pci_dev *dev,
|
||||
|
||||
void pci_configure_slot(struct pci_dev *dev);
|
||||
#endif
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
#define PCIE_PORT_SERVICE_VC (1 << PCIE_PORT_SERVICE_VC_SHIFT)
|
||||
|
||||
struct pcie_device {
|
||||
int irq; /* Service IRQ/MSI/MSI-X Vector */
|
||||
int irq; /* Service IRQ/MSI/MSI-X Vector */
|
||||
struct pci_dev *port; /* Root/Upstream/Downstream Port */
|
||||
u32 service; /* Port service this device represents */
|
||||
void *priv_data; /* Service Private Data */
|
||||
|
@ -13,10 +13,10 @@
|
||||
* PCI to PCI Bridge Specification
|
||||
* PCI System Design Guide
|
||||
*
|
||||
* For hypertransport information, please consult the following manuals
|
||||
* from http://www.hypertransport.org
|
||||
* For HyperTransport information, please consult the following manuals
|
||||
* from http://www.hypertransport.org
|
||||
*
|
||||
* The Hypertransport I/O Link Specification
|
||||
* The HyperTransport I/O Link Specification
|
||||
*/
|
||||
|
||||
#ifndef LINUX_PCI_REGS_H
|
||||
@ -37,7 +37,7 @@
|
||||
#define PCI_COMMAND_INVALIDATE 0x10 /* Use memory write and invalidate */
|
||||
#define PCI_COMMAND_VGA_PALETTE 0x20 /* Enable palette snooping */
|
||||
#define PCI_COMMAND_PARITY 0x40 /* Enable parity checking */
|
||||
#define PCI_COMMAND_WAIT 0x80 /* Enable address/data stepping */
|
||||
#define PCI_COMMAND_WAIT 0x80 /* Enable address/data stepping */
|
||||
#define PCI_COMMAND_SERR 0x100 /* Enable SERR */
|
||||
#define PCI_COMMAND_FAST_BACK 0x200 /* Enable back-to-back writes */
|
||||
#define PCI_COMMAND_INTX_DISABLE 0x400 /* INTx Emulation Disable */
|
||||
@ -45,7 +45,7 @@
|
||||
#define PCI_STATUS 0x06 /* 16 bits */
|
||||
#define PCI_STATUS_INTERRUPT 0x08 /* Interrupt status */
|
||||
#define PCI_STATUS_CAP_LIST 0x10 /* Support Capability List */
|
||||
#define PCI_STATUS_66MHZ 0x20 /* Support 66 Mhz PCI 2.1 bus */
|
||||
#define PCI_STATUS_66MHZ 0x20 /* Support 66 MHz PCI 2.1 bus */
|
||||
#define PCI_STATUS_UDF 0x40 /* Support User Definable Features [obsolete] */
|
||||
#define PCI_STATUS_FAST_BACK 0x80 /* Accept fast-back to back */
|
||||
#define PCI_STATUS_PARITY 0x100 /* Detected parity error */
|
||||
@ -205,14 +205,14 @@
|
||||
#define PCI_CAP_ID_CHSWP 0x06 /* CompactPCI HotSwap */
|
||||
#define PCI_CAP_ID_PCIX 0x07 /* PCI-X */
|
||||
#define PCI_CAP_ID_HT 0x08 /* HyperTransport */
|
||||
#define PCI_CAP_ID_VNDR 0x09 /* Vendor specific */
|
||||
#define PCI_CAP_ID_VNDR 0x09 /* Vendor-Specific */
|
||||
#define PCI_CAP_ID_DBG 0x0A /* Debug port */
|
||||
#define PCI_CAP_ID_CCRC 0x0B /* CompactPCI Central Resource Control */
|
||||
#define PCI_CAP_ID_SHPC 0x0C /* PCI Standard Hot-Plug Controller */
|
||||
#define PCI_CAP_ID_SHPC 0x0C /* PCI Standard Hot-Plug Controller */
|
||||
#define PCI_CAP_ID_SSVID 0x0D /* Bridge subsystem vendor/device ID */
|
||||
#define PCI_CAP_ID_AGP3 0x0E /* AGP Target PCI-PCI bridge */
|
||||
#define PCI_CAP_ID_SECDEV 0x0F /* Secure Device */
|
||||
#define PCI_CAP_ID_EXP 0x10 /* PCI Express */
|
||||
#define PCI_CAP_ID_EXP 0x10 /* PCI Express */
|
||||
#define PCI_CAP_ID_MSIX 0x11 /* MSI-X */
|
||||
#define PCI_CAP_ID_SATA 0x12 /* SATA Data/Index Conf. */
|
||||
#define PCI_CAP_ID_AF 0x13 /* PCI Advanced Features */
|
||||
@ -268,8 +268,8 @@
|
||||
#define PCI_AGP_COMMAND_RQ_MASK 0xff000000 /* Master: Maximum number of requests */
|
||||
#define PCI_AGP_COMMAND_SBA 0x0200 /* Sideband addressing enabled */
|
||||
#define PCI_AGP_COMMAND_AGP 0x0100 /* Allow processing of AGP transactions */
|
||||
#define PCI_AGP_COMMAND_64BIT 0x0020 /* Allow processing of 64-bit addresses */
|
||||
#define PCI_AGP_COMMAND_FW 0x0010 /* Force FW transfers */
|
||||
#define PCI_AGP_COMMAND_64BIT 0x0020 /* Allow processing of 64-bit addresses */
|
||||
#define PCI_AGP_COMMAND_FW 0x0010 /* Force FW transfers */
|
||||
#define PCI_AGP_COMMAND_RATE4 0x0004 /* Use 4x rate */
|
||||
#define PCI_AGP_COMMAND_RATE2 0x0002 /* Use 2x rate */
|
||||
#define PCI_AGP_COMMAND_RATE1 0x0001 /* Use 1x rate */
|
||||
@ -321,7 +321,7 @@
|
||||
#define PCI_MSIX_PBA_OFFSET 0xfffffff8 /* Offset into specified BAR */
|
||||
#define PCI_CAP_MSIX_SIZEOF 12 /* size of MSIX registers */
|
||||
|
||||
/* MSI-X entry's format */
|
||||
/* MSI-X Table entry format */
|
||||
#define PCI_MSIX_ENTRY_SIZE 16
|
||||
#define PCI_MSIX_ENTRY_LOWER_ADDR 0
|
||||
#define PCI_MSIX_ENTRY_UPPER_ADDR 4
|
||||
@ -372,7 +372,7 @@
|
||||
#define PCI_X_CMD_SPLIT_16 0x0060 /* Max 16 */
|
||||
#define PCI_X_CMD_SPLIT_32 0x0070 /* Max 32 */
|
||||
#define PCI_X_CMD_MAX_SPLIT 0x0070 /* Max Outstanding Split Transactions */
|
||||
#define PCI_X_CMD_VERSION(x) (((x) >> 12) & 3) /* Version */
|
||||
#define PCI_X_CMD_VERSION(x) (((x) >> 12) & 3) /* Version */
|
||||
#define PCI_X_STATUS 4 /* PCI-X capabilities */
|
||||
#define PCI_X_STATUS_DEVFN 0x000000ff /* A copy of devfn */
|
||||
#define PCI_X_STATUS_BUS 0x0000ff00 /* A copy of bus nr */
|
||||
@ -407,8 +407,8 @@
|
||||
|
||||
/* PCI Bridge Subsystem ID registers */
|
||||
|
||||
#define PCI_SSVID_VENDOR_ID 4 /* PCI-Bridge subsystem vendor id register */
|
||||
#define PCI_SSVID_DEVICE_ID 6 /* PCI-Bridge subsystem device id register */
|
||||
#define PCI_SSVID_VENDOR_ID 4 /* PCI Bridge subsystem vendor ID */
|
||||
#define PCI_SSVID_DEVICE_ID 6 /* PCI Bridge subsystem device ID */
|
||||
|
||||
/* PCI Express capability registers */
|
||||
|
||||
@ -484,12 +484,12 @@
|
||||
#define PCI_EXP_LNKCTL_CLKREQ_EN 0x0100 /* Enable clkreq */
|
||||
#define PCI_EXP_LNKCTL_HAWD 0x0200 /* Hardware Autonomous Width Disable */
|
||||
#define PCI_EXP_LNKCTL_LBMIE 0x0400 /* Link Bandwidth Management Interrupt Enable */
|
||||
#define PCI_EXP_LNKCTL_LABIE 0x0800 /* Lnk Autonomous Bandwidth Interrupt Enable */
|
||||
#define PCI_EXP_LNKCTL_LABIE 0x0800 /* Link Autonomous Bandwidth Interrupt Enable */
|
||||
#define PCI_EXP_LNKSTA 18 /* Link Status */
|
||||
#define PCI_EXP_LNKSTA_CLS 0x000f /* Current Link Speed */
|
||||
#define PCI_EXP_LNKSTA_CLS_2_5GB 0x0001 /* Current Link Speed 2.5GT/s */
|
||||
#define PCI_EXP_LNKSTA_CLS_5_0GB 0x0002 /* Current Link Speed 5.0GT/s */
|
||||
#define PCI_EXP_LNKSTA_NLW 0x03f0 /* Nogotiated Link Width */
|
||||
#define PCI_EXP_LNKSTA_NLW 0x03f0 /* Negotiated Link Width */
|
||||
#define PCI_EXP_LNKSTA_NLW_SHIFT 4 /* start of NLW mask in link status */
|
||||
#define PCI_EXP_LNKSTA_LT 0x0800 /* Link Training */
|
||||
#define PCI_EXP_LNKSTA_SLC 0x1000 /* Slot Clock Configuration */
|
||||
@ -593,7 +593,7 @@
|
||||
#define PCI_EXT_CAP_ID_MFVC 0x08 /* Multi-Function VC Capability */
|
||||
#define PCI_EXT_CAP_ID_VC9 0x09 /* same as _VC */
|
||||
#define PCI_EXT_CAP_ID_RCRB 0x0A /* Root Complex RB? */
|
||||
#define PCI_EXT_CAP_ID_VNDR 0x0B /* Vendor Specific */
|
||||
#define PCI_EXT_CAP_ID_VNDR 0x0B /* Vendor-Specific */
|
||||
#define PCI_EXT_CAP_ID_CAC 0x0C /* Config Access - obsolete */
|
||||
#define PCI_EXT_CAP_ID_ACS 0x0D /* Access Control Services */
|
||||
#define PCI_EXT_CAP_ID_ARI 0x0E /* Alternate Routing ID */
|
||||
@ -602,12 +602,12 @@
|
||||
#define PCI_EXT_CAP_ID_MRIOV 0x11 /* Multi Root I/O Virtualization */
|
||||
#define PCI_EXT_CAP_ID_MCAST 0x12 /* Multicast */
|
||||
#define PCI_EXT_CAP_ID_PRI 0x13 /* Page Request Interface */
|
||||
#define PCI_EXT_CAP_ID_AMD_XXX 0x14 /* reserved for AMD */
|
||||
#define PCI_EXT_CAP_ID_REBAR 0x15 /* resizable BAR */
|
||||
#define PCI_EXT_CAP_ID_DPA 0x16 /* dynamic power alloc */
|
||||
#define PCI_EXT_CAP_ID_TPH 0x17 /* TPH request */
|
||||
#define PCI_EXT_CAP_ID_LTR 0x18 /* latency tolerance reporting */
|
||||
#define PCI_EXT_CAP_ID_SECPCI 0x19 /* Secondary PCIe */
|
||||
#define PCI_EXT_CAP_ID_AMD_XXX 0x14 /* Reserved for AMD */
|
||||
#define PCI_EXT_CAP_ID_REBAR 0x15 /* Resizable BAR */
|
||||
#define PCI_EXT_CAP_ID_DPA 0x16 /* Dynamic Power Allocation */
|
||||
#define PCI_EXT_CAP_ID_TPH 0x17 /* TPH Requester */
|
||||
#define PCI_EXT_CAP_ID_LTR 0x18 /* Latency Tolerance Reporting */
|
||||
#define PCI_EXT_CAP_ID_SECPCI 0x19 /* Secondary PCIe Capability */
|
||||
#define PCI_EXT_CAP_ID_PMUX 0x1A /* Protocol Multiplexing */
|
||||
#define PCI_EXT_CAP_ID_PASID 0x1B /* Process Address Space ID */
|
||||
#define PCI_EXT_CAP_ID_MAX PCI_EXT_CAP_ID_PASID
|
||||
@ -667,9 +667,9 @@
|
||||
#define PCI_ERR_ROOT_COR_RCV 0x00000001 /* ERR_COR Received */
|
||||
/* Multi ERR_COR Received */
|
||||
#define PCI_ERR_ROOT_MULTI_COR_RCV 0x00000002
|
||||
/* ERR_FATAL/NONFATAL Recevied */
|
||||
/* ERR_FATAL/NONFATAL Received */
|
||||
#define PCI_ERR_ROOT_UNCOR_RCV 0x00000004
|
||||
/* Multi ERR_FATAL/NONFATAL Recevied */
|
||||
/* Multi ERR_FATAL/NONFATAL Received */
|
||||
#define PCI_ERR_ROOT_MULTI_UNCOR_RCV 0x00000008
|
||||
#define PCI_ERR_ROOT_FIRST_FATAL 0x00000010 /* First Fatal */
|
||||
#define PCI_ERR_ROOT_NONFATAL_RCV 0x00000020 /* Non-Fatal Received */
|
||||
@ -678,7 +678,7 @@
|
||||
|
||||
/* Virtual Channel */
|
||||
#define PCI_VC_PORT_REG1 4
|
||||
#define PCI_VC_REG1_EVCC 0x7 /* extended vc count */
|
||||
#define PCI_VC_REG1_EVCC 0x7 /* extended VC count */
|
||||
#define PCI_VC_PORT_REG2 8
|
||||
#define PCI_VC_REG2_32_PHASE 0x2
|
||||
#define PCI_VC_REG2_64_PHASE 0x4
|
||||
@ -711,7 +711,7 @@
|
||||
#define PCI_VNDR_HEADER_LEN(x) (((x) >> 20) & 0xfff)
|
||||
|
||||
/*
|
||||
* Hypertransport sub capability types
|
||||
* HyperTransport sub capability types
|
||||
*
|
||||
* Unfortunately there are both 3 bit and 5 bit capability types defined
|
||||
* in the HT spec, catering for that is a little messy. You probably don't
|
||||
@ -739,8 +739,8 @@
|
||||
#define HT_CAPTYPE_DIRECT_ROUTE 0xB0 /* Direct routing configuration */
|
||||
#define HT_CAPTYPE_VCSET 0xB8 /* Virtual Channel configuration */
|
||||
#define HT_CAPTYPE_ERROR_RETRY 0xC0 /* Retry on error configuration */
|
||||
#define HT_CAPTYPE_GEN3 0xD0 /* Generation 3 hypertransport configuration */
|
||||
#define HT_CAPTYPE_PM 0xE0 /* Hypertransport powermanagement configuration */
|
||||
#define HT_CAPTYPE_GEN3 0xD0 /* Generation 3 HyperTransport configuration */
|
||||
#define HT_CAPTYPE_PM 0xE0 /* HyperTransport power management configuration */
|
||||
#define HT_CAP_SIZEOF_LONG 28 /* slave & primary */
|
||||
#define HT_CAP_SIZEOF_SHORT 24 /* host & secondary */
|
||||
|
||||
@ -777,14 +777,14 @@
|
||||
#define PCI_PRI_ALLOC_REQ 0x0c /* PRI max reqs allowed */
|
||||
#define PCI_EXT_CAP_PRI_SIZEOF 16
|
||||
|
||||
/* PASID capability */
|
||||
/* Process Address Space ID */
|
||||
#define PCI_PASID_CAP 0x04 /* PASID feature register */
|
||||
#define PCI_PASID_CAP_EXEC 0x02 /* Exec permissions Supported */
|
||||
#define PCI_PASID_CAP_PRIV 0x04 /* Priviledge Mode Supported */
|
||||
#define PCI_PASID_CAP_PRIV 0x04 /* Privilege Mode Supported */
|
||||
#define PCI_PASID_CTRL 0x06 /* PASID control register */
|
||||
#define PCI_PASID_CTRL_ENABLE 0x01 /* Enable bit */
|
||||
#define PCI_PASID_CTRL_EXEC 0x02 /* Exec permissions Enable */
|
||||
#define PCI_PASID_CTRL_PRIV 0x04 /* Priviledge Mode Enable */
|
||||
#define PCI_PASID_CTRL_PRIV 0x04 /* Privilege Mode Enable */
|
||||
#define PCI_EXT_CAP_PASID_SIZEOF 8
|
||||
|
||||
/* Single Root I/O Virtualization */
|
||||
@ -839,22 +839,22 @@
|
||||
#define PCI_ACS_CTRL 0x06 /* ACS Control Register */
|
||||
#define PCI_ACS_EGRESS_CTL_V 0x08 /* ACS Egress Control Vector */
|
||||
|
||||
#define PCI_VSEC_HDR 4 /* extended cap - vendor specific */
|
||||
#define PCI_VSEC_HDR 4 /* extended cap - vendor-specific */
|
||||
#define PCI_VSEC_HDR_LEN_SHIFT 20 /* shift for length field */
|
||||
|
||||
/* sata capability */
|
||||
/* SATA capability */
|
||||
#define PCI_SATA_REGS 4 /* SATA REGs specifier */
|
||||
#define PCI_SATA_REGS_MASK 0xF /* location - BAR#/inline */
|
||||
#define PCI_SATA_REGS_INLINE 0xF /* REGS in config space */
|
||||
#define PCI_SATA_SIZEOF_SHORT 8
|
||||
#define PCI_SATA_SIZEOF_LONG 16
|
||||
|
||||
/* resizable BARs */
|
||||
/* Resizable BARs */
|
||||
#define PCI_REBAR_CTRL 8 /* control register */
|
||||
#define PCI_REBAR_CTRL_NBAR_MASK (7 << 5) /* mask for # bars */
|
||||
#define PCI_REBAR_CTRL_NBAR_SHIFT 5 /* shift for # bars */
|
||||
|
||||
/* dynamic power allocation */
|
||||
/* Dynamic Power Allocation */
|
||||
#define PCI_DPA_CAP 4 /* capability register */
|
||||
#define PCI_DPA_CAP_SUBSTATE_MASK 0x1F /* # substates - 1 */
|
||||
#define PCI_DPA_BASE_SIZEOF 16 /* size with 0 substates */
|
||||
|
Loading…
Reference in New Issue
Block a user