📄 mac_rx_engine.s51
字号:
// 275 }
// 276
// 277 // Flush the RX FIFO twice (chip bug)
// 278 ISFLUSHRX;
// 279 ISFLUSHRX;
// 280
// 281 // Clear the FIFOP interrupt flag
// 282 CLEAR_FIFOP_INT_BIT();
// 283 CLEAR_RFIF_INT();
// 284 if (mrxInfo.state == MRX_STATE_FCS) ENABLE_FIFOP_INT_BIT();
// 285
// 286 // Reset the RX engine state
// 287 mrxInfo.state = MRX_STATE_LEN_FCF_SEQ;
// 288
// 289 ENABLE_GLOBAL_INT();
// 290
// 291 } // mrxResetRxEngine
// 292
// 293
// 294
// 295
// 296 /*******************************************************************************************************
// 297 *******************************************************************************************************
// 298 ************************** PACKET RECEPTION AND PROCESSING **************************
// 299 *******************************************************************************************************
// 300 *******************************************************************************************************/
// 301
// 302
// 303
// 304
// 305 //-------------------------------------------------------------------------------------------------------
// 306 // MLME_BEACON_NOTIFY_INDICATION* mrxMakeBeaconNotifyIndication(MAC_RX_PACKET *pPacket)
// 307 //
// 308 // DESCRIPTION:
// 309 // Modifies a MAC_RX_PACKET structure to become a beacon notify indication.
// 310 //
// 311 // ARGUMENTS:
// 312 // MAC_RX_PACKET *pPacket
// 313 // The packet that contains the beacon. This structure will be modified to contain the
// 314 // notification.
// 315 //
// 316 // RETURN VALUE:
// 317 // MLME_BEACON_NOTIFY_INDICATION*
// 318 // A pointer to the notification to be passed to the higher layer
// 319 //-------------------------------------------------------------------------------------------------------
// 320 ROOT MLME_BEACON_NOTIFY_INDICATION * mrxMakeBeaconNotifyIndication(MAC_RX_PACKET *pPacket) {
// 321 MLME_BEACON_NOTIFY_INDICATION *pMBNI = (MLME_BEACON_NOTIFY_INDICATION *) (((BYTE *) pPacket) + 1);
// 322 MCPS_DATA_INDICATION *pMDI = &pPacket->mdi;
// 323 PAN_DESCRIPTOR *pPanDescriptor = &pMBNI->panDescriptor;
// 324 UINT8 n;
// 325 UINT8 payloadOffset;
// 326 UINT8 pendAddrOffset;
// 327 UINT8 pendAddrSpec;
// 328 UINT8 pendingIndex;
// 329
// 330 // Do not change the order of these operations!!!
// 331
// 332 // Calculate the pSDU offset
// 333 n = pMDI->pMsdu[2] & 0x07;
// 334 if (n) {
// 335 n = 3 + 1 + 3 * n;
// 336 } else {
// 337 n = 3;
// 338 }
// 339 pendAddrSpec = pMDI->pMsdu[n];
// 340 payloadOffset = (n + 1 + (sizeof(WORD) * (pendAddrSpec & 0x07)) + (sizeof(ADDRESS) * ((pendAddrSpec & 0x70) >> 4)));
// 341
// 342 // Start by copying the payload in reverse order to avoid overwriting
// 343 msupReverseCopy(pMBNI->pSdu, pMDI->pMsdu + payloadOffset, aMaxBeaconPayloadLength);
// 344
// 345 // Copy lots of parameters (no fields are overwritten!)
// 346 pMBNI->sduLength = pMDI->msduLength - payloadOffset;
// 347 pPanDescriptor->logicalChannel = ppib.phyCurrentChannel;
// 348 pPanDescriptor->linkQuality = pMDI->mpduLinkQuality;
// 349 pPanDescriptor->superframeSpec = *((WORD *) pMDI->pMsdu);
// 350 pPanDescriptor->gtsPermit = !!(pMDI->pMsdu[2] & 0x80);
// 351 pPanDescriptor->securityUse = pMDI->securityUse;
// 352 pPanDescriptor->aclEntry = pMDI->aclEntry;
// 353 #if ((MAC_OPT_SECURITY) || (MAC_OPT_ACL_SIZE>0))
// 354 pPanDescriptor->securityFailure = (pPacket->securityStatus != SUCCESS);
// 355 #else
// 356 pPanDescriptor->securityFailure = pMDI->securityUse;
// 357 #endif
// 358 pMBNI->pendAddrSpec = pendAddrSpec;
// 359
// 360 // Copy the pending addresses in the reverse order
// 361 pendingIndex = (pendAddrSpec & 0x07) + ((pendAddrSpec & 0x70) >> 4) - 1;
// 362
// 363 // Extended addresses first
// 364 n = (pendAddrSpec & 0x70) >> 4;
// 365 while (n--) {
// 366 pendAddrOffset -= sizeof(ADDRESS);
// 367 msupReverseCopy((BYTE *) (&pMBNI->pAddrList[pendingIndex--]), (BYTE *) (&pMDI->pMsdu[pendAddrOffset]), sizeof(ADDRESS));
// 368 }
// 369
// 370 // Then short addresses
// 371 n = pendAddrSpec & 0x07;
// 372 while (n--) {
// 373 pendAddrOffset -= sizeof(WORD);
// 374 msupReverseCopy((BYTE *) (&pMBNI->pAddrList[pendingIndex--]), (BYTE *) (&pMDI->pMsdu[pendAddrOffset]), sizeof(WORD));
// 375 }
// 376
// 377 return pMBNI;
// 378
// 379 } // mrxMakeBeaconNotifyIndication
// 380
// 381
// 382
// 383
// 384 //-------------------------------------------------------------------------------------------------------
// 385 // void mrxProcessBeacon(MAC_TASK_INFO *pTask)
// 386 //
// 387 // DESCRIPTION:
// 388 // This task is responsible for processing beacon packets.
// 389 //
// 390 // TASK DATA
// 391 // A pointer to the MAC_RX_PACKET to be processed
// 392 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 393 void mrxProcessBeacon(MAC_TASK_INFO *pTask) NEAR {
mrxProcessBeacon:
CFI Block cfiBlock10 Using cfiCommon0
CFI Function mrxProcessBeacon
FUNCALL mrxProcessBeacon, mrxDecrOnCounter
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mrxMakeBeaconNotifyIndication
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, memcpy
LOCFRAME XSTACK, 24, STACK
ARGFRAME XSTACK, 24, STACK
FUNCALL mrxProcessBeacon, mscPanDescriptorExists
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, macSetState
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mschRemoveTask
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mlmeBeaconNotifyIndication
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mrxpReleasePacket
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mrxDecrOnCounter
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mschRemoveTask
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mrxpReleasePacket
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mrxDecrOnCounter
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mschRemoveTask
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mrxpReleasePacket
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mlmeSyncLossIndication
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, msupCompareExtendedAddress
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mtimAlignWithBeacon
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mbcnHandleBeaconModeChange
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, msupCalcPacketDuration
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mrxDecrOnCounter
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mschRemoveTask
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mrxpReleasePacket
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mlmeSyncLossIndication
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, msupTransmitPanConflict
LOCFRAME XSTACK, 23, STACK
ARGFRAME XSTACK, 23, STACK
FUNCALL mrxProcessBeacon, msupTransmitPanConflict
LOCFRAME XSTACK, 23, STACK
ARGFRAME XSTACK, 23, STACK
FUNCALL mrxProcessBeacon, mtimCancelCallback
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mrxDecrOnCounter
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mtxResumeAfterBeacon
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mtimCancelCallback
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, msupCalcBeaconInterval
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, T2_GET_OVERFLOW_COUNTER
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mbcnGetBeaconMargin
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mtimSetCallback
LOCFRAME XSTACK, 26, STACK
ARGFRAME XSTACK, 26, STACK
FUNCALL mrxProcessBeacon, mrxAutoIncrOnCounter
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, msupCalcCapDuration
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, T2_GET_OVERFLOW_COUNTER
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mtimSetCallback
LOCFRAME XSTACK, 26, STACK
ARGFRAME XSTACK, 26, STACK
FUNCALL mrxProcessBeacon, mrxDecrOnCounter
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mrxDecrOnCounter
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mschRemoveTask
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mipTransmitAssocDataRequest
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, msupCompareExtendedAddress
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mipTransmitAutoDataRequest
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mrxProcessBeacon, mrxMakeBeaconNotifyIndication
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
MOV A,#-0x10
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V7 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-15)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-16)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 16)
; Saved register size: 16
; Auto size: 6
MOV A,#-0x6
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 22)
MOV A,#0x4
LCALL ?XSTACK_DISP0_8
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R3
MOVX @DPTR,A
// 394 MAC_RX_PACKET *pPacket = (MAC_RX_PACKET*) pTask->taskData;
MOV A,#0x4
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV DPH,A
MOV DPL,R0
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOV A,R0
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
// 395 MLME_BEACON_NOTIFY_INDICATION *pMBNI;
// 396 MCPS_DATA_INDICATION *pMDI = &pPacket->mdi;
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
ADD A,#0x7
MOV R0,A
INC DPTR
MOVX A,@DPTR
ADDC A,#0x0
MOV R1,A
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV A,R0
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
MOV A,#0x4
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -