|
Namazu for hns による簡易全文検索 詳しくは 詳細指定/ヘルプを参照して下さい |
|||||||||||||||||||||||||||||||||||||||||||||||||||
2005年10月03日(月) 旧暦 [n年日記] [更新:"2005/10/13 19:15:48"]#1 [NetBSD][if_tl.c] tl0: unable to map device registers
と言われることがあって、多分
src/sys/dev/pci/if_tl.c の中の
pa->pa_flags が 0 なのが問題だというところまでは追いかけました。
で、それは何故かと調べていて、
src/sys/dev/pci/pci.c の中の、次の部分ですが、
289 /*
290 * Set up memory, I/O enable, and PCI command flags
291 * as appropriate.
292 */
293 pa.pa_flags = sc->sc_flags;
294 printf(" ** (pci.c 294) sc->sc_flags(%x) csr(%x)\n", sc->sc_flags, csr);
295 if ((csr & PCI_COMMAND_IO_ENABLE) == 0)
296 pa.pa_flags &= ~PCI_FLAGS_IO_ENABLED;
297 if ((csr & PCI_COMMAND_MEM_ENABLE) == 0)
298 pa.pa_flags &= ~PCI_FLAGS_MEM_ENABLED;
299 printf(" ** (pci.c 299) pa.pa_flags(%x)\n", pa.pa_flags);
青い行は追加したもので、そのため行番号は原文よりも、数行ずれています。
pci1: i/o space, memory space enabled ** (pci.c 294) sc->sc_flags(3) csr(2800000) ** (pci.c 299) pa.pa_flags(0) ** (pci.c 307) pa.pa_flags(0) *** PCI_VENDOR(e11) , tv_vendor(e11)このように 294 行目では 3 なのに、299 行目では 0 になっています。 それは csr の下位 2 bit が 0 であるためです。 pcireg.h:#define PCI_COMMAND_IO_ENABLE 0x00000001 pcireg.h:#define PCI_COMMAND_MEM_ENABLE 0x00000002csr って ? 267 csr = pci_conf_read(pc, tag, PCI_COMMAND_STATUS_REG);これか。きょうはここまで。 (以下翌朝追記) src/sys/dev/pci/pci.c: 267 csr = pci_conf_read(pc, tag, PCI_COMMAND_STATUS_REG);ということなので、これはどこを呼んいるか探す: src/sys/arch/macppc/pci/pci_machdep.c
162 pcireg_t
163 pci_conf_read(pc, tag, reg)
164 pci_chipset_tag_t pc;
165 pcitag_t tag;
166 int reg;
167 {
168
169 return (*pc->conf_read)(pc, tag, reg);
例えば bandit なら、src/sys/arch/macppc/pci/bandit.c で、
72 bandit_attach(parent, self, aux)
...
102 pc->conf_read = bandit_conf_read;
しかし、src/sys/dev/pci/ppb.c の
69 ppbattach(struct device *parent, struct device *self, void *aux)には、そういう部分がない .. ( つっこみ )
|
最近の日記 2025年12月11日 ・oreore 2025/12 2025年11月22日 ・crash dump 2025年10月25日 ・recover from disk error 2025年10月23日 ・dd does not duplicate Windows 11 boot disk ? 2025年10月13日 ・missing package | ||