Changeset 831a437 in libbsdport


Ignore:
Timestamp:
Apr 23, 2009, 4:36:41 AM (10 years ago)
Author:
Till Straumann <strauman@…>
Branches:
master
Children:
e80f576
Parents:
82a7c84
Message:
  • make entries in default driver table all weak aliases to a sentinel. If the user decides only to link a subset of driver the probe algorithm skips entries matching the sentinel.
  • added more diagnostic messages which can be enabled by setting 'libbsdportAttachVerbose' to nonzero. This is quite helpful.
  • added the ugliest of all hack -- i386 pcibios API returns wrong number for bus count :-( [the max bus number instead of the count]. We simply add 1 to this number...
File:
1 edited

Legend:

Unmodified
Added
Removed
  • bsd_eth_drivers/libbsdport/devicet.c

    r82a7c84 r831a437  
    1313#include "libbsdport_api.h"
    1414
     15<<<<<<< devicet.c
     16#define  DEBUG 0
     17int libbsdportAttachVerbose = DEBUG;
     18=======
    1519#undef  DEBUG
     20>>>>>>> 1.1.1.2
    1621
    1722extern void real_libc_free(void*);
     
    6671int error;
    6772
    68 #ifdef DEBUG
    69         printf("Now attaching %s%d: (0x%x:%x.%x)\n",
    70                 dev->name, unit,
    71                 dev->bushdr.pci.bus, dev->bushdr.pci.dev, dev->bushdr.pci.fun);
    72 #endif
     73        if ( libbsdportAttachVerbose ) {
     74                printf("Now attaching %s%d: (0x%x:%x.%x)\n",
     75                        dev->name, unit,
     76                        dev->bushdr.pci.bus, dev->bushdr.pci.dev, dev->bushdr.pci.fun);
     77        }
    7378
    7479        dev->unit     = unit;
     
    248253int      bdfunit;
    249254
     255int      n_bus;
     256
    250257                if ( !attaching )
    251258                        return ENOTSUP;
     
    257264                        nm[0]=0;
    258265                }
    259 #ifdef DEBUG
    260                 printf("Wanted unit is 0x%x, pattern '%s'\n", wantedunit, nm);
     266                if ( libbsdportAttachVerbose )
     267                        printf("Wanted unit is 0x%x, pattern '%s'\n", wantedunit, nm);
     268
     269                n_bus = pci_bus_count();
     270#ifdef __i386__
     271                /* ugliest of all hacks -- RTEMS routine is currently (4.9)
     272         * still broken; it reports the (0-based) highest bus number
     273         * instead of the count.
     274         */
     275                n_bus++;
    261276#endif
    262277
    263278                unit = 0;
    264279                for ( i=0; (dr=libbsdport_netdriver_table[i]); i++ ) {
     280
     281                        /* unused slot ? */
     282                        if ( 0 == dr->name && 0 == dr->methods )
     283                                continue;
     284
    265285                        /* Find matching driver */
    266 #ifdef DEBUG
    267                         printf("Trying driver '%s' ...", dr->name);
    268 #endif
     286                        if ( libbsdportAttachVerbose )
     287                                printf("Trying driver '%s' ...", dr->name);
     288
    269289                        if ( matches(dr, nm) ) {
    270 #ifdef DEBUG
    271                         printf("MATCH\n");
    272 #endif
     290
     291                                if ( libbsdportAttachVerbose )
     292                                        printf("MATCH\n");
    273293
    274294                                assert( dr->methods );
     
    282302
    283303                                dev = devalloc(dr);
    284                                 for ( b=0; b<pci_bus_count(); b++)
     304                                for ( b=0; b<n_bus; b++ )
    285305                                        for ( d=0; d<PCI_MAX_DEVICES; d++ ) {
    286306                                                for ( f=0; f<pci_num_functions(b,d); f++ ) {
     
    294314                                                        bdfunit = (b<<8) | PCI_DEVFN(d,f);
    295315
    296 #ifdef DEBUG
    297                                                         printf("Probing PCI 0x%x:%x.%x\n",
    298                                                                 bdfunit>>8, PCI_SLOT(bdfunit), PCI_FUNC(bdfunit));
    299 #endif
     316                                                        if ( libbsdportAttachVerbose ) {
     317                                                                printf("Probing PCI 0x%x:%x.%x\n",
     318                                                                                bdfunit>>8, PCI_SLOT(bdfunit), PCI_FUNC(bdfunit));
     319                                                        }
    300320
    301321                                                        /* has this device been attached already ? */
     
    320340                                                                                 * unit is acceptable.
    321341                                                                                 */
    322 #ifdef DEBUG
    323                                                                                 printf("->SUCCESS\n");
    324 #endif
     342                                                                                if ( libbsdportAttachVerbose )
     343                                                                                        printf("->SUCCESS\n");
     344
    325345                                                                                if ( 0 == wantedunit || UNITMATCH(wantedunit, unit, bdfunit) ) {
    326346                                                                                                error = devattach(dev, thisunit, cfg);
     
    332352
    333353                                                                        default:
    334 #ifdef DEBUG
    335                                                                                 printf("->FAILED\n");
    336 #endif
     354                                                                                if ( libbsdportAttachVerbose )
     355                                                                                        printf("->FAILED\n");
    337356                                                                                /* probe failed */
    338357                                                                                break;
     
    344363                                devfree(dev); dev = 0;
    345364                        } /* matching driver */
    346 #ifdef DEBUG
    347                         else printf("NO MATCH\n");
    348 #endif
     365                        else
     366                        {
     367                                if ( libbsdportAttachVerbose )
     368                                        printf("NO MATCH\n");
     369                        }
    349370                } /* for all drivers */
    350371
Note: See TracChangeset for help on using the changeset viewer.