141 |
141 |
#error "Please select which OpenPic implementation is to be emulated"
|
142 |
142 |
#endif
|
143 |
143 |
|
|
144 |
#define OPENPIC_PAGE_SIZE 4096
|
|
145 |
|
144 |
146 |
#define BF_WIDTH(_bits_) \
|
145 |
147 |
(((_bits_) + (sizeof(uint32_t) * 8) - 1) / (sizeof(uint32_t) * 8))
|
146 |
148 |
|
... | ... | |
597 |
599 |
DPRINTF("%s: addr " TARGET_FMT_plx " <= %08x\n", __func__, addr, val);
|
598 |
600 |
if (addr & 0xF)
|
599 |
601 |
return;
|
600 |
|
#if defined TARGET_WORDS_BIGENDIAN
|
601 |
602 |
val = openpic_swap32(opp, val);
|
602 |
|
#endif
|
603 |
603 |
addr &= 0xFF;
|
604 |
604 |
switch (addr) {
|
605 |
605 |
case 0x00: /* FREP */
|
... | ... | |
693 |
693 |
break;
|
694 |
694 |
}
|
695 |
695 |
DPRINTF("%s: => %08x\n", __func__, retval);
|
696 |
|
#if defined TARGET_WORDS_BIGENDIAN
|
697 |
696 |
retval = openpic_swap32(opp, retval);
|
698 |
|
#endif
|
699 |
697 |
|
700 |
698 |
return retval;
|
701 |
699 |
}
|
... | ... | |
708 |
706 |
DPRINTF("%s: addr %08x <= %08x\n", __func__, addr, val);
|
709 |
707 |
if (addr & 0xF)
|
710 |
708 |
return;
|
711 |
|
#if defined TARGET_WORDS_BIGENDIAN
|
712 |
709 |
val = openpic_swap32(opp, val);
|
713 |
|
#endif
|
714 |
710 |
addr -= 0x1100;
|
715 |
711 |
addr &= 0xFFFF;
|
716 |
712 |
idx = (addr & 0xFFF0) >> 6;
|
... | ... | |
763 |
759 |
break;
|
764 |
760 |
}
|
765 |
761 |
DPRINTF("%s: => %08x\n", __func__, retval);
|
766 |
|
#if defined TARGET_WORDS_BIGENDIAN
|
767 |
762 |
retval = openpic_swap32(opp, retval);
|
768 |
|
#endif
|
769 |
763 |
|
770 |
764 |
return retval;
|
771 |
765 |
}
|
... | ... | |
778 |
772 |
DPRINTF("%s: addr %08x <= %08x\n", __func__, addr, val);
|
779 |
773 |
if (addr & 0xF)
|
780 |
774 |
return;
|
781 |
|
#if defined TARGET_WORDS_BIGENDIAN
|
782 |
775 |
val = openpic_swap32(opp, val);
|
783 |
|
#endif
|
784 |
776 |
addr = addr & 0xFFF0;
|
785 |
777 |
idx = addr >> 5;
|
786 |
778 |
if (addr & 0x10) {
|
... | ... | |
812 |
804 |
retval = read_IRQreg(opp, idx, IRQ_IPVP);
|
813 |
805 |
}
|
814 |
806 |
DPRINTF("%s: => %08x\n", __func__, retval);
|
815 |
|
#if defined TARGET_WORDS_BIGENDIAN
|
816 |
807 |
retval = openpic_swap32(opp, retval);
|
817 |
|
#endif
|
818 |
808 |
|
819 |
809 |
return retval;
|
820 |
810 |
}
|
... | ... | |
829 |
819 |
DPRINTF("%s: addr " TARGET_FMT_plx " <= %08x\n", __func__, addr, val);
|
830 |
820 |
if (addr & 0xF)
|
831 |
821 |
return;
|
832 |
|
#if defined TARGET_WORDS_BIGENDIAN
|
833 |
822 |
val = openpic_swap32(opp, val);
|
834 |
|
#endif
|
835 |
823 |
addr &= 0x1FFF0;
|
836 |
824 |
idx = addr / 0x1000;
|
837 |
825 |
dst = &opp->dst[idx];
|
... | ... | |
949 |
937 |
break;
|
950 |
938 |
}
|
951 |
939 |
DPRINTF("%s: => %08x\n", __func__, retval);
|
952 |
|
#if defined TARGET_WORDS_BIGENDIAN
|
953 |
940 |
retval = openpic_swap32(opp, retval);
|
954 |
|
#endif
|
955 |
941 |
|
956 |
942 |
return retval;
|
957 |
943 |
}
|
... | ... | |
1384 |
1370 |
if (addr & 0xF)
|
1385 |
1371 |
return;
|
1386 |
1372 |
|
1387 |
|
addr -= MPIC_EXT_REG_START & (TARGET_PAGE_SIZE - 1);
|
|
1373 |
addr -= MPIC_EXT_REG_START & (OPENPIC_PAGE_SIZE - 1);
|
1388 |
1374 |
if (addr < MPIC_EXT_REG_SIZE) {
|
1389 |
1375 |
idx += (addr & 0xFFF0) >> 5;
|
1390 |
1376 |
if (addr & 0x10) {
|
... | ... | |
1408 |
1394 |
if (addr & 0xF)
|
1409 |
1395 |
return retval;
|
1410 |
1396 |
|
1411 |
|
addr -= MPIC_EXT_REG_START & (TARGET_PAGE_SIZE - 1);
|
|
1397 |
addr -= MPIC_EXT_REG_START & (OPENPIC_PAGE_SIZE - 1);
|
1412 |
1398 |
if (addr < MPIC_EXT_REG_SIZE) {
|
1413 |
1399 |
idx += (addr & 0xFFF0) >> 5;
|
1414 |
1400 |
if (addr & 0x10) {
|
... | ... | |
1434 |
1420 |
if (addr & 0xF)
|
1435 |
1421 |
return;
|
1436 |
1422 |
|
1437 |
|
addr -= MPIC_INT_REG_START & (TARGET_PAGE_SIZE - 1);
|
|
1423 |
addr -= MPIC_INT_REG_START & (OPENPIC_PAGE_SIZE - 1);
|
1438 |
1424 |
if (addr < MPIC_INT_REG_SIZE) {
|
1439 |
1425 |
idx += (addr & 0xFFF0) >> 5;
|
1440 |
1426 |
if (addr & 0x10) {
|
... | ... | |
1458 |
1444 |
if (addr & 0xF)
|
1459 |
1445 |
return retval;
|
1460 |
1446 |
|
1461 |
|
addr -= MPIC_INT_REG_START & (TARGET_PAGE_SIZE - 1);
|
|
1447 |
addr -= MPIC_INT_REG_START & (OPENPIC_PAGE_SIZE - 1);
|
1462 |
1448 |
if (addr < MPIC_INT_REG_SIZE) {
|
1463 |
1449 |
idx += (addr & 0xFFF0) >> 5;
|
1464 |
1450 |
if (addr & 0x10) {
|
... | ... | |
1484 |
1470 |
if (addr & 0xF)
|
1485 |
1471 |
return;
|
1486 |
1472 |
|
1487 |
|
addr -= MPIC_MSG_REG_START & (TARGET_PAGE_SIZE - 1);
|
|
1473 |
addr -= MPIC_MSG_REG_START & (OPENPIC_PAGE_SIZE - 1);
|
1488 |
1474 |
if (addr < MPIC_MSG_REG_SIZE) {
|
1489 |
1475 |
idx += (addr & 0xFFF0) >> 5;
|
1490 |
1476 |
if (addr & 0x10) {
|
... | ... | |
1508 |
1494 |
if (addr & 0xF)
|
1509 |
1495 |
return retval;
|
1510 |
1496 |
|
1511 |
|
addr -= MPIC_MSG_REG_START & (TARGET_PAGE_SIZE - 1);
|
|
1497 |
addr -= MPIC_MSG_REG_START & (OPENPIC_PAGE_SIZE - 1);
|
1512 |
1498 |
if (addr < MPIC_MSG_REG_SIZE) {
|
1513 |
1499 |
idx += (addr & 0xFFF0) >> 5;
|
1514 |
1500 |
if (addr & 0x10) {
|
... | ... | |
1534 |
1520 |
if (addr & 0xF)
|
1535 |
1521 |
return;
|
1536 |
1522 |
|
1537 |
|
addr -= MPIC_MSI_REG_START & (TARGET_PAGE_SIZE - 1);
|
|
1523 |
addr -= MPIC_MSI_REG_START & (OPENPIC_PAGE_SIZE - 1);
|
1538 |
1524 |
if (addr < MPIC_MSI_REG_SIZE) {
|
1539 |
1525 |
idx += (addr & 0xFFF0) >> 5;
|
1540 |
1526 |
if (addr & 0x10) {
|
... | ... | |
1557 |
1543 |
if (addr & 0xF)
|
1558 |
1544 |
return retval;
|
1559 |
1545 |
|
1560 |
|
addr -= MPIC_MSI_REG_START & (TARGET_PAGE_SIZE - 1);
|
|
1546 |
addr -= MPIC_MSI_REG_START & (OPENPIC_PAGE_SIZE - 1);
|
1561 |
1547 |
if (addr < MPIC_MSI_REG_SIZE) {
|
1562 |
1548 |
idx += (addr & 0xFFF0) >> 5;
|
1563 |
1549 |
if (addr & 0x10) {
|