Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 264940
b: refs/heads/master
c: b4626c1
h: refs/heads/master
v: v3
  • Loading branch information
Dan Williams authored and Greg Kroah-Hartman committed Sep 18, 2011
1 parent db3026e commit ac17696
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 28 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: 28c9fc68ebd32d473a8787d05c74e3f39c6c866b
refs/heads/master: b4626c10928c13ee73b013dcbc23676333e79b59
53 changes: 26 additions & 27 deletions trunk/drivers/usb/serial/option.c
Original file line number Diff line number Diff line change
Expand Up @@ -475,31 +475,24 @@ enum option_blacklist_reason {
OPTION_BLACKLIST_RESERVED_IF = 2
};

#define MAX_BL_NUM 8
struct option_blacklist_info {
const u32 infolen; /* number of interface numbers on blacklist */
const u8 *ifaceinfo; /* pointer to the array holding the numbers */
enum option_blacklist_reason reason;
/* bitfield of interface numbers for OPTION_BLACKLIST_SENDSETUP */
const unsigned long sendsetup;
/* bitfield of interface numbers for OPTION_BLACKLIST_RESERVED_IF */
const unsigned long reserved;
};

static const u8 four_g_w14_no_sendsetup[] = { 0, 1 };
static const struct option_blacklist_info four_g_w14_blacklist = {
.infolen = ARRAY_SIZE(four_g_w14_no_sendsetup),
.ifaceinfo = four_g_w14_no_sendsetup,
.reason = OPTION_BLACKLIST_SENDSETUP
.sendsetup = BIT(0) | BIT(1),
};

static const u8 alcatel_x200_no_sendsetup[] = { 0, 1 };
static const struct option_blacklist_info alcatel_x200_blacklist = {
.infolen = ARRAY_SIZE(alcatel_x200_no_sendsetup),
.ifaceinfo = alcatel_x200_no_sendsetup,
.reason = OPTION_BLACKLIST_SENDSETUP
.sendsetup = BIT(0) | BIT(1),
};

static const u8 zte_k3765_z_no_sendsetup[] = { 0, 1, 2 };
static const struct option_blacklist_info zte_k3765_z_blacklist = {
.infolen = ARRAY_SIZE(zte_k3765_z_no_sendsetup),
.ifaceinfo = zte_k3765_z_no_sendsetup,
.reason = OPTION_BLACKLIST_SENDSETUP
.sendsetup = BIT(0) | BIT(1) | BIT(2),
};

static const struct usb_device_id option_ids[] = {
Expand Down Expand Up @@ -1255,21 +1248,28 @@ static int option_probe(struct usb_serial *serial,
return 0;
}

static enum option_blacklist_reason is_blacklisted(const u8 ifnum,
const struct option_blacklist_info *blacklist)
static bool is_blacklisted(const u8 ifnum, enum option_blacklist_reason reason,
const struct option_blacklist_info *blacklist)
{
const u8 *info;
int i;
unsigned long num;
const unsigned long *intf_list;

if (blacklist) {
info = blacklist->ifaceinfo;
if (reason == OPTION_BLACKLIST_SENDSETUP)
intf_list = &blacklist->sendsetup;
else if (reason == OPTION_BLACKLIST_RESERVED_IF)
intf_list = &blacklist->reserved;
else {
BUG_ON(reason);
return false;
}

for (i = 0; i < blacklist->infolen; i++) {
if (info[i] == ifnum)
return blacklist->reason;
for_each_set_bit(num, intf_list, MAX_BL_NUM + 1) {
if (num == ifnum)
return true;
}
}
return OPTION_BLACKLIST_NONE;
return false;
}

static void option_instat_callback(struct urb *urb)
Expand Down Expand Up @@ -1343,9 +1343,8 @@ static int option_send_setup(struct usb_serial_port *port)
int val = 0;
dbg("%s", __func__);

if (is_blacklisted(ifNum,
(struct option_blacklist_info *) intfdata->private)
== OPTION_BLACKLIST_SENDSETUP) {
if (is_blacklisted(ifNum, OPTION_BLACKLIST_SENDSETUP,
(struct option_blacklist_info *) intfdata->private)) {
dbg("No send_setup on blacklisted interface #%d\n", ifNum);
return -EIO;
}
Expand Down

0 comments on commit ac17696

Please sign in to comment.