|
@@ -198,6 +198,8 @@ typedef struct {
|
|
uint32_t des3;
|
|
uint32_t des3;
|
|
} FTGMAC100Desc;
|
|
} FTGMAC100Desc;
|
|
|
|
|
|
|
|
+#define FTGMAC100_DESC_ALIGNMENT 16
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Specific RTL8211E MII Registers
|
|
* Specific RTL8211E MII Registers
|
|
*/
|
|
*/
|
|
@@ -722,6 +724,12 @@ static void ftgmac100_write(void *opaque, hwaddr addr,
|
|
s->itc = value;
|
|
s->itc = value;
|
|
break;
|
|
break;
|
|
case FTGMAC100_RXR_BADR: /* Ring buffer address */
|
|
case FTGMAC100_RXR_BADR: /* Ring buffer address */
|
|
|
|
+ if (!QEMU_IS_ALIGNED(value, FTGMAC100_DESC_ALIGNMENT)) {
|
|
|
|
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad RX buffer alignment 0x%"
|
|
|
|
+ HWADDR_PRIx "\n", __func__, value);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
s->rx_ring = value;
|
|
s->rx_ring = value;
|
|
s->rx_descriptor = s->rx_ring;
|
|
s->rx_descriptor = s->rx_ring;
|
|
break;
|
|
break;
|
|
@@ -731,6 +739,11 @@ static void ftgmac100_write(void *opaque, hwaddr addr,
|
|
break;
|
|
break;
|
|
|
|
|
|
case FTGMAC100_NPTXR_BADR: /* Transmit buffer address */
|
|
case FTGMAC100_NPTXR_BADR: /* Transmit buffer address */
|
|
|
|
+ if (!QEMU_IS_ALIGNED(value, FTGMAC100_DESC_ALIGNMENT)) {
|
|
|
|
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad TX buffer alignment 0x%"
|
|
|
|
+ HWADDR_PRIx "\n", __func__, value);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
s->tx_ring = value;
|
|
s->tx_ring = value;
|
|
s->tx_descriptor = s->tx_ring;
|
|
s->tx_descriptor = s->tx_ring;
|
|
break;
|
|
break;
|