Netboot Mailing List (by thread)

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

Patches to etherboot 3.2 to fix PCI ioaddr problem



All,

Included below are patches to get the eepro100 working with etherboot 3.2.
There were two problems. The first was the use of PCI_BASE_ADDRESS_0
instead of PCI_BASE_ADDRESS_1 to get the pci_ioaddr. The second was the
pasing of a zero value to eth_probe as the ioaddr (the intention was that
this would be the override value).  Unfortunately, the eepro100 driver
expects a pointer.  Upon seeing NULL it returns with a failure right
away. I replaced it with the ioaddr found by the pci scan.  This won't
support multiple cards as is Ken's intention eventually, but it works for
one.

		bill


Index: thesis/etherboot/src/config.c
===================================================================
RCS file: /usr/local/cvsroot/thesis/etherboot/src/config.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -c -r1.1 -r1.2
*** config.c	1997/10/27 18:14:45	1.1
--- config.c	1997/10/30 01:17:12	1.2
***************
*** 171,181 ****
  	eth_pci_init(pci_nic_list, pci_addrs);
  	pci_addrs[1] = 0;
  #endif
! 	printf("Probing...");
  	for (t = NIC; t->nic_name != 0; ++t)
  	{
  		printf("[%s]", t->nic_name);
! 		if ((*t->eth_probe)(&nic, t->probe_addrs))
  			return (1);
  	}
  	return (0);
--- 171,182 ----
  	eth_pci_init(pci_nic_list, pci_addrs);
  	pci_addrs[1] = 0;
  #endif
! 	printf("Probing at 0x%x...", t->probe_addrs);
  	for (t = NIC; t->nic_name != 0; ++t)
  	{
  		printf("[%s]", t->nic_name);
! 		/*		if ((*t->eth_probe)(&nic, t->probe_addrs))
*/
! 		if ((*t->eth_probe)(&nic, pci_addrs))
  			return (1);
  	}
  	return (0);
Index: thesis/etherboot/src/pci.c
===================================================================
RCS file: /usr/local/cvsroot/thesis/etherboot/src/pci.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -c -r1.1 -r1.2
*** pci.c	1997/10/27 18:14:46	1.1
--- pci.c	1997/10/30 01:17:12	1.2
***************
*** 237,243 ****
  			if (vendor == pcidev[i].vendor
  				&& device == pcidev[i].dev_id) {
  				pcibios_read_config_dword(0, devfn,
! 					PCI_BASE_ADDRESS_0, &pci_ioaddr);
  				/* Strip the I/O address out of the
  				 * returned value */
  				pci_ioaddr &= PCI_BASE_ADDRESS_IO_MASK;
--- 237,243 ----
  			if (vendor == pcidev[i].vendor
  				&& device == pcidev[i].dev_id) {
  				pcibios_read_config_dword(0, devfn,
! 					PCI_BASE_ADDRESS_1, &pci_ioaddr);
  				/* Strip the I/O address out of the
  				 * returned value */
  				pci_ioaddr &= PCI_BASE_ADDRESS_IO_MASK;
Index: thesis/etherboot/src/pci.h
===================================================================
RCS file: /usr/local/cvsroot/thesis/etherboot/src/pci.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -c -r1.1 -r1.2
*** pci.h	1997/10/27 18:14:46	1.1
--- pci.h	1997/10/30 01:17:13	1.2
***************
*** 30,35 ****
--- 30,36 ----
  #define PCI_HEADER_TYPE         0x0e    /* 8 bits */
  
  #define PCI_BASE_ADDRESS_0      0x10    /* 32 bits */
+ #define PCI_BASE_ADDRESS_1      0x14    /* 32 bits */
  
  #define  PCI_BASE_ADDRESS_IO_MASK       (~0x03)
  






For requests or suggestions regarding this mailing list archive please write to netboot@gkminix.han.de.