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>
index | next in thread | raw e-mail
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 compiling error "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
/*----------------------------
*
* 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 );
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");
...
...
};
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?09F85D53A2F0C547BF5E05E214DB880A23C8BDBCA2>
