1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

where is "struct resource_list" defined ?

Discussion in 'FreeBSD Development' started by liuwang, Nov 14, 2011.

  1. liuwang

    liuwang New Member

    Messages:
    31
    Likes Received:
    0
    Where is struct resource_list defined? Could not be found in /usr/src.
     
  2. plamaiziere

    plamaiziere New Member

    Messages:
    184
    Likes Received:
    0
  3. liuwang

    liuwang New Member

    Messages:
    31
    Likes Received:
    0
    plamaiziere,

    Thanks.
    <sys/queue.h> and <sys/bus.h> are included and won't resovle the compiling errors.

    Sincerely,
    Liu
     
  4. SirDice

    SirDice Moderator Staff Member Moderator

    Messages:
    17,418
    Likes Received:
    14
    Perhaps if you showed us the code and the exact error we may be able to help.
     
  5. liuwang

    liuwang New Member

    Messages:
    31
    Likes Received:
    0
    SirDice,

    Thanks the help here.

    The project is to port our PCIe controller card to FreeBSD from Linux. When porting Linux function pci_request_regions() to FreeBSD we met the compiling error
    Code:
    error: dereferencing pointer to incomplete type
    at the c sentences of rl = &dinfo->resources; in the following code segment.

    make depend has been launched in kernel level and doesn't help.

    Local type casting has been tried and doesn't help either.

    Looks we go astray the PCIe porting methodology in FreeBSD.

    Sincerely,
    Liu

    Code:
    /*----------------------------
     *
     * AOC_main.c
     *
     * x8 PCIe controller driver 
     ---------------------------*/
     
    #include <sys/param.h>
    #include <sys/module.h>
    #include <sys/kernel.h>
    #include <sys/systm.h>
    #include <sys/errno.h>
    #include <sys/conf.h>
    #include <sys/uio.h>
    #include <sys/malloc.h>
    #include <sys/bus.h>
    #include <sys/types.h>
    #include <machine/bus.h>
    #include <sys/rman.h>
    #include <machine/resource.h>
    
    #include <dev/pci/pcivar.h>
    #include <dev/pci/pcireg.h>
    #include <sys/queue.h>
    #include <sys/bus.h>
    #include <sys/pciio.h>
    #include <dev/pci/pci_private.h>
    #include <asm/atomic.h>
    #include <bus_if.h>
    #include <AOC.h>
    #define VENDOR_ID  0x1b4b
    #define MAX_REQUEST_NUMBER_PERFORMANCE	4096
    
    
    struct AOC_softc
    {
      device_t AOC_dev;
      struct cdev *AOC_cdev;
    };
    
    static int AOC_pci_request_regions( struct device *dev, const char *res_name )
    {
      int i,j;
      int rid;
      int bar;
      struct resource_list_entry *rle;
      struct pci_devinfo *dinfo;
      struct resource_list *rl=NULL;
    
      for ( i = 0; i <= PCIR_MAX_BAR_0; i++ ) 
      {
        bar = PCIR_BAR( i );
        dinfo = dev->ivars;
        rl = &dinfo->resources;
        rle = resource_list_find( rl, SYS_RES_MEMORY, i );
        if( rle == NULL )
        {
          dinfo = device_get_ivars(dev);
          rl = &dinfo->resources;
          rle = resource_list_find( rl, SYS_RES_IOPORT, i );
        };
        if( rle == NULL )
        return (-ENODEV);
        rid = PCIR_BAR( i );
        if (bus_alloc_resource_any(dev, rle->type, &rid, RF_ACTIVE) == NULL)
        {
          for (j = 0; j <= PCIR_MAX_BAR_0; j++)
          {
            {
              bar = PCIR_BAR( bar );
              {
                dinfo = device_get_ivars( dev );
                rl = &dinfo->resources;
                rle = resource_list_find( rl, SYS_RES_MEMORY, j );
              };
              if ( rle == NULL )
              {
                  dinfo = device_get_ivars( dev );
                  rl = &dinfo->resources;
                  rle = resource_list_find( rl, SYS_RES_IOPORT, i );
              };
            };
    	if (rle == NULL)
    	bus_release_resource(dev, rle->type, rle->rid, rle->res);
          };
          return (-EINVAL);
        };
      }
      return (0);
    };
    
    static int AOC_probe( device_t dev )
    {
      device_printf( dev, "AOC Probe\nVendor ID : 0x%x\nDevice ID : 0x%x\n", pci_get_vendor( dev ), pci_get_device( dev ) );
      if ( pci_get_vendor( dev ) == VENDOR_ID )
      {
        printf( "AOC probe successful !\n" );
        device_set_desc( dev, "AOC");
    
        pci_enable_io( dev, SYS_RES_IOPORT );
        pci_enable_io( dev, SYS_RES_MEMORY );
    
        AOC_pci_request_regions(dev, "AOC");
        ...
        ...
    };
     
  6. wblock@

    wblock@ Administrator Staff Member Administrator Moderator Developer

    Messages:
    11,252
    Likes Received:
    25
    Please put code inside
    Code:
     blocks so the formatting is preserved.
    
    It's probably better to ask these questions on the mailing lists.  [url=http://lists.freebsd.org/mailman/listinfo/freebsd-drivers]freebsd-drivers[/url] might be the place to start.
     
  7. liuwang

    liuwang New Member

    Messages:
    31
    Likes Received:
    0
    Re-format: Where is " resource_list " defined ?

    Wblock,

    Thanks.
    Will do.

    Sincerely,
    Liu


    Code:
    *----------------------------
    *
    * AOC_main.c
    *
    * x8 PCIe controller driver 
    ---------------------------*/
    
    #include <sys/param.h>
    #include <sys/module.h>
    #include <sys/kernel.h>
    #include <sys/systm.h>
    #include <sys/errno.h>
    #include <sys/conf.h>
    #include <sys/uio.h>
    #include <sys/malloc.h>
    #include <sys/bus.h>
    #include <sys/types.h>
    #include <machine/bus.h>
    #include <sys/rman.h>
    #include <machine/resource.h>
    
    #include <dev/pci/pcivar.h>
    #include <dev/pci/pcireg.h>
    #include <sys/queue.h>
    #include <sys/bus.h>
    #include <sys/pciio.h>
    #include <dev/pci/pci_private.h>
    #include <asm/atomic.h>
    #include <bus_if.h>
    #include <AOC.h>
    #define VENDOR_ID 0x1b4b
    #define MAX_REQUEST_NUMBER_PERFORMANCE 4096
    
    
    struct AOC_softc
    {
      device_t AOC_dev;
      struct cdev *AOC_cdev;
    };
    
    static int AOC_pci_request_regions( struct device *dev, const char *res_name )
    {
      int i,j;
      int rid;
      int bar;
      struct resource_list_entry *rle;
      struct pci_devinfo *dinfo;
      struct resource_list *rl=NULL;
    
      for ( i = 0; i <= PCIR_MAX_BAR_0; i++ ) 
      {
        bar = PCIR_BAR( i );
        dinfo = dev->ivars;
        rl = &dinfo->resources;
        rle = resource_list_find( rl, SYS_RES_MEMORY, i );
        if( rle == NULL )
        {
          dinfo = device_get_ivars(dev);
          rl = &dinfo->resources;
          rle = resource_list_find( rl, SYS_RES_IOPORT, i );
        };
        if( rle == NULL )
        return (-ENODEV);
        rid = PCIR_BAR( i );
        if (bus_alloc_resource_any(dev, rle->type, &rid, RF_ACTIVE) == NULL)
        {
          for (j = 0; j <= PCIR_MAX_BAR_0; j++)
          {
            {
              bar = PCIR_BAR( bar );
              {
                dinfo = device_get_ivars( dev );
                rl = &dinfo->resources;
                rle = resource_list_find( rl, SYS_RES_MEMORY, j );
              };
              if ( rle == NULL )
              {
                dinfo = device_get_ivars( dev );
                rl = &dinfo->resources;
                rle = resource_list_find( rl, SYS_RES_IOPORT, i );
              };
            };
            if (rle == NULL)
            bus_release_resource(dev, rle->type, rle->rid, rle->res);
          };
          return (-EINVAL);
        };
      }
      return (0);
    };
    
    static int AOC_probe( device_t dev )
    {
      device_printf( dev, "AOC Probe\nVendor ID : 0x%x\nDevice ID : 0x%x\n", pci_get_vendor( dev ), pci_get_device( dev ) );
      if ( pci_get_vendor( dev ) == VENDOR_ID )
      {
        printf( "AOC probe successful !\n" );
        device_set_desc( dev, "AOC");
    
        pci_enable_io( dev, SYS_RES_IOPORT );
        pci_enable_io( dev, SYS_RES_MEMORY );
    
        AOC_pci_request_regions(dev, "AOC");
        ...
        ...
    }; 
     
  8. DutchDaemon

    DutchDaemon Administrator Staff Member Administrator Moderator

    Messages:
    10,672
    Likes Received:
    26
  9. SirDice

    SirDice Moderator Staff Member Moderator

    Messages:
    17,418
    Likes Received:
    14
    I am by no means a kernel hacker, not even a programmer actually..

    But what happens if you change this:
    Code:
      struct resource_list_entry *rle;
      struct resource_list *rl=NULL;
    {....snip.....}
        bar = PCIR_BAR( i );
        dinfo = dev->ivars;
        rl = [b]&[/b]dinfo->resources;
        rle = resource_list_find( rl, SYS_RES_MEMORY, i );
    
    To this:
    Code:
      struct resource_list_entry *rle;
      struct resource_list *rl=NULL;
    {....snip.....}
        bar = PCIR_BAR( i );
        dinfo = dev->ivars;
        rl = dinfo->resources;
        rle = resource_list_find( [b]&[/b]rl, SYS_RES_MEMORY, i );
    
    Note the movement of the ampersand. Or just cut out that extra step, it doesn't seem to be used anywhere else anyway.

    Code:
      struct resource_list_entry *rle;
      struct resource_list *rl=NULL;
    {....snip.....}
        bar = PCIR_BAR( i );
        dinfo = dev->ivars;
        rle = resource_list_find( &dinfo->resources, SYS_RES_MEMORY, i );
    
     
  10. liuwang

    liuwang New Member

    Messages:
    31
    Likes Received:
    0
    BTW Mr. John-Mark Gurney [jmg@funkthat.com] is helping me out with the methodology in

    SirDice,

    Thanks your looking into this.

    All combination of & * . -> have been tried and won't help in resolving this.

    BTW Mr. John-Mark Gurney [jmg@funkthat.com] is helping me out with the methodology in porting our PCIe controller card from Linux to FreeBSD.

    I am following his approach.

    Sincerely,
    Liu Wang
     
  11. liuwang

    liuwang New Member

    Messages:
    31
    Likes Received:
    0
    DutchDaemon,

    By
    Code:
     do you mean [cmd] ?
    I could only see [cmd]&[file] options there.
    
    Should we manually quote it with [code] & 
    pair ?

    Sincerely,
    Liu
     
  12. liuwang

    liuwang New Member

    Messages:
    31
    Likes Received:
    0
    whoops ! It verified itself. I need to manually quote it with code&/code pair.

    Sincerely,
    Liu
     
  13. SirDice

    SirDice Moderator Staff Member Moderator

    Messages:
    17,418
    Likes Received:
    14
    Sounds like a plan :e

    If you solve it, please share your solution. I'm sure other people might be interested.

     
  14. liuwang

    liuwang New Member

    Messages:
    31
    Likes Received:
    0
    SirDice,

    Will do sir.

    Sincerely,
    Liu