Yet another fix for configuration mechanism 1 register accesses:
Adjust the data port address by adding the two low order bits of the register number. The address port takes only a word address (i.e. ignores the two low order bits written to it).
This commit is contained in:
parent
d3b40e61a7
commit
b80cb4d64d
@ -23,7 +23,7 @@
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: pcibus.c,v 1.37 1997/05/26 21:11:05 se Exp $
|
||||
* $Id: pcibus.c,v 1.38 1997/05/26 21:25:24 se Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -59,9 +59,10 @@ pci_cfgenable(unsigned bus, unsigned slot, unsigned func, int reg, int bytes)
|
||||
&& (reg & (bytes -1)) == 0) {
|
||||
switch (cfgmech) {
|
||||
case 1:
|
||||
outl(CONF1_ADDR_PORT, (1 << 31) |
|
||||
(bus << 16) | (slot << 11) | (func << 8) | reg);
|
||||
dataport = CONF1_DATA_PORT;
|
||||
outl(CONF1_ADDR_PORT, (1 << 31)
|
||||
| (bus << 16) | (slot << 11)
|
||||
| (func << 8) | (reg & ~0x03));
|
||||
dataport = CONF1_DATA_PORT + (reg & 0x03);
|
||||
break;
|
||||
case 2:
|
||||
outb(CONF2_ENABLE_PORT, 0xf0 | (func << 1));
|
||||
|
@ -23,7 +23,7 @@
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: pcibus.c,v 1.37 1997/05/26 21:11:05 se Exp $
|
||||
* $Id: pcibus.c,v 1.38 1997/05/26 21:25:24 se Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -59,9 +59,10 @@ pci_cfgenable(unsigned bus, unsigned slot, unsigned func, int reg, int bytes)
|
||||
&& (reg & (bytes -1)) == 0) {
|
||||
switch (cfgmech) {
|
||||
case 1:
|
||||
outl(CONF1_ADDR_PORT, (1 << 31) |
|
||||
(bus << 16) | (slot << 11) | (func << 8) | reg);
|
||||
dataport = CONF1_DATA_PORT;
|
||||
outl(CONF1_ADDR_PORT, (1 << 31)
|
||||
| (bus << 16) | (slot << 11)
|
||||
| (func << 8) | (reg & ~0x03));
|
||||
dataport = CONF1_DATA_PORT + (reg & 0x03);
|
||||
break;
|
||||
case 2:
|
||||
outb(CONF2_ENABLE_PORT, 0xf0 | (func << 1));
|
||||
|
@ -23,7 +23,7 @@
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: pcibus.c,v 1.37 1997/05/26 21:11:05 se Exp $
|
||||
* $Id: pcibus.c,v 1.38 1997/05/26 21:25:24 se Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -59,9 +59,10 @@ pci_cfgenable(unsigned bus, unsigned slot, unsigned func, int reg, int bytes)
|
||||
&& (reg & (bytes -1)) == 0) {
|
||||
switch (cfgmech) {
|
||||
case 1:
|
||||
outl(CONF1_ADDR_PORT, (1 << 31) |
|
||||
(bus << 16) | (slot << 11) | (func << 8) | reg);
|
||||
dataport = CONF1_DATA_PORT;
|
||||
outl(CONF1_ADDR_PORT, (1 << 31)
|
||||
| (bus << 16) | (slot << 11)
|
||||
| (func << 8) | (reg & ~0x03));
|
||||
dataport = CONF1_DATA_PORT + (reg & 0x03);
|
||||
break;
|
||||
case 2:
|
||||
outb(CONF2_ENABLE_PORT, 0xf0 | (func << 1));
|
||||
|
@ -23,7 +23,7 @@
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: pcibus.c,v 1.37 1997/05/26 21:11:05 se Exp $
|
||||
* $Id: pcibus.c,v 1.38 1997/05/26 21:25:24 se Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -59,9 +59,10 @@ pci_cfgenable(unsigned bus, unsigned slot, unsigned func, int reg, int bytes)
|
||||
&& (reg & (bytes -1)) == 0) {
|
||||
switch (cfgmech) {
|
||||
case 1:
|
||||
outl(CONF1_ADDR_PORT, (1 << 31) |
|
||||
(bus << 16) | (slot << 11) | (func << 8) | reg);
|
||||
dataport = CONF1_DATA_PORT;
|
||||
outl(CONF1_ADDR_PORT, (1 << 31)
|
||||
| (bus << 16) | (slot << 11)
|
||||
| (func << 8) | (reg & ~0x03));
|
||||
dataport = CONF1_DATA_PORT + (reg & 0x03);
|
||||
break;
|
||||
case 2:
|
||||
outb(CONF2_ENABLE_PORT, 0xf0 | (func << 1));
|
||||
|
@ -23,7 +23,7 @@
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: pcibus.c,v 1.37 1997/05/26 21:11:05 se Exp $
|
||||
* $Id: pcibus.c,v 1.38 1997/05/26 21:25:24 se Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -59,9 +59,10 @@ pci_cfgenable(unsigned bus, unsigned slot, unsigned func, int reg, int bytes)
|
||||
&& (reg & (bytes -1)) == 0) {
|
||||
switch (cfgmech) {
|
||||
case 1:
|
||||
outl(CONF1_ADDR_PORT, (1 << 31) |
|
||||
(bus << 16) | (slot << 11) | (func << 8) | reg);
|
||||
dataport = CONF1_DATA_PORT;
|
||||
outl(CONF1_ADDR_PORT, (1 << 31)
|
||||
| (bus << 16) | (slot << 11)
|
||||
| (func << 8) | (reg & ~0x03));
|
||||
dataport = CONF1_DATA_PORT + (reg & 0x03);
|
||||
break;
|
||||
case 2:
|
||||
outb(CONF2_ENABLE_PORT, 0xf0 | (func << 1));
|
||||
|
@ -23,7 +23,7 @@
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: pcibus.c,v 1.37 1997/05/26 21:11:05 se Exp $
|
||||
* $Id: pcibus.c,v 1.38 1997/05/26 21:25:24 se Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -59,9 +59,10 @@ pci_cfgenable(unsigned bus, unsigned slot, unsigned func, int reg, int bytes)
|
||||
&& (reg & (bytes -1)) == 0) {
|
||||
switch (cfgmech) {
|
||||
case 1:
|
||||
outl(CONF1_ADDR_PORT, (1 << 31) |
|
||||
(bus << 16) | (slot << 11) | (func << 8) | reg);
|
||||
dataport = CONF1_DATA_PORT;
|
||||
outl(CONF1_ADDR_PORT, (1 << 31)
|
||||
| (bus << 16) | (slot << 11)
|
||||
| (func << 8) | (reg & ~0x03));
|
||||
dataport = CONF1_DATA_PORT + (reg & 0x03);
|
||||
break;
|
||||
case 2:
|
||||
outb(CONF2_ENABLE_PORT, 0xf0 | (func << 1));
|
||||
|
Loading…
Reference in New Issue
Block a user