[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: beyond PCI-PCI bridge (Re: Compiling mesh.c)



> いまは PCI-PCI bridge を意識したコードを書いていない
> ので config だけじゃ見えないはずです。
> どうやればいいのかはわかっているのでちょっと書いてみ
> ましょうか。

こんな感じかな。
# ソースだけだと楽だ。:-)

*** pci_machdep.c	Wed Oct 21 17:54:49 1998
--- pci_machdep.c	Wed Dec 23 09:56:09 1998
***************
*** 168,179 ****
  
  		r = &pci_bridges[pc];
  
! 		out32rb(r->addr, (1 << dev) | (func << 8) | reg);
! 		DELAY(10);
! 		data = in32rb(r->data);
! 		DELAY(10);
! 		out32rb(r->addr, 0);
! 		DELAY(10);
  	}
  
  	return data;
--- 168,189 ----
  
  		r = &pci_bridges[pc];
  
! 		if (bus == r->bus) {
! 			out32rb(r->addr, (1 << dev) | (func << 8) | reg);
! 			DELAY(10);
! 			data = in32rb(r->data);
! 			DELAY(10);
! 			out32rb(r->addr, 0);
! 			DELAY(10);
! 		} else {
! 			tag = (tag & 0xff00) | 1;
! 			out32rb(r->addr, tag | reg);
! 			DELAY(10);
! 			data = in32rb(r->data);
! 			DELAY(10);
! 			out32rb(r->addr, 0);
! 			DELAY(10);
! 		}
  	}
  
  	return data;
***************
*** 204,215 ****
  
  		r = &pci_bridges[pc];
  
! 		out32rb(r->addr, (1 << dev) | (func << 8) | reg);
! 		DELAY(10);
! 		out32rb(r->data, data);
! 		DELAY(10);
! 		out32rb(r->addr, 0);
! 		DELAY(10);
  	}
  }
  
--- 214,235 ----
  
  		r = &pci_bridges[pc];
  
! 		if (bus == r->bus) {
! 			out32rb(r->addr, (1 << dev) | (func << 8) | reg);
! 			DELAY(10);
! 			out32rb(r->data, data);
! 			DELAY(10);
! 			out32rb(r->addr, 0);
! 			DELAY(10);
! 		} else {
! 			tag = (tag & 0xff00) | 1;
! 			out32rb(r->addr, tag | reg);
! 			DELAY(10);
! 			out32rb(r->data, data);
! 			DELAY(10);
! 			out32rb(r->addr, 0);
! 			DELAY(10);
! 		}
  	}
  }