aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pcmcia/cistpl.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pcmcia/cistpl.c')
-rw-r--r--drivers/pcmcia/cistpl.c39
1 files changed, 15 insertions, 24 deletions
diff --git a/drivers/pcmcia/cistpl.c b/drivers/pcmcia/cistpl.c
index 06a85d7d5aa2..36379535f9da 100644
--- a/drivers/pcmcia/cistpl.c
+++ b/drivers/pcmcia/cistpl.c
@@ -402,15 +402,6 @@ EXPORT_SYMBOL(pcmcia_replace_cis);
402 402
403======================================================================*/ 403======================================================================*/
404 404
405static inline u16 cis_get_u16(void *ptr)
406{
407 return le16_to_cpu(get_unaligned((__le16 *) ptr));
408}
409static inline u32 cis_get_u32(void *ptr)
410{
411 return le32_to_cpu(get_unaligned((__le32 *) ptr));
412}
413
414typedef struct tuple_flags { 405typedef struct tuple_flags {
415 u_int link_space:4; 406 u_int link_space:4;
416 u_int has_link:1; 407 u_int has_link:1;
@@ -471,7 +462,7 @@ static int follow_link(struct pcmcia_socket *s, tuple_t *tuple)
471 /* Get indirect link from the MFC tuple */ 462 /* Get indirect link from the MFC tuple */
472 read_cis_cache(s, LINK_SPACE(tuple->Flags), 463 read_cis_cache(s, LINK_SPACE(tuple->Flags),
473 tuple->LinkOffset, 5, link); 464 tuple->LinkOffset, 5, link);
474 ofs = cis_get_u32(link + 1); 465 ofs = get_unaligned_le32(link + 1);
475 SPACE(tuple->Flags) = (link[0] == CISTPL_MFC_ATTR); 466 SPACE(tuple->Flags) = (link[0] == CISTPL_MFC_ATTR);
476 /* Move to the next indirect link */ 467 /* Move to the next indirect link */
477 tuple->LinkOffset += 5; 468 tuple->LinkOffset += 5;
@@ -679,8 +670,8 @@ static int parse_checksum(tuple_t *tuple, cistpl_checksum_t *csum)
679 if (tuple->TupleDataLen < 5) 670 if (tuple->TupleDataLen < 5)
680 return CS_BAD_TUPLE; 671 return CS_BAD_TUPLE;
681 p = (u_char *) tuple->TupleData; 672 p = (u_char *) tuple->TupleData;
682 csum->addr = tuple->CISOffset + cis_get_u16(p) - 2; 673 csum->addr = tuple->CISOffset + get_unaligned_le16(p) - 2;
683 csum->len = cis_get_u16(p + 2); 674 csum->len = get_unaligned_le16(p + 2);
684 csum->sum = *(p + 4); 675 csum->sum = *(p + 4);
685 return CS_SUCCESS; 676 return CS_SUCCESS;
686} 677}
@@ -691,7 +682,7 @@ static int parse_longlink(tuple_t *tuple, cistpl_longlink_t *link)
691{ 682{
692 if (tuple->TupleDataLen < 4) 683 if (tuple->TupleDataLen < 4)
693 return CS_BAD_TUPLE; 684 return CS_BAD_TUPLE;
694 link->addr = cis_get_u32(tuple->TupleData); 685 link->addr = get_unaligned_le32(tuple->TupleData);
695 return CS_SUCCESS; 686 return CS_SUCCESS;
696} 687}
697 688
@@ -710,7 +701,7 @@ static int parse_longlink_mfc(tuple_t *tuple,
710 return CS_BAD_TUPLE; 701 return CS_BAD_TUPLE;
711 for (i = 0; i < link->nfn; i++) { 702 for (i = 0; i < link->nfn; i++) {
712 link->fn[i].space = *p; p++; 703 link->fn[i].space = *p; p++;
713 link->fn[i].addr = cis_get_u32(p); 704 link->fn[i].addr = get_unaligned_le32(p);
714 p += 4; 705 p += 4;
715 } 706 }
716 return CS_SUCCESS; 707 return CS_SUCCESS;
@@ -800,8 +791,8 @@ static int parse_manfid(tuple_t *tuple, cistpl_manfid_t *m)
800{ 791{
801 if (tuple->TupleDataLen < 4) 792 if (tuple->TupleDataLen < 4)
802 return CS_BAD_TUPLE; 793 return CS_BAD_TUPLE;
803 m->manf = cis_get_u16(tuple->TupleData); 794 m->manf = get_unaligned_le16(tuple->TupleData);
804 m->card = cis_get_u16(tuple->TupleData + 2); 795 m->card = get_unaligned_le16(tuple->TupleData + 2);
805 return CS_SUCCESS; 796 return CS_SUCCESS;
806} 797}
807 798
@@ -1100,7 +1091,7 @@ static int parse_cftable_entry(tuple_t *tuple,
1100 break; 1091 break;
1101 case 0x20: 1092 case 0x20:
1102 entry->mem.nwin = 1; 1093 entry->mem.nwin = 1;
1103 entry->mem.win[0].len = cis_get_u16(p) << 8; 1094 entry->mem.win[0].len = get_unaligned_le16(p) << 8;
1104 entry->mem.win[0].card_addr = 0; 1095 entry->mem.win[0].card_addr = 0;
1105 entry->mem.win[0].host_addr = 0; 1096 entry->mem.win[0].host_addr = 0;
1106 p += 2; 1097 p += 2;
@@ -1108,8 +1099,8 @@ static int parse_cftable_entry(tuple_t *tuple,
1108 break; 1099 break;
1109 case 0x40: 1100 case 0x40:
1110 entry->mem.nwin = 1; 1101 entry->mem.nwin = 1;
1111 entry->mem.win[0].len = cis_get_u16(p) << 8; 1102 entry->mem.win[0].len = get_unaligned_le16(p) << 8;
1112 entry->mem.win[0].card_addr = cis_get_u16(p + 2) << 8; 1103 entry->mem.win[0].card_addr = get_unaligned_le16(p + 2) << 8;
1113 entry->mem.win[0].host_addr = 0; 1104 entry->mem.win[0].host_addr = 0;
1114 p += 4; 1105 p += 4;
1115 if (p > q) return CS_BAD_TUPLE; 1106 if (p > q) return CS_BAD_TUPLE;
@@ -1146,7 +1137,7 @@ static int parse_bar(tuple_t *tuple, cistpl_bar_t *bar)
1146 p = (u_char *)tuple->TupleData; 1137 p = (u_char *)tuple->TupleData;
1147 bar->attr = *p; 1138 bar->attr = *p;
1148 p += 2; 1139 p += 2;
1149 bar->size = cis_get_u32(p); 1140 bar->size = get_unaligned_le32(p);
1150 return CS_SUCCESS; 1141 return CS_SUCCESS;
1151} 1142}
1152 1143
@@ -1159,7 +1150,7 @@ static int parse_config_cb(tuple_t *tuple, cistpl_config_t *config)
1159 return CS_BAD_TUPLE; 1150 return CS_BAD_TUPLE;
1160 config->last_idx = *(++p); 1151 config->last_idx = *(++p);
1161 p++; 1152 p++;
1162 config->base = cis_get_u32(p); 1153 config->base = get_unaligned_le32(p);
1163 config->subtuples = tuple->TupleDataLen - 6; 1154 config->subtuples = tuple->TupleDataLen - 6;
1164 return CS_SUCCESS; 1155 return CS_SUCCESS;
1165} 1156}
@@ -1275,7 +1266,7 @@ static int parse_vers_2(tuple_t *tuple, cistpl_vers_2_t *v2)
1275 1266
1276 v2->vers = p[0]; 1267 v2->vers = p[0];
1277 v2->comply = p[1]; 1268 v2->comply = p[1];
1278 v2->dindex = cis_get_u16(p +2 ); 1269 v2->dindex = get_unaligned_le16(p +2 );
1279 v2->vspec8 = p[6]; 1270 v2->vspec8 = p[6];
1280 v2->vspec9 = p[7]; 1271 v2->vspec9 = p[7];
1281 v2->nhdr = p[8]; 1272 v2->nhdr = p[8];
@@ -1316,8 +1307,8 @@ static int parse_format(tuple_t *tuple, cistpl_format_t *fmt)
1316 1307
1317 fmt->type = p[0]; 1308 fmt->type = p[0];
1318 fmt->edc = p[1]; 1309 fmt->edc = p[1];
1319 fmt->offset = cis_get_u32(p + 2); 1310 fmt->offset = get_unaligned_le32(p + 2);
1320 fmt->length = cis_get_u32(p + 6); 1311 fmt->length = get_unaligned_le32(p + 6);
1321 1312
1322 return CS_SUCCESS; 1313 return CS_SUCCESS;
1323} 1314}