Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 267475
b: refs/heads/master
c: 632ea5e
h: refs/heads/master
i:
  267473: 5a69fcf
  267471: 6ca07d3
v: v3
  • Loading branch information
Franky Lin authored and Greg Kroah-Hartman committed Aug 23, 2011
1 parent 6cc5bcb commit c60e078
Show file tree
Hide file tree
Showing 4 changed files with 111 additions and 124 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a9ac9703aa66262d3ec6d5180734ccac00f2b02d
refs/heads/master: 632ea5ee37b21a01dc3b74e77fef54b69d0c88b1
112 changes: 110 additions & 2 deletions trunk/drivers/staging/brcm80211/brcmfmac/bcmsdh.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,120 @@

module_param(sd_f2_blocksize, int, 0);

/* IOVar table */
enum {
IOV_MSGLEVEL = 1,
IOV_DEVREG,
IOV_HCIREGS,
IOV_RXCHAIN
};

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)
{
return brcmf_sdioh_iovar_op(sdiodev, name, params, plen, arg,
len, 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_TRACE(("%s: Enter (%s %s)\n", __func__, (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_cfg_read
(sdiodev, 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_cfg_write
(sdiodev, sd_ptr->func, sd_ptr->offset, &data)) {
bcmerror = -EIO;
break;
}
break;
}

default:
bcmerror = -ENOTSUPP;
break;
}
exit:

return bcmerror;
}

int brcmf_sdcard_intr_reg(struct brcmf_sdio_dev *sdiodev)
Expand Down
116 changes: 0 additions & 116 deletions trunk/drivers/staging/brcm80211/brcmfmac/bcmsdh_sdmmc.c
Original file line number Diff line number Diff line change
Expand Up @@ -236,122 +236,6 @@ int brcmf_sdioh_interrupt_deregister(struct brcmf_sdio_dev *sdiodev)
return 0;
}

/* IOVar table */
enum {
IOV_MSGLEVEL = 1,
IOV_DEVREG,
IOV_HCIREGS,
IOV_RXCHAIN
};

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_sdioh_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_TRACE(("%s: Enter (%s %s)\n", __func__, (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_cfg_read
(sdiodev, 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_cfg_write
(sdiodev, sd_ptr->func, sd_ptr->offset, &data)) {
bcmerror = -EIO;
break;
}
break;
}

default:
bcmerror = -ENOTSUPP;
break;
}
exit:

return bcmerror;
}

extern int
brcmf_sdioh_cfg_read(struct brcmf_sdio_dev *sdiodev, uint fnc_num, u32 addr,
u8 *data)
Expand Down
5 changes: 0 additions & 5 deletions trunk/drivers/staging/brcm80211/brcmfmac/sdio_host.h
Original file line number Diff line number Diff line change
Expand Up @@ -276,11 +276,6 @@ extern int brcmf_sdioh_cfg_read(struct brcmf_sdio_dev *sdiodev, uint fuc,
extern int brcmf_sdioh_cfg_write(struct brcmf_sdio_dev *sdiodev, uint fuc,
u32 addr, u8 *data);

/* handle iovars */
extern int brcmf_sdioh_iovar_op(struct brcmf_sdio_dev *sdiodev,
const char *name, void *params, int plen,
void *arg, int len, bool set);

/* Issue abort to the specified function and clear controller as needed */
extern int brcmf_sdioh_abort(struct brcmf_sdio_dev *sdiodev, uint fnc);

Expand Down

0 comments on commit c60e078

Please sign in to comment.