staging: brcm80211: removed fullmac function brcmf_sdcard_iovar_op()
brcmf_sdcard_iovar_op was only called with iovar "sd_rxchain", and always returns 'false' as the queried value. Thus, the entire function, related iovar tables and related functions could be removed. Reported-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: Roland Vossen <rvossen@broadcom.com> Reviewed-by: Arend van Spriel <arend@broadcom.com> Reviewed-by: Franky Lin <frankyl@broadcom.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
b78f721be1
commit
e99cab09d0
|
@ -41,121 +41,6 @@
|
||||||
|
|
||||||
module_param(sd_f2_blocksize, int, 0);
|
module_param(sd_f2_blocksize, int, 0);
|
||||||
|
|
||||||
/* IOVar table */
|
|
||||||
enum {
|
|
||||||
IOV_MSGLEVEL = 1,
|
|
||||||
IOV_DEVREG,
|
|
||||||
IOV_HCIREGS,
|
|
||||||
IOV_RXCHAIN
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct brcmu_iovar sdioh_iovars[] = {
|
|
||||||
{"sd_devreg", IOV_DEVREG, 0, IOVT_BUFFER, sizeof(struct brcmf_sdreg)}
|
|
||||||
,
|
|
||||||
{"sd_rxchain", IOV_RXCHAIN, 0, IOVT_BOOL, 0}
|
|
||||||
,
|
|
||||||
{NULL, 0, 0, 0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
int
|
|
||||||
brcmf_sdcard_iovar_op(struct brcmf_sdio_dev *sdiodev, const char *name,
|
|
||||||
void *params, int plen, void *arg, int len, bool set)
|
|
||||||
{
|
|
||||||
const struct brcmu_iovar *vi = NULL;
|
|
||||||
int bcmerror = 0;
|
|
||||||
int val_size;
|
|
||||||
s32 int_val = 0;
|
|
||||||
bool bool_val;
|
|
||||||
u32 actionid;
|
|
||||||
|
|
||||||
if (name == NULL || len < 0)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
/* Set does not take qualifiers */
|
|
||||||
if (set && (params || plen))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
/* Get must have return space;*/
|
|
||||||
if (!set && !(arg && len))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
brcmf_dbg(TRACE, "Enter (%s %s)\n", set ? "set" : "get", name);
|
|
||||||
|
|
||||||
vi = brcmu_iovar_lookup(sdioh_iovars, name);
|
|
||||||
if (vi == NULL) {
|
|
||||||
bcmerror = -ENOTSUPP;
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
bcmerror = brcmu_iovar_lencheck(vi, arg, len, set);
|
|
||||||
if (bcmerror != 0)
|
|
||||||
goto exit;
|
|
||||||
|
|
||||||
/* Set up params so get and set can share the convenience variables */
|
|
||||||
if (params == NULL) {
|
|
||||||
params = arg;
|
|
||||||
plen = len;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vi->type == IOVT_VOID)
|
|
||||||
val_size = 0;
|
|
||||||
else if (vi->type == IOVT_BUFFER)
|
|
||||||
val_size = len;
|
|
||||||
else
|
|
||||||
val_size = sizeof(int);
|
|
||||||
|
|
||||||
if (plen >= (int)sizeof(int_val))
|
|
||||||
memcpy(&int_val, params, sizeof(int_val));
|
|
||||||
|
|
||||||
bool_val = (int_val != 0) ? true : false;
|
|
||||||
|
|
||||||
actionid = set ? IOV_SVAL(vi->varid) : IOV_GVAL(vi->varid);
|
|
||||||
switch (actionid) {
|
|
||||||
case IOV_GVAL(IOV_RXCHAIN):
|
|
||||||
int_val = false;
|
|
||||||
memcpy(arg, &int_val, val_size);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IOV_GVAL(IOV_DEVREG):
|
|
||||||
{
|
|
||||||
struct brcmf_sdreg *sd_ptr =
|
|
||||||
(struct brcmf_sdreg *) params;
|
|
||||||
u8 data = 0;
|
|
||||||
|
|
||||||
if (brcmf_sdioh_request_byte(sdiodev, SDIOH_READ,
|
|
||||||
sd_ptr->func, sd_ptr->offset, &data)) {
|
|
||||||
bcmerror = -EIO;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
int_val = (int)data;
|
|
||||||
memcpy(arg, &int_val, sizeof(int_val));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case IOV_SVAL(IOV_DEVREG):
|
|
||||||
{
|
|
||||||
struct brcmf_sdreg *sd_ptr =
|
|
||||||
(struct brcmf_sdreg *) params;
|
|
||||||
u8 data = (u8) sd_ptr->value;
|
|
||||||
|
|
||||||
if (brcmf_sdioh_request_byte(sdiodev, SDIOH_WRITE,
|
|
||||||
sd_ptr->func, sd_ptr->offset, &data)) {
|
|
||||||
bcmerror = -EIO;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
bcmerror = -ENOTSUPP;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
exit:
|
|
||||||
|
|
||||||
return bcmerror;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void brcmf_sdioh_irqhandler(struct sdio_func *func)
|
static void brcmf_sdioh_irqhandler(struct sdio_func *func)
|
||||||
{
|
{
|
||||||
struct brcmf_sdio_dev *sdiodev = dev_get_drvdata(&func->card->dev);
|
struct brcmf_sdio_dev *sdiodev = dev_get_drvdata(&func->card->dev);
|
||||||
|
|
|
@ -88,9 +88,6 @@
|
||||||
#define TOE_TX_CSUM_OL 0x00000001
|
#define TOE_TX_CSUM_OL 0x00000001
|
||||||
#define TOE_RX_CSUM_OL 0x00000002
|
#define TOE_RX_CSUM_OL 0x00000002
|
||||||
|
|
||||||
/* maximum channels returned by the get valid channels iovar */
|
|
||||||
#define WL_NUMCHANNELS 64
|
|
||||||
|
|
||||||
#define BRCMF_BSS_INFO_VERSION 108 /* current ver of brcmf_bss_info struct */
|
#define BRCMF_BSS_INFO_VERSION 108 /* current ver of brcmf_bss_info struct */
|
||||||
|
|
||||||
/* size of brcmf_scan_params not including variable length array */
|
/* size of brcmf_scan_params not including variable length array */
|
||||||
|
@ -810,9 +807,6 @@ struct brcmf_c_ioctl {
|
||||||
|
|
||||||
/* Enter idle immediately (no timeout) */
|
/* Enter idle immediately (no timeout) */
|
||||||
#define BRCMF_IDLE_IMMEDIATE (-1)
|
#define BRCMF_IDLE_IMMEDIATE (-1)
|
||||||
|
|
||||||
/* Values for idleclock iovar: other values are the sd_divisor to use
|
|
||||||
when idle */
|
|
||||||
#define BRCMF_IDLE_ACTIVE 0 /* Do not request any SD clock change
|
#define BRCMF_IDLE_ACTIVE 0 /* Do not request any SD clock change
|
||||||
when idle */
|
when idle */
|
||||||
|
|
||||||
|
|
|
@ -4196,17 +4196,9 @@ static bool brcmf_sdbrcm_probe_init(struct brcmf_bus *bus)
|
||||||
bus->blocksize = bus->sdiodev->func[2]->cur_blksize;
|
bus->blocksize = bus->sdiodev->func[2]->cur_blksize;
|
||||||
bus->roundup = min(max_roundup, bus->blocksize);
|
bus->roundup = min(max_roundup, bus->blocksize);
|
||||||
|
|
||||||
/* Query if bus module supports packet chaining,
|
/* bus module does not support packet chaining */
|
||||||
default to use if supported */
|
bus->use_rxchain = false;
|
||||||
if (brcmf_sdcard_iovar_op(bus->sdiodev, "sd_rxchain", NULL, 0,
|
bus->sd_rxchain = false;
|
||||||
&bus->sd_rxchain, sizeof(s32),
|
|
||||||
false) != 0)
|
|
||||||
bus->sd_rxchain = false;
|
|
||||||
else
|
|
||||||
brcmf_dbg(INFO, "bus module (through sdiocard API) %s chaining\n",
|
|
||||||
bus->sd_rxchain ? "supports" : "does not support");
|
|
||||||
|
|
||||||
bus->use_rxchain = (bool) bus->sd_rxchain;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -205,11 +205,6 @@ extern int brcmf_sdcard_rwdata(struct brcmf_sdio_dev *sdiodev, uint rw,
|
||||||
/* Issue an abort to the specified function */
|
/* Issue an abort to the specified function */
|
||||||
extern int brcmf_sdcard_abort(struct brcmf_sdio_dev *sdiodev, uint fn);
|
extern int brcmf_sdcard_abort(struct brcmf_sdio_dev *sdiodev, uint fn);
|
||||||
|
|
||||||
/* Miscellaneous knob tweaker. */
|
|
||||||
extern int brcmf_sdcard_iovar_op(struct brcmf_sdio_dev *sdiodev,
|
|
||||||
const char *name, void *params, int plen,
|
|
||||||
void *arg, int len, bool set);
|
|
||||||
|
|
||||||
/* platform specific/high level functions */
|
/* platform specific/high level functions */
|
||||||
extern int brcmf_sdio_function_init(void);
|
extern int brcmf_sdio_function_init(void);
|
||||||
extern int brcmf_sdio_register(void);
|
extern int brcmf_sdio_register(void);
|
||||||
|
|
|
@ -351,7 +351,6 @@ struct brcms_info;
|
||||||
struct brcms_c_info;
|
struct brcms_c_info;
|
||||||
struct brcms_hardware;
|
struct brcms_hardware;
|
||||||
struct brcms_c_if;
|
struct brcms_c_if;
|
||||||
struct brcmu_iovar;
|
|
||||||
struct brcmu_strbuf;
|
struct brcmu_strbuf;
|
||||||
struct brcms_txq_info;
|
struct brcms_txq_info;
|
||||||
struct brcms_band;
|
struct brcms_band;
|
||||||
|
@ -362,6 +361,15 @@ struct d11rxhdr;
|
||||||
struct brcms_d11rxhdr;
|
struct brcms_d11rxhdr;
|
||||||
struct txpwr_limits;
|
struct txpwr_limits;
|
||||||
|
|
||||||
|
/* iovar structure */
|
||||||
|
struct brcmu_iovar {
|
||||||
|
const char *name; /* name for lookup and display */
|
||||||
|
u16 varid; /* id for switch */
|
||||||
|
u16 flags; /* driver-specific flag bits */
|
||||||
|
u16 type; /* base type of argument */
|
||||||
|
u16 minlen; /* min length for buffer vars */
|
||||||
|
};
|
||||||
|
|
||||||
/* brcm_msg_level is a bit vector with defs in defs.h */
|
/* brcm_msg_level is a bit vector with defs in defs.h */
|
||||||
extern u32 brcm_msg_level;
|
extern u32 brcm_msg_level;
|
||||||
|
|
||||||
|
|
|
@ -364,73 +364,6 @@ void brcmu_prpkt(const char *msg, struct sk_buff *p0)
|
||||||
EXPORT_SYMBOL(brcmu_prpkt);
|
EXPORT_SYMBOL(brcmu_prpkt);
|
||||||
#endif /* defined(BCMDBG) */
|
#endif /* defined(BCMDBG) */
|
||||||
|
|
||||||
/* iovar table lookup */
|
|
||||||
const struct brcmu_iovar *brcmu_iovar_lookup(const struct brcmu_iovar *table,
|
|
||||||
const char *name)
|
|
||||||
{
|
|
||||||
const struct brcmu_iovar *vi;
|
|
||||||
const char *lookup_name;
|
|
||||||
|
|
||||||
/* skip any ':' delimited option prefixes */
|
|
||||||
lookup_name = strrchr(name, ':');
|
|
||||||
if (lookup_name != NULL)
|
|
||||||
lookup_name++;
|
|
||||||
else
|
|
||||||
lookup_name = name;
|
|
||||||
|
|
||||||
for (vi = table; vi->name; vi++) {
|
|
||||||
if (!strcmp(vi->name, lookup_name))
|
|
||||||
return vi;
|
|
||||||
}
|
|
||||||
/* ran to end of table */
|
|
||||||
|
|
||||||
return NULL; /* var name not found */
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(brcmu_iovar_lookup);
|
|
||||||
|
|
||||||
int brcmu_iovar_lencheck(const struct brcmu_iovar *vi, void *arg, int len,
|
|
||||||
bool set)
|
|
||||||
{
|
|
||||||
int bcmerror = 0;
|
|
||||||
|
|
||||||
/* length check on io buf */
|
|
||||||
switch (vi->type) {
|
|
||||||
case IOVT_BOOL:
|
|
||||||
case IOVT_INT8:
|
|
||||||
case IOVT_INT16:
|
|
||||||
case IOVT_INT32:
|
|
||||||
case IOVT_UINT8:
|
|
||||||
case IOVT_UINT16:
|
|
||||||
case IOVT_UINT32:
|
|
||||||
/* all integers are s32 sized args at the ioctl interface */
|
|
||||||
if (len < (int)sizeof(int))
|
|
||||||
bcmerror = -EOVERFLOW;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IOVT_BUFFER:
|
|
||||||
/* buffer must meet minimum length requirement */
|
|
||||||
if (len < vi->minlen)
|
|
||||||
bcmerror = -EOVERFLOW;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IOVT_VOID:
|
|
||||||
if (!set)
|
|
||||||
/* Cannot return nil... */
|
|
||||||
bcmerror = -ENOTSUPP;
|
|
||||||
else if (len)
|
|
||||||
/* Set is an action w/o parameters */
|
|
||||||
bcmerror = -ENOBUFS;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
/* unknown type for length check in iovar info */
|
|
||||||
bcmerror = -ENOTSUPP;
|
|
||||||
}
|
|
||||||
|
|
||||||
return bcmerror;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(brcmu_iovar_lencheck);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Traverse a string of 1-byte tag/1-byte length/variable-length value
|
* Traverse a string of 1-byte tag/1-byte length/variable-length value
|
||||||
* triples, returning a pointer to the substring whose first element
|
* triples, returning a pointer to the substring whose first element
|
||||||
|
|
|
@ -198,51 +198,6 @@ extern void brcmu_prpkt(const char *msg, struct sk_buff *p0);
|
||||||
#define brcmu_prpkt(a, b)
|
#define brcmu_prpkt(a, b)
|
||||||
#endif /* BCMDBG */
|
#endif /* BCMDBG */
|
||||||
|
|
||||||
/* Support for sharing code across in-driver iovar implementations.
|
|
||||||
* The intent is that a driver use this structure to map iovar names
|
|
||||||
* to its (private) iovar identifiers, and the lookup function to
|
|
||||||
* find the entry. Macros are provided to map ids and get/set actions
|
|
||||||
* into a single number space for a switch statement.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* iovar structure */
|
|
||||||
struct brcmu_iovar {
|
|
||||||
const char *name; /* name for lookup and display */
|
|
||||||
u16 varid; /* id for switch */
|
|
||||||
u16 flags; /* driver-specific flag bits */
|
|
||||||
u16 type; /* base type of argument */
|
|
||||||
u16 minlen; /* min length for buffer vars */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* varid definitions are per-driver, may use these get/set bits */
|
|
||||||
|
|
||||||
/* IOVar action bits for id mapping */
|
|
||||||
#define IOV_GET 0 /* Get an iovar */
|
|
||||||
#define IOV_SET 1 /* Set an iovar */
|
|
||||||
|
|
||||||
/* Varid to actionid mapping */
|
|
||||||
#define IOV_GVAL(id) ((id)*2)
|
|
||||||
#define IOV_SVAL(id) (((id)*2)+IOV_SET)
|
|
||||||
#define IOV_ISSET(actionid) ((actionid & IOV_SET) == IOV_SET)
|
|
||||||
#define IOV_ID(actionid) (actionid >> 1)
|
|
||||||
|
|
||||||
extern const struct
|
|
||||||
brcmu_iovar *brcmu_iovar_lookup(const struct brcmu_iovar *table,
|
|
||||||
const char *name);
|
|
||||||
extern int brcmu_iovar_lencheck(const struct brcmu_iovar *table, void *arg,
|
|
||||||
int len, bool set);
|
|
||||||
|
|
||||||
/* Base type definitions */
|
|
||||||
#define IOVT_VOID 0 /* no value (implictly set only) */
|
|
||||||
#define IOVT_BOOL 1 /* any value ok (zero/nonzero) */
|
|
||||||
#define IOVT_INT8 2 /* integer values are range-checked */
|
|
||||||
#define IOVT_UINT8 3 /* unsigned int 8 bits */
|
|
||||||
#define IOVT_INT16 4 /* int 16 bits */
|
|
||||||
#define IOVT_UINT16 5 /* unsigned int 16 bits */
|
|
||||||
#define IOVT_INT32 6 /* int 32 bits */
|
|
||||||
#define IOVT_UINT32 7 /* unsigned int 32 bits */
|
|
||||||
#define IOVT_BUFFER 8 /* buffer is size-checked as per minlen */
|
|
||||||
|
|
||||||
/* brcmu_format_flags() bit description structure */
|
/* brcmu_format_flags() bit description structure */
|
||||||
struct brcmu_bit_desc {
|
struct brcmu_bit_desc {
|
||||||
u32 bit;
|
u32 bit;
|
||||||
|
|
Loading…
Reference in New Issue