summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 15376c6)
raw | patch | inline | side by side (parent: 15376c6)
author | Eric Ruei <e-ruei1@ti.com> | |
Mon, 26 May 2014 20:24:05 +0000 (16:24 -0400) | ||
committer | Eric Ruei <e-ruei1@ti.com> | |
Mon, 26 May 2014 20:24:05 +0000 (16:24 -0400) |
src/v0/pa.c | patch | blob | history | |
src/v1/pa.c | patch | blob | history | |
src/v1/paloc.h | patch | blob | history |
diff --git a/src/v0/pa.c b/src/v0/pa.c
index f5e2fcb39f7c1e68799f15dda693244a6ae849ec..580c819db1a44310d2829bd3ba0a48904ead8d2f 100755 (executable)
--- a/src/v0/pa.c
+++ b/src/v0/pa.c
al1->type = PAFRM_COM_ADD_LUT1_STANDARD;\r
}\r
\r
- /* ARM tool inconsistent issue which triggered Alignment Trap warning from User space */\r
+ /* \r
+ * Workaround: ARM tool inconsistent issue which triggered Alignment Trap warning from User space\r
+ * per two consecutive 6-byte memcpy operations:\r
+ * memcpy (al1->u.ethIp.dmac, l2Entry.cfg.mac.dstMac, sizeof(paMacAddr_t));\r
+ * memcpy (al1->u.ethIp.smac, l2Entry.cfg.mac.srcMac, sizeof(paMacAddr_t));\r
+ */\r
memcpy (al1->u.ethIp.dmac, l2Entry.cfg.mac.dstMac, sizeof(paMacAddr_t)*2);\r
\r
if(ethInfo->validBitMap & pa_ETH_INFO_VALID_DST)\r
diff --git a/src/v1/pa.c b/src/v1/pa.c
index 0093344eaf7eec6d1ec3ab3f28e178a1417ad807..0093bd4860b6a7a8f20a2a7ebb0c01de9e2b2d46 100644 (file)
--- a/src/v1/pa.c
+++ b/src/v1/pa.c
if (aclInfo->validBitMap & pa_ACL_INFO_VALID_CTRL_FLAG) {
- if(aclEntry.aclInfo.ctrlFlagMask | pa_ACL_INFO_CONTROL_FLAG_FRAG)
+ if(aclEntry.aclInfo.ctrlFlagMask & pa_ACL_INFO_CONTROL_FLAG_FRAG)
al1->bitMask |= PAFRM_IP_FLAG_FRAG;
- if(aclEntry.aclInfo.ctrlFlagMask | pa_ACL_INFO_CONTROL_FLAG_CONTAIN_L4)
+ if(aclEntry.aclInfo.ctrlFlagMask & pa_ACL_INFO_CONTROL_FLAG_CONTAIN_L4)
al1->bitMask |= PAFRM_IP_FLAG_CONTAIN_L4;
- if(aclEntry.aclInfo.ctrlFlag | pa_ACL_INFO_CONTROL_FLAG_FRAG)
+ if(aclEntry.aclInfo.ctrlFlag & pa_ACL_INFO_CONTROL_FLAG_FRAG)
al1->u.ipv6.pktFlags |= PAFRM_IP_FLAG_FRAG;
- if(aclEntry.aclInfo.ctrlFlag | pa_ACL_INFO_CONTROL_FLAG_CONTAIN_L4)
+ if(aclEntry.aclInfo.ctrlFlag & pa_ACL_INFO_CONTROL_FLAG_CONTAIN_L4)
al1->u.ipv6.pktFlags |= PAFRM_IP_FLAG_CONTAIN_L4;
}
if (fcInfo->validBitMap & pa_FC_INFO_VALID_CTRL_FLAG) {
priority += 10;
- if(fcEntry.fcInfo.ctrlFlagMask | pa_FC_INFO_CONTROL_FLAG_FRAG)
+ if(fcEntry.fcInfo.ctrlFlagMask & pa_FC_INFO_CONTROL_FLAG_FRAG)
al1->bitMask |= PAFRM_IP_FLAG_FRAG;
- if(fcEntry.fcInfo.ctrlFlagMask | pa_FC_INFO_CONTROL_FLAG_CONTAIN_L4)
+ if(fcEntry.fcInfo.ctrlFlagMask & pa_FC_INFO_CONTROL_FLAG_CONTAIN_L4)
al1->bitMask |= PAFRM_IP_FLAG_CONTAIN_L4;
- if(fcEntry.fcInfo.ctrlFlag | pa_FC_INFO_CONTROL_FLAG_FRAG)
+ if(fcEntry.fcInfo.ctrlFlag & pa_FC_INFO_CONTROL_FLAG_FRAG)
al1->u.ipv6.pktFlags |= PAFRM_IP_FLAG_FRAG;
- if(fcEntry.fcInfo.ctrlFlag | pa_FC_INFO_CONTROL_FLAG_CONTAIN_L4)
+ if(fcEntry.fcInfo.ctrlFlag & pa_FC_INFO_CONTROL_FLAG_CONTAIN_L4)
al1->u.ipv6.pktFlags |= PAFRM_IP_FLAG_CONTAIN_L4;
}
@@ -5259,12 +5259,23 @@ paReturn_t Pa_forwardResult (Pa_Handle iHandle, void *vresult, paEntryHandle_t *
*handleType = pa_L3_HANDLE;
} else if ((fcmd->comId & PA_COMID_L_MASK) == PA_COMID_ACL) {
+ if (NULL == aclTable)
+ {
+ ret = pa_INVALID_INPUT_HANDLE;
+ goto Pa_forwardResult_end;
+ }
acle = &aclTable[fcmd->comId & PA_COMID_IDX_MASK];
hdr = &(acle->hdr);
retHandle->l2l3Handle = (paHandleL2L3_t)pa_CONV_BASE_TO_OFFSET(paLObj.cfg.instPoolBaseAddr,acle);
*handleType = pa_ACL_HANDLE;
} else {
+ if (NULL == fcTable)
+ {
+ ret = pa_INVALID_INPUT_HANDLE;
+ goto Pa_forwardResult_end;
+ }
+
fce = &fcTable[fcmd->comId & PA_COMID_IDX_MASK];
hdr = &(fce->hdr);
retHandle->l2l3Handle = (paHandleL2L3_t)pa_CONV_BASE_TO_OFFSET(paLObj.cfg.instPoolBaseAddr,fce);
@@ -5420,6 +5431,9 @@ paReturn_t Pa_forwardResult (Pa_Handle iHandle, void *vresult, paEntryHandle_t *
/* For other commands the Sub-System return value was not really required */
}
+
+Pa_forwardResult_end:
+
if(paInst->paBufs[PA_BUFFNUM_VIRTUAL_LNK_TABLE].size)
Pa_osalEndMemAccess ((void *)vlnkTable,
paInst->paBufs[PA_BUFFNUM_VIRTUAL_LNK_TABLE].size);
diff --git a/src/v1/paloc.h b/src/v1/paloc.h
index 484363b09f4fca899a5590aca1a25963bd4f57b7..f93ab2b842cbf5d32dccc7146dff6b60ea9d0a67 100644 (file)
--- a/src/v1/paloc.h
+++ b/src/v1/paloc.h
#define PASS_CLUSTER_EF_REC3 PASS_CLUSTER_EGRESS1
#define PASS_CLUSTER_EF_REC4 PASS_CLUSTER_EGRESS2
-/* MACRO to calculate the address offset of PASS clusters and PPU (packet processing unit) respectuvely */
+/* MACRO to calculate the address offset of PASS clusters and PPU (packet processing unit) respectively */
#define PASS_CLUSTER_OFFSET(clNum) 0x400000UL + (clNum)*0x100000UL
-#define PASS_PPU_OFFSET(clNum, pdspNum) PASS_CLUSTER_OFFSET(clNum) + (pdspNum)*0x10000UL + 0x8000UL
+#define PASS_PPU_OFFSET(clNum, pdspNum) PASS_CLUSTER_OFFSET((clNum)) + (pdspNum)*0x10000UL + 0x8000UL
/*
* One instance of the driver