资源简介

博通无线网卡驱动,我的空间有篇文章介绍如何安装,不会的请参考

资源截图

代码片段和文件信息

/*
 * Linux OS Independent layer
 *
 * Copyright (C) 2010 Broadcom Corporation
 * All Rights Reserved.
 * 
 * THIS SOFTWARE IS OFFERED “AS IS“ AND BROADCOM GRANTS NO WARRANTIES OF ANY
 * KIND EXPRESS OR IMPLIED BY STATUTE COMMUNICATION OR OTHERWISE. BROADCOM
 * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY FITNESS
 * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
 *
 * $Id: linux_osl.cv 1.172.2.12.2.1 2011-01-26 01:24:54 Exp $
 */

#define LINUX_PORT

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#include 

#define PCI_CFG_RETRY  10

#define OS_HANDLE_MAGIC 0x1234abcd
#define BCM_MEM_FILENAME_LEN  24

typedef struct bcm_mem_link {
struct bcm_mem_link *prev;
struct bcm_mem_link *next;
uint size;
int line;
void  *osh;
char file[BCM_MEM_FILENAME_LEN];
} bcm_mem_link_t;

#if defined(DSLCPE_DELAY_NOT_YET)
struct shared_osl {
int long_delay;
spinlock_t *lock;
void *wl;
unsigned long MIPS;
};
#endif

struct osl_info {
osl_pubinfo_t pub;
uint magic;
void *pdev;
atomic_t malloced;
uint failed;
uint bustype;
bcm_mem_link_t *dbgmem_list;
spinlock_t dbgmem_lock;
spinlock_t pktalloc_lock;
};

uint32 g_assert_type = FALSE;

static int16 linuxbcmerrormap[] =
{ 0 
-EINVAL
-EINVAL
-EINVAL
-EINVAL
-EINVAL
-EINVAL
-EINVAL
-EINVAL
-EINVAL
-EINVAL
-EINVAL 
-EINVAL 
-EINVAL 
-E2BIG
-E2BIG
-EBUSY 
-EINVAL 
-EINVAL 
-EINVAL 
-EINVAL 
-EFAULT 
-ENOMEM 
-EOPNOTSUPP
-EMSGSIZE
-EINVAL
-EPERM
-ENOMEM 
-EINVAL 
-ERANGE 
-EINVAL 
-EINVAL 
-EINVAL 
-EINVAL 
-EINVAL
-EIO
-ENODEV
-EINVAL
-EIO
-EIO
-EINVAL
-EINVAL
-ENODATA

#if BCME_LAST != -42
#error “You need to add a OS error translation in the linuxbcmerrormap \
for new error code defined in bcmutils.h“
#endif
};

int
osl_error(int bcmerror)
{
if (bcmerror > 0)
bcmerror = 0;
else if (bcmerror < BCME_LAST)
bcmerror = BCME_ERROR;

return linuxbcmerrormap[-bcmerror];
}

osl_t *
osl_attach(void *pdev uint bustype bool pkttag)
{
osl_t *osh;

osh = kmalloc(sizeof(osl_t) GFP_ATOMIC);
ASSERT(osh);

bzero(osh sizeof(osl_t));

ASSERT(ABS(BCME_LAST) == (ARRAYSIZE(linuxbcmerrormap) - 1));

osh->magic = OS_HANDLE_MAGIC;
atomic_set(&osh->malloced 0);
osh->failed = 0;
osh->dbgmem_list = NULL;
spin_lock_init(&(osh->dbgmem_lock));
osh->pdev = pdev;
osh->pub.pkttag = pkttag;
osh->bustype = bustype;

switch (bustype) {
case PCI_BUS:
case SI_BUS:
case PCMCIA_BUS:
osh->pub.mmbus = TRUE;
break;
case JTAG_BUS:
case SDIO_BUS:
case USB_BUS:
case SPI_BUS:
case RPC_BUS:
osh->pub.mmbus = FALSE;
break;
default:
ASSERT(FALSE);
break;
}

spin_lock_init(&(osh->pktalloc_lock));
#ifdef BCMDBG
if (pkttag) {
struc

评论

共有 条评论