Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 15 Nov 2011 14:41:09 -0800
From:      Liu Wang <liuw@supermicro.com>
To:        "freebsd-drivers@freebsd.org" <freebsd-drivers@freebsd.org>
Subject:   where is "resource_list" defined ? 
Message-ID:  <09F85D53A2F0C547BF5E05E214DB880A23C8BDBCA2@MAIL5.supermicro.com>

next in thread | raw e-mail | index | archive | help
Sir./Madam,

Appreciate any 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 c=
ompiling error "error: dereferencing pointer to incomplete type" at the c s=
entences of "rl =3D &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

/*----------------------------
*
* 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_nam=
e )
{
  int i,j;
  int rid;
  int bar;
  struct resource_list_entry *rle;
  struct pci_devinfo *dinfo;
  struct resource_list *rl=3DNULL;

  for ( i =3D 0; i <=3D PCIR_MAX_BAR_0; i++ )
  {
    bar =3D PCIR_BAR( i );
    dinfo =3D dev->ivars;
    rl =3D &dinfo->resources;
    rle =3D resource_list_find( rl, SYS_RES_MEMORY, i );
    if( rle =3D=3D NULL )
    {
      dinfo =3D device_get_ivars(dev);
      rl =3D &dinfo->resources;
      rle =3D resource_list_find( rl, SYS_RES_IOPORT, i );
    };
    if( rle =3D=3D NULL )
    return (-ENODEV);
    rid =3D PCIR_BAR( i );
    if (bus_alloc_resource_any(dev, rle->type, &rid, RF_ACTIVE) =3D=3D NULL=
)
    {
      for (j =3D 0; j <=3D PCIR_MAX_BAR_0; j++)
      {
        {
          bar =3D PCIR_BAR( bar );
          {
            dinfo =3D device_get_ivars( dev );
            rle =3D resource_list_find( rl, SYS_RES_MEMORY, j );
          };
          if ( rle =3D=3D NULL )
          {
              dinfo =3D device_get_ivars( dev );
              rl =3D &dinfo->resources;
              rle =3D resource_list_find( rl, SYS_RES_IOPORT, i );
          };
        };
                if (rle =3D=3D 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", pc=
i_get_vendor( dev ), pci_get_device( dev ) );
  if ( pci_get_vendor( dev ) =3D=3D 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");
    ...
    ...
};



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?09F85D53A2F0C547BF5E05E214DB880A23C8BDBCA2>