Mercurial > illumos > illumos-gate
view usr/src/uts/sun4/io/px/px_pci.h @ 3956:ea75466401e7
6535564 Preallocation cannot work to map resources for devices in IKP DR
6539615 fix iommu extension related issues enabled through VPCI 1.1 versioning
author | govinda |
---|---|
date | Mon, 02 Apr 2007 19:52:20 -0700 |
parents | e65afa5b6fae |
children | d7ae6036b9a7 |
line wrap: on
line source
/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #ifndef _SYS_PX_PCI_H #define _SYS_PX_PCI_H #pragma ident "%Z%%M% %I% %E% SMI" #ifdef __cplusplus extern "C" { #endif /* * Intel specific register offsets with bit definitions. */ #define PXB_PX_CAPABILITY_ID 0x44 #define PXB_BRIDGE_CONF 0x40 /* * PCI/PCI-E Configuration register specific values. */ #define PX_PMODE 0x4000 /* PCI/PCIX Mode */ #define PX_PFREQ_66 0x200 /* PCI clock frequency */ #define PX_PFREQ_100 0x400 #define PX_PFREQ_133 0x600 #define PX_PMRE 0x80 /* Peer memory read enable */ /* * Downstream delayed transaction resource partitioning. */ #define PX_ODTP 0x40 /* Max. of two entries PX and PCI */ /* * Maximum upstream delayed transaction. */ #define PX_MDT_44 0x00 #define PX_MDT_11 0x01 #define PX_MDT_22 0x10 #define NUM_LOGICAL_SLOTS 32 #define PXB_RANGE_LEN 2 #define PXB_32BIT_IO 1 #define PXB_32bit_MEM 1 #define PXB_MEMGRAIN 0x100000 #define PXB_IOGRAIN 0x1000 #define PXB_16bit_IOADDR(addr) ((uint16_t)(((uint8_t)(addr) & 0xF0) << 8)) #define PXB_LADDR(lo, hi) (((uint16_t)(hi) << 16) | (uint16_t)(lo)) #define PXB_32bit_MEMADDR(addr) (PXB_LADDR(0, ((uint16_t)(addr) & 0xFFF0))) typedef struct slot_table { uchar_t bus_id[128]; uchar_t slot_name[32]; uint8_t device_no; uint8_t phys_slot_num; } slot_table_t; /* * The following typedef is used to represent an entry in the "ranges" * property of a device node. */ typedef struct { uint32_t child_high; uint32_t child_mid; uint32_t child_low; uint32_t parent_high; uint32_t parent_mid; uint32_t parent_low; uint32_t size_high; uint32_t size_low; } pxb_ranges_t; typedef enum { HPC_NONE, HPC_PCIE, HPC_SHPC, HPC_OUTBAND } pxb_hpc_type_t; typedef struct { dev_info_t *pxb_dip; ddi_acc_handle_t pxb_config_handle; /* Bridge or Switch, upstream or downstream */ int pxb_port_type; /* Interrupt */ ddi_intr_handle_t *pxb_htable; /* Intr Handlers */ int pxb_htable_size; /* htable size */ int pxb_intr_count; /* Num of Intr */ uint_t pxb_intr_priority; /* Intr Priority */ int pxb_intr_type; /* (MSI | FIXED) */ /* * HP support */ boolean_t pxb_hotplug_capable; pxb_hpc_type_t pxb_hpc_type; kmutex_t pxb_mutex; uint_t pxb_soft_state; /* Initialization flags */ int pxb_init_flags; /* FMA */ int pxb_fm_cap; ddi_iblock_cookie_t pxb_fm_ibc; /* Vendor Device Id */ uint16_t pxb_vendor_id; uint16_t pxb_device_id; uint8_t pxb_rev_id; } pxb_devstate_t; /* * soft state pointer and structure template: */ extern void *pxb_state; /* pxb soft states */ #define PXB_SOFT_STATE_CLOSED 0x00 #define PXB_SOFT_STATE_OPEN 0x01 #define PXB_SOFT_STATE_OPEN_EXCL 0x02 /* pxb init flags */ #define PXB_INIT_MUTEX 0x01 #define PXB_INIT_CONFIG_HANDLE 0x02 #define PXB_INIT_HTABLE 0x04 #define PXB_INIT_ALLOC 0x08 #define PXB_INIT_HANDLER 0x10 #define PXB_INIT_ENABLE 0x20 #define PXB_INIT_BLOCK 0x40 #define PXB_INIT_FM 0x80 /* PLX Vendor/Device IDs for PLX HW workaround */ #define PXB_VENDOR_PLX 0x10B5 #define PXB_DEVICE_PLX_8532 0x8532 #define PXB_DEVICE_PLX_8516 0x8516 /* Last known bad rev for MSI and other issues */ #define PXB_DEVICE_PLX_AA_REV 0xAA #define PXB_VENDOR_SUN 0x108E #define PXB_DEVICE_PLX_PCIX 0x9010 #define PXB_DEVICE_PLX_PCIE 0x9020 #define PXB_HOTPLUG_INTR_PRI (LOCK_LEVEL - 1) /* functionality checks */ #define PXB_MSI 1 #define PXB_LINK_INIT 2 #define PXB_HOTPLUG_MSGS 3 #ifdef BCM_SW_WORKAROUNDS /* Workaround for address space limitation in Broadcom 5714/5715 */ #define PXB_ADDR_LIMIT_LO 0ull #define PXB_ADDR_LIMIT_HI ((1ull << 40) - 1) #endif /* BCM_SW_WORKAROUNDS */ /* * The following values are used to initialize the cache line size * and latency timer registers for PCI, PCI-X and PCIe2PCI devices. */ #define PXB_CACHE_LINE_SIZE 0x10 /* 64 bytes in # of DWORDs */ #define PXB_LATENCY_TIMER 0x40 /* 64 PCI cycles */ #ifdef __cplusplus } #endif #endif /* _SYS_PX_PCI_H */